getch 0.1.9 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +35 -29
  4. data/bin/getch +8 -6
  5. data/lib/clean.rb +149 -0
  6. data/lib/cryptsetup.rb +132 -0
  7. data/lib/devs.rb +199 -0
  8. data/lib/dracut/encrypt.rb +36 -0
  9. data/lib/dracut/hybrid.rb +15 -0
  10. data/lib/dracut/lvm.rb +14 -0
  11. data/lib/dracut/minimal.rb +11 -0
  12. data/lib/dracut/root.rb +45 -0
  13. data/lib/dracut/zfs.rb +35 -0
  14. data/lib/dracut.rb +11 -0
  15. data/lib/fstab/encrypt.rb +44 -0
  16. data/lib/fstab/hybrid.rb +34 -0
  17. data/lib/fstab/lvm.rb +25 -0
  18. data/lib/fstab/minimal.rb +6 -0
  19. data/lib/fstab/root.rb +93 -0
  20. data/lib/fstab/zfs.rb +23 -0
  21. data/lib/fstab.rb +11 -0
  22. data/lib/getch/assembly.rb +150 -0
  23. data/lib/getch/command.rb +88 -128
  24. data/lib/getch/config/account.rb +39 -0
  25. data/lib/getch/config/dhcp.rb +104 -0
  26. data/lib/getch/config/grub.rb +42 -0
  27. data/lib/getch/config/iwd.rb +60 -0
  28. data/lib/getch/config/keymap.rb +78 -0
  29. data/lib/getch/config/locale.rb +96 -0
  30. data/lib/getch/config/portage.rb +90 -0
  31. data/lib/getch/config/pre_network.rb +37 -0
  32. data/lib/getch/config/timezone.rb +52 -0
  33. data/lib/getch/config/void.rb +0 -36
  34. data/lib/getch/config.rb +16 -37
  35. data/lib/getch/device.rb +67 -0
  36. data/lib/getch/filesystem/ext4/encrypt/config.rb +9 -71
  37. data/lib/getch/filesystem/ext4/encrypt/deps.rb +15 -25
  38. data/lib/getch/filesystem/ext4/encrypt/device.rb +11 -5
  39. data/lib/getch/filesystem/ext4/encrypt/format.rb +6 -15
  40. data/lib/getch/filesystem/ext4/encrypt/mount.rb +7 -11
  41. data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -76
  42. data/lib/getch/filesystem/ext4/encrypt/void.rb +0 -38
  43. data/lib/getch/filesystem/ext4/encrypt.rb +2 -1
  44. data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
  45. data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
  46. data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
  47. data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
  48. data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
  49. data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
  50. data/lib/getch/filesystem/{lvm/encrypt → ext4/hybrid}/void.rb +0 -39
  51. data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
  52. data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
  53. data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
  54. data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
  55. data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
  56. data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
  57. data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
  58. data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +6 -4
  59. data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
  60. data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +3 -1
  61. data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
  62. data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
  63. data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
  64. data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
  65. data/lib/getch/filesystem/ext4/minimal.rb +19 -0
  66. data/lib/getch/filesystem/ext4.rb +7 -7
  67. data/lib/getch/filesystem/zfs/encrypt/config.rb +10 -39
  68. data/lib/getch/filesystem/zfs/encrypt/deps.rb +4 -55
  69. data/lib/getch/filesystem/zfs/encrypt/device.rb +7 -51
  70. data/lib/getch/filesystem/zfs/encrypt/format.rb +6 -90
  71. data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -35
  72. data/lib/getch/filesystem/zfs/encrypt/partition.rb +6 -54
  73. data/lib/getch/filesystem/zfs/encrypt.rb +2 -1
  74. data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
  75. data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
  76. data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
  77. data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
  78. data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
  79. data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
  80. data/lib/getch/filesystem/zfs/minimal.rb +19 -0
  81. data/lib/getch/filesystem/zfs.rb +1 -7
  82. data/lib/getch/filesystem.rb +0 -6
  83. data/lib/getch/gentoo/bootloader.rb +23 -44
  84. data/lib/getch/gentoo/finalize.rb +25 -0
  85. data/lib/getch/gentoo/post_config.rb +75 -0
  86. data/lib/getch/gentoo/pre_config.rb +37 -0
  87. data/lib/getch/gentoo/services.rb +18 -0
  88. data/lib/getch/gentoo/sources.rb +39 -33
  89. data/lib/getch/gentoo/tarball.rb +91 -0
  90. data/lib/getch/gentoo/terraform.rb +34 -0
  91. data/lib/getch/gentoo/update.rb +54 -0
  92. data/lib/getch/gentoo/use.rb +9 -6
  93. data/lib/getch/gentoo/use_flag.rb +17 -20
  94. data/lib/getch/gentoo.rb +9 -75
  95. data/lib/getch/guard.rb +2 -2
  96. data/lib/getch/helpers.rb +63 -115
  97. data/lib/getch/log.rb +87 -25
  98. data/lib/getch/options.rb +41 -11
  99. data/lib/getch/states.rb +28 -8
  100. data/lib/getch/tree.rb +56 -0
  101. data/lib/getch/version.rb +1 -1
  102. data/lib/getch/void/bootloader.rb +18 -0
  103. data/lib/getch/void/finalize.rb +31 -0
  104. data/lib/getch/void/post_config.rb +19 -0
  105. data/lib/getch/void/pre_config.rb +18 -0
  106. data/lib/getch/void/services.rb +18 -0
  107. data/lib/getch/void/{stage.rb → tarball.rb} +34 -14
  108. data/lib/getch/void/terraform.rb +28 -0
  109. data/lib/getch/void/update.rb +33 -0
  110. data/lib/getch/void.rb +9 -59
  111. data/lib/getch.rb +58 -90
  112. data/lib/luks.rb +239 -0
  113. data/lib/lvm2.rb +112 -0
  114. data/lib/mkfs/zfs.rb +167 -0
  115. data/lib/mkfs.rb +140 -0
  116. data/lib/mountfs.rb +154 -0
  117. data/lib/nito.rb +131 -0
  118. data/lib/sgdisk.rb +160 -0
  119. data.tar.gz.sig +0 -0
  120. metadata +83 -47
  121. metadata.gz.sig +0 -0
  122. data/lib/getch/config/gentoo.rb +0 -58
  123. data/lib/getch/filesystem/clean.rb +0 -58
  124. data/lib/getch/filesystem/device.rb +0 -63
  125. data/lib/getch/filesystem/ext4/config.rb +0 -62
  126. data/lib/getch/filesystem/ext4/deps.rb +0 -24
  127. data/lib/getch/filesystem/ext4/format.rb +0 -31
  128. data/lib/getch/filesystem/ext4/mount.rb +0 -26
  129. data/lib/getch/filesystem/ext4/partition.rb +0 -55
  130. data/lib/getch/filesystem/ext4/void.rb +0 -44
  131. data/lib/getch/filesystem/lvm/config.rb +0 -44
  132. data/lib/getch/filesystem/lvm/deps.rb +0 -44
  133. data/lib/getch/filesystem/lvm/device.rb +0 -45
  134. data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -74
  135. data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -49
  136. data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -48
  137. data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -35
  138. data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -27
  139. data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -84
  140. data/lib/getch/filesystem/lvm/encrypt.rb +0 -18
  141. data/lib/getch/filesystem/lvm/format.rb +0 -32
  142. data/lib/getch/filesystem/lvm/mount.rb +0 -26
  143. data/lib/getch/filesystem/lvm/partition.rb +0 -72
  144. data/lib/getch/filesystem/lvm/void.rb +0 -46
  145. data/lib/getch/filesystem/mount.rb +0 -63
  146. data/lib/getch/filesystem/partition.rb +0 -85
  147. data/lib/getch/filesystem/zfs/config.rb +0 -43
  148. data/lib/getch/filesystem/zfs/deps.rb +0 -67
  149. data/lib/getch/filesystem/zfs/device.rb +0 -66
  150. data/lib/getch/filesystem/zfs/encrypt/void.rb +0 -97
  151. data/lib/getch/filesystem/zfs/format.rb +0 -117
  152. data/lib/getch/filesystem/zfs/mount.rb +0 -47
  153. data/lib/getch/filesystem/zfs/partition.rb +0 -69
  154. data/lib/getch/filesystem/zfs/void.rb +0 -81
  155. data/lib/getch/gentoo/boot.rb +0 -64
  156. data/lib/getch/gentoo/chroot.rb +0 -75
  157. data/lib/getch/gentoo/config.rb +0 -167
  158. data/lib/getch/gentoo/stage.rb +0 -73
  159. data/lib/getch/void/boot.rb +0 -84
  160. data/lib/getch/void/chroot.rb +0 -56
  161. data/lib/getch/void/config.rb +0 -90
