freydis 0.0.2 → 0.1.0
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 +17 -0
- data/README.md +40 -33
- data/bin/freydis +6 -49
- data/freydis.gemspec +35 -23
- data/lib/freydis/config.rb +44 -0
- data/lib/freydis/cryptsetup.rb +40 -43
- data/lib/freydis/disk.rb +21 -64
- data/lib/freydis/disk_luks.rb +33 -0
- data/lib/freydis/error.rb +9 -0
- data/lib/freydis/guard.rb +48 -4
- data/lib/freydis/options.rb +57 -29
- data/lib/freydis/rsync.rb +34 -40
- data/lib/freydis/secrets/archive.rb +63 -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 +24 -3
- data/lib/mods/exec.rb +27 -0
- data/lib/mods/msg.rb +16 -0
- data.tar.gz.sig +0 -0
- metadata +47 -15
- metadata.gz.sig +0 -0
- data/Rakefile +0 -21
- data/lib/freydis/data.rb +0 -39
- data/lib/freydis/init.rb +0 -78
data/lib/freydis/options.rb
CHANGED
@@ -1,60 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'optparse'
|
2
4
|
|
3
5
|
module Freydis
|
4
6
|
class Options
|
5
|
-
|
6
|
-
|
7
|
-
:disk
|
8
|
-
|
9
|
-
def initialize(args)
|
10
|
-
@init = false
|
11
|
-
@backup = false
|
12
|
-
@restore = false
|
13
|
-
@encrypt = false
|
14
|
-
@open = false
|
15
|
-
@close = false
|
16
|
-
@disk = nil
|
17
|
-
parse(args)
|
7
|
+
def initialize(argv)
|
8
|
+
parse(argv)
|
18
9
|
end
|
19
10
|
|
20
11
|
private
|
21
12
|
|
22
13
|
def parse(argv)
|
23
14
|
OptionParser.new do |opts|
|
24
|
-
opts.banner =
|
15
|
+
opts.banner = 'Usage: freydis.rb [options]'
|
16
|
+
opts.version = VERSION
|
17
|
+
|
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
|
+
|
32
|
+
end
|
33
|
+
|
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
|
37
|
+
end
|
38
|
+
|
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
|
45
|
+
end
|
46
|
+
|
47
|
+
# Engines options
|
48
|
+
|
49
|
+
opts.on('-e', '--encrypt', 'Encrypt and format (ext4) your device.') do
|
50
|
+
Freydis::DiskLuks.encrypt
|
51
|
+
end
|
25
52
|
|
26
|
-
opts.on(
|
27
|
-
|
53
|
+
opts.on('-o', '--open', 'Open and mount encrypted disk at /mnt/freydis.') do
|
54
|
+
Freydis::DiskLuks.open
|
28
55
|
end
|
29
56
|
|
30
|
-
opts.on(
|
31
|
-
|
57
|
+
opts.on('-c', '--close', 'Umount and close encrypted disk.') do
|
58
|
+
Freydis::DiskLuks.close
|
32
59
|
end
|
33
60
|
|
34
|
-
opts.on(
|
35
|
-
|
61
|
+
opts.on('-b', '--backup', 'Perform a backup.') do
|
62
|
+
Freydis::Rsync.new.backup
|
36
63
|
end
|
37
64
|
|
38
|
-
opts.on(
|
39
|
-
|
65
|
+
opts.on('-r', '--restore', 'Restore saved datas on your system.') do
|
66
|
+
Freydis::Rsync.new.restore
|
40
67
|
end
|
41
68
|
|
42
|
-
opts.on(
|
43
|
-
|
69
|
+
opts.on('--secrets-backup', 'Backup only secrets, including GPG keys.') do |s|
|
70
|
+
Freydis::Secrets.backup
|
44
71
|
end
|
45
72
|
|
46
|
-
opts.on(
|
47
|
-
|
73
|
+
opts.on('--secrets-restore', 'Restore secrets.') do |s|
|
74
|
+
Freydis::Secrets.restore
|
48
75
|
end
|
49
76
|
|
50
|
-
opts.on(
|
51
|
-
|
77
|
+
opts.on('-s', '--save', 'Save current arguments in the config file.') do
|
78
|
+
Freydis::CONFIG.save
|
52
79
|
end
|
53
80
|
|
54
81
|
begin
|
55
82
|
opts.parse!(argv)
|
56
83
|
rescue OptionParser::ParseError => e
|
57
|
-
|
84
|
+
warn e.message, "\n", opts
|
85
|
+
exit 1
|
58
86
|
end
|
59
87
|
end
|
60
88
|
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.options[:paths].include?("#{ENV['HOME']}/.config/freydis")
|
42
|
-
@data.options[: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,63 @@
|
|
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 = Dir.glob("#{@workdir}/*").sort[0]
|
34
|
+
|
35
|
+
mkdir @restore_dir
|
36
|
+
info "Restoring #{last_archive}..."
|
37
|
+
bsdtar "-xvf #{last_archive} -C #{@restore_dir}"
|
38
|
+
@gpg.import_keys @restore_dir
|
39
|
+
@gpg.clean_keys @restore_dir
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
def populate_include
|
45
|
+
@gpg.export_keys unless File.exist? @gpg.seckey_path
|
46
|
+
search_paths(%W[#{ENV['HOME']}/.password-store
|
47
|
+
#{@gpg.seckey_path}
|
48
|
+
#{@gpg.pubkey_path}])
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def search_paths(paths)
|
54
|
+
paths.each do |p|
|
55
|
+
if Dir.exist?(p) || File.exist?(p)
|
56
|
+
info "Found #{p}, add to archive..."
|
57
|
+
@include_paths << p
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
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,12 +1,33 @@
|
|
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'
|
7
|
+
require_relative 'freydis/disk_luks'
|
6
8
|
require_relative 'freydis/cryptsetup'
|
7
9
|
require_relative 'freydis/rsync'
|
10
|
+
require_relative 'freydis/error'
|
8
11
|
require_relative 'freydis/guard'
|
12
|
+
require_relative 'freydis/secrets'
|
9
13
|
|
10
14
|
module Freydis
|
11
|
-
|
15
|
+
CONFIG = Config.new
|
16
|
+
CONFIG.load
|
17
|
+
|
18
|
+
class Main
|
19
|
+
def initialize(args)
|
20
|
+
@argv = args[:argv]
|
21
|
+
end
|
12
22
|
|
23
|
+
def start
|
24
|
+
Options.new(@argv)
|
25
|
+
end
|
26
|
+
|
27
|
+
def bye
|
28
|
+
puts
|
29
|
+
puts "Bye !"
|
30
|
+
exit
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/mods/exec.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Exec
|
4
|
+
def x(command)
|
5
|
+
sudo = Process.uid != 0 ? 'sudo' : ''
|
6
|
+
unless system("#{sudo} #{command}")
|
7
|
+
Msg.error "Execute: #{command}"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def mkdir(dir)
|
12
|
+
if Process.uid == 0
|
13
|
+
FileUtils.mkdir_p dir
|
14
|
+
else
|
15
|
+
x "mkdir -p #{dir}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def bsdtar(args)
|
20
|
+
x "bsdtar #{args}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def shred(*keys)
|
24
|
+
keys_join = keys * ' '
|
25
|
+
x "shred -u #{keys_join}"
|
26
|
+
end
|
27
|
+
end
|
data/lib/mods/msg.rb
ADDED
data.tar.gz.sig
ADDED
Binary file
|
metadata
CHANGED
@@ -1,48 +1,80 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: freydis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
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
|
+
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
|
38
|
+
-----END CERTIFICATE-----
|
39
|
+
date: 2022-09-20 00:00:00.000000000 Z
|
13
40
|
dependencies: []
|
14
|
-
description:
|
15
|
-
|
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
|
+
'
|
16
45
|
email: szorfein@protonmail.com
|
17
46
|
executables:
|
18
47
|
- freydis
|
19
48
|
extensions: []
|
20
|
-
extra_rdoc_files:
|
21
|
-
- README.md
|
49
|
+
extra_rdoc_files: []
|
22
50
|
files:
|
23
51
|
- CHANGELOG.md
|
24
52
|
- LICENSE
|
25
53
|
- README.md
|
26
|
-
- Rakefile
|
27
54
|
- bin/freydis
|
28
55
|
- freydis.gemspec
|
29
56
|
- lib/freydis.rb
|
57
|
+
- lib/freydis/config.rb
|
30
58
|
- lib/freydis/cryptsetup.rb
|
31
|
-
- lib/freydis/data.rb
|
32
59
|
- lib/freydis/disk.rb
|
60
|
+
- lib/freydis/disk_luks.rb
|
61
|
+
- lib/freydis/error.rb
|
33
62
|
- lib/freydis/guard.rb
|
34
|
-
- lib/freydis/init.rb
|
35
63
|
- lib/freydis/options.rb
|
36
64
|
- lib/freydis/rsync.rb
|
65
|
+
- lib/freydis/secrets.rb
|
66
|
+
- lib/freydis/secrets/archive.rb
|
67
|
+
- lib/freydis/secrets/gpg.rb
|
37
68
|
- lib/freydis/version.rb
|
69
|
+
- lib/mods/exec.rb
|
70
|
+
- lib/mods/msg.rb
|
38
71
|
homepage: https://github.com/szorfein/freydis
|
39
72
|
licenses:
|
40
73
|
- MIT
|
41
74
|
metadata:
|
42
75
|
bug_tracker_uri: https://github.com/szorfein/freydis/issues
|
43
|
-
changelog_uri: https://github.com/szorfein/freydis/blob/
|
76
|
+
changelog_uri: https://github.com/szorfein/freydis/blob/main/CHANGELOG.md
|
44
77
|
source_code_uri: https://github.com/szorfein/freydis
|
45
|
-
wiki_uri: https://github.com/szorfein/freydis/wiki
|
46
78
|
funding_uri: https://patreon.com/szorfein
|
47
79
|
post_install_message:
|
48
80
|
rdoc_options: []
|
@@ -59,9 +91,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
91
|
- !ruby/object:Gem::Version
|
60
92
|
version: '0'
|
61
93
|
requirements:
|
62
|
-
- cryptsetup
|
63
|
-
- rsync
|
64
|
-
rubygems_version: 3.
|
94
|
+
- cryptsetup
|
95
|
+
- rsync
|
96
|
+
rubygems_version: 3.3.19
|
65
97
|
signing_key:
|
66
98
|
specification_version: 4
|
67
99
|
summary: Backup and Restore data from encrypted device.
|
metadata.gz.sig
ADDED
Binary file
|
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/lib/freydis/data.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
# lib/data.rb
|
2
|
-
|
3
|
-
require 'yaml'
|
4
|
-
|
5
|
-
module Freydis
|
6
|
-
class Data
|
7
|
-
attr_accessor :options
|
8
|
-
|
9
|
-
def initialize
|
10
|
-
@config_file = "#{ENV['HOME']}/.config/freydis/freydis.yaml"
|
11
|
-
@options = {
|
12
|
-
:disk => "",
|
13
|
-
:disk_id => "",
|
14
|
-
:disk_uuid => "",
|
15
|
-
:disk_partuuid => "",
|
16
|
-
:paths => []
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
def load
|
21
|
-
if File.exist? @config_file
|
22
|
-
options_config = YAML.load_file @config_file
|
23
|
-
@options.merge!(options_config)
|
24
|
-
else
|
25
|
-
save
|
26
|
-
STDERR.puts "Initialized config at #{@config_file}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def save
|
31
|
-
conf_dir = "#{ENV['HOME']}/.config/freydis"
|
32
|
-
Dir.mkdir conf_dir if !Dir.exists? conf_dir
|
33
|
-
|
34
|
-
File.open(@config_file, 'w') { |f|
|
35
|
-
YAML::dump(@options, f)
|
36
|
-
}
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|