freydis 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +1 -1
- data/bin/freydis +8 -48
- data/lib/freydis.rb +88 -0
- data/lib/freydis/.options.rb.swp +0 -0
- data/lib/freydis/cryptsetup.rb +7 -5
- data/lib/freydis/data.rb +16 -12
- data/lib/freydis/disk.rb +18 -30
- data/lib/freydis/disk_luks.rb +37 -0
- data/lib/freydis/error.rb +10 -0
- data/lib/freydis/guard.rb +28 -6
- data/lib/freydis/init.rb +7 -9
- data/lib/freydis/options.rb +37 -20
- data/lib/freydis/rsync.rb +4 -4
- data/lib/freydis/version.rb +1 -1
- metadata +32 -7
- metadata.gz.sig +0 -0
- data/CHANGELOG.md +0 -12
- data/LICENSE +0 -10
- data/Rakefile +0 -21
- data/freydis.gemspec +0 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b765713da6ebbf003f0234452f930e884ff398ea0cfa7526a24e5949a2eca9c
|
4
|
+
data.tar.gz: 0e0f5d68bf55b73083386590e0be88267f5c30863b6494700c61ca7befd4c2d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b31ed0d011a8ac7534f81692adcafd1114ac92ab2c56cfa84eb02d46987221d3fc20476e9d610e028fc40fa255d8b332c12a20ee62edb5b9ec02341a05ee278
|
7
|
+
data.tar.gz: 0764c108b98a162b4f605536bbf2104f2f3292e035ece96cbb678b56b2def060e9aeff78a6d31bbe12206ff8ae44439946f7474c81a94263533fd0db9ed8ca13
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
ADDED
Binary file
|
data/README.md
CHANGED
@@ -46,7 +46,7 @@ Freydis will use `cryptsetup` with `luks2` and format the disk with `ext4`:
|
|
46
46
|
$ freydis --encrypt
|
47
47
|
|
48
48
|
#### 0x03 - Other options
|
49
|
-
Make an incremental backup
|
49
|
+
Make an incremental backup with `rsync`, will copy all `paths` include in the config file:
|
50
50
|
|
51
51
|
$ freydis --backup
|
52
52
|
|
data/bin/freydis
CHANGED
@@ -1,53 +1,13 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require "freydis"
|
3
|
-
|
4
|
-
puts "Freydis v." + Freydis::VERSION
|
5
2
|
|
6
|
-
|
7
|
-
data = Freydis::Data.new
|
8
|
-
data.load
|
9
|
-
|
10
|
-
if cli.disk
|
11
|
-
data.options[:disk] = cli.disk
|
12
|
-
end
|
3
|
+
require "freydis"
|
13
4
|
|
14
|
-
|
15
|
-
Freydis::Init.run(data.options)
|
16
|
-
data.save
|
17
|
-
exit 0
|
18
|
-
end
|
5
|
+
config_file = "#{ENV['HOME']}/.config/freydis/freydis.yaml"
|
19
6
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
end
|
7
|
+
freydis = Freydis::Main.new(
|
8
|
+
:cli => Freydis::Options.new(ARGV, config_file),
|
9
|
+
:config => config_file
|
10
|
+
)
|
25
11
|
|
26
|
-
|
27
|
-
|
28
|
-
disk = Freydis::Disk.new(data.options[:disk])
|
29
|
-
disk.encrypt(data)
|
30
|
-
data.save
|
31
|
-
elsif cli.backup
|
32
|
-
puts "Saving..."
|
33
|
-
disk = Freydis::Disk.new(data.options[:disk])
|
34
|
-
disk.open(data)
|
35
|
-
rsync = Freydis::Rsync.new(data)
|
36
|
-
rsync.backup
|
37
|
-
disk.close(data)
|
38
|
-
elsif cli.restore
|
39
|
-
puts "Restoring..."
|
40
|
-
disk = Freydis::Disk.new(data.options[:disk])
|
41
|
-
disk.open(data)
|
42
|
-
rsync = Freydis::Rsync.new(data)
|
43
|
-
rsync.restore
|
44
|
-
disk.close(data)
|
45
|
-
elsif cli.open
|
46
|
-
puts "Opening disk #{data.options[:disk]}."
|
47
|
-
disk = Freydis::Disk.new(data.options[:disk])
|
48
|
-
disk.open(data)
|
49
|
-
elsif cli.close
|
50
|
-
puts "Closing disk #{data.options[:disk]}."
|
51
|
-
disk = Freydis::Disk.new(data.options[:disk])
|
52
|
-
disk.close(data)
|
53
|
-
end
|
12
|
+
freydis.start
|
13
|
+
freydis.bye
|
data/lib/freydis.rb
CHANGED
@@ -3,10 +3,98 @@ require_relative 'freydis/options'
|
|
3
3
|
require_relative 'freydis/init'
|
4
4
|
require_relative 'freydis/data'
|
5
5
|
require_relative 'freydis/disk'
|
6
|
+
require_relative 'freydis/disk_luks'
|
6
7
|
require_relative 'freydis/cryptsetup'
|
7
8
|
require_relative 'freydis/rsync'
|
8
9
|
require_relative 'freydis/guard'
|
10
|
+
require_relative 'freydis/error'
|
9
11
|
|
10
12
|
module Freydis
|
13
|
+
class Main
|
14
|
+
def initialize(args)
|
15
|
+
@config = args[:config]
|
16
|
+
@cli = args[:cli].options
|
17
|
+
@disk = @cli[:disk]
|
18
|
+
|
19
|
+
Freydis::Guard.disk(@cli[:disk])
|
20
|
+
end
|
21
|
+
|
22
|
+
def start
|
23
|
+
init_config
|
24
|
+
encrypt_disk
|
25
|
+
backup
|
26
|
+
restoring
|
27
|
+
opening
|
28
|
+
closing
|
29
|
+
save if @cli[:save]
|
30
|
+
end
|
31
|
+
|
32
|
+
def bye
|
33
|
+
puts
|
34
|
+
puts "Bye !"
|
35
|
+
exit
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def init_config
|
41
|
+
return unless @cli[:init]
|
42
|
+
Init.run(@cli)
|
43
|
+
save
|
44
|
+
end
|
45
|
+
|
46
|
+
def encrypt_disk
|
47
|
+
return unless @cli[:encrypt]
|
48
|
+
puts "Encrypting disk #{@disk}..."
|
49
|
+
disk = Disk.new(@disk)
|
50
|
+
disk.encrypt(@data)
|
51
|
+
end
|
52
|
+
|
53
|
+
def backup
|
54
|
+
return unless @cli[:backup]
|
55
|
+
raise ArgumentError, "No paths to backup" unless @cli[:paths]
|
56
|
+
raise ArgumentError, "No paths to backup" if @cli[:paths] === []
|
57
|
+
|
58
|
+
puts " ==> Backup on #{@cli[:disk]}..."
|
59
|
+
disk = DiskLuks.new(@cli)
|
60
|
+
disk.open
|
61
|
+
rsync = Rsync.new(@cli)
|
62
|
+
rsync.backup
|
63
|
+
disk.close
|
64
|
+
end
|
65
|
+
|
66
|
+
def restoring
|
67
|
+
return unless @cli[:restore]
|
68
|
+
puts
|
69
|
+
puts " ===> Restoring..."
|
70
|
+
disk = DiskLuks.new(@cli)
|
71
|
+
disk.open
|
72
|
+
rsync = Rsync.new(@cli)
|
73
|
+
rsync.restore
|
74
|
+
disk.close
|
75
|
+
end
|
76
|
+
|
77
|
+
def opening
|
78
|
+
return unless @cli[:open]
|
79
|
+
puts
|
80
|
+
puts " ===> Opening disk #{@disk}."
|
81
|
+
disk = DiskLuks.new(@cli)
|
82
|
+
disk.open
|
83
|
+
end
|
84
|
+
|
85
|
+
def closing
|
86
|
+
return unless @cli[:close]
|
87
|
+
puts
|
88
|
+
puts " ===> Closing disk #{@disk}."
|
89
|
+
disk = DiskLuks.new(@cli)
|
90
|
+
disk.close
|
91
|
+
end
|
92
|
+
|
93
|
+
def save
|
94
|
+
puts
|
95
|
+
puts " ===> Saving options to #{@config}..."
|
96
|
+
Data.new(@config, @cli).save
|
97
|
+
end
|
98
|
+
end
|
11
99
|
end
|
12
100
|
|
Binary file
|
data/lib/freydis/cryptsetup.rb
CHANGED
@@ -5,16 +5,17 @@ module Freydis
|
|
5
5
|
def initialize(data)
|
6
6
|
@data = data
|
7
7
|
@dev_ids = [
|
8
|
-
"/dev/disk/by-id/" + @data
|
9
|
-
"/dev/disk/by-uuid/" + @data
|
10
|
-
"/dev/disk/by-partuuid/" + @data
|
11
|
-
"/dev/" + @data
|
8
|
+
"/dev/disk/by-id/" + @data[:disk_id] ||= " ",
|
9
|
+
"/dev/disk/by-uuid/" + @data[:disk_uuid] ||= " ",
|
10
|
+
"/dev/disk/by-partuuid/" + @data[:disk_partuuid] ||= " ",
|
11
|
+
"/dev/" + @data[:disk]
|
12
12
|
]
|
13
13
|
@mapper_name = "freydis-enc"
|
14
14
|
@mountpoint ="/mnt/freydis"
|
15
15
|
end
|
16
16
|
|
17
17
|
def encrypt
|
18
|
+
puts "Encrypting disk..."
|
18
19
|
@dev_ids.each { |f|
|
19
20
|
if File.exists? f
|
20
21
|
exec "cryptsetup -v --type luks2 --verify-passphrase luksFormat #{f}"
|
@@ -24,8 +25,9 @@ module Freydis
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def open
|
28
|
+
puts "Openning disk #{@mapper_name}..."
|
27
29
|
@dev_ids.each { |f|
|
28
|
-
if File.
|
30
|
+
if File.exist? f
|
29
31
|
exec "cryptsetup -v open #{f} #{@mapper_name}"
|
30
32
|
break if $?.success?
|
31
33
|
end
|
data/lib/freydis/data.rb
CHANGED
@@ -6,21 +6,25 @@ module Freydis
|
|
6
6
|
class Data
|
7
7
|
attr_accessor :options
|
8
8
|
|
9
|
-
def initialize
|
10
|
-
@config_file = "#{ENV['HOME']}/.config/freydis/freydis.yaml"
|
11
|
-
@options =
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
def initialize(config_file, data = {})
|
10
|
+
@config_file = config_file ||= "#{ENV['HOME']}/.config/freydis/freydis.yaml"
|
11
|
+
@options = parse(data)
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse(data)
|
15
|
+
disk = data[:disk] ? data[:disk] : ""
|
16
|
+
paths = data[:paths] ? data[:paths] : []
|
17
|
+
opts = {
|
18
|
+
:disk => disk,
|
19
|
+
:paths => paths
|
17
20
|
}
|
21
|
+
opts
|
18
22
|
end
|
19
23
|
|
20
|
-
def load
|
24
|
+
def load!
|
21
25
|
if File.exist? @config_file
|
22
|
-
|
23
|
-
@options.merge!(
|
26
|
+
datas = YAML.load_file @config_file
|
27
|
+
@options.merge!(datas)
|
24
28
|
else
|
25
29
|
save
|
26
30
|
STDERR.puts "Initialized config at #{@config_file}"
|
@@ -29,7 +33,7 @@ module Freydis
|
|
29
33
|
|
30
34
|
def save
|
31
35
|
conf_dir = "#{ENV['HOME']}/.config/freydis"
|
32
|
-
Dir.mkdir conf_dir
|
36
|
+
Dir.mkdir conf_dir unless Dir.exist? conf_dir
|
33
37
|
|
34
38
|
File.open(@config_file, 'w') { |f|
|
35
39
|
YAML::dump(@options, f)
|
data/lib/freydis/disk.rb
CHANGED
@@ -3,9 +3,8 @@
|
|
3
3
|
module Freydis
|
4
4
|
class Disk
|
5
5
|
def initialize(dev)
|
6
|
-
@disk =
|
6
|
+
@disk = Freydis::Guard.disk(dev)
|
7
7
|
@dev = "/dev/#{@disk}"
|
8
|
-
@mountpoint = "/mnt/freydis"
|
9
8
|
end
|
10
9
|
|
11
10
|
def size
|
@@ -18,16 +17,14 @@ module Freydis
|
|
18
17
|
|
19
18
|
def populate_data(data)
|
20
19
|
puts "Checking IDs on #{@disk}..."
|
21
|
-
search_uuid
|
22
|
-
search_id
|
23
|
-
search_partuuid
|
20
|
+
data.options[:disk_uuid] = search_uuid
|
21
|
+
data.options[:disk_id] = search_id
|
22
|
+
data.options[:disk_partuuid] = search_partuuid
|
24
23
|
end
|
25
24
|
|
26
25
|
def encrypt(data)
|
27
|
-
|
26
|
+
search_id(data)
|
28
27
|
puts "id -> #{data.options[:disk_id]}"
|
29
|
-
puts "uuid -> #{data.options[:disk_uuid]}"
|
30
|
-
puts "partuuid -> #{data.options[:disk_partuuid]}"
|
31
28
|
data.save
|
32
29
|
|
33
30
|
cryptsetup = Freydis::Cryptsetup.new(data)
|
@@ -37,43 +34,34 @@ module Freydis
|
|
37
34
|
cryptsetup.open
|
38
35
|
cryptsetup.format
|
39
36
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
cryptsetup = Freydis::Cryptsetup.new(data)
|
45
|
-
cryptsetup.close
|
46
|
-
cryptsetup.open
|
47
|
-
cryptsetup.mount
|
48
|
-
end
|
37
|
+
populate_data(data)
|
38
|
+
puts "uuid -> #{data.options[:disk_uuid]}"
|
39
|
+
puts "partuuid -> #{data.options[:disk_partuuid]}"
|
40
|
+
data.save
|
49
41
|
|
50
|
-
def close(data)
|
51
|
-
cryptsetup = Freydis::Cryptsetup.new(data)
|
52
42
|
cryptsetup.close
|
53
43
|
end
|
54
44
|
|
55
|
-
|
56
|
-
|
57
|
-
def search_uuid(data)
|
58
|
-
Dir.glob("/dev/disk/by-uuid/*").each { |f|
|
45
|
+
def search_partuuid
|
46
|
+
Dir.glob("/dev/disk/by-partuuid/*").each { |f|
|
59
47
|
if File.readlink(f).match(/#{@disk}/)
|
60
|
-
|
48
|
+
return f.delete_prefix("/dev/disk/by-partuuid/")
|
61
49
|
end
|
62
50
|
}
|
63
51
|
end
|
64
52
|
|
65
|
-
def
|
66
|
-
Dir.glob("/dev/disk/by-
|
53
|
+
def search_uuid
|
54
|
+
Dir.glob("/dev/disk/by-uuid/*").each { |f|
|
67
55
|
if File.readlink(f).match(/#{@disk}/)
|
68
|
-
|
56
|
+
return f.delete_prefix("/dev/disk/by-uuid/")
|
69
57
|
end
|
70
58
|
}
|
71
59
|
end
|
72
60
|
|
73
|
-
def
|
74
|
-
Dir.glob("/dev/disk/by-
|
61
|
+
def search_id
|
62
|
+
Dir.glob("/dev/disk/by-id/*").each { |f|
|
75
63
|
if File.readlink(f).match(/#{@disk}/)
|
76
|
-
|
64
|
+
return f.delete_prefix("/dev/disk/by-id/")
|
77
65
|
end
|
78
66
|
}
|
79
67
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# lib/disk_luks.rb
|
2
|
+
|
3
|
+
module Freydis
|
4
|
+
class DiskLuks < Disk
|
5
|
+
def initialize(data)
|
6
|
+
@data = data
|
7
|
+
@disk = data[:disk]
|
8
|
+
if @disk
|
9
|
+
if File.exist? "/dev/disk/by-id/#{@disk}"
|
10
|
+
Freydis::Guard.disk("/dev/disk/by-id/#{@disk}")
|
11
|
+
Freydis::Guard.isLuks("/dev/disk/by-id/#{@disk}")
|
12
|
+
elsif File.exist? "/dev/#{@disk}"
|
13
|
+
Freydis::Guard.disk(@disk)
|
14
|
+
Freydis::Guard.isLuks("/dev/#{@disk}")
|
15
|
+
else
|
16
|
+
puts "#{@disk} value is not supported yet"
|
17
|
+
exit
|
18
|
+
end
|
19
|
+
else
|
20
|
+
puts "No disk."
|
21
|
+
exit 1
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def open
|
26
|
+
cryptsetup = Freydis::Cryptsetup.new(@data)
|
27
|
+
cryptsetup.close
|
28
|
+
cryptsetup.open
|
29
|
+
cryptsetup.mount
|
30
|
+
end
|
31
|
+
|
32
|
+
def close
|
33
|
+
cryptsetup = Freydis::Cryptsetup.new(@data)
|
34
|
+
cryptsetup.close
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/freydis/guard.rb
CHANGED
@@ -1,9 +1,31 @@
|
|
1
|
-
module Freydis
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
module Freydis::Guard
|
2
|
+
def self.disk(name)
|
3
|
+
raise Freydis::InvalidDisk, "No disk, use with -d DISK." unless name
|
4
|
+
raise Freydis::InvalidDisk, "No disk, use with -d DISK." if name =~ /nil/
|
5
|
+
raise Freydis::InvalidDisk, "Bad name #{name}, should match with sd[a-z]" unless name.match(/^sd[a-z]{1}$/)
|
6
|
+
raise Freydis::InvalidDisk, "No disk /dev/#{name} available." unless File.exist? "/dev/#{name}"
|
7
|
+
name
|
8
|
+
rescue Freydis::InvalidDisk => e
|
9
|
+
puts "#{e.class} => #{e}"
|
10
|
+
exit 1
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.isLuks(disk)
|
14
|
+
raise Freydis::InvalidLuksDev, "No disk." unless disk
|
15
|
+
raise Freydis::InvalidLuksDev, "#{disk} does not exist." unless File.exist? disk
|
16
|
+
sudo = Process.uid != 0 ? 'sudo' : ''
|
17
|
+
if !system(sudo, 'cryptsetup', 'isLuks', disk)
|
18
|
+
raise Freydis::InvalidLuksDev, "#{disk} is not valid Luks device."
|
7
19
|
end
|
20
|
+
rescue Freydis::InvalidLuksDev => e
|
21
|
+
puts "#{e.class} => #{e}"
|
22
|
+
exit 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.path?(p)
|
26
|
+
raise Freydis::InvalidPath, "#{p} does not exist." unless File.exist? p
|
27
|
+
rescue Freydis::InvalidPath => e
|
28
|
+
puts "#{e.class} => #{e}"
|
29
|
+
exit 1
|
8
30
|
end
|
9
31
|
end
|
data/lib/freydis/init.rb
CHANGED
@@ -2,9 +2,6 @@
|
|
2
2
|
|
3
3
|
module Freydis
|
4
4
|
module Init
|
5
|
-
|
6
|
-
puts "===> Starting Init"
|
7
|
-
|
8
5
|
def self.run(options)
|
9
6
|
loop do
|
10
7
|
puts %q{Please select an option:
|
@@ -15,6 +12,7 @@ module Freydis
|
|
15
12
|
4. Show options
|
16
13
|
5. Save & Quit}
|
17
14
|
|
15
|
+
print "\n> "
|
18
16
|
case gets.chomp
|
19
17
|
when '1'
|
20
18
|
select_disk(options)
|
@@ -27,7 +25,6 @@ module Freydis
|
|
27
25
|
when '4'
|
28
26
|
show_options(options)
|
29
27
|
else
|
30
|
-
puts "Quit."
|
31
28
|
return
|
32
29
|
end
|
33
30
|
end
|
@@ -38,18 +35,19 @@ module Freydis
|
|
38
35
|
def self.select_disk(options)
|
39
36
|
disks_list = Dir.glob("/dev/sd?")
|
40
37
|
puts "Available disks: (only type sdX)"
|
41
|
-
disks_list.each { |
|
38
|
+
disks_list.each { |disk_list|
|
39
|
+
d = disk_list.delete_prefix("/dev/")
|
42
40
|
your_disk = Freydis::Disk.new(d)
|
43
41
|
puts "+ " + your_disk.complete_info
|
44
42
|
}
|
45
43
|
print "> "
|
46
44
|
answer = $stdin.gets
|
47
45
|
disk = answer.chomp
|
48
|
-
if
|
49
|
-
options[:disk] = disk
|
46
|
+
if disk != ''
|
47
|
+
options[:disk] = Freydis::Guard::disk(disk)
|
50
48
|
puts "Disk #{disk} added."
|
51
49
|
else
|
52
|
-
puts "No disk
|
50
|
+
puts "No disk added."
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
@@ -62,7 +60,7 @@ module Freydis
|
|
62
60
|
puts "Path '#{new_path}' added"
|
63
61
|
display_path(options)
|
64
62
|
else
|
65
|
-
puts "
|
63
|
+
puts "[-] Path no found."
|
66
64
|
end
|
67
65
|
end
|
68
66
|
|
data/lib/freydis/options.rb
CHANGED
@@ -2,18 +2,13 @@ require 'optparse'
|
|
2
2
|
|
3
3
|
module Freydis
|
4
4
|
class Options
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
@
|
12
|
-
@restore = false
|
13
|
-
@encrypt = false
|
14
|
-
@open = false
|
15
|
-
@close = false
|
16
|
-
@disk = nil
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize(args, data_file)
|
8
|
+
data = Data.new(data_file)
|
9
|
+
data.load!
|
10
|
+
|
11
|
+
@options = data.options
|
17
12
|
parse(args)
|
18
13
|
end
|
19
14
|
|
@@ -22,39 +17,61 @@ module Freydis
|
|
22
17
|
def parse(argv)
|
23
18
|
OptionParser.new do |opts|
|
24
19
|
opts.banner = "Usage: freydis.rb [options]"
|
20
|
+
opts.version = VERSION
|
25
21
|
|
26
22
|
opts.on("-i", "--init", "Create a config file.") do
|
27
|
-
@init = true
|
23
|
+
@options[:init] = true
|
28
24
|
end
|
29
25
|
|
30
26
|
opts.on("-b", "--backup", "Perform a backup.") do
|
31
|
-
@backup = true
|
27
|
+
@options[:backup] = true
|
32
28
|
end
|
33
29
|
|
34
30
|
opts.on("-r", "--restore", "Restore saved datas on your system.") do
|
35
|
-
@restore = true
|
31
|
+
@options[:restore] = true
|
36
32
|
end
|
37
33
|
|
38
34
|
opts.on("-e", "--encrypt", "Encrypt your device.") do
|
39
|
-
@encrypt = true
|
35
|
+
@options[:encrypt] = true
|
40
36
|
end
|
41
37
|
|
42
38
|
opts.on("-o", "--open", "Open and mount encrypted device at /mnt/freydis.") do
|
43
|
-
@open = true
|
39
|
+
@options[:open] = true
|
44
40
|
end
|
45
41
|
|
46
42
|
opts.on("-c", "--close", "Umount & close encrypted device.") do
|
47
|
-
@close = true
|
43
|
+
@options[:close] = true
|
44
|
+
end
|
45
|
+
|
46
|
+
opts.on("-d NAME", "--disk NAME", /^sd[a-z]$/, "To use the disk NAME (e.g: sda, sdb).") do |disk|
|
47
|
+
@options[:disk] = Freydis::Guard.disk(disk)
|
48
|
+
end
|
49
|
+
|
50
|
+
opts.on("-L", "--path-list", "List all paths from your list.") do
|
51
|
+
puts
|
52
|
+
puts @options[:paths]
|
53
|
+
exit
|
54
|
+
end
|
55
|
+
|
56
|
+
opts.on("-p PATH", "--path-add PATH", String, "Add absolute path PATH to the backup list") do |p|
|
57
|
+
Freydis::Guard.path? p
|
58
|
+
@options[:paths] << p if !@options[:paths].include? p
|
59
|
+
end
|
60
|
+
|
61
|
+
opts.on("-d PATH", "--path-del PATH", String, "Remove absolute path PATH from the backup list.") do |p|
|
62
|
+
Freydis::Guard.path? p
|
63
|
+
@options[:paths].delete p if @options[:paths].include? p
|
48
64
|
end
|
49
65
|
|
50
|
-
opts.on("-
|
51
|
-
@
|
66
|
+
opts.on("-s", "--save", "Save currents arguments in a config file.") do
|
67
|
+
@options[:save] = true
|
52
68
|
end
|
53
69
|
|
54
70
|
begin
|
55
71
|
opts.parse!(argv)
|
56
72
|
rescue OptionParser::ParseError => e
|
57
73
|
STDERR.puts e.message, "\n", opts
|
74
|
+
exit 1
|
58
75
|
end
|
59
76
|
end
|
60
77
|
end
|
data/lib/freydis/rsync.rb
CHANGED
@@ -19,13 +19,13 @@ module Freydis
|
|
19
19
|
"/home/*/.local/share/Trash/*",
|
20
20
|
"/lost+found",
|
21
21
|
]
|
22
|
-
@opts = "-
|
22
|
+
@opts = "-aAXHvR"
|
23
23
|
end
|
24
24
|
|
25
25
|
def backup
|
26
26
|
add_config
|
27
27
|
exil = @exclude_paths * ","
|
28
|
-
save = @data
|
28
|
+
save = @data[:paths] * " "
|
29
29
|
@opts += " --delete"
|
30
30
|
exec("rsync #{@opts} --exclude={#{exil}} #{save} #{@mountpoint}")
|
31
31
|
end
|
@@ -38,8 +38,8 @@ module Freydis
|
|
38
38
|
private
|
39
39
|
|
40
40
|
def add_config
|
41
|
-
if !@data
|
42
|
-
@data
|
41
|
+
if !@data[:paths].include?("#{ENV['HOME']}/.config/freydis")
|
42
|
+
@data[:paths] << "#{ENV['HOME']}/.config/freydis"
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
data/lib/freydis/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freydis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szorfein
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
|
-
-
|
12
|
-
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIETTCCArWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAoMSYwJAYDVQQDDB1zem9y
|
14
|
+
ZmVpbi9EQz1wcm90b25tYWlsL0RDPWNvbTAeFw0yMTA1MTEyMTAzNDZaFw0yMjA1
|
15
|
+
MTEyMTAzNDZaMCgxJjAkBgNVBAMMHXN6b3JmZWluL0RDPXByb3Rvbm1haWwvREM9
|
16
|
+
Y29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAxCTYZRndCTRy18rE
|
17
|
+
exr2wig/staa0G5kt99xqaBYD0dnIRBr/GO5dFntlBVwmefQlTrNbygVUIYTb8Vg
|
18
|
+
B1oX3v/LLW9SRQcWaZwou0tARqanm5WhgV1ZYQTs22endTazsDHw0uhM3V+FgDh+
|
19
|
+
eR5wM9vU+SkRFHWzjVS1OxyTSCBVWb3+nrYTr/OKZ5Fm3Vo1dEQdwBEWLLXuUBxs
|
20
|
+
dWEDmBk7iTJbvNdd5Kk2wfMKRMOl9NGicJl3Cb5yl5ITeZsXdOsrLBBPepTpNeq2
|
21
|
+
k1goew3mEd/4pVXrdw6S5Qr6RTbTCLpKNRxWtx01vue9NN1cQ/Ds5FRkCp/Ntw/k
|
22
|
+
Xroyofo4MW5fEPq+udgvVpdTfguQkpmuJg7TRiq9F5hDhEMnKUsdM2fSev9u8EvL
|
23
|
+
OkidKy8bnhUOoG9qDxEG/IyibjRLl1i5jtyHa8Jb/We8poZ5LI8qjHwMPjTBhDgi
|
24
|
+
EzaYV5rLGs5S1/m58XG6a+620x2tcQZph6FFbnQJ8QBuNz6zAgMBAAGjgYEwfzAJ
|
25
|
+
BgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUc8XWveAjxS5fVEOZeeZe
|
26
|
+
uUQmbhMwIgYDVR0RBBswGYEXc3pvcmZlaW5AcHJvdG9ubWFpbC5jb20wIgYDVR0S
|
27
|
+
BBswGYEXc3pvcmZlaW5AcHJvdG9ubWFpbC5jb20wDQYJKoZIhvcNAQELBQADggGB
|
28
|
+
AHuRqWvtAx1PSIEcvq1uzgBclzP+Lhp6J1f7McvbfzHAZuLo5Nv9iFHkLl2ad9gx
|
29
|
+
p/X2/p8PmgiUNFSXDdB12Pn/VbX4DdoQujwXvmZbQo2KmooklHIhM6AJMafOHW1N
|
30
|
+
qjHIwGvMY5bJfn+3qEQNV+yip6KnCUQVklw132IFvdusoBOPfEP48p41deXbIhNP
|
31
|
+
GNJQ4qkZfXWdLumikb2Y432kIIeugIIAL57VD+wwDUJ3MciiLufYT7v9WNSFRenV
|
32
|
+
JDNGIh3AYiCnNO2DWIArrW6/jaof3A0OnjRQ64vS+EKhZFp8+y6rfC3Clrfjdjse
|
33
|
+
a4zH3TI57bnzfkx5xhjhIu6LJnBpk0x8Y/N2kVmwB+GonFiRcVzZpIfOLvy03tn5
|
34
|
+
dAHfUn//hrBJAT9EXRHNUoLyEmFsCPabTCXjQH6EM2uBcsrjQN4SlgBNzsKc8bS4
|
35
|
+
F9Dl4EPzjBJOgQWf+NxzxNuNKI46Lp5Q8AI+xtDUHAPbSswHa40BA6ChFehP+j0L
|
36
|
+
fg==
|
37
|
+
-----END CERTIFICATE-----
|
38
|
+
date: 2021-07-04 00:00:00.000000000 Z
|
13
39
|
dependencies: []
|
14
40
|
description: " Freydis is a CLI tool to encrypt a disk device, backup and restore
|
15
41
|
easyly. Freydis use `cryptsetup` and `rsync` mainly.\n"
|
@@ -20,16 +46,15 @@ extensions: []
|
|
20
46
|
extra_rdoc_files:
|
21
47
|
- README.md
|
22
48
|
files:
|
23
|
-
- CHANGELOG.md
|
24
|
-
- LICENSE
|
25
49
|
- README.md
|
26
|
-
- Rakefile
|
27
50
|
- bin/freydis
|
28
|
-
- freydis.gemspec
|
29
51
|
- lib/freydis.rb
|
52
|
+
- lib/freydis/.options.rb.swp
|
30
53
|
- lib/freydis/cryptsetup.rb
|
31
54
|
- lib/freydis/data.rb
|
32
55
|
- lib/freydis/disk.rb
|
56
|
+
- lib/freydis/disk_luks.rb
|
57
|
+
- lib/freydis/error.rb
|
33
58
|
- lib/freydis/guard.rb
|
34
59
|
- lib/freydis/init.rb
|
35
60
|
- lib/freydis/options.rb
|
metadata.gz.sig
ADDED
Binary file
|
data/CHANGELOG.md
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
## 0.0.2, release 2021/05/18
|
2
|
-
* New options `--open` and `--close`.
|
3
|
-
* Encrypt/Decrypt with `cryptsetup`.
|
4
|
-
* Add Rsync for backup and restore.
|
5
|
-
* Can add/remove paths with the `--cli`.
|
6
|
-
* Can (u)mount the encrypted device at the default `/mnt/freydis`.
|
7
|
-
* Checking all ID (partuuid, uuid, id) from a given device.
|
8
|
-
* YAML config file in ~/.config/freydis/freydis.yaml.
|
9
|
-
|
10
|
-
## 0.0.1, release 2021/05/04
|
11
|
-
* Initial push, code freeying !
|
12
|
-
|
data/LICENSE
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
MIT License
|
2
|
-
|
3
|
-
Copyright (c) 2021 szorfein
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
6
|
-
|
7
|
-
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
8
|
-
|
9
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
10
|
-
|
data/Rakefile
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# https://github.com/seattlerb/minitest#running-your-tests-
|
2
|
-
require "rake/testtask"
|
3
|
-
require File.dirname(__FILE__) + "/lib/freydis/version"
|
4
|
-
|
5
|
-
Rake::TestTask.new(:test) do |t|
|
6
|
-
t.libs << "test"
|
7
|
-
t.libs << "lib"
|
8
|
-
t.test_files = FileList["test/test_*.rb"]
|
9
|
-
end
|
10
|
-
|
11
|
-
# Usage: rake gem:build
|
12
|
-
namespace :gem do
|
13
|
-
desc "build the gem"
|
14
|
-
task :build do
|
15
|
-
Dir["freydis*.gem"].each {|f| File.unlink(f) }
|
16
|
-
system("gem build freydis.gemspec")
|
17
|
-
system("gem install freydis-#{Freydis::VERSION}.gem")
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
task :default => :test
|
data/freydis.gemspec
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/lib/freydis/version"
|
2
|
-
|
3
|
-
# https://guides.rubygems.org/specification-reference/
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.files = `git ls-files`.split(" ")
|
6
|
-
s.files.reject! { |fn| fn.include? "certs" }
|
7
|
-
s.name = "freydis"
|
8
|
-
s.summary = "Backup and Restore data from encrypted device."
|
9
|
-
s.version = Freydis::VERSION
|
10
|
-
s.description = <<-EOF
|
11
|
-
Freydis is a CLI tool to encrypt a disk device, backup and restore easyly. Freydis use `cryptsetup` and `rsync` mainly.
|
12
|
-
EOF
|
13
|
-
s.email = "szorfein@protonmail.com"
|
14
|
-
s.homepage = "https://github.com/szorfein/freydis"
|
15
|
-
s.license = "MIT"
|
16
|
-
s.metadata = {
|
17
|
-
"bug_tracker_uri" => "https://github.com/szorfein/freydis/issues",
|
18
|
-
"changelog_uri" => "https://github.com/szorfein/freydis/blob/master/CHANGELOG.md",
|
19
|
-
"source_code_uri" => "https://github.com/szorfein/freydis",
|
20
|
-
"wiki_uri" => "https://github.com/szorfein/freydis/wiki",
|
21
|
-
"funding_uri" => "https://patreon.com/szorfein",
|
22
|
-
}
|
23
|
-
s.author = "szorfein"
|
24
|
-
s.bindir = "bin"
|
25
|
-
s.cert_chain = ["certs/szorfein.pem"]
|
26
|
-
s.executables << "freydis"
|
27
|
-
s.extra_rdoc_files = ['README.md']
|
28
|
-
s.required_ruby_version = ">=2.6"
|
29
|
-
s.requirements << 'cryptsetup, v2.3'
|
30
|
-
s.requirements << 'rsync, v3.2'
|
31
|
-
s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $@ =~ /gem\z/
|
32
|
-
end
|
33
|
-
|