getch 0.1.3 → 0.3.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.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +75 -35
  4. data/assets/network-stack.conf +63 -0
  5. data/assets/system.conf +38 -0
  6. data/bin/getch +14 -4
  7. data/lib/clean.rb +149 -0
  8. data/lib/cmdline.rb +128 -0
  9. data/lib/cryptsetup.rb +132 -0
  10. data/lib/devs.rb +199 -0
  11. data/lib/dracut/encrypt.rb +36 -0
  12. data/lib/dracut/hybrid.rb +15 -0
  13. data/lib/dracut/lvm.rb +14 -0
  14. data/lib/dracut/minimal.rb +11 -0
  15. data/lib/dracut/root.rb +45 -0
  16. data/lib/dracut/zfs.rb +35 -0
  17. data/lib/dracut.rb +11 -0
  18. data/lib/fstab/encrypt.rb +44 -0
  19. data/lib/fstab/hybrid.rb +34 -0
  20. data/lib/fstab/lvm.rb +25 -0
  21. data/lib/fstab/minimal.rb +6 -0
  22. data/lib/fstab/root.rb +93 -0
  23. data/lib/fstab/zfs.rb +23 -0
  24. data/lib/fstab.rb +11 -0
  25. data/lib/getch/assembly.rb +150 -0
  26. data/lib/getch/command.rb +94 -124
  27. data/lib/getch/config/account.rb +39 -0
  28. data/lib/getch/config/dhcp.rb +104 -0
  29. data/lib/getch/config/grub.rb +42 -0
  30. data/lib/getch/config/iwd.rb +60 -0
  31. data/lib/getch/config/keymap.rb +78 -0
  32. data/lib/getch/config/locale.rb +96 -0
  33. data/lib/getch/config/portage.rb +90 -0
  34. data/lib/getch/config/pre_network.rb +37 -0
  35. data/lib/getch/config/timezone.rb +52 -0
  36. data/lib/getch/config/void.rb +11 -0
  37. data/lib/getch/config.rb +19 -53
  38. data/lib/getch/device.rb +67 -0
  39. data/lib/getch/filesystem/ext4/encrypt/config.rb +11 -68
  40. data/lib/getch/filesystem/ext4/encrypt/deps.rb +17 -25
  41. data/lib/getch/filesystem/ext4/encrypt/device.rb +13 -5
  42. data/lib/getch/filesystem/ext4/encrypt/format.rb +8 -15
  43. data/lib/getch/filesystem/ext4/encrypt/mount.rb +9 -13
  44. data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -82
  45. data/lib/getch/filesystem/ext4/encrypt/void.rb +63 -0
  46. data/lib/getch/filesystem/ext4/encrypt.rb +4 -0
  47. data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
  48. data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
  49. data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
  50. data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
  51. data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
  52. data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
  53. data/lib/getch/filesystem/ext4/hybrid/void.rb +62 -0
  54. data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
  55. data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
  56. data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
  57. data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
  58. data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
  59. data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
  60. data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
  61. data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +8 -3
  62. data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
  63. data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +4 -3
  64. data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
  65. data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
  66. data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
  67. data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
  68. data/lib/getch/filesystem/ext4/minimal.rb +19 -0
  69. data/lib/getch/filesystem/ext4.rb +9 -6
  70. data/lib/getch/filesystem/zfs/encrypt/config.rb +12 -57
  71. data/lib/getch/filesystem/zfs/encrypt/deps.rb +7 -86
  72. data/lib/getch/filesystem/zfs/encrypt/device.rb +9 -45
  73. data/lib/getch/filesystem/zfs/encrypt/format.rb +8 -90
  74. data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -34
  75. data/lib/getch/filesystem/zfs/encrypt/partition.rb +8 -50
  76. data/lib/getch/filesystem/zfs/encrypt.rb +4 -0
  77. data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
  78. data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
  79. data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
  80. data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
  81. data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
  82. data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
  83. data/lib/getch/filesystem/zfs/minimal.rb +19 -0
  84. data/lib/getch/filesystem/zfs.rb +3 -6
  85. data/lib/getch/filesystem.rb +2 -6
  86. data/lib/getch/gentoo/bootloader.rb +47 -0
  87. data/lib/getch/gentoo/finalize.rb +25 -0
  88. data/lib/getch/gentoo/post_config.rb +75 -0
  89. data/lib/getch/gentoo/pre_config.rb +37 -0
  90. data/lib/getch/gentoo/services.rb +18 -0
  91. data/lib/getch/gentoo/sources.rb +82 -52
  92. data/lib/getch/gentoo/tarball.rb +91 -0
  93. data/lib/getch/gentoo/terraform.rb +34 -0
  94. data/lib/getch/gentoo/update.rb +54 -0
  95. data/lib/getch/gentoo/use.rb +11 -12
  96. data/lib/getch/gentoo/use_flag.rb +74 -52
  97. data/lib/getch/gentoo.rb +11 -63
  98. data/lib/getch/guard.rb +71 -0
  99. data/lib/getch/helpers.rb +128 -48
  100. data/lib/getch/log.rb +91 -26
  101. data/lib/getch/options.rb +79 -40
  102. data/lib/getch/states.rb +37 -10
  103. data/lib/getch/tree.rb +56 -0
  104. data/lib/getch/version.rb +1 -1
  105. data/lib/getch/void/bootloader.rb +18 -0
  106. data/lib/getch/void/finalize.rb +31 -0
  107. data/lib/getch/void/post_config.rb +19 -0
  108. data/lib/getch/void/pre_config.rb +18 -0
  109. data/lib/getch/void/services.rb +18 -0
  110. data/lib/getch/void/tarball.rb +89 -0
  111. data/lib/getch/void/terraform.rb +28 -0
  112. data/lib/getch/void/update.rb +33 -0
  113. data/lib/getch/void.rb +15 -0
  114. data/lib/getch.rb +104 -92
  115. data/lib/luks.rb +239 -0
  116. data/lib/lvm2.rb +112 -0
  117. data/lib/mkfs/zfs.rb +167 -0
  118. data/lib/mkfs.rb +140 -0
  119. data/lib/mountfs.rb +154 -0
  120. data/lib/nito.rb +131 -0
  121. data/lib/sgdisk.rb +160 -0
  122. data.tar.gz.sig +0 -0
  123. metadata +96 -45
  124. metadata.gz.sig +0 -0
  125. data/.gitignore +0 -2
  126. data/CHANGELOG.md +0 -90
  127. data/Rakefile +0 -21
  128. data/bin/setup.sh +0 -90
  129. data/getch.gemspec +0 -25
  130. data/lib/getch/filesystem/clean.rb +0 -51
  131. data/lib/getch/filesystem/device.rb +0 -61
  132. data/lib/getch/filesystem/ext4/config.rb +0 -58
  133. data/lib/getch/filesystem/ext4/deps.rb +0 -22
  134. data/lib/getch/filesystem/ext4/format.rb +0 -28
  135. data/lib/getch/filesystem/ext4/mount.rb +0 -23
  136. data/lib/getch/filesystem/ext4/partition.rb +0 -52
  137. data/lib/getch/filesystem/lvm/config.rb +0 -59
  138. data/lib/getch/filesystem/lvm/deps.rb +0 -42
  139. data/lib/getch/filesystem/lvm/device.rb +0 -43
  140. data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -71
  141. data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -46
  142. data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -46
  143. data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -32
  144. data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -25
  145. data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -80
  146. data/lib/getch/filesystem/lvm/encrypt.rb +0 -15
  147. data/lib/getch/filesystem/lvm/format.rb +0 -29
  148. data/lib/getch/filesystem/lvm/mount.rb +0 -23
  149. data/lib/getch/filesystem/lvm/partition.rb +0 -69
  150. data/lib/getch/filesystem/mount.rb +0 -56
  151. data/lib/getch/filesystem/partition.rb +0 -77
  152. data/lib/getch/filesystem/zfs/config.rb +0 -57
  153. data/lib/getch/filesystem/zfs/deps.rb +0 -95
  154. data/lib/getch/filesystem/zfs/device.rb +0 -58
  155. data/lib/getch/filesystem/zfs/format.rb +0 -114
  156. data/lib/getch/filesystem/zfs/mount.rb +0 -48
  157. data/lib/getch/filesystem/zfs/partition.rb +0 -64
  158. data/lib/getch/gentoo/boot.rb +0 -109
  159. data/lib/getch/gentoo/chroot.rb +0 -77
  160. data/lib/getch/gentoo/config.rb +0 -129
  161. data/lib/getch/gentoo/stage.rb +0 -74
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sgdisk'
4
+ require 'lvm2'
5
+
6
+ module Getch
7
+ module FileSystem
8
+ module Ext4
9
+ module Lvm
10
+ class Partition
11
+ def initialize
12
+ x
13
+ end
14
+
15
+ private
16
+
17
+ # Follow https://wiki.archlinux.org/index.php/Partitioning
18
+ # 1 - Efi or GPT
19
+ # 2 - Root
20
+ def x
21
+ Sgdisk::Lvm.new(DEVS)
22
+ Lvm2::Root.new(DEVS, OPTIONS).x
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,6 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
- module Lvm
5
+ module Ext4
6
+ module Lvm
7
+ def self.end
8
+ end
9
+ end
4
10
  end
