freydis 0.0.3 → 0.1.1
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/CHANGELOG.md +32 -0
- data/LICENSE +10 -0
- data/README.md +40 -33
- data/bin/freydis +2 -5
- data/freydis.gemspec +45 -0
- data/lib/freydis/config.rb +44 -0
- data/lib/freydis/cryptsetup.rb +40 -45
- data/lib/freydis/disk.rb +22 -53
- data/lib/freydis/disk_luks.rb +18 -22
- data/lib/freydis/error.rb +6 -7
- data/lib/freydis/guard.rb +48 -26
- data/lib/freydis/options.rb +47 -36
- data/lib/freydis/rsync.rb +34 -40
- data/lib/freydis/secrets/archive.rb +73 -0
- data/lib/freydis/secrets/gpg.rb +63 -0
- data/lib/freydis/secrets.rb +29 -0
- data/lib/freydis/version.rb +3 -1
- data/lib/freydis.rb +10 -77
- data/lib/mods/exec.rb +29 -0
- data/lib/mods/msg.rb +16 -0
- data.tar.gz.sig +0 -0
- metadata +45 -38
- metadata.gz.sig +0 -0
- data/lib/freydis/.options.rb.swp +0 -0
- data/lib/freydis/data.rb +0 -43
- data/lib/freydis/init.rb +0 -76
data/lib/freydis/options.rb
CHANGED
@@ -1,76 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'optparse'
|
2
4
|
|
3
5
|
module Freydis
|
4
6
|
class Options
|
5
|
-
|
6
|
-
|
7
|
-
def initialize(args, data_file)
|
8
|
-
data = Data.new(data_file)
|
9
|
-
data.load!
|
10
|
-
|
11
|
-
@options = data.options
|
12
|
-
parse(args)
|
7
|
+
def initialize(argv)
|
8
|
+
parse(argv)
|
13
9
|
end
|
14
10
|
|
15
11
|
private
|
16
12
|
|
17
13
|
def parse(argv)
|
18
14
|
OptionParser.new do |opts|
|
19
|
-
opts.banner =
|
15
|
+
opts.banner = 'Usage: freydis.rb [options]'
|
20
16
|
opts.version = VERSION
|
21
17
|
|
22
|
-
opts.on(
|
23
|
-
|
18
|
+
opts.on('--disk NAME', /^sd[a-z]$/, 'Use the disk NAME (e.g: sda, sdb).') do |disk|
|
19
|
+
Freydis::CONFIG.disk = Guard.disk(disk)
|
20
|
+
end
|
21
|
+
|
22
|
+
opts.on('--gpg-recipient NAME', String, 'Use gpg key NAME.') do |key|
|
23
|
+
Freydis::CONFIG.gpg_recipient = Guard.gpg(key)
|
24
|
+
end
|
25
|
+
|
26
|
+
opts.on('-p PATHS', '--paths-add PATHS', Array, 'Add absolute PATHS to the backup list.') do |paths|
|
27
|
+
paths.each do |p|
|
28
|
+
Freydis::Guard.path? p
|
29
|
+
Freydis::CONFIG.paths << p
|
30
|
+
end
|
31
|
+
|
24
32
|
end
|
25
33
|
|
26
|
-
opts.on(
|
27
|
-
|
34
|
+
opts.on('-d PATH', '--path-del PATH', String, 'Remove absolute PATH from the backup list.') do |p|
|
35
|
+
Freydis::Guard.path? p
|
36
|
+
Freydis::CONFIG.paths.delete p if CONFIG.paths.include? p
|
28
37
|
end
|
29
38
|
|
30
|
-
opts.on(
|
31
|
-
|
39
|
+
opts.on('-L', '--paths-list', 'List all paths from your list.') do
|
40
|
+
if Freydis::CONFIG.paths.nil?
|
41
|
+
puts 'Nothing in paths yet...'
|
42
|
+
else
|
43
|
+
puts Freydis::CONFIG.paths
|
44
|
+
end
|
32
45
|
end
|
33
46
|
|
34
|
-
|
35
|
-
|
47
|
+
# Engines options
|
48
|
+
|
49
|
+
opts.on('-e', '--encrypt', 'Encrypt and format (ext4) your device.') do
|
50
|
+
Freydis::DiskLuks.encrypt
|
36
51
|
end
|
37
52
|
|
38
|
-
opts.on(
|
39
|
-
|
53
|
+
opts.on('-o', '--open', 'Open and mount encrypted disk at /mnt/freydis.') do
|
54
|
+
Freydis::DiskLuks.open
|
40
55
|
end
|
41
56
|
|
42
|
-
opts.on(
|
43
|
-
|
57
|
+
opts.on('-c', '--close', 'Umount and close encrypted disk.') do
|
58
|
+
Freydis::DiskLuks.close
|
44
59
|
end
|
45
60
|
|
46
|
-
opts.on(
|
47
|
-
|
61
|
+
opts.on('-b', '--backup', 'Perform a backup.') do
|
62
|
+
Freydis::Rsync.new.backup
|
48
63
|
end
|
49
64
|
|
50
|
-
opts.on(
|
51
|
-
|
52
|
-
puts @options[:paths]
|
53
|
-
exit
|
65
|
+
opts.on('-r', '--restore', 'Restore saved datas on your system.') do
|
66
|
+
Freydis::Rsync.new.restore
|
54
67
|
end
|
55
68
|
|
56
|
-
opts.on(
|
57
|
-
Freydis::
|
58
|
-
@options[:paths] << p if !@options[:paths].include? p
|
69
|
+
opts.on('--secrets-backup', 'Backup only secrets, including GPG keys.') do |s|
|
70
|
+
Freydis::Secrets.backup
|
59
71
|
end
|
60
72
|
|
61
|
-
opts.on(
|
62
|
-
Freydis::
|
63
|
-
@options[:paths].delete p if @options[:paths].include? p
|
73
|
+
opts.on('--secrets-restore', 'Restore secrets.') do |s|
|
74
|
+
Freydis::Secrets.restore
|
64
75
|
end
|
65
76
|
|
66
|
-
opts.on(
|
67
|
-
|
77
|
+
opts.on('-s', '--save', 'Save current arguments in the config file.') do
|
78
|
+
Freydis::CONFIG.save
|
68
79
|
end
|
69
80
|
|
70
81
|
begin
|
71
82
|
opts.parse!(argv)
|
72
83
|
rescue OptionParser::ParseError => e
|
73
|
-
|
84
|
+
warn e.message, "\n", opts
|
74
85
|
exit 1
|
75
86
|
end
|
76
87
|
end
|
data/lib/freydis/rsync.rb
CHANGED
@@ -1,53 +1,47 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mods/exec'
|
2
4
|
|
3
5
|
module Freydis
|
4
6
|
class Rsync
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
@
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
7
|
+
include Exec
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@workdir = '/mnt/freydis/backup/'
|
11
|
+
@exclude_paths = %w[
|
12
|
+
/dev/*
|
13
|
+
/proc/*
|
14
|
+
/sys/*
|
15
|
+
/tmp/*
|
16
|
+
/run/*
|
17
|
+
/mnt/*
|
18
|
+
/media/*
|
19
|
+
/var/lib/dhcpcd/*
|
20
|
+
/home/*/.gvfs
|
21
|
+
/home/*/.thumbnails/*
|
22
|
+
/home/*/.cache/*
|
23
|
+
/home/*/.local/share/*
|
24
|
+
/home/*/.Xauthority
|
25
|
+
/home/*/.xsession-errors
|
26
|
+
/lost+found
|
21
27
|
]
|
22
|
-
@opts =
|
28
|
+
@opts = '-aAXHvRx'
|
23
29
|
end
|
24
30
|
|
25
31
|
def backup
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
32
|
+
Freydis::DiskLuks.open
|
33
|
+
mkdir @workdir
|
34
|
+
exil = @exclude_paths * ','
|
35
|
+
save = CONFIG.paths * ' '
|
36
|
+
@opts += ' --delete'
|
37
|
+
x "rsync #{@opts} --exclude={#{exil}} #{save} #{@workdir}"
|
38
|
+
Freydis::DiskLuks.close
|
31
39
|
end
|
32
40
|
|
33
41
|
def restore
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def add_config
|
41
|
-
if !@data[:paths].include?("#{ENV['HOME']}/.config/freydis")
|
42
|
-
@data[:paths] << "#{ENV['HOME']}/.config/freydis"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def exec(command)
|
47
|
-
sudo = Process.uid != 0 ? 'sudo' : ''
|
48
|
-
if !system("#{sudo} #{command}")
|
49
|
-
raise StandardError, "[-] #{command}"
|
50
|
-
end
|
42
|
+
Freydis::DiskLuks.open
|
43
|
+
x "rsync #{@opts} #{@workdir} /"
|
44
|
+
Freydis::DiskLuks.close
|
51
45
|
end
|
52
46
|
end
|
53
47
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'date'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
module Freydis
|
7
|
+
module Secrets
|
8
|
+
# Create or Restore an archive of secrets with bsdtar
|
9
|
+
class Archive
|
10
|
+
include Exec
|
11
|
+
include Msg
|
12
|
+
|
13
|
+
def initialize(gpg)
|
14
|
+
@workdir = '/mnt/freydis/secrets'
|
15
|
+
@filename = "#{@workdir}/#{CONFIG.gpg_recipient}_#{Date.today}.tar.gz"
|
16
|
+
@restore_dir = '/tmp'
|
17
|
+
@include_paths = %w[]
|
18
|
+
@gpg = gpg
|
19
|
+
end
|
20
|
+
|
21
|
+
def create
|
22
|
+
populate_include
|
23
|
+
inc_paths = @include_paths * ' '
|
24
|
+
|
25
|
+
mkdir @workdir
|
26
|
+
info "Creating archive #{@filename}..."
|
27
|
+
bsdtar "--acls --xattrs -cpvf #{@filename} #{inc_paths}"
|
28
|
+
@gpg.clean_keys
|
29
|
+
end
|
30
|
+
|
31
|
+
# Restore the most recent archive in your $HOME
|
32
|
+
def restore
|
33
|
+
last_archive = find_last_archive
|
34
|
+
error 'No archive found.' unless last_archive
|
35
|
+
|
36
|
+
mkdir @restore_dir
|
37
|
+
info "Restoring #{last_archive}..."
|
38
|
+
bsdtar "-xvf #{last_archive} -C #{@restore_dir}"
|
39
|
+
@gpg.import_keys @restore_dir
|
40
|
+
@gpg.clean_keys @restore_dir
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def populate_include
|
46
|
+
@gpg.export_keys unless File.exist? @gpg.seckey_path
|
47
|
+
search_paths(%W[#{ENV['HOME']}/.password-store
|
48
|
+
#{@gpg.seckey_path}
|
49
|
+
#{@gpg.pubkey_path}])
|
50
|
+
end
|
51
|
+
|
52
|
+
def find_last_archive
|
53
|
+
if Process.uid == 0
|
54
|
+
Dir.glob("#{@workdir}/#{CONFIG.gpg_recipient}*").sort[0]
|
55
|
+
else
|
56
|
+
archive = `sudo ls #{@workdir}/ | grep #{CONFIG.gpg_recipient} | sort | head -1`.chomp
|
57
|
+
"#{@workdir}/#{archive}" if archive
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def search_paths(paths)
|
64
|
+
paths.each do |p|
|
65
|
+
if Dir.exist?(p) || File.exist?(p)
|
66
|
+
info "Found #{p}, add to archive..."
|
67
|
+
@include_paths << p
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Freydis
|
4
|
+
module Secrets
|
5
|
+
class GPG
|
6
|
+
include Exec
|
7
|
+
include Msg
|
8
|
+
|
9
|
+
attr_reader :seckey_path, :pubkey_path
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@recipient = Guard.gpg(CONFIG.gpg_recipient)
|
13
|
+
@seckey_path = "/tmp/#{@recipient}-secret.key"
|
14
|
+
@pubkey_path = "/tmp/#{@recipient}-public.key"
|
15
|
+
end
|
16
|
+
|
17
|
+
def export_keys
|
18
|
+
info "Exporting keys for #{@recipient}..."
|
19
|
+
gpg "-a --export-secret-keys --armor #{@recipient} >#{@seckey_path}"
|
20
|
+
gpg "-a --export --armor #{@recipient} >#{@pubkey_path}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def import_keys(prefix = nil)
|
24
|
+
is_key = `gpg -K | grep #{@recipient}`.chomp
|
25
|
+
if is_key.empty?
|
26
|
+
info "Importing key #{@recipient}..."
|
27
|
+
gpg_import(prefix)
|
28
|
+
else
|
29
|
+
info "Key #{@recipient} is alrealy present, skip import."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def clean_keys(prefix = nil)
|
34
|
+
if prefix
|
35
|
+
shred "#{prefix}#{@seckey_path}", "#{prefix}#{@pubkey_path}"
|
36
|
+
else
|
37
|
+
shred @seckey_path, @pubkey_path
|
38
|
+
end
|
39
|
+
success "Clean keys."
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
def gpg_import(prefix)
|
45
|
+
if prefix
|
46
|
+
gpg "--armor --import #{prefix}#{@seckey_path}"
|
47
|
+
gpg "--armor --import #{prefix}#{@pubkey_path}"
|
48
|
+
else
|
49
|
+
gpg "--armor --import #{@seckey_path}"
|
50
|
+
gpg "--armor --import #{@pubkey_path}"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def gpg(command)
|
57
|
+
unless system("gpg #{command}")
|
58
|
+
error "Exe: gpg #{command}"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mods/msg'
|
4
|
+
require_relative 'secrets/gpg'
|
5
|
+
require_relative 'secrets/archive'
|
6
|
+
|
7
|
+
module Freydis
|
8
|
+
module Secrets
|
9
|
+
extend Msg
|
10
|
+
|
11
|
+
def self.backup
|
12
|
+
DiskLuks.open
|
13
|
+
info 'Backup secrets...'
|
14
|
+
gpg = GPG.new
|
15
|
+
archive = Archive.new(gpg)
|
16
|
+
archive.create
|
17
|
+
DiskLuks.close
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.restore
|
21
|
+
DiskLuks.open
|
22
|
+
info 'Restoring secrets...'
|
23
|
+
gpg = GPG.new
|
24
|
+
archive = Archive.new(gpg)
|
25
|
+
archive.restore
|
26
|
+
DiskLuks.close
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/freydis/version.rb
CHANGED
data/lib/freydis.rb
CHANGED
@@ -1,32 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'freydis/version'
|
2
4
|
require_relative 'freydis/options'
|
3
|
-
require_relative 'freydis/
|
4
|
-
require_relative 'freydis/data'
|
5
|
+
require_relative 'freydis/config'
|
5
6
|
require_relative 'freydis/disk'
|
6
7
|
require_relative 'freydis/disk_luks'
|
7
8
|
require_relative 'freydis/cryptsetup'
|
8
9
|
require_relative 'freydis/rsync'
|
9
|
-
require_relative 'freydis/guard'
|
10
10
|
require_relative 'freydis/error'
|
11
|
+
require_relative 'freydis/guard'
|
12
|
+
require_relative 'freydis/secrets'
|
11
13
|
|
12
14
|
module Freydis
|
15
|
+
CONFIG = Config.new
|
16
|
+
CONFIG.load
|
17
|
+
|
13
18
|
class Main
|
14
19
|
def initialize(args)
|
15
|
-
@
|
16
|
-
@cli = args[:cli].options
|
17
|
-
@disk = @cli[:disk]
|
18
|
-
|
19
|
-
Freydis::Guard.disk(@cli[:disk])
|
20
|
+
@argv = args[:argv]
|
20
21
|
end
|
21
22
|
|
22
23
|
def start
|
23
|
-
|
24
|
-
encrypt_disk
|
25
|
-
backup
|
26
|
-
restoring
|
27
|
-
opening
|
28
|
-
closing
|
29
|
-
save if @cli[:save]
|
24
|
+
Options.new(@argv)
|
30
25
|
end
|
31
26
|
|
32
27
|
def bye
|
@@ -34,67 +29,5 @@ module Freydis
|
|
34
29
|
puts "Bye !"
|
35
30
|
exit
|
36
31
|
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
32
|
end
|
99
33
|
end
|
100
|
-
|
data/lib/mods/exec.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Exec
|
4
|
+
def x(command)
|
5
|
+
sudo = Process.uid != 0 ? 'sudo' : ''
|
6
|
+
cmd = "#{sudo} #{command}"
|
7
|
+
unless system(cmd)
|
8
|
+
warn "[-] Execute: #{cmd}"
|
9
|
+
exit 1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def mkdir(dir)
|
14
|
+
if Process.uid == 0
|
15
|
+
FileUtils.mkdir_p dir
|
16
|
+
else
|
17
|
+
x "mkdir -p #{dir}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def bsdtar(args)
|
22
|
+
x "bsdtar #{args}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def shred(*keys)
|
26
|
+
keys_join = keys * ' '
|
27
|
+
x "shred -u #{keys_join}"
|
28
|
+
end
|
29
|
+
end
|
data/lib/mods/msg.rb
ADDED
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freydis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szorfein
|
@@ -10,64 +10,71 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
13
|
+
MIIEhTCCAu2gAwIBAgIBATANBgkqhkiG9w0BAQsFADBEMREwDwYDVQQDDAhzem9y
|
14
|
+
ZmVpbjEaMBgGCgmSJomT8ixkARkWCnByb3Rvbm1haWwxEzARBgoJkiaJk/IsZAEZ
|
15
|
+
FgNjb20wHhcNMjIwOTA4MDYyNjE5WhcNMjMwOTA4MDYyNjE5WjBEMREwDwYDVQQD
|
16
|
+
DAhzem9yZmVpbjEaMBgGCgmSJomT8ixkARkWCnByb3Rvbm1haWwxEzARBgoJkiaJ
|
17
|
+
k/IsZAEZFgNjb20wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDEJNhl
|
18
|
+
Gd0JNHLXysR7GvbCKD+y1prQbmS333GpoFgPR2chEGv8Y7l0We2UFXCZ59CVOs1v
|
19
|
+
KBVQhhNvxWAHWhfe/8stb1JFBxZpnCi7S0BGpqeblaGBXVlhBOzbZ6d1NrOwMfDS
|
20
|
+
6EzdX4WAOH55HnAz29T5KREUdbONVLU7HJNIIFVZvf6ethOv84pnkWbdWjV0RB3A
|
21
|
+
ERYste5QHGx1YQOYGTuJMlu8113kqTbB8wpEw6X00aJwmXcJvnKXkhN5mxd06yss
|
22
|
+
EE96lOk16raTWCh7DeYR3/ilVet3DpLlCvpFNtMIuko1HFa3HTW+57003VxD8Ozk
|
23
|
+
VGQKn823D+ReujKh+jgxbl8Q+r652C9Wl1N+C5CSma4mDtNGKr0XmEOEQycpSx0z
|
24
|
+
Z9J6/27wS8s6SJ0rLxueFQ6gb2oPEQb8jKJuNEuXWLmO3Idrwlv9Z7ymhnksjyqM
|
25
|
+
fAw+NMGEOCITNphXmssazlLX+bnxcbpr7rbTHa1xBmmHoUVudAnxAG43PrMCAwEA
|
26
|
+
AaOBgTB/MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRzxda94CPF
|
27
|
+
Ll9UQ5l55l65RCZuEzAiBgNVHREEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNv
|
28
|
+
bTAiBgNVHRIEGzAZgRdzem9yZmVpbkBwcm90b25tYWlsLmNvbTANBgkqhkiG9w0B
|
29
|
+
AQsFAAOCAYEAPhavFyzIP60Zw7y40zJhzQpMK2IWtdw9HrRJq313Ea4UT1Kgv7F9
|
30
|
+
lCFtQzI5XMzooYiLMoPz7xBMXaUz+DDFOOcgGSinVrFbfPA4rOGEkBjnlwC39lBc
|
31
|
+
AiyXFzCV7Wqn4VhtqQQyvmoNYL4Q666K+nL8/nsXZWsXtRQ119LeAvrI2A+xmYAb
|
32
|
+
FPE5bD3Jx1JCoJdVN1DmE4YYdM8mVmb0XjCK9Tp1M01EDKDvAX7f3B+X6A5D7uBq
|
33
|
+
63X6Kx09VkntVOrifd3W4TwjDlyAMpB+50OIi3ErPnH2R4i09qnCiZmcVWATBVKw
|
34
|
+
e2QSloIAUZJwEFkrRqWPNVi8sr+BcMeuKpXaOwpbkP+xq/W2EKlUQKhPXMXS4jvC
|
35
|
+
MuTi+RjpSNKZxzBrOlK2eMIpiFrugF7nzKcM9EGnWRWUb899drCcD4VJhjPtgpn+
|
36
|
+
aEJeKq4/BlIwMlXPe+W5C8zp2i8hgG1/OYbwbGE1p2iRi1NIK7G/HyRqQjOqJxzE
|
37
|
+
LLknX69FN7/G
|
37
38
|
-----END CERTIFICATE-----
|
38
|
-
date:
|
39
|
+
date: 2022-11-09 00:00:00.000000000 Z
|
39
40
|
dependencies: []
|
40
|
-
description:
|
41
|
-
|
41
|
+
description: 'Freydis is a CLI tool to encrypt a disk device, backup and restore easyly.
|
42
|
+
Freydis use `cryptsetup` and `rsync` mainly.
|
43
|
+
|
44
|
+
'
|
42
45
|
email: szorfein@protonmail.com
|
43
46
|
executables:
|
44
47
|
- freydis
|
45
48
|
extensions: []
|
46
|
-
extra_rdoc_files:
|
47
|
-
- README.md
|
49
|
+
extra_rdoc_files: []
|
48
50
|
files:
|
51
|
+
- CHANGELOG.md
|
52
|
+
- LICENSE
|
49
53
|
- README.md
|
50
54
|
- bin/freydis
|
55
|
+
- freydis.gemspec
|
51
56
|
- lib/freydis.rb
|
52
|
-
- lib/freydis
|
57
|
+
- lib/freydis/config.rb
|
53
58
|
- lib/freydis/cryptsetup.rb
|
54
|
-
- lib/freydis/data.rb
|
55
59
|
- lib/freydis/disk.rb
|
56
60
|
- lib/freydis/disk_luks.rb
|
57
61
|
- lib/freydis/error.rb
|
58
62
|
- lib/freydis/guard.rb
|
59
|
-
- lib/freydis/init.rb
|
60
63
|
- lib/freydis/options.rb
|
61
64
|
- lib/freydis/rsync.rb
|
65
|
+
- lib/freydis/secrets.rb
|
66
|
+
- lib/freydis/secrets/archive.rb
|
67
|
+
- lib/freydis/secrets/gpg.rb
|
62
68
|
- lib/freydis/version.rb
|
69
|
+
- lib/mods/exec.rb
|
70
|
+
- lib/mods/msg.rb
|
63
71
|
homepage: https://github.com/szorfein/freydis
|
64
72
|
licenses:
|
65
73
|
- MIT
|
66
74
|
metadata:
|
67
75
|
bug_tracker_uri: https://github.com/szorfein/freydis/issues
|
68
|
-
changelog_uri: https://github.com/szorfein/freydis/blob/
|
76
|
+
changelog_uri: https://github.com/szorfein/freydis/blob/main/CHANGELOG.md
|
69
77
|
source_code_uri: https://github.com/szorfein/freydis
|
70
|
-
wiki_uri: https://github.com/szorfein/freydis/wiki
|
71
78
|
funding_uri: https://patreon.com/szorfein
|
72
79
|
post_install_message:
|
73
80
|
rdoc_options: []
|
@@ -84,9 +91,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
91
|
- !ruby/object:Gem::Version
|
85
92
|
version: '0'
|
86
93
|
requirements:
|
87
|
-
- cryptsetup
|
88
|
-
- rsync
|
89
|
-
rubygems_version: 3.
|
94
|
+
- cryptsetup
|
95
|
+
- rsync
|
96
|
+
rubygems_version: 3.3.23
|
90
97
|
signing_key:
|
91
98
|
specification_version: 4
|
92
99
|
summary: Backup and Restore data from encrypted device.
|
metadata.gz.sig
CHANGED
Binary file
|