getch 0.0.8 → 0.1.3

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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +44 -0
  5. data/README.md +57 -8
  6. data/bin/setup.sh +4 -2
  7. data/lib/getch.rb +43 -15
  8. data/lib/getch/command.rb +26 -5
  9. data/lib/getch/config.rb +58 -0
  10. data/lib/getch/filesystem.rb +6 -0
  11. data/lib/getch/filesystem/clean.rb +51 -0
  12. data/lib/getch/filesystem/device.rb +61 -0
  13. data/lib/getch/filesystem/ext4.rb +1 -0
  14. data/lib/getch/filesystem/ext4/config.rb +8 -9
  15. data/lib/getch/filesystem/ext4/device.rb +2 -7
  16. data/lib/getch/filesystem/ext4/encrypt/config.rb +69 -47
  17. data/lib/getch/filesystem/ext4/encrypt/deps.rb +21 -15
  18. data/lib/getch/filesystem/ext4/encrypt/device.rb +5 -9
  19. data/lib/getch/filesystem/ext4/encrypt/format.rb +10 -6
  20. data/lib/getch/filesystem/ext4/encrypt/mount.rb +6 -43
  21. data/lib/getch/filesystem/ext4/encrypt/partition.rb +57 -55
  22. data/lib/getch/filesystem/ext4/format.rb +3 -5
  23. data/lib/getch/filesystem/ext4/mount.rb +7 -46
  24. data/lib/getch/filesystem/ext4/partition.rb +16 -39
  25. data/lib/getch/filesystem/lvm.rb +1 -0
  26. data/lib/getch/filesystem/lvm/config.rb +12 -15
  27. data/lib/getch/filesystem/lvm/deps.rb +5 -20
  28. data/lib/getch/filesystem/lvm/device.rb +33 -9
  29. data/lib/getch/filesystem/lvm/encrypt.rb +15 -0
  30. data/lib/getch/filesystem/lvm/encrypt/config.rb +71 -0
  31. data/lib/getch/filesystem/lvm/encrypt/deps.rb +46 -0
  32. data/lib/getch/filesystem/lvm/encrypt/device.rb +46 -0
  33. data/lib/getch/filesystem/lvm/encrypt/format.rb +32 -0
  34. data/lib/getch/filesystem/lvm/encrypt/mount.rb +25 -0
  35. data/lib/getch/filesystem/lvm/encrypt/partition.rb +80 -0
  36. data/lib/getch/filesystem/lvm/format.rb +11 -7
  37. data/lib/getch/filesystem/lvm/mount.rb +7 -46
  38. data/lib/getch/filesystem/lvm/partition.rb +19 -31
  39. data/lib/getch/filesystem/mount.rb +56 -0
  40. data/lib/getch/filesystem/partition.rb +77 -0
  41. data/lib/getch/filesystem/zfs.rb +14 -0
  42. data/lib/getch/filesystem/zfs/config.rb +57 -0
  43. data/lib/getch/filesystem/zfs/deps.rb +95 -0
  44. data/lib/getch/filesystem/zfs/device.rb +58 -0
  45. data/lib/getch/filesystem/zfs/encrypt.rb +15 -0
  46. data/lib/getch/filesystem/zfs/encrypt/config.rb +67 -0
  47. data/lib/getch/filesystem/zfs/encrypt/deps.rb +97 -0
  48. data/lib/getch/filesystem/zfs/encrypt/device.rb +60 -0
  49. data/lib/getch/filesystem/zfs/encrypt/format.rb +105 -0
  50. data/lib/getch/filesystem/zfs/encrypt/mount.rb +51 -0
  51. data/lib/getch/filesystem/zfs/encrypt/partition.rb +65 -0
  52. data/lib/getch/filesystem/zfs/format.rb +114 -0
  53. data/lib/getch/filesystem/zfs/mount.rb +48 -0
  54. data/lib/getch/filesystem/zfs/partition.rb +64 -0
  55. data/lib/getch/gentoo.rb +8 -4
  56. data/lib/getch/gentoo/boot.rb +32 -17
  57. data/lib/getch/gentoo/chroot.rb +12 -26
  58. data/lib/getch/gentoo/config.rb +37 -12
  59. data/lib/getch/gentoo/sources.rb +26 -29
  60. data/lib/getch/gentoo/use.rb +43 -0
  61. data/lib/getch/gentoo/use_flag.rb +64 -0
  62. data/lib/getch/helpers.rb +35 -13
  63. data/lib/getch/options.rb +23 -8
  64. data/lib/getch/version.rb +1 -1
  65. metadata +46 -18
  66. metadata.gz.sig +0 -0
@@ -0,0 +1,105 @@
1
+ module Getch
2
+ module FileSystem
3
+ module Zfs
4
+ module Encrypt
5
+ class Format < Getch::FileSystem::Zfs::Encrypt::Device
6
+ def initialize
7
+ super
8
+ @log = Getch::Log.new()
9
+ @state = Getch::States.new()
10
+ if ! @id
11
+ @log.info "Research pool id for #{@dev_root}..."
12
+ sleep 2 until Helpers::pool_id(@dev_root)
13
+ @id = Helpers::pool_id(@dev_root)
14
+ @boot_pool_name = "bpool-#{@id}"
15
+ @pool_name = "rpool-#{@id}"
16
+ end
17
+ format
18
+ end
19
+
20
+ private
21
+
22
+ def format
23
+ return if STATES[:format]
24
+ raise "Error, no id found for #{@dev_root}." if ! @id
25
+ system("mkfs.fat -F32 #{@dev_esp}") if @dev_esp
26
+ system("mkswap -f #{@dev_swap}")
27
+ zfs
28
+ datasets
29
+ @state.format
30
+ end
31
+
32
+ def zfs
33
+ bloc=`blockdev --getbsz #{@dev_root}`.chomp
34
+ ashift = case bloc
35
+ when 8096
36
+ 13
37
+ when 4096
38
+ 12
39
+ else # 512
40
+ 9
41
+ end
42
+
43
+ Helpers::mkdir(MOUNTPOINT)
44
+
45
+ @log.debug("ashift found for #{bloc} - #{ashift}")
46
+ if @dev_boot
47
+ # https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html
48
+ @log.info("Creating boot pool on #{@pool_name}")
49
+ exec("zpool create -f \\
50
+ -o ashift=#{ashift} -o autotrim=on -d \\
51
+ -o feature@async_destroy=enabled \\
52
+ -o feature@bookmarks=enabled \\
53
+ -o feature@embedded_data=enabled \\
54
+ -o feature@empty_bpobj=enabled \\
55
+ -o feature@enabled_txg=enabled \\
56
+ -o feature@extensible_dataset=enabled \\
57
+ -o feature@filesystem_limits=enabled \\
58
+ -o feature@hole_birth=enabled \\
59
+ -o feature@large_blocks=enabled \\
60
+ -o feature@lz4_compress=enabled \\
61
+ -o feature@spacemap_histogram=enabled \\
62
+ -O acltype=posixacl -O canmount=off -O compression=lz4 \\
63
+ -O devices=off -O normalization=formD -O atime=off -O xattr=sa \\
64
+ -O mountpoint=/boot -R #{MOUNTPOINT} \\
65
+ #{@boot_pool_name} #{@dev_boot}
66
+ ")
67
+ end
68
+
69
+ exec("zpool create -f -o ashift=#{ashift} -o autotrim=on \\
70
+ -O encryption=aes-256-gcm \\
71
+ -O keylocation=prompt -O keyformat=passphrase \\
72
+ -O acltype=posixacl -O canmount=off -O compression=lz4 \\
73
+ -O dnodesize=auto -O normalization=formD -O atime=off \\
74
+ -O xattr=sa -O mountpoint=/ -R #{MOUNTPOINT} \\
75
+ #{@pool_name} #{@dev_root}
76
+ ")
77
+ end
78
+
79
+ def datasets
80
+ exec("zfs create -o canmount=off -o mountpoint=none #{@pool_name}/ROOT")
81
+ exec("zfs create -o canmount=off -o mountpoint=none #{@boot_pool_name}/BOOT") if @dev_boot
82
+
83
+ exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/gentoo")
84
+ exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/gentoo") if @dev_boot
85
+
86
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/usr")
87
+ exec("zfs create #{@pool_name}/ROOT/gentoo/usr/src")
88
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/var")
89
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/log")
90
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/db")
91
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/tmp")
92
+
93
+ exec("zfs create -o canmount=off -o mountpoint=/ #{@pool_name}/USERDATA")
94
+ exec("zfs create -o canmount=on -o mountpoint=/root #{@pool_name}/USERDATA/root")
95
+ exec("zfs create -o canmount=on -o mountpoint=/home/#{@user} #{@pool_name}/USERDATA/#{@user}") if @user
96
+ end
97
+
98
+ def exec(cmd)
99
+ Helpers::sys(cmd)
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,51 @@
1
+ require 'fileutils'
2
+
3
+ module Getch
4
+ module FileSystem
5
+ module Zfs
6
+ module Encrypt
7
+ class Mount < Getch::FileSystem::Zfs::Encrypt::Device
8
+ def initialize
9
+ super
10
+ @root_dir = MOUNTPOINT
11
+ @mount = Getch::FileSystem::Mount.new
12
+ @state = Getch::States.new
13
+ @log = Getch::Log.new
14
+ end
15
+
16
+ def run
17
+ return if STATES[:mount]
18
+ exec("zpool export -a")
19
+ exec("rm -rf #{MOUNTPOINT}/*")
20
+ exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
21
+ exec("zpool import -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
22
+ exec("zfs load-key -a")
23
+ @mount.swap(@dev_swap)
24
+ mount_root
25
+ mount_boot
26
+ @mount.esp(@dev_esp)
27
+ exec("zfs mount -a")
28
+ @state.mount
29
+ end
30
+
31
+ private
32
+
33
+ def mount_root
34
+ Helpers::mkdir(@root_dir)
35
+ exec("zfs mount #{@pool_name}/ROOT/gentoo")
36
+ end
37
+
38
+ def mount_boot
39
+ return if ! @dev_boot
40
+ exec("zfs mount #{@boot_pool_name}/BOOT/gentoo")
41
+ end
42
+
43
+ def exec(cmd)
44
+ @log.info("==> #{cmd}")
45
+ Helpers::sys(cmd)
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,65 @@
1
+ module Getch
2
+ module FileSystem
3
+ module Zfs
4
+ module Encrypt
5
+ class Partition < Getch::FileSystem::Zfs::Encrypt::Device
6
+ def initialize
7
+ super
8
+ @state = Getch::States.new()
9
+ @clean = Getch::FileSystem::Clean
10
+ @partition = Getch::FileSystem::Partition.new
11
+ @log = Getch::Log.new()
12
+ run
13
+ end
14
+
15
+ def run
16
+ return if STATES[:partition ]
17
+ @clean.old_zpool
18
+ @clean.struct(@disk, @cache_disk, @home_disk)
19
+ @clean.hdd(@disk, @cache_disk, @home_disk)
20
+ partition
21
+ cache
22
+ @state.partition
23
+ end
24
+
25
+ private
26
+
27
+ def partition
28
+ if Helpers::efi?
29
+ @partition.efi(@dev_esp)
30
+ @partition.swap(@dev_swap)
31
+ @partition.root(@dev_root, "BF00") if @root_part != 1
32
+ else
33
+ @partition.gpt(@dev_gpt)
34
+ @partition.boot(@dev_boot)
35
+ @partition.swap(@dev_swap)
36
+ @partition.root(@dev_root, "BF00") if @root_part != 1
37
+ end
38
+ end
39
+
40
+ def cache
41
+ if @dev_log
42
+ exec("sgdisk -n2:0:+4G -t2:BF07 #{cache_disk}")
43
+ end
44
+ if @dev_cache
45
+ exec("sgdisk -n3:0:0 -t3:BF08 #{cache_disk}")
46
+ end
47
+ end
48
+
49
+ # Partition_efi
50
+ # /efi - EFI system partition - 260MB
51
+ # / - Root
52
+
53
+ # Partition_bios
54
+ # None - Bios Boot Partition - 1MiB
55
+ # /boot - Boot - 8300
56
+ # / - Root
57
+
58
+ def exec(cmd)
59
+ Helpers::sys(cmd)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,114 @@
1
+ module Getch
2
+ module FileSystem
3
+ module Zfs
4
+ class Format < Getch::FileSystem::Zfs::Device
5
+ def initialize
6
+ super
7
+ @log = Getch::Log.new
8
+ @state = Getch::States.new
9
+ if ! @id
10
+ @log.info "Research pool id for #{@dev_root}..."
11
+ sleep 2 until Helpers::pool_id(@dev_root)
12
+ @id = Helpers::pool_id(@dev_root)
13
+ @boot_pool_name = "bpool-#{@id}"
14
+ @pool_name = "rpool-#{@id}"
15
+ end
16
+ format
17
+ end
18
+
19
+ private
20
+
21
+ def format
22
+ return if STATES[:format]
23
+ raise "Error, no id found for #{@dev_root}." if ! @id
24
+ @log.info "Create #{@id} for #{@pool_name}"
25
+ system("mkfs.fat -F32 #{@dev_esp}") if @dev_esp
26
+ zfs
27
+ cache
28
+ datasets
29
+ @state.format
30
+ end
31
+
32
+ def zfs
33
+ bloc=`blockdev --getbsz #{@dev_root}`.chomp
34
+ ashift = case bloc
35
+ when 8096
36
+ 13
37
+ when 4096
38
+ 12
39
+ else # 512
40
+ 9
41
+ end
42
+
43
+ Helpers::mkdir(MOUNTPOINT)
44
+ @log.debug("ashift found for #{bloc} - #{ashift}")
45
+
46
+ if @dev_boot
47
+ # https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html
48
+ @log.info("Creating boot pool on #{@pool_name}")
49
+ exec("zpool create -f \\
50
+ -o ashift=#{ashift} -o autotrim=on -d \\
51
+ -o feature@async_destroy=enabled \\
52
+ -o feature@bookmarks=enabled \\
53
+ -o feature@embedded_data=enabled \\
54
+ -o feature@empty_bpobj=enabled \\
55
+ -o feature@enabled_txg=enabled \\
56
+ -o feature@extensible_dataset=enabled \\
57
+ -o feature@filesystem_limits=enabled \\
58
+ -o feature@hole_birth=enabled \\
59
+ -o feature@large_blocks=enabled \\
60
+ -o feature@lz4_compress=enabled \\
61
+ -o feature@spacemap_histogram=enabled \\
62
+ -O acltype=posixacl -O canmount=off -O compression=lz4 \\
63
+ -O devices=off -O normalization=formD -O atime=off -O xattr=sa \\
64
+ -O mountpoint=/boot -R #{MOUNTPOINT} \\
65
+ #{@boot_pool_name} #{@dev_boot}
66
+ ")
67
+ end
68
+
69
+ exec("zpool create -f -o ashift=#{ashift} -o autotrim=on \\
70
+ -O acltype=posixacl -O canmount=off -O compression=lz4 \\
71
+ -O dnodesize=auto -O normalization=formD -O atime=off \\
72
+ -O xattr=sa -O mountpoint=/ -R #{MOUNTPOINT} \\
73
+ #{@pool_name} #{@dev_root}
74
+ ")
75
+ end
76
+
77
+ def cache
78
+ system("mkswap -f #{@dev_swap}")
79
+ if @dev_log
80
+ exec("zpool add #{@pool_name} log #{@dev_log}")
81
+ end
82
+ if @dev_cache
83
+ exec("zpool add #{@pool_name} cache #{@dev_cache}")
84
+ end
85
+ end
86
+
87
+ def datasets
88
+ exec("zfs create -o canmount=off -o mountpoint=none #{@pool_name}/ROOT")
89
+ exec("zfs create -o canmount=off -o mountpoint=none #{@boot_pool_name}/BOOT") if @dev_boot
90
+
91
+ exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/gentoo")
92
+ exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/gentoo") if @dev_boot
93
+
94
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/usr")
95
+ exec("zfs create #{@pool_name}/ROOT/gentoo/usr/src")
96
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/var")
97
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/log")
98
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/db")
99
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/tmp")
100
+
101
+ exec("zfs create -o canmount=off -o mountpoint=/ #{@pool_name}/USERDATA")
102
+ exec("zfs create -o canmount=on -o mountpoint=/root #{@pool_name}/USERDATA/root")
103
+ if @user
104
+ exec("zfs create -o canmount=on -o mountpoint=/home/#{@user} #{@pool_name}/USERDATA/#{@user}")
105
+ end
106
+ end
107
+
108
+ def exec(cmd)
109
+ Getch::Command.new(cmd).run!
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,48 @@
1
+ require 'fileutils'
2
+
3
+ module Getch
4
+ module FileSystem
5
+ module Zfs
6
+ class Mount < Getch::FileSystem::Zfs::Device
7
+ def initialize
8
+ super
9
+ @root_dir = MOUNTPOINT
10
+ @mount = Getch::FileSystem::Mount.new
11
+ @state = Getch::States.new
12
+ @log = Getch::Log.new
13
+ end
14
+
15
+ def run
16
+ return if STATES[:mount]
17
+ exec("zpool export -a")
18
+ exec("rm -rf #{MOUNTPOINT}/*")
19
+ exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
20
+ exec("zpool import -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
21
+ @mount.swap(@dev_swap)
22
+ mount_root
23
+ mount_boot
24
+ @mount.esp(@dev_esp)
25
+ exec("zfs mount -a")
26
+ @state.mount
27
+ end
28
+
29
+ private
30
+
31
+ def mount_root
32
+ Helpers::mkdir(@root_dir)
33
+ exec("zfs mount #{@pool_name}/ROOT/gentoo")
34
+ end
35
+
36
+ def mount_boot
37
+ return if ! @dev_boot
38
+ exec("zfs mount #{@boot_pool_name}/BOOT/gentoo")
39
+ end
40
+
41
+ def exec(cmd)
42
+ @log.info("==> #{cmd}")
43
+ Helpers::sys(cmd)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,64 @@
1
+ module Getch
2
+ module FileSystem
3
+ module Zfs
4
+ class Partition < Getch::FileSystem::Zfs::Device
5
+ def initialize
6
+ super
7
+ @clean = Getch::FileSystem::Clean
8
+ @partition = Getch::FileSystem::Partition.new
9
+ @state = Getch::States.new()
10
+ @log = Getch::Log.new()
11
+ run_partition
12
+ end
13
+
14
+ def run_partition
15
+ return if STATES[:partition ]
16
+ @clean.old_zpool
17
+ @clean.struct(@disk, @cache_disk, @home_disk)
18
+ @clean.hdd(@disk, @cache_disk, @home_disk)
19
+ partition
20
+ cache
21
+ @state.partition
22
+ end
23
+
24
+ private
25
+
26
+ def partition
27
+ if @efi
28
+ @partition.efi(@dev_esp)
29
+ @partition.swap(@dev_swap)
30
+ @partition.root(@dev_root, "BF00") if @root_part != 1
31
+ else
32
+ @partition.gpt(@dev_gpt)
33
+ # Boot pool for GRUB2
34
+ @partition.boot(@dev_boot)
35
+ @partition.swap(@dev_swap)
36
+ @partition.root(@dev_root, "BF00") if @root_part != 1
37
+ end
38
+ end
39
+
40
+ def cache
41
+ if @dev_log
42
+ exec("sgdisk -n2:0:+4G -t2:BF07 #{cache_disk}")
43
+ end
44
+ if @dev_cache
45
+ exec("sgdisk -n3:0:0 -t3:BF08 #{cache_disk}")
46
+ end
47
+ end
48
+
49
+ # Partition_efi
50
+ # /efi - EFI system partition - 260MB
51
+ # / - Root
52
+
53
+ # Partition_bios
54
+ # None - Bios Boot Partition - 1MiB
55
+ # /boot - Boot - 8300
56
+ # / - Root
57
+
58
+ def exec(cmd)
59
+ Getch::Command.new(cmd).run!
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end