5
11
  end
6
12
  end
@@ -9,6 +15,5 @@ require_relative 'lvm/device'
9
15
  require_relative 'lvm/partition'
10
16
  require_relative 'lvm/format'
11
17
  require_relative 'lvm/mount'
12
- require_relative 'lvm/config'
13
18
  require_relative 'lvm/deps'
14
- require_relative 'lvm/encrypt'
19
+ require_relative 'lvm/config'
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fstab'
4
+ require 'dracut'
5
+
6
+ module Getch
7
+ module FileSystem
8
+ module Ext4
9
+ module Minimal
10
+ class Config
11
+ def initialize
12
+ x
13
+ end
14
+
15
+ private
16
+
17
+ def x
18
+ Fstab::Minimal.new(DEVS, OPTIONS).generate
19
+ Dracut::Minimal.new(DEVS, OPTIONS).generate
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,9 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Ext4
4
- class Device < Getch::FileSystem::Device
5
- def initialize
6
- super
6
+ module Minimal
7
+ class Deps
7
8
  end
8
9
  end
9
10
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'devs'
4
+
5
+ module Getch
6
+ module FileSystem
7
+ module Ext4
8
+ module Minimal
9
+ class Device
10
+ def initialize
11
+ @args = { start: true, swap: true, root: true }
12
+ x
13
+ end
14
+
15
+ def x
16
+ Devs::Settings.new(@args, OPTIONS)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mkfs'
4
+
5
+ module Getch
6
+ module FileSystem
7
+ module Ext4
8
+ module Minimal
9
+ class Format
10
+ def initialize
11
+ x
12
+ end
13
+
14
+ private
15
+
16
+ def x
17
+ Mkfs::Root.new(DEVS, OPTIONS)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mountfs'
4
+
5
+ module Getch
6
+ module FileSystem
7
+ module Ext4
8
+ module Minimal
9
+ class Mount
10
+ def initialize
11
+ x
12
+ end
13
+
14
+ def x
15
+ MountFs::Minimal.new(DEVS, OPTIONS)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sgdisk'
4
+
5
+ module Getch
6
+ module FileSystem
7
+ module Ext4
8
+ module Minimal
9
+ class Partition
10
+ def initialize
11
+ x
12
+ end
13
+
14
+ private
15
+
16
+ # Follow https://wiki.archlinux.org/index.php/Partitioning
17
+ # 1 - /efi of GPT
18
+ # 2 - Swap
19
+ # 3 - /
20
+ # 4 - /home if --separate-home DISK is used
21
+ def x
22
+ Sgdisk::Ext4.new(DEVS)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module FileSystem
5
+ module Ext4
6
+ module Minimal
7
+ def self.end
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ require_relative 'minimal/device'
15
+ require_relative 'minimal/partition'
16
+ require_relative 'minimal/format'
17
+ require_relative 'minimal/mount'
18
+ require_relative 'minimal/deps'
19
+ require_relative 'minimal/config'
@@ -1,14 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Ext4
6
+ def self.end
7
+ puts '+ To enter in your system: chroot /mnt/getch /bin/bash'
8
+ puts '+ Reboot with: shutdown -r now'
9
+ end
4
10
  end
