freydis 0.0.3 → 0.1.0

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
  SHA256:
3
- metadata.gz: 1b765713da6ebbf003f0234452f930e884ff398ea0cfa7526a24e5949a2eca9c
4
- data.tar.gz: 0e0f5d68bf55b73083386590e0be88267f5c30863b6494700c61ca7befd4c2d1
3
+ metadata.gz: 8963ba3af539bf5e5893778cf4e19164cca071b4aa33f42c7bfed8b184016604
4
+ data.tar.gz: 235dba3157fda782be2927b08094970065511aaa36f5b0898499cc1fd421f3fb
5
5
  SHA512:
6
- metadata.gz: 5b31ed0d011a8ac7534f81692adcafd1114ac92ab2c56cfa84eb02d46987221d3fc20476e9d610e028fc40fa255d8b332c12a20ee62edb5b9ec02341a05ee278
7
- data.tar.gz: 0764c108b98a162b4f605536bbf2104f2f3292e035ece96cbb678b56b2def060e9aeff78a6d31bbe12206ff8ae44439946f7474c81a94263533fd0db9ed8ca13
6
+ metadata.gz: 5ce910c91f09a88ca6e3fb9a47e5b64f5f76b0a5ac5d78c44baa79b81d29a60c2fe7566f631962792b7192a435ce537258469e5d3f84f1471816d10f0bad8902
7
+ data.tar.gz: 8098c0c471bb5f6dbb9a71f5553244a496bfe7d29cd37ad848b95b4fd312c48ffe4c7c5c5f305d551db1a45feec5dec935a615dd1fc0a946126de9ddbbe48248
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md ADDED
@@ -0,0 +1,29 @@
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
+
18
+ ## 0.0.2, release 2021/05/18
19
+ * New options `--open` and `--close`.
20
+ * Encrypt/Decrypt with `cryptsetup`.
21
+ * Add Rsync for backup and restore.
22
+ * Can add/remove paths with the `--cli`.
23
+ * Can (u)mount the encrypted device at the default `/mnt/freydis`.
24
+ * Checking all ID (partuuid, uuid, id) from a given device.
25
+ * YAML config file in ~/.config/freydis/freydis.yaml.
26
+
27
+ ## 0.0.1, release 2021/05/04
28
+ * Initial push, code freeying !
29
+
data/LICENSE ADDED
@@ -0,0 +1,10 @@
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/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 with `rsync`, 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,12 +1,9 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "freydis"
4
-
5
- config_file = "#{ENV['HOME']}/.config/freydis/freydis.yaml"
3
+ require 'freydis'
6
4
 
7
5
  freydis = Freydis::Main.new(
8
- :cli => Freydis::Options.new(ARGV, config_file),
9
- :config => config_file
6
+ :argv => ARGV
10
7
  )
11
8
 
12
9
  freydis.start
data/freydis.gemspec ADDED
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require File.dirname(__FILE__) + "/lib/freydis/version"
4
+
5
+ # https://guides.rubygems.org/specification-reference/
6
+ Gem::Specification.new do |s|
7
+ s.name = 'freydis'
8
+ s.summary = 'Backup and Restore data from encrypted device.'
9
+ s.version = Freydis::VERSION
10
+ s.platform = Gem::Platform::RUBY
11
+
12
+ s.description = <<~DESC
13
+ Freydis is a CLI tool to encrypt a disk device, backup and restore easyly. Freydis use `cryptsetup` and `rsync` mainly.
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
+
21
+ s.metadata = {
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',
26
+ }
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'
44
+ end
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,76 +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[:disk_id] ||= " ",
9
- "/dev/disk/by-uuid/" + @data[:disk_uuid] ||= " ",
10
- "/dev/disk/by-partuuid/" + @data[:disk_partuuid] ||= " ",
11
- "/dev/" + @data[: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
- puts "Encrypting disk..."
19
- @dev_ids.each { |f|
20
- if File.exists? f
21
- exec "cryptsetup -v --type luks2 --verify-passphrase luksFormat #{f}"
22
- break if $?.success?
23
- end
24
- }
20
+ info "Encrypting disk #{@disk}..."
21
+ x "cryptsetup -v --type luks2 --verify-passphrase luksFormat #{@disk}"
25
22
  end
26
23
 
27
24
  def open
28
- puts "Openning disk #{@mapper_name}..."
29
- @dev_ids.each { |f|
30
- if File.exist? f
31
- exec "cryptsetup -v open #{f} #{@mapper_name}"
32
- break if $?.success?
33
- end
34
- }
25
+ info "Opening disk #{@mapper_name}..."
26
+ x "cryptsetup -v open #{@disk} #{@mapper_name}"
35
27
  end
36
28
 
37
29
  def close
38
30
  umount
39
- 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
40
36
  end
41
37
 
42
38
  def format
43
- exec "mkfs.ext4 /dev/mapper/#{@mapper_name}"
39
+ info "Formatting #{@mapper_name}..."
40
+ x "mkfs.ext4 /dev/mapper/#{@mapper_name}"
44
41
  end
45
42
 
46
43
  def mount
47
- create_mountpoint
48
- puts "Mounting disk at #{@mountpoint}"
49
- 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}"
50
47
  end
51
48
 
52
- private
49
+ protected
53
50
 