@@ -1,72 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- module Lvm
6
- class Partition < Getch::FileSystem::Lvm::Device
7
- def initialize
8
- super
9
- @state = Getch::States.new
10
- @partition = Getch::FileSystem::Partition.new
11
- @clean = Getch::FileSystem::Clean
12
- run_partition
13
- end
14
-
15
- def run_partition
16
- return if STATES[:partition ]
17
-
18
- @clean.old_vg(@dev_root, @vg)
19
- @clean.hdd(@disk)
20
- @clean.external_disk(@disk, @boot_disk, @cache_disk, @home_disk)
21
- partition
22
- lvm
23
- @state.partition
24
- end
25
-
26
- private
27
-
28
- def partition
29
- if Helpers.efi?
30
- @partition.efi(@dev_esp)
31
- @partition.root(@dev_root, '8e00')
32
- else
33
- @partition.gpt(@dev_gpt)
34
- @partition.boot(@dev_boot)
35
- @partition.root(@dev_root, '8e00')
36
- end
37
- end
38
-
39
- def lvm
40
- mem=`awk '/MemTotal/ {print $2}' /proc/meminfo`.chomp + 'K'
41
- exec("pvcreate -f #{@dev_root}")
42
- exec("vgcreate -f #{@vg} #{@dev_root}")
43
- # Wipe old signature: https://github.com/chef-cookbooks/lvm/issues/45
44
- exec("lvcreate -y -Wy -Zy -L #{mem} -n swap #{@vg}")
45
-
46
- if @user
47
- exec("lvcreate -y -Wy -Zy -L 18G -n root #{@vg}")
48
- exec("lvcreate -y -Wy -Zy -l 100%FREE -n home #{@vg}")
49
- else
50
- exec("lvcreate -y -Wy -Zy -l 100%FREE -n root #{@vg}")
51
- end
52
-
53
- exec('vgchange --available y')
54
- end
55
-
56
- # Follow https://wiki.archlinux.org/index.php/Partitioning
57
- # Partition_efi
58
- # /efi - EFI system partition - 260MB
59
- # / - Root
60
-
61
- # Partition_bios
62
- # None - Bios Boot Partition - 1MiB
63
- # /boot - Boot - 8300
64
- # / - Root
65
-
66
- def exec(cmd)
67
- Getch::Command.new(cmd).run!
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- module Lvm
6
- class Void < Device
7
- include Helpers::Void
8
-
9
- attr_reader :boot_disk
10
-
11
- def fstab
12
- conf = "#{MOUNTPOINT}/etc/fstab"
13
- File.write(conf, "\n", mode: 'w', chmod: 0644)
14
- line_fstab(@dev_esp, '/efi vfat noauto,rw,relatime 0 0') if @dev_esp
15
- line_fstab(@dev_boot, '/boot ext4 noauto,rw,relatime 0 0') if @dev_boot
16
- add_line(conf, "#{@lv_swap} swap swap rw,noatime,discard 0 0") if @lv_swap
17
- add_line(conf, "#{@lv_home} /home/#{@user} ext4 rw,noatime,discard 0 2") if @lv_home
18
- add_line(conf, "#{@lv_root} / ext4 rw,relatime 0 1")
19
- add_line(conf, 'tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0')
20
- end
21
-
22
- def config_dracut
23
- conf = "#{MOUNTPOINT}/etc/dracut.conf.d/lvm.conf"
24
- # dracut: value+= should be surrounding by white space
25
- content = [
26
- "hostonly=\"yes\"",
27
- "omit_dracutmodules+=\" btrfs \"",
28
- ""
29
- ]
30
- File.write(conf, content.join("\n"), mode: 'w', chmod: 0644)
31
- end
32
-
33
- def kernel_cmdline_dracut
34
- conf = "#{MOUNTPOINT}/etc/dracut.conf.d/cmdline.conf"
35
- c="kernel_cmdline=\"rd.lvm.vg=#{@vg} rootflags=rw,relatime\""
36
- File.write(conf, "#{c}\n", mode: 'w', chmod: 0644)
37
- end
38
-
39
- def finish
40
- puts '+ Enter in your system: chroot /mnt /bin/bash'
41
- puts '+ Reboot with: shutdown -r now'
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'fileutils'
4
-
5
- module Getch
6
- module FileSystem
7
- class Mount
8
- def initialize
9
- @root_dir = MOUNTPOINT
10
- @boot_dir = "#{@root_dir}/boot"
11
- @boot_efi_dir = "#{@root_dir}/efi"
12
- @home_dir = "#{@root_dir}/home"
13
- @state = Getch::States.new
14
- @log = Getch::Log.new
15
- end
16
-
17
- def swap(dev)
18
- return unless dev
19
-
20
- if Helpers.grep?('/proc/swaps', /^\/dev/)
21
- exec("swapoff #{dev}")
22
- end
23
-
24
- exec("swapon #{dev}")
25
- end
26
-
27
- def root(dev)
28
- return unless dev
29
-
30
- Helpers.mkdir(@root_dir)
31
- exec("mount #{dev} #{@root_dir}")
32
- end
33
-
34
- def esp(dev)
35
- return unless dev
36
-
37
- Helpers.mkdir(@boot_efi_dir)
38
- exec("mount #{dev} #{@boot_efi_dir}")
39
- end
40
-
41
- def boot(dev)
42
- return unless dev
43
-
44
- Helpers.mkdir(@boot_dir)
45
- exec("mount #{dev} #{@boot_dir}")
46
- end
47
-
48
- def home(dev)
49
- return unless dev
50
-
51
- Helpers.mkdir(@home_dir)
52
- exec("mount #{dev} #{@home_dir}")
53
- end
54
-
55
- private
56
-
57
- def exec(cmd)
58
- @log.info("==> #{cmd}")
59
- Helpers.sys(cmd)
60
- end
61
- end
62
- end
63
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- class Partition
6
- def initialize
7
- @log = Getch::Log.new
8
- end
9
-
10
- def gpt(dev)
11
- return unless dev
12
-
13
- disk = disk_name(dev)
14
- part = dev.match(/[0-9]/)
15
- exec("sgdisk -n#{part}:1MiB:+1MiB -t#{part}:EF02 #{disk}")
16
- end
17
-
18
- def boot(dev)
19
- return unless dev
20
-
21
- disk = disk_name(dev)
22
- part = dev.match(/[0-9]/)
23
- if Getch::OPTIONS[:fs] == 'zfs'
24
- exec("sgdisk -n#{part}:0:+2G -t#{part}:BE00 #{disk}")
25
- else
26
- exec("sgdisk -n#{part}:0:+128MiB -t#{part}:8300 #{disk}")
27
- end
28
- end
29
-
30
- def efi(dev)
31
- return unless dev
32
-
33
- disk = disk_name(dev)
34
- part = dev.match(/[0-9]/)
35
- exec("sgdisk -n#{part}:1M:+260M -t#{part}:EF00 #{disk}")
36
- end
37
-
38
- def swap(dev)
39
- return unless dev
40
-
41
- disk = disk_name(dev)
42
- part = dev.match(/[0-9]/)
43
- if Getch::OPTIONS[:cache_disk]
44
- exec("sgdisk -n#{part}:0:0 -t#{part}:8200 #{disk}")
45
- else
46
- mem=`awk '/MemTotal/ {print $2}' /proc/meminfo`.chomp + 'K'
47
- exec("sgdisk -n#{part}:0:+#{mem} -t#{part}:8200 #{disk}")
48
- end
49
- end
50
-
51
- def root(dev, code)
52
- return unless dev
53
-
54
- disk = disk_name(dev)
55
- part = dev.match(/[0-9]/)
56
- exec("sgdisk -n#{part}:0:0 -t#{part}:#{code} #{disk}")
57
- end
58
-
59
- def home(dev, code)
60
- return unless dev
61
-
62
- disk = disk_name(dev)
63
- part = dev.match(/[0-9]/)
64
- if Getch::OPTIONS[:home_disk]
65
- exec("sgdisk -n#{part}:0:0 -t#{part}:#{code} #{disk}")
66
- end
67
- end
68
-
69
- private
70
-
71
- def disk_name(dev)
72
- dev.match(/[^0-9]+/)
73
- end
74
-
75
- def exec(cmd)
76
- @log.debug "Partition disk with #{cmd}"
77
- if Getch::OPTIONS[:encrypt]
78
- Helpers.sys(cmd)
79
- else
80
- Getch::Command.new(cmd).run!
81
- end
82
- end
83
- end
84
- end
85
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- module Zfs
6
- class Config < Device
7
- def initialize
8
- super
9
- gen_uuid
10
- @init = '/usr/lib/systemd/systemd'
11
- end
12
-
13
- def fstab
14
- file = "#{MOUNTPOINT}/etc/fstab"
15
- datas = data_fstab
16
- File.write file, datas.join("\n")
17
- end
18
-
19
- # See https://wiki.gentoo.org/wiki/ZFS#ZFS_root
20
- # https://github.com/openzfs/zfs/blob/master/contrib/dracut/README.dracut.markdown
21
- def cmdline
22
- src = "#{MOUNTPOINT}/etc/dracut.conf.d/cmdline.conf"
23
- line = "kernel_cmdline=\"resume=UUID=#{@uuid_swap} root=zfs:#{@pool_name}/ROOT/#{@n} init=#{@init} zfs.force=1 zfs.zfs_arc_max=536870912\""
24
- Helpers.echo src, line
25
- end
26
-
27
- private
28
-
29
- def gen_uuid
30
- @uuid_swap = `lsblk -o "UUID" #{@dev_swap} | tail -1`.chomp()
31
- @uuid_esp = `lsblk -o "UUID" #{@dev_esp} | tail -1`.chomp() if @dev_esp
32
- end
33
-
34
- def data_fstab
35
- efi = @dev_esp ? "UUID=#{@uuid_esp} /efi vfat noauto,noatime 1 2" : ''
36
- swap = @dev_swap ? "UUID=#{@uuid_swap} none swap discard 0 0" : ''
37
-
38
- [ efi, swap ]
39
- end
40
- end
41
- end
42
- end
43
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- module Zfs
6
- class Deps < Device
7
- def make
8
- unstable_zfs
9
- install_deps
10
- zfs_mountpoint
11
- hostid
12
- config_dracut
13
- zed_update_path
14
- end
15
-
16
- private
17
-
18
- def unstable_zfs
19
- conf = "#{MOUNTPOINT}/etc/portage/package.accept_keywords/zfs"
20
- data = [
21
- 'sys-fs/zfs-kmod',
22
- 'sys-fs/zfs'
23
- ]
24
- File.write(conf, data.join("\n"), mode: 'w')
25
- end
26
-
27
- def install_deps
28
- Getch::Emerge.new('sys-kernel/gentoo-kernel').pkg!
29
- Getch::Emerge.new('sys-fs/zfs').pkg!
30
- end
31
-
32
- # See: https://wiki.archlinux.org/index.php/ZFS#Using_zfs-mount-generator
33
- def zfs_mountpoint
34
- Helpers.mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
35
- Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
36
- Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
37
- exec('ln -fs /usr/libexec/zfs/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d/')
38
- exec('systemctl start zfs-zed.service')
39
- exec('systemctl enable zfs-zed.service')
40
- exec('systemctl enable zfs.target')
41
- end
42
-
43
- def zed_update_path
44
- Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each { |f|
45
- unless system('sed', '-Ei', "s|#{MOUNTPOINT}/?|/|", f)
46
- raise 'system exec sed'
47
- end
48
- }
49
- end
50
-
51
- def hostid
52
- exec 'zgenhostid $(hostid)'
53
- end
54
-
55
- def config_dracut
56
- conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
57
- content = 'hostonly="yes"'
58
- Helpers.echo conf, content
59
- end
60
-
61
- def exec(cmd)
62
- Getch::Chroot.new(cmd).run!
63
- end
64
- end
65
- end
66
- end
67
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- module Zfs
6
- class Device < Getch::FileSystem::Device
7
- def initialize
8
- super
9
- @id = Helpers.pool_id(@dev_root)
10
- @boot_pool_name = "bpool-#{@id}"
11
- @pool_name = "rpool-#{@id}"
12
- @zfs_home = @user ? true : false
13
- @n = Getch::OPTIONS[:os]
14
- end
15
-
16
- private
17
-
18
- def search_boot
19
- if @efi
20
- if @boot_disk
21
- @dev_esp = "/dev/#{@boot_disk}1"
22
- @dev_boot = "/dev/#{@boot_disk}2" if Getch::OPTIONS[:os] == 'void'
23
- else
24
- @dev_esp = "/dev/#{@disk}1"
25
- @root_part += 1
26
- if Getch::OPTIONS[:os] == 'void'
27
- @dev_boot = "/dev/#{@disk}#{@root_part}"
28
- @root_part += 1
29
- end
30
- end
31
- else
32
- if @boot_disk
33
- @dev_gpt = "/dev/#{@boot_disk}1"
34
- @dev_boot = "/dev/#{@boot_disk}2"
35
- @dev_grub = "/dev/#{@boot_disk}"
36
- else
37
- @dev_gpt = "/dev/#{@disk}1"
38
- @dev_boot = "/dev/#{@disk}2"
39
- @dev_grub = "/dev/#{@disk}"
40
- @root_part += 2
41
- end
42
- end
43
- end
44
-
45
- def search_swap
46
- if @cache_disk
47
- @dev_swap = "/dev/#{@cache_disk}1"
48
- @dev_log = "/dev/#{@cache_disk}2"
49
- @dev_cache = "/dev/#{@cache_disk}3"
50
- else
51
- @dev_swap = "/dev/#{@disk}#{@root_part}"
52
- @root_part += 1
53
- end
54
- end
55
-
56
- def search_root
57
- if @root_part == 1
58
- @dev_root = "/dev/#{@disk}"
59
- else
60
- @dev_root = "/dev/#{@disk}#{@root_part}"
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,97 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- module Zfs
6
- module Encrypt
7
- class Void < Device
8
- include Helpers::Void
9
-
10
- attr_reader :boot_disk
11
-
12
- def initialize
13
- super
14
- hostid
15
- zfs_zed # mountpoint for zfs
16
- end
17
-
18
- # Fstab contain:
19
- # > /efi noauto
20
- # > swap
21
- # > /boot zfs-legacy
22
- # > /tmp
23
- def fstab
24
- conf = "#{MOUNTPOINT}/etc/fstab"
25
- File.write(conf, "\n", mode: 'w', chmod: 0644)
26
- line_fstab(@dev_esp, "/efi vfat noauto,rw,relatime 0 0") if @dev_esp
27
- add_line(conf, '/dev/mapper/cryptswap none swap sw 0 0')
28
- add_line(conf, "##{@boot_pool_name}/BOOT/#{@n} /boot zfs defaults 0 0") if @dev_boot
29
- add_line(conf, 'tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0')
30
- end
31
-
32
- def config_dracut
33
- conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
34
- # dracut: value+= should be surrounding by white space
35
- content = [
36
- 'hostonly="yes"',
37
- 'omit_dracutmodules+=" btrfs lvm "',
38
- 'install_items+=" /etc/crypttab "',
39
- ]
40
- File.write(conf, content.join("\n"), mode: 'w', chmod: 0644)
41
- end
42
-
43
- def kernel_cmdline_dracut
44
- #command "zfs set mountpoint=legacy #{@boot_pool_name}/BOOT/#{@n}"
45
- end
46
-
47
- def config_grub
48
- grub_cmdline("root=zfs:#{@pool_name}/ROOT/#{@n}", 'zfs_force=1', 'zfs.zfs_arc_max=536870912')
49
- end
50
-
51
- def finish
52
- zed_update_path
53
- puts '+ Enter in your system: chroot /mnt /bin/bash'
54
- puts '+ Reboot with: shutdown -r now'
55
- end
56
-
57
- def crypttab
58
- line_crypttab('cryptswap', @dev_swap, '/dev/urandom', 'swap,discard,cipher=aes-xts-plain64:sha256,size=512')
59
- end
60
-
61
- private
62
-
63
- def line_crypttab(mapname, dev, point, rest)
64
- conf = "#{MOUNTPOINT}/etc/crypttab"
65
- device = s_uuid(dev)
66
- raise "No partuuid for #{dev} #{device}" unless device
67
- raise "Bad partuuid for #{dev} #{device}" if device.kind_of? Array
68
-
69
- add_line(conf, "#{mapname} PARTUUID=#{device} #{point} #{rest}")
70
- end
71
-
72
- def zfs_zed
73
- service_dir = '/etc/runit/runsvdir/default/'
74
-
75
- Helpers.mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
76
- Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
77
- Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
78
- fork { command '/etc/sv/zed/run' }
79
- command "ln -fs /etc/sv/zed #{service_dir}"
80
- end
81
-
82
- def zed_update_path
83
- Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each do |f|
84
- unless system('sed', '-Ei', "s|#{MOUNTPOINT}/?|/|", f)
85
- raise 'System exec sed'
86
- end
87
- end
88
- end
89
-
90
- def hostid
91
- command 'zgenhostid $(hostid)'
92
- end
93
- end
94
- end
95
- end
96
- end
97
- end
@@ -1,117 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Getch
4
- module FileSystem
5
- module Zfs
6
- class Format < Device
7
- def initialize
8
- super
9
- @log = Getch::Log.new
10
- @state = Getch::States.new
11
- unless @id
12
- @log.info "Research pool id for #{@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}." unless @id
25
-
26
- @log.info "Create #{@id} for #{@pool_name}"
27
- system("mkfs.fat -F32 #{@dev_esp}") if @dev_esp
28
- zfs
29
- cache
30
- datasets
31
- @state.format
32
- end
33
-
34
- def zfs
35
- bloc=`blockdev --getpbsz #{@dev_root}`
36
- ashift =
37
- case bloc
38
- when /8096/
39
- 13
40
- when /4096/
41
- 12
42
- else # 512
43
- 9
44
- end
45
-
46
- Helpers.mkdir(MOUNTPOINT)
47
- @log.debug("ashift found for #{bloc} - #{ashift}")
48
-
49
- if @dev_boot
50
- # https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html
51
- @log.info("Creating boot pool on #{@pool_name}")
52
- exec("zpool create -f \\
53
- -o ashift=#{ashift} -o autotrim=on -d \\
54
- -o feature@async_destroy=enabled \\
55
- -o feature@bookmarks=enabled \\
56
- -o feature@embedded_data=enabled \\
57
- -o feature@empty_bpobj=enabled \\
58
- -o feature@enabled_txg=enabled \\
59
- -o feature@extensible_dataset=enabled \\
60
- -o feature@filesystem_limits=enabled \\
61
- -o feature@hole_birth=enabled \\
62
- -o feature@large_blocks=enabled \\
63
- -o feature@lz4_compress=enabled \\
64
- -o feature@spacemap_histogram=enabled \\
65
- -O acltype=posixacl -O canmount=off -O compression=lz4 \\
66
- -O devices=off -O normalization=formD -O atime=off -O xattr=sa \\
67
- -O mountpoint=/boot -R #{MOUNTPOINT} \\
68
- #{@boot_pool_name} #{@dev_boot}
69
- ")
70
- end
71
-
72
- exec("zpool create -f -o ashift=#{ashift} -o autotrim=on \\
73
- -O acltype=posixacl -O canmount=off -O compression=lz4 \\
74
- -O dnodesize=auto -O normalization=formD -O atime=off \\
75
- -O xattr=sa -O mountpoint=/ -R #{MOUNTPOINT} \\
76
- #{@pool_name} #{@dev_root}
77
- ")
78
- end
79
-
80
- def cache
81
- system("mkswap -f #{@dev_swap}")
82
- if @dev_log
83
- exec("zpool add #{@pool_name} log #{@dev_log}")
84
- end
85
- if @dev_cache
86
- exec("zpool add #{@pool_name} cache #{@dev_cache}")
87
- end
88
- end
89
-
90
- def datasets
91
- exec("zfs create -o canmount=off -o mountpoint=none #{@pool_name}/ROOT")
92
- exec("zfs create -o canmount=off -o mountpoint=none #{@boot_pool_name}/BOOT") if @dev_boot
93
-
94
- exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/#{@n}")
95
- exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/#{@n}") if @dev_boot
96
-
97
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/#{@n}/usr")
98
- exec("zfs create #{@pool_name}/ROOT/#{@n}/usr/src")
99
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/#{@n}/var")
100
- exec("zfs create #{@pool_name}/ROOT/#{@n}/var/log")
101
- exec("zfs create #{@pool_name}/ROOT/#{@n}/var/db")
102
- exec("zfs create #{@pool_name}/ROOT/#{@n}/var/tmp")
103
-
104
- exec("zfs create -o canmount=off -o mountpoint=/ #{@pool_name}/USERDATA")
105
- exec("zfs create -o canmount=on -o mountpoint=/root #{@pool_name}/USERDATA/root")
106
- if @user
107
- exec("zfs create -o canmount=on -o mountpoint=/home/#{@user} #{@pool_name}/USERDATA/#{@user}")
108
- end
109
- end
110
-
111
- def exec(cmd)
112
- Getch::Command.new(cmd).run!
113
- end
114
- end
115
- end
116
- end
117
- end