5
11
  end
6
12
  end
7
13
 
8
- require_relative 'ext4/device'
9
- require_relative 'ext4/partition'
10
- require_relative 'ext4/format'
11
- require_relative 'ext4/mount'
12
- require_relative 'ext4/config'
13
- require_relative 'ext4/deps'
14
+ require_relative 'ext4/minimal'
14
15
  require_relative 'ext4/encrypt'
16
+ require_relative 'ext4/lvm'
17
+ require_relative 'ext4/hybrid'
@@ -1,64 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fstab'
4
+ require 'dracut'
5
+ require 'cryptsetup'
6
+
1
7
  module Getch
2
8
  module FileSystem
3
9
  module Zfs
4
10
  module Encrypt
5
- class Config < Getch::FileSystem::Zfs::Encrypt::Device
6
- def initialize
7
- super
8
- gen_uuid
9
- @root_dir = MOUNTPOINT
10
- @init = '/usr/lib/systemd/systemd'
11
- crypttab
12
- end
13
-
14
- def fstab
15
- file = "#{@root_dir}/etc/fstab"
16
- datas = data_fstab
17
- File.write(file, datas.join("\n"))
18
- end
19
-
20
- def systemd_boot
21
- return if ! @efi
22
- esp = '/efi'
23
- dir = "#{@root_dir}/#{esp}/loader/entries/"
24
- datas_gentoo = [
25
- 'title Gentoo Linux',
26
- 'linux /vmlinuz',
27
- 'initrd /initramfs',
28
- "options root=ZFS=#{@pool_name}/ROOT/gentoo init=#{@init} dozfs keymap=#{DEFAULT_OPTIONS[:keymap]}"
29
- ]
30
- File.write("#{dir}/gentoo.conf", datas_gentoo.join("\n"))
31
- end
32
-
33
- def crypttab
34
- datas = [
35
- "cryptswap PARTUUID=#{@partuuid_swap} /dev/urandom swap,cipher=aes-xts-plain64:sha256,size=512"
36
- ]
37
- File.write("#{@root_dir}/etc/crypttab", datas.join("\n"))
38
- end
39
-
40
- # See https://wiki.gentoo.org/wiki/ZFS#ZFS_root
41
- def grub
42
- return if @efi
43
- file = "#{@root_dir}/etc/default/grub"
44
- cmdline = [
45
- "GRUB_CMDLINE_LINUX=\"root=ZFS=#{@pool_name}/ROOT/gentoo init=#{@init} dozfs keymap=#{DEFAULT_OPTIONS[:keymap]}\""
46
- ]
47
- File.write("#{file}", cmdline.join("\n"), mode: 'a')
48
- end
49
-
50
- private
51
-
52
- def gen_uuid
53
- @partuuid_swap = Helpers::partuuid(@dev_swap)
54
- @uuid_esp = `lsblk -o "UUID" #{@dev_esp} | tail -1`.chomp() if @dev_esp
55
- end
56
-
57
- def data_fstab
58
- boot_efi = @dev_esp ? "UUID=#{@uuid_esp} /efi vfat noauto,noatime 1 2" : ''
59
- swap = @dev_swap ? "/dev/mapper/cryptswap none swap discard 0 0" : ''
60
-
61
- [ boot_efi, swap ]
11
+ class Config < Minimal::Config
12
+ def x
13
+ Fstab::Zfs.new(DEVS, OPTIONS).generate
14
+ Dracut::Zfs.new(DEVS, OPTIONS).generate
15
+ CryptSetup.new(DEVS, OPTIONS).swap_conf
16
+ grub_broken_root
62
17
  end