54
- def create_mountpoint
55
- if Process.uid === 0
56
- Dir.mkdir @mountpoint unless Dir.exist? @mountpoint
51
+ def umount
52
+ if mounted?
53
+ x "umount #{@mountpoint}"
54
+ success "Umounting disk #{@disk}..."
57
55
  else
58
- exec "mkdir -p #{@mountpoint}" unless Dir.exist? @mountpoint
56
+ info "Disk #{@disk} is no mounted."
59
57
  end
60
58
  end
61
59
 
62
- def umount
63
- dir_length = Dir.glob("#{@mountpoint}/*").length
64
- if dir_length >= 1 # should contain lost+found if mount
65
- exec "umount #{@mountpoint}"
66
- end
67
- end
60
+ private
68
61
 
69
- def exec(command)
70
- sudo = Process.uid != 0 ? 'sudo' : ''
71
- if !system("#{sudo} #{command}")
72
- 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
73
67
  end
68
+ false
74
69
  end
75
70
  end
76
71
  end
data/lib/freydis/disk.rb CHANGED
@@ -1,69 +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 = Freydis::Guard.disk(dev)
7
- @dev = "/dev/#{@disk}"
5
+ def initialize(disk_path)
6
+ raise ArgumentError, "#{disk_path} no valid" unless disk_path.match?(/^\/dev\//)
7
+
8
+ @disk = disk_path
8
9
  end
9
10
 
10
11
  def size
11
- `lsblk -dno SIZE #{@dev}`.chomp
12
+ `lsblk -dno SIZE #{@disk}`.chomp
12
13
  end
13
14
 
14
15
  def complete_info
15
- `lsblk -dno "NAME,LABEL,FSTYPE,SIZE" #{@dev}`.chomp
16
- end
17
-
18
- def populate_data(data)
19
- puts "Checking IDs on #{@disk}..."
20
- data.options[:disk_uuid] = search_uuid
21
- data.options[:disk_id] = search_id
22
- data.options[:disk_partuuid] = search_partuuid
23
- end
24
-
25
- def encrypt(data)
26
- search_id(data)
27
- puts "id -> #{data.options[:disk_id]}"
28
- data.save
29
-
30
- cryptsetup = Freydis::Cryptsetup.new(data)
31
- cryptsetup.close
32
-
33
- cryptsetup.encrypt
34
- cryptsetup.open
35
- cryptsetup.format
36
-
37
- populate_data(data)
38
- puts "uuid -> #{data.options[:disk_uuid]}"
39
- puts "partuuid -> #{data.options[:disk_partuuid]}"
40
- data.save
41
-
42
- cryptsetup.close
43
- end
44
-
45
- def search_partuuid
46
- Dir.glob("/dev/disk/by-partuuid/*").each { |f|
47
- if File.readlink(f).match(/#{@disk}/)
48
- return f.delete_prefix("/dev/disk/by-partuuid/")
49
- end
50
- }
51
- end
52
-
53
- def search_uuid
54
- Dir.glob("/dev/disk/by-uuid/*").each { |f|
55
- if File.readlink(f).match(/#{@disk}/)
56
- return f.delete_prefix("/dev/disk/by-uuid/")
57
- end
58
- }
16
+ `lsblk -dno "NAME,LABEL,FSTYPE,SIZE" #{@disk}`.chomp
59
17
  end
60
18
 
61
19
  def search_id
62
- Dir.glob("/dev/disk/by-id/*").each { |f|
63
- if File.readlink(f).match(/#{@disk}/)
64
- return f.delete_prefix("/dev/disk/by-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}."
26
+ end
27
+
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('../../')
65
33
  end
66
- }
34
+ end
35
+ raise ArgumentError, "Unable to find the disk sdX of #{@disk}."
67
36
  end
68
37
  end
69
38
  end
@@ -1,37 +1,33 @@
1
- # lib/disk_luks.rb
1
+ # frozen_string_literal: true
2
+
3
+ require 'mods/msg'
2
4
 
3
5
  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
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."
23
17
  end
24
18
 
25
19
  def open
26
- cryptsetup = Freydis::Cryptsetup.new(@data)
20
+ cryptsetup = Freydis::Cryptsetup.new
27
21
  cryptsetup.close
28
22
  cryptsetup.open
29
23
  cryptsetup.mount
24
+ success "Disk #{CONFIG.disk} opened."
30
25
  end
31
26
 
32
27
  def close
33
- cryptsetup = Freydis::Cryptsetup.new(@data)
28
+ cryptsetup = Freydis::Cryptsetup.new
34
29
  cryptsetup.close
30
+ success "Disk #{CONFIG.disk} closed."
35
31
  end
36
32
  end
37
33
  end
data/lib/freydis/error.rb CHANGED
@@ -1,10 +1,9 @@
1
- # lib/error.rb
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Freydis
4
- class InvalidDisk < StandardError
5
- end
6
- class InvalidLuksDev < StandardError
7
- end
8
- class InvalidPath < StandardError
9
- end
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
10
9
  end
data/lib/freydis/guard.rb CHANGED
@@ -1,31 +1,53 @@
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
1
+ # frozen_string_literal: true
2
+
3
+ module Freydis
4
+ module Guard
5
+ module_function
12
6
 
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
+ 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
19
24
  end
20
- rescue Freydis::InvalidLuksDev => e
21
- puts "#{e.class} => #{e}"
22
- exit 1
23
- end
24
25
 
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
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
51
+ end
30
52
  end
31
53
  end