freydis 0.0.2 → 0.1.0

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
  SHA256:
3
- metadata.gz: '0381ec85064f282916907626e1a1783ee8a86ce5df1769deb91f4e1b0e5eb4dc'
4
- data.tar.gz: 8c100e7428ec1fc7261a271a677d77fafe84b337541b507c8a9c71d964524e10
3
+ metadata.gz: 8963ba3af539bf5e5893778cf4e19164cca071b4aa33f42c7bfed8b184016604
4
+ data.tar.gz: 235dba3157fda782be2927b08094970065511aaa36f5b0898499cc1fd421f3fb
5
5
  SHA512:
6
- metadata.gz: 135daf7438ab4439396d45a99dc2300c916edcb2d2fcdef97dbaf907c19add34503d027b3b4d51836b92aaca979b5953d674609e411c1b1249bb0d589938b4e3
7
- data.tar.gz: 8a0e398ca35e07f161bb0c02a0c33bbe68c09f16f492633a36707304720bb8690c41e087dbe34bfc61be410fe23e73af663c349d464cab5c95a27bdc6a0b563e
6
+ metadata.gz: 5ce910c91f09a88ca6e3fb9a47e5b64f5f76b0a5ac5d78c44baa79b81d29a60c2fe7566f631962792b7192a435ce537258469e5d3f84f1471816d10f0bad8902
7
+ data.tar.gz: 8098c0c471bb5f6dbb9a71f5553244a496bfe7d29cd37ad848b95b4fd312c48ffe4c7c5c5f305d551db1a45feec5dec935a615dd1fc0a946126de9ddbbe48248
checksums.yaml.gz.sig ADDED
Binary file
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## 0.1.0, release 2022/09/20
2
+ * New dependencies for `Freydis::Secrets`: `bsdtar`, `shred` and `gnupg`.
3
+ * Option store a new field `gpg_recipient`.
4
+ * Can store and resttore GPG keys and matching directory of the [pass](https://www.passwordstore.org/) utility.
5
+ * Use only `/dev/disk/by-id` in the config file, the value does not change from one system to another.
6
+ * Rewrite code.
7
+
8
+ ## 0.0.3, release 2021/07/04
9
+ * Add an option to `rsync` -R | --relative.
10
+ * Simplify config file, use only disk: [sdX].
11
+ * New option `--path-add`, `--path-del`, `--path-list`, `--save`.
12
+ * Adding basic test with minitest.
13
+ * Customize errors message.
14
+ * Control args `-d | --disk DISK`
15
+ * Control device with `cryptsetup isLuks` before proceed
16
+ * Enhance logic code for `bin/freydis`
17
+
1
18
  ## 0.0.2, release 2021/05/18
2
19
  * New options `--open` and `--close`.
3
20
  * Encrypt/Decrypt with `cryptsetup`.
data/README.md CHANGED
@@ -1,59 +1,66 @@
1
1
  # Freydis
2
- Backup and restore data on encrypted device.
3
2
 
4
- ## Requirements
5
- Freydis use `rsync` and `cryptsetup`.
3
+ <div align="center">
6
4
 
7
- ## Gem build
5
+ [![Gem Version](https://badge.fury.io/rb/freydis.svg)](https://badge.fury.io/rb/freydis)
6
+ ![Gem](https://img.shields.io/gem/dtv/freydis?color=red)
7
+ ![GitHub last commit (branch)](https://img.shields.io/github/last-commit/szorfein/freydis/develop?color=blue)
8
+ ![GitHub](https://img.shields.io/github/license/szorfein/freydis?color=cyan)
8
9
 
9
- gem build freydis.gemspec
10
+ </div>
11
+
12
+ Backup and restore data on encrypted device.
13
+
14
+ ## Requirements
15
+ Freydis use `rsync` and `cryptsetup` and optionnal `bsdtar`, `shred`, `gnupg`.
10
16
 
11
17
  ## Install freydis locally
12
18
 
13
- gem install freydis-0.0.1.gem -P HighSecurity
19
+ $ gem install --user-install freydis
14
20
 
15
21
  ## Usage
16
22
 
17
- #### 0x01 - Config file
18
- First, you need a config file. You can use `freydis --init` or make one with your favorite editor.
19
- The config file should be placed at `~/.config/freydis/freydis.yaml`.
23
+ $ freydis -h
24
+
25
+ ## Examples
20
26
 
21
- An example of final config:
27
+ #### 0x01 - Initialisation
28
+ First, you need a config file and a disk encrypted.
29
+
30
+ $ freydis --disk sdc --encrypt --save
31
+
32
+ The config file will be created at `~/.config/freydis/freydis.yaml`.
22
33
 
23
34
  ```yaml
24
35
  ---
25
- :disk: sdc
26
- :disk_id: usb-SABRENT_SABRENT_DB9876543214E-0:0
27
- :disk_uuid: 10f531df-51dc-x19e-9bd1-bbd6659f0c3f
28
- :disk_partuuid: ''
29
- :paths:
30
- - "/home/daggoth/labs"
31
- - "/home/daggoth/musics"
32
- - "/home/daggoth/.password-store"
33
- - "/home/daggoth/documents"
36
+ :disk: /dev/disk/by-id/usb-SABRENT_SABRENT_DB9876543214E-0:0
37
+ :paths: []
34
38
  ```
35
39
 
36
- As you see:
37
- + disk: sdc -> Use only `sd[a-z]` without partition.
38
- + disk_id -> (Optionnal), freydis will find it if void.
39
- + disk_uuid -> (Optionnal)
40
- + disk_partuuid -> (Optionnal)
41
- + paths -> Contain a list of absolute paths on each line.
40
+ + disk: save the full path `by-id` for `sdc` here.
41
+ + paths -> An Array which contain a list of absolute paths for backup.
42
+
43
+ #### 0x02 - First backup
44
+ Freydis will use `rsync`, all paths must be separated by a comma:
42
45
 
43
- #### 0x02 - Encrypt the disk
44
- Freydis will use `cryptsetup` with `luks2` and format the disk with `ext4`:
46
+ $ freydis --backup --paths-add "/home,/etc" --save
45
47
 
46
- $ freydis --encrypt
48
+ #### 0x03 - Restore
49
+ With `--disk` and `--paths-add` saved in the config file, you only need to write:
47
50
 
48
- #### 0x03 - Other options
49
- Make an incremental backup, will copy all `paths` include in the config file:
51
+ $ freydis --restore
50
52
 
51
- $ freydis --backup
53
+ Freydis will restore all files in `/`.
52
54
 
53
- Restore files in your system `/`:
55
+ #### 0x04 - Secrets
56
+ Freydis can store secrets ([GPG Key](https://www.gnupg.org/) and [pass](https://www.passwordstore.org/) directory for now) and restore them if need:
54
57
 
55
- $ freydis --restore
58
+ $ freydis --gpg-recipient szorfein@protonmail.com --secrets-backup
59
+ $ freydis --gpg-recipient szorfein@protonmail.com --secrets-restore
60
+
61
+ The option `--secrets-restore` use `gpg --import` if the key is no found on your system.
56
62
 
63
+ ### Tips
57
64
  If you lost the config file, `freydis` has made a copy on your device when you're done your first `--backup`:
58
65
 
59
66
  $ freydis --open --disk sdc
data/bin/freydis CHANGED
@@ -1,53 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
- require "freydis"
3
2
 
4
- puts "Freydis v." + Freydis::VERSION
3
+ require 'freydis'
5
4
 
6
- cli = Freydis::Options.new(ARGV)
7
- data = Freydis::Data.new
8
- data.load
5
+ freydis = Freydis::Main.new(
6
+ :argv => ARGV
7
+ )
9
8
 
10
- if cli.disk
11
- data.options[:disk] = cli.disk
12
- end
13
-
14
- if cli.init
15
- Freydis::Init.run(data.options)
16
- data.save
17
- exit 0
18
- end
19
-
20
- if !cli.backup && !cli.restore && !cli.encrypt &&
21
- !cli.open && !cli.close
22
- puts "Ok... glad to see you too."
23
- exit 1
24
- end
25
-
26
- if cli.encrypt
27
- puts "Encrypting disk #{data.options[:disk]}..."
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
9
+ freydis.start
10
+ freydis.bye
data/freydis.gemspec CHANGED
@@ -1,33 +1,45 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require File.dirname(__FILE__) + "/lib/freydis/version"
2
4
 
3
5
  # https://guides.rubygems.org/specification-reference/
4
6
  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."
7
+ s.name = 'freydis'
8
+ s.summary = 'Backup and Restore data from encrypted device.'
9
9
  s.version = Freydis::VERSION
10
- s.description = <<-EOF
10
+ s.platform = Gem::Platform::RUBY
11
+
12
+ s.description = <<~DESC
11
13
  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"
14
+ DESC
15
+
16
+ s.email = 'szorfein@protonmail.com'
17
+ s.homepage = 'https://github.com/szorfein/freydis'
18
+ s.license = 'MIT'
19
+ s.author = 'szorfein'
20
+
16
21
  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
+ 'bug_tracker_uri' => 'https://github.com/szorfein/freydis/issues',
23
+ 'changelog_uri' => 'https://github.com/szorfein/freydis/blob/main/CHANGELOG.md',
24
+ 'source_code_uri' => 'https://github.com/szorfein/freydis',
25
+ 'funding_uri' => 'https://patreon.com/szorfein',
22
26
  }
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/
27
+
28
+ s.files = Dir.glob('{lib,bin}/**/*', File::FNM_DOTMATCH).reject { |f| File.directory?(f) }
29
+
30
+ # Include the CHANGELOG.md, LICENSE.md, README.md manually
31
+ s.files += %w[CHANGELOG.md LICENSE README.md]
32
+ s.files += %w[freydis.gemspec]
33
+
34
+ s.bindir = 'bin'
35
+ s.executables << 'freydis'
36
+ s.require_paths = ['lib']
37
+
38
+ s.cert_chain = ['certs/szorfein.pem']
39
+ s.signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
40
+
41
+ s.required_ruby_version = '>= 2.6'
42
+ s.requirements << 'cryptsetup'
43
+ s.requirements << 'rsync'
32
44
  end
33
45
 
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require 'fileutils'
5
+ require 'pathname'
6
+ require 'mods/msg'
7
+
8
+ module Freydis
9
+ class Config
10
+ include Msg
11
+
12
+ attr_accessor :gpg_recipient, :disk, :paths
13
+
14
+ def initialize
15
+ @cpath = "#{ENV['HOME']}/.config/freydis/freydis.yaml"
16
+ @disk = nil
17
+ @gpg_recipient = nil
18
+ @paths = []
19
+ end
20
+
21
+ def load
22
+ if File.exist? @cpath
23
+ info 'Loading config...'
24
+ data_load = YAML.load_file @cpath
25
+ @disk = data_load[:disk]
26
+ @gpg_recipient = data_load[:gpg_recipient]
27
+ @paths = data_load[:paths]
28
+ else
29
+ info "Creating config file #{@cpath}..."
30
+ save
31
+ end
32
+ end
33
+
34
+ def save
35
+ FileUtils.mkdir_p Pathname.new(@cpath).parent.to_s
36
+ File.write @cpath, YAML::dump({
37
+ disk: @disk,
38
+ gpg_recipient: @gpg_recipient,
39
+ paths: @paths.uniq
40
+ })
41
+ success "Saving options to #{@cpath}..."
42
+ end
43
+ end
44
+ end
@@ -1,74 +1,71 @@
1
- # lib/cryptsetup.rb
1
+ # frozen_string_literal: true
2
+
3
+ require 'mods/exec'
4
+ require 'mods/msg'
2
5
 
3
6
  module Freydis
4
7
  class Cryptsetup
5
- def initialize(data)
6
- @data = data
7
- @dev_ids = [
8
- "/dev/disk/by-id/" + @data.options[:disk_id] ||= " ",
9
- "/dev/disk/by-uuid/" + @data.options[:disk_uuid] ||= " ",
10
- "/dev/disk/by-partuuid/" + @data.options[:disk_partuuid] ||= " ",
11
- "/dev/" + @data.options[:disk]
12
- ]
13
- @mapper_name = "freydis-enc"
14
- @mountpoint ="/mnt/freydis"
8
+ include Exec
9
+ include Msg
10
+
11
+ def initialize
12
+ Guard.disk_id(CONFIG.disk)
13
+
14
+ @disk = Disk.new(CONFIG.disk).search_sdx
15
+ @mapper_name = 'freydis-encrypt'
16
+ @mountpoint = '/mnt/freydis'
15
17
  end
16
18
 
17
19
  def encrypt
18
- @dev_ids.each { |f|
19
- if File.exists? f
20
- exec "cryptsetup -v --type luks2 --verify-passphrase luksFormat #{f}"
21
- break if $?.success?
22
- end
23
- }
20
+ info "Encrypting disk #{@disk}..."
21
+ x "cryptsetup -v --type luks2 --verify-passphrase luksFormat #{@disk}"
24
22
  end
25
23
 
26
24
  def open
27
- @dev_ids.each { |f|
28
- if File.exists? f
29
- exec "cryptsetup -v open #{f} #{@mapper_name}"
30
- break if $?.success?
31
- end
32
- }
25
+ info "Opening disk #{@mapper_name}..."
26
+ x "cryptsetup -v open #{@disk} #{@mapper_name}"
33
27
  end
34
28
 
35
29
  def close
36
30
  umount
37
- exec "cryptsetup -v close #{@mapper_name}" if File.exists? "/dev/mapper/#{@mapper_name}"
31
+ if File.exist? "/dev/mapper/#{@mapper_name}"
32
+ x "cryptsetup -v close #{@mapper_name}"
33
+ else
34
+ info "#{@mapper_name} is not open."
35
+ end
38
36
  end
39
37
 
40
38
  def format
41
- exec "mkfs.ext4 /dev/mapper/#{@mapper_name}"
39
+ info "Formatting #{@mapper_name}..."
40
+ x "mkfs.ext4 /dev/mapper/#{@mapper_name}"
42
41
  end
43
42
 
44
43
  def mount
45
- create_mountpoint
46
- puts "Mounting disk at #{@mountpoint}"
47
- exec "mount -t ext4 /dev/mapper/#{@mapper_name} #{@mountpoint}"
44
+ mkdir @mountpoint
45
+ info "Mounting disk at #{@mountpoint}"
46
+ x "mount -t ext4 /dev/mapper/#{@mapper_name} #{@mountpoint}"
48
47
  end
49
48
 
50
- private
49
+ protected
51
50
 
52
- def create_mountpoint
53
- if Process.uid === 0
54
- Dir.mkdir @mountpoint unless Dir.exist? @mountpoint
51
+ def umount
52
+ if mounted?
53
+ x "umount #{@mountpoint}"
54
+ success "Umounting disk #{@disk}..."
55
55
  else
56
- exec "mkdir -p #{@mountpoint}" unless Dir.exist? @mountpoint
56
+ info "Disk #{@disk} is no mounted."
57
57
  end
58
58
  end
59
59
 
60
- def umount
61
- dir_length = Dir.glob("#{@mountpoint}/*").length
62
- if dir_length >= 1 # should contain lost+found if mount
63
- exec "umount #{@mountpoint}"
64
- end
65
- end
60
+ private
66
61
 
67
- def exec(command)
68
- sudo = Process.uid != 0 ? 'sudo' : ''
69
- if !system("#{sudo} #{command}")
70
- raise StandardError, "[-] #{command}"
62
+ def mounted?
63
+ File.open('/proc/mounts') do |f|
64
+ f.each do |line|
65
+ return true if line.match?(/#{@mountpoint}/)
66
+ end
71
67
  end
68
+ false
72
69
  end
73
70
  end
74
71
  end
data/lib/freydis/disk.rb CHANGED
@@ -1,81 +1,38 @@
1
- # lib/disk.rb
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Freydis
4
4
  class Disk
5
- def initialize(dev)
6
- @disk = dev.match(/sd[a-z]{1}/)
7
- @dev = "/dev/#{@disk}"
8
- @mountpoint = "/mnt/freydis"
5
+ def initialize(disk_path)
6
+ raise ArgumentError, "#{disk_path} no valid" unless disk_path.match?(/^\/dev\//)
7
+
8
+ @disk = disk_path
9
9
  end
10
10
 
11
11
  def size
12
- `lsblk -dno SIZE #{@dev}`.chomp
12
+ `lsblk -dno SIZE #{@disk}`.chomp
13
13
  end
14
14
 
15
15
  def complete_info
16
- `lsblk -dno "NAME,LABEL,FSTYPE,SIZE" #{@dev}`.chomp
17
- end
18
-
19
- def populate_data(data)
20
- puts "Checking IDs on #{@disk}..."
21
- search_uuid(data)
22
- search_id(data)
23
- search_partuuid(data)
16
+ `lsblk -dno "NAME,LABEL,FSTYPE,SIZE" #{@disk}`.chomp
24
17
  end
25
18
 
26
- def encrypt(data)
27
- populate_data(data)
28
- puts "id -> #{data.options[:disk_id]}"
29
- puts "uuid -> #{data.options[:disk_uuid]}"
30
- puts "partuuid -> #{data.options[:disk_partuuid]}"
31
- data.save
32
-
33
- cryptsetup = Freydis::Cryptsetup.new(data)
34
- cryptsetup.close
35
-
36
- cryptsetup.encrypt
37
- cryptsetup.open
38
- cryptsetup.format
39
-
40
- cryptsetup.close
41
- end
42
-
43
- def open(data)
44
- cryptsetup = Freydis::Cryptsetup.new(data)
45
- cryptsetup.close
46
- cryptsetup.open
47
- cryptsetup.mount
48
- end
49
-
50
- def close(data)
51
- cryptsetup = Freydis::Cryptsetup.new(data)
52
- cryptsetup.close
53
- end
54
-
55
- private
56
-
57
- def search_uuid(data)
58
- Dir.glob("/dev/disk/by-uuid/*").each { |f|
59
- if File.readlink(f).match(/#{@disk}/)
60
- data.options[:disk_uuid] = f.delete_prefix("/dev/disk/by-uuid/")
61
- end
62
- }
63
- end
64
-
65
- def search_id(data)
66
- Dir.glob("/dev/disk/by-id/*").each { |f|
67
- if File.readlink(f).match(/#{@disk}/)
68
- data.options[:disk_id] = f.delete_prefix("/dev/disk/by-id/")
69
- end
70
- }
19
+ def search_id
20
+ dev_split = @disk.delete_prefix('/dev/')
21
+ Dir.glob("/dev/disk/by-id/*").each do |f|
22
+ return f if File.readlink(f).match?(/#{dev_split}/)
23
+ #return f.delete_prefix("/dev/disk/by-id/")
24
+ end
25
+ raise ArgumentError, "Unable to find the disk id of #{@disk}."
71
26
  end
72
27
 
73
- def search_partuuid(data)
74
- Dir.glob("/dev/disk/by-partuuid/*").each { |f|
75
- if File.readlink(f).match(/#{@disk}/)
76
- data.options[:disk_partuuid] = f.delete_prefix("/dev/disk/by-partuuid/")
28
+ # return /dev/sdX from a disk_id if value match with @disk
29
+ def search_sdx
30
+ Dir.glob('/dev/disk/by-id/*').each do |f|
31
+ if f.match?(/#{@disk}$/) # need a space
32
+ return '/dev/' + File.readlink(f).delete_prefix('../../')
77
33
  end
78
- }
34
+ end
35
+ raise ArgumentError, "Unable to find the disk sdX of #{@disk}."
79
36
  end
80
37
  end
81
38
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mods/msg'
4
+
5
+ module Freydis
6
+ module DiskLuks
7
+ extend Msg
8
+ module_function
9
+
10
+ def encrypt
11
+ cryptsetup = Freydis::Cryptsetup.new
12
+ cryptsetup.encrypt
13
+ cryptsetup.open
14
+ cryptsetup.format
15
+ cryptsetup.close
16
+ success "Disk #{CONFIG.disk} fully encrypted."
17
+ end
18
+
19
+ def open
20
+ cryptsetup = Freydis::Cryptsetup.new
21
+ cryptsetup.close
22
+ cryptsetup.open
23
+ cryptsetup.mount
24
+ success "Disk #{CONFIG.disk} opened."
25
+ end
26
+
27
+ def close
28
+ cryptsetup = Freydis::Cryptsetup.new
29
+ cryptsetup.close
30
+ success "Disk #{CONFIG.disk} closed."
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Freydis
4
+ class InvalidDisk < StandardError; end
5
+ class DiskId < StandardError; end
6
+ class InvalidLuksDev < StandardError; end
7
+ class InvalidPath < StandardError; end
8
+ class GPG < StandardError; end
9
+ end
data/lib/freydis/guard.rb CHANGED
@@ -1,9 +1,53 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Freydis
2
4
  module Guard
3
- def self.disk?(name)
4
- raise ArgumentError, "Bad name #{name}, should match with sdX" if !name.match(/^sd[a-z]{1}$/)
5
- raise ArgumentError, "No disk /dev/#{name}" if !File.exist? "/dev/#{name}"
6
- true
5
+ module_function
6
+
7
+ def disk(name)
8
+ full_path = "/dev/#{name}"
9
+ raise Freydis::InvalidDisk, 'No disk, use with -d DISK.' unless name
10
+ raise Freydis::InvalidDisk, 'No disk, use with -d DISK.' if name == ''
11
+ raise Freydis::InvalidDisk, 'Bad name #{name}, should match with sd[a-z]' unless name.match(/^sd[a-z]{1}$/)
12
+ raise Freydis::InvalidDisk, "No disk #{full_path} available." unless File.exist? full_path
13
+ Freydis::Disk.new(full_path).search_id # return disk(name) by-id
14
+ rescue Freydis::InvalidDisk => e
15
+ puts "#{e.class} => #{e}"
16
+ exit 1
17
+ end
18
+
19
+ def disk_id(name)
20
+ raise DiskId, "No disk #{name} found." unless File.exist? name
21
+ rescue Freydis::DiskId => e
22
+ puts "#{e.class} => #{e}"
23
+ exit 1
24
+ end
25
+
26
+ def isLuks(disk)
27
+ raise Freydis::InvalidLuksDev, "No disk." unless disk
28
+ raise Freydis::InvalidLuksDev, "#{disk} does not exist." unless File.exist? disk
29
+ sudo = Process.uid != 0 ? 'sudo' : ''
30
+ if !system(sudo, 'cryptsetup', 'isLuks', disk)
31
+ raise Freydis::InvalidLuksDev, "#{disk} is not valid Luks device."
32
+ end
33
+ rescue Freydis::InvalidLuksDev => e
34
+ puts "#{e.class} => #{e}"
35
+ exit 1
36
+ end
37
+
38
+ def path?(p)
39
+ raise Freydis::InvalidPath, "#{p} does not exist." unless File.exist? p
40
+ rescue Freydis::InvalidPath => e
41
+ puts "#{e.class} => #{e}"
42
+ exit 1
43
+ end
44
+
45
+ def gpg(recipient)
46
+ raise Freydis::GPG, "No recipient, use --gpg-recipient NAME" unless recipient
47
+ recipient
48
+ rescue Freydis::GPG => e
49
+ puts "#{e.class} => #{e}"
50
+ exit 1
7
51
  end
8
52
  end
9
53
  end