63
18
  end
64
19
  end
@@ -1,94 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Zfs
4
6
  module Encrypt
5
- class Deps < Getch::FileSystem::Zfs::Encrypt::Device
6
- def make
7
- unstable_zfs
8
- install_deps
9
- zfs_mountpoint
10
- auto_module_rebuild
11
- hostid
12
- options_make
13
- Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
14
- end
15
-
16
- private
17
- def unstable_zfs
18
- conf = "#{MOUNTPOINT}/etc/portage/package.accept_keywords/zfs"
19
- data = [
20
- "sys-fs/zfs-kmod",
21
- "sys-fs/zfs"
22
- ]
23
- File.write(conf, data.join("\n"), mode: "w")
24
- end
25
-
7
+ class Deps < Minimal::Deps
26
8
  def install_deps
27
- Getch::Bask.new('-a zfs').run!
28
- Getch::Make.new("make modules_prepare").run!
29
- Getch::Make.new("make -j$(nproc)").run!
30
- Getch::Emerge.new('genkernel sys-fs/zfs').pkg!
31
- end
32
-
33
- # See: https://wiki.archlinux.org/index.php/ZFS#Using_zfs-mount-generator
34
- def zfs_mountpoint
35
- Helpers::mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
36
- Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
37
- Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
38
- exec("ln -fs /usr/libexec/zfs/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d/")
39
- exec("systemctl start zfs-zed.service")
40
- Helpers::sys("sed -Ei \"s|/mnt/?|/|\" #{MOUNTPOINT}/etc/zfs/zfs-list.cache/*")
41
- exec("systemctl enable zfs-zed.service")
42
- exec("systemctl enable zfs.target")
43
- end
44
-
45
- def auto_module_rebuild
46
- g_dir="#{MOUNTPOINT}/etc/portage/env/sys-kernel"
47
- Helpers::mkdir(g_dir)
48
- # See https://wiki.gentoo.org/wiki/Kernel/Upgrade#Automated_build_and_installation
49
- content=<<EOF
50
- post_pkg_postinst() {
51
- # BUG: reinstalls of a source will cause errors
52
- CURRENT_KV=$(uname -r)
53
- # Check to see if genkernel has been run previously for the running kernel and use that config
54
- if [[ -f "${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" ]] ; then
55
- genkernel --kernel-config="${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" all
56
- elif [[ -f "${EROOT}/usr/src/linux-${CURRENT_KV}/.config" ]] ; then # Use latest kernel config from current kernel
57
- genkernel --kernel-config="${EROOT}/usr/src/linux-${CURRENT_KV}/.config" all
58
- else # No valid configs known
59
- genkernel all
60
- fi
61
- }
62
- EOF
63
- File.write("#{g_dir}/gentoo-sources", content)
64
- end
65
-
66
- def hostid
67
- hostid_value=`hostid`.chomp
68
- File.write("#{MOUNTPOINT}/etc/hostid", hostid_value, mode: 'w')
69
- end
70
-
71
- def options_make
72
- bootloader = Helpers::efi? ? 'BOOTLOADER="no"' : 'BOOTLOADER="grub2"'
73
- datas = [
74
- '',
75
- bootloader,
76
- 'INSTALL="yes"',
77
- 'MENUCONFIG="no"',
78
- 'CLEAN="yes"',
79
- 'KEYMAP="yes"',
80
- 'SAVE_CONFIG="yes"',
81
- 'MOUNTBOOT="no"',
82
- 'MRPROPER="no"',
83
- 'ZFS="yes"',
84
- 'MODULEREBUILD="yes"'
85
- ]
86
- file = "#{MOUNTPOINT}/etc/genkernel.conf"
87
- File.write(file, datas.join("\n"), mode: 'a')
88
- end
89
-
90
- def exec(cmd)
91
- Getch::Chroot.new(cmd).run!
9
+ case OPTIONS[:os]
10
+ when 'gentoo' then Install.new('sys-fs/cryptsetup sys-fs/zfs')
11
+ when 'void' then Install.new('cryptsetup zfs')
12
+ end
92
13
  end
93
14
  end
94
15
  end
@@ -1,57 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'devs'
4
+
1
5
  module Getch
2
6
  module FileSystem
3
7
  module Zfs
4
8
  module Encrypt
5
- class Device < Getch::FileSystem::Device
9
+ class Device
6
10
  def initialize
7
- super
8
- @id = Helpers::pool_id(@dev_root)
9
- @boot_pool_name = "bpool-#{@id}"
10
- @pool_name = "rpool-#{@id}"
11
- @zfs_home = @user ? true : false
11
+ @args = { start: true, boot: true, swap: true, root: true }
12
+ x
12
13
  end
13
14
 
14
15
  private
15
16
 
16
- def search_boot
17
- if @efi
18
- if @boot_disk
19
- @dev_esp = "/dev/#{@boot_disk}1"
20
- else
21
- @dev_esp = "/dev/#{@disk}1"
22
- @root_part += 1
23
- end
24
- else
25
- if @boot_disk
26
- @dev_gpt = "/dev/#{@boot_disk}1"
27
- @dev_boot = "/dev/#{@boot_disk}2"
28
- @dev_grub = "/dev/#{@boot_disk}"
29
- else
30
- @dev_gpt = "/dev/#{@disk}1"
31
- @dev_boot = "/dev/#{@disk}2"
32
- @dev_grub = "/dev/#{@disk}"
33
- @root_part += 2
34
- end
35
- end
36
- end
37
-
38
- def search_swap
39
- if @cache_disk
40
- @dev_swap = "/dev/#{@cache_disk}1"
41
- @dev_log = "/dev/#{@cache_disk}2"
42
- @dev_cache = "/dev/#{@cache_disk}3"
43
- else
44
- @dev_swap = "/dev/#{@disk}#{@root_part}"
45
- @root_part += 1
46
- end
47
- end
48
-
49
- def search_root
50
- if @root_part == 1
51
- @dev_root = "/dev/#{@disk}"
52
- else
53
- @dev_root = "/dev/#{@disk}#{@root_part}"
54
- end
17
+ def x
18
+ Devs::Settings.new(@args, OPTIONS)
55
19
  end
