rdiff_backup_wrapper 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
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: