techinform 1.5.0 → 1.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +1 -1
- data/lib/backup/backup.rb +2 -1
- data/lib/backup/db_backup.rb +1 -1
- data/lib/bzip2_selector.rb +7 -0
- data/lib/techinform.rb +14 -8
- data/lib/techinform/version.rb +1 -1
- data/techinform.gemspec +3 -3
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 377409d470d19efcfd9028db6bdefa2071403ac78f60e2b56f67550520eb305c
|
4
|
+
data.tar.gz: 30a08875950a5c865e51bc72d9c6decc346374caf6f94253147ec50e9d640e66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 73a5ca1881758fee223838342fc950b73a4c328b81ff504d273f4d240ec823cb071f5d412589c0542f99b2241704745a0c3ef9c9cca9d4420073a388153d5254
|
7
|
+
data.tar.gz: 4f0253a7eaf1d62c88d3bbee508eb3a98f226931545fed400026b0be7968574db8d470b709117eb8525866f89f26955482707cb574f2a9cc508929df8cdb2e23
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -17,7 +17,7 @@ Install gem yourself as:
|
|
17
17
|
|
18
18
|
* mysqldump - for mysql database dumps
|
19
19
|
* gpg2 - backup encryption support
|
20
|
-
* bzip2 - backup compression support
|
20
|
+
* bzip2 - backup compression support (prefer lbzip2 if installed)
|
21
21
|
* rsync - syncing backups
|
22
22
|
|
23
23
|
## Configuration
|
data/lib/backup/backup.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'date'
|
2
2
|
require_relative '../techinform/defaults'
|
3
3
|
require 'highline'
|
4
|
+
require 'bzip2_selector'
|
4
5
|
|
5
6
|
class Backup
|
6
7
|
attr_reader :dry_run, :quiet
|
@@ -60,7 +61,7 @@ class Backup
|
|
60
61
|
if encrypt?
|
61
62
|
"| gpg2 --encrypt #{"--compress-algo=bzip2" if compress?} --recipient=#{ENV['GPGKEY']}"
|
62
63
|
else
|
63
|
-
"| bzip2" if compress?
|
64
|
+
"| #{bzip2}" if compress?
|
64
65
|
end
|
65
66
|
end
|
66
67
|
|
data/lib/backup/db_backup.rb
CHANGED
@@ -5,7 +5,7 @@ class DbBackup < Backup
|
|
5
5
|
|
6
6
|
def initialize user: nil, database: nil, password: nil, compress: true, host: nil, encrypt: nil
|
7
7
|
super compress: compress, encrypt: encrypt
|
8
|
-
user = ENV['
|
8
|
+
user = ENV['DBUSER'] if user.nil?
|
9
9
|
password = ENV['PASSWORD'] if password.nil?
|
10
10
|
@password, @user, @database, @host = password, user, database, host
|
11
11
|
ensure_path unless database.nil?
|
data/lib/techinform.rb
CHANGED
@@ -2,12 +2,15 @@ require 'techinform/version'
|
|
2
2
|
require 'techinform/projects'
|
3
3
|
require_relative 'techinform/backup'
|
4
4
|
require 'thor'
|
5
|
+
require 'bzip2_selector'
|
6
|
+
|
5
7
|
|
6
8
|
module Techinform
|
7
9
|
class CLI < Thor
|
8
10
|
desc 'restore [type] [absolute_filename or database to select file] [dbname]', 'Restore database from backup; if no absolute filename given, will present select menu to choose file'
|
9
|
-
def restore(type, filename, dbname, just_decrypt = false)
|
11
|
+
def restore(type, filename, dbname = nil, just_decrypt = false)
|
10
12
|
require 'highline'
|
13
|
+
dbname = filename if dbname.nil?
|
11
14
|
if !File.exist?(filename)
|
12
15
|
cli = HighLine.new
|
13
16
|
path = type == 'pg' ? PostgreBackup.new(database: filename).restore_path : MysqlBackup.new(database: filename).restore_path
|
@@ -15,28 +18,31 @@ module Techinform
|
|
15
18
|
end
|
16
19
|
encrypted = filename.split('.').last == 'gpg'
|
17
20
|
if type == 'pg'
|
18
|
-
puts "Restoring postgres backup to database #{dbname}..."
|
19
21
|
if encrypted && just_decrypt
|
20
|
-
|
22
|
+
puts "Decrypting postgres backup of #{filename}..."
|
23
|
+
`pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
|
21
24
|
elsif encrypted
|
25
|
+
puts "Restoring postgres backup to database #{dbname}..."
|
22
26
|
`pv --wait #{filename} | gpg2 --decrypt | psql #{dbname} > /dev/null`
|
23
27
|
else
|
24
|
-
`pv --wait #{filename} | bunzip2 | psql #{dbname} > /dev/null`
|
28
|
+
`pv --wait #{filename} | #{bunzip2} | psql #{dbname} > /dev/null`
|
25
29
|
end
|
26
30
|
else
|
27
|
-
puts "Restoring mysql backup to database #{dbname}..."
|
28
31
|
if encrypted && just_decrypt
|
29
|
-
|
32
|
+
puts "Decrypting mysql backup of #{filename}..."
|
33
|
+
`pv --wait #{filename} | gpg2 --decrypt | #{bzip2} > #{File.basename(filename, '.*') + '.bz2'}`
|
30
34
|
elsif encrypted
|
31
|
-
|
35
|
+
puts "Restoring mysql backup to database #{dbname}..."
|
36
|
+
`pv --wait #{filename} | gpg2 --decrypt | mysql#{" -u#{ENV['DBUSER']}" if !ENV['DBUSER'].nil?}#{" -p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
|
32
37
|
else
|
33
|
-
`pv --wait #{filename} | bunzip2 | mysql
|
38
|
+
`pv --wait #{filename} | #{bunzip2} | mysql#{" -u#{ENV['DBUSER']}" if !ENV['DBUSER'].nil?}#{" -p#{ENV['PASSWORD']}" if !ENV['PASSWORD'].nil?} #{dbname}`
|
34
39
|
end
|
35
40
|
end
|
36
41
|
end
|
37
42
|
|
38
43
|
desc 'decrypt [type] [absolute_filename or database to select file]', 'Decrypt file from backup; if no absolute filename given, will present select menu to choose file'
|
39
44
|
def decrypt(type, filename)
|
45
|
+
puts "lbzip2 is not found. Single-threaded bzip2 will be used. Consider installing lbzip2" if bzip2 == 'bzip2'
|
40
46
|
restore(type, filename, nil, true)
|
41
47
|
end
|
42
48
|
|
data/lib/techinform/version.rb
CHANGED
data/techinform.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
20
20
|
|
21
21
|
spec.metadata["homepage_uri"] = spec.homepage
|
22
|
-
spec.metadata["source_code_uri"] = "https://github.com/
|
23
|
-
spec.metadata["changelog_uri"] = "https://github.com/
|
22
|
+
spec.metadata["source_code_uri"] = "https://github.com/alexey-chernikov/techinform"
|
23
|
+
spec.metadata["changelog_uri"] = "https://github.com/alexey-chernikov/techinform/CHANGELOG.md"
|
24
24
|
else
|
25
25
|
raise "RubyGems 2.0 or newer is required to protect against " \
|
26
26
|
"public gem pushes."
|
@@ -38,7 +38,7 @@ Gem::Specification.new do |spec|
|
|
38
38
|
spec.add_dependency 'thor', '~> 0.20'
|
39
39
|
spec.add_dependency 'highline', '~> 2.0'
|
40
40
|
|
41
|
-
spec.add_development_dependency 'bundler', '~> 1
|
41
|
+
spec.add_development_dependency 'bundler', '~> 2.1'
|
42
42
|
spec.add_development_dependency 'rake', '~> 13.0.1'
|
43
43
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
44
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: techinform
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5.
|
4
|
+
version: 1.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexey Chernikov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1
|
47
|
+
version: '2.1'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1
|
54
|
+
version: '2.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,6 +109,7 @@ files:
|
|
109
109
|
- lib/backup/files_backup.rb
|
110
110
|
- lib/backup/mysql_backup.rb
|
111
111
|
- lib/backup/postgre_backup.rb
|
112
|
+
- lib/bzip2_selector.rb
|
112
113
|
- lib/techinform.rb
|
113
114
|
- lib/techinform/backup.rb
|
114
115
|
- lib/techinform/defaults.rb
|
@@ -122,8 +123,8 @@ licenses:
|
|
122
123
|
metadata:
|
123
124
|
allowed_push_host: https://rubygems.org
|
124
125
|
homepage_uri: https://techinform.dev
|
125
|
-
source_code_uri: https://github.com/
|
126
|
-
changelog_uri: https://github.com/
|
126
|
+
source_code_uri: https://github.com/alexey-chernikov/techinform
|
127
|
+
changelog_uri: https://github.com/alexey-chernikov/techinform/CHANGELOG.md
|
127
128
|
post_install_message:
|
128
129
|
rdoc_options: []
|
129
130
|
require_paths:
|