56
20
  end
57
21
  end
@@ -1,102 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mkfs'
4
+
1
5
  module Getch
2
6
  module FileSystem
3
7
  module Zfs
4
8
  module Encrypt
5
- class Format < Getch::FileSystem::Zfs::Encrypt::Device
9
+ class Format
6
10
  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
11
+ x
18
12
  end
19
13
 
20
14
  private
21
15
 
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)
16
+ def x
17
+ Mkfs::Zfs.new(DEVS, OPTIONS)
100
18
  end
101
19
  end
102
20
  end
@@ -1,48 +1,30 @@
1
- require 'fileutils'
1
+ # frozen_string_literal: true
2
+
3
+ require 'mountfs'
2
4
 
3
5
  module Getch
4
6
  module FileSystem
5
7
  module Zfs
6
8
  module Encrypt
7
- class Mount < Getch::FileSystem::Zfs::Encrypt::Device
9
+ class Mount
8
10
  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
11
+ x
29
12
  end
30
13
 
31
14
  private
32
15
 
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
16
+ def x
17
+ MountFs::Zfs.new(DEVS, OPTIONS)
42
18
 
43
- def exec(cmd)
44
- @log.info("==> #{cmd}")
45
- Helpers::sys(cmd)
19
+ #exec('zpool export -a')
20
+ #exec("rm -rf #{MOUNTPOINT}/*")
21
+ #exec("zpool import -N -d #{@import} -R #{MOUNTPOINT} #{@pool_name}")
22
+ #exec("zpool import -f -N -d #{@import} -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
23
+ #exec('zfs load-key -a')
24
+ #mount_root
25
+ #mount_boot
26
+ #@mount.esp(@dev_esp)
27
+ #exec('zfs mount -a')
46
28
  end
47
29
  end
48
30
  end