rdiff_backup_wrapper 0.1.2 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fec50bdaae8021fa9e97c33ef70b98e7433286b7
4
- data.tar.gz: 8085c82211a717cf1b6d00e89eef4114a9844266
3
+ metadata.gz: 25b38353dc6d7f53256849f97c83e0b7e4dcc886
4
+ data.tar.gz: 0c5cc4efd18ff17d7495ab612a139c8e52671e43
5
5
  SHA512:
6
- metadata.gz: 01b374eeb76f0961db857c41b0a5f111045a2474a9f7b25529934d5ed4ec7a373f7c1111690a243c73774dd00a546708d65ceaab2be75f32fb96a5dd4390c315
7
- data.tar.gz: 7b7fd74d69d49eb08a8916d5b3e94de4f20250230e6c82b90c1d6ef970640984987ab68cffba5fe18bef691115d61d6ac38ea9c2878469dd6a1e3707add54b6f
6
+ metadata.gz: b03bcada9964580d97789e4db28542c21d8128e8b9930f947255f95ac0e9324b181978e3c38cd85f3865356ec118e0a69937b731f12579f0cd03501929c2c5cd
7
+ data.tar.gz: ba67fb070572b54f3438df10ce1326c9eca76a20506f4816e9ca03bf3b30d937d7ac4e0df213e4b0985dd817f94585ce7be039996565f1982c07ff72549d8ad4
@@ -1,5 +1,6 @@
1
1
  require "rdiff_backup_wrapper/version"
2
2
  require "rdiff_backup_wrapper/backup"
3
+ require "rdiff_backup_wrapper/luks_loop_volume"
3
4
  require 'yaml'
4
5
 
5
6
  module RdiffBackupWrapper
@@ -21,20 +22,52 @@ module RdiffBackupWrapper
21
22
  return @backups
22
23
  end
23
24
  @backups = []
24
- config.each do |backup_config|
25
+ config['backups'].each do |backup_config|
25
26
  @backups << Backup.new(backup_config)
26
27
  end
27
28
  @backups
28
29
  end
29
30
 
31
+ def volumes
32
+ unless @volumes.nil?
33
+ return @volumes
34
+ end
35
+ @volumes = []
36
+ config['volumes'].each do |volume_config|
37
+ @volumes << Volume.create(volume_config)
38
+ end
39
+ @volumes
40
+ end
41
+
42
+ def prepare_volumes
43
+ volumes.each do |v|
44
+ v.prepare
45
+ end
46
+ end
47
+
48
+ def cleanup_volumes
49
+ volumes.each do |v|
50
+ v.cleanup
51
+ end
52
+ end
53
+
30
54
  def run
55
+ at_exit do
56
+ cleanup_volumes
57
+ end
58
+ prepare_volumes
59
+ ret_val = run_backups
60
+ exit ret_val
61
+ end
62
+
63
+ def run_backups
64
+ retval = 0
65
+
31
66
  outputs = []
32
67
  backups.each do |backup|
33
68
  outputs << backup.run
34
69
  end
35
70
 
36
- retval = 0
37
-
38
71
  outputs.each do |o|
39
72
  if o[:retval].exitstatus != 0
40
73
  retval = 1
@@ -47,7 +80,8 @@ module RdiffBackupWrapper
47
80
  end
48
81
  end
49
82
  end
50
- exit retval
83
+
84
+ return retval
51
85
  end
52
86
  end
53
87
  end
@@ -0,0 +1,72 @@
1
+
2
+ require 'open3'
3
+ require 'rdiff_backup_wrapper/volume'
4
+
5
+ module RdiffBackupWrapper
6
+ class LuksLoopVolume < Volume
7
+ def prepare_luks
8
+ Open3.popen3("cryptsetup", "luksOpen", luks_source, luks_name) do |i, o, e ,t|
9
+ i.puts "#{config['luksKey']}\n"
10
+ i.close
11
+ check_error(o, e, t)
12
+ end
13
+ end
14
+
15
+ def cleanup_luks
16
+ Open3.popen3("cryptsetup", "luksClose", luks_name) do |i, o, e ,t|
17
+ check_error(o, e, t)
18
+ end
19
+ end
20
+
21
+ def luks_name
22
+ config['name']
23
+ end
24
+
25
+ def luks_source
26
+ config['imagePath']
27
+ end
28
+
29
+ def luks_path
30
+ File.join('/dev/mapper', luks_name)
31
+ end
32
+
33
+ def luks_exists?
34
+ File.exists? luks_path
35
+ end
36
+
37
+ def mounted?
38
+ Open3.popen3("mountpoint", "-q", config['mountPoint']) do |i, o, e ,t|
39
+ if t.value.exitstatus == 0
40
+ return true
41
+ end
42
+ end
43
+ return false
44
+ end
45
+
46
+ def prepare_mount
47
+ Open3.popen3("mount", luks_path, config['mountPoint']) do |i, o, e ,t|
48
+ check_error(o, e, t)
49
+ end
50
+ end
51
+
52
+ def cleanup_mount
53
+ Open3.popen3("umount", config['mountPoint']) do |i, o, e ,t|
54
+ check_error(o, e, t)
55
+ end
56
+ end
57
+
58
+ def prepare
59
+ prepare_luks
60
+ prepare_mount
61
+ end
62
+
63
+ def cleanup
64
+ if mounted?
65
+ cleanup_mount
66
+ end
67
+ if luks_exists?
68
+ cleanup_luks
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,3 +1,3 @@
1
1
  module RdiffBackupWrapper
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
@@ -0,0 +1,27 @@
1
+ require 'rdiff_backup_wrapper/luks_loop_volume'
2
+
3
+ module RdiffBackupWrapper
4
+ class Volume
5
+ def self.create(config)
6
+ if config['type'] == 'luks-loop'
7
+ LuksLoopVolume.new config
8
+ else
9
+ raise "Unknown volume type '#{config['type']}"
10
+ end
11
+ end
12
+
13
+ attr_reader :config
14
+
15
+ def initialize(config)
16
+ @config = config
17
+ end
18
+
19
+ def check_error(o, e, t)
20
+ return if t.value.exitstatus == 0
21
+ STDERR.puts e.read
22
+ STDERR.puts o.read
23
+ STDERR.puts t
24
+ raise "error"
25
+ end
26
+ end
27
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdiff_backup_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Simon
@@ -71,7 +71,9 @@ files:
71
71
  - bin/rdiff-backup-wrapper
72
72
  - lib/rdiff_backup_wrapper.rb
73
73
  - lib/rdiff_backup_wrapper/backup.rb
74
+ - lib/rdiff_backup_wrapper/luks_loop_volume.rb
74
75
  - lib/rdiff_backup_wrapper/version.rb
76
+ - lib/rdiff_backup_wrapper/volume.rb
75
77
  - rdiff_backup_wrapper.gemspec
76
78
  homepage: https://github.com/simonswine/rdiff_backup_wrapper
77
79
  licenses: