getch 0.1.2 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +66 -32
  4. data/assets/network-stack.conf +63 -0
  5. data/assets/system.conf +38 -0
  6. data/bin/getch +12 -4
  7. data/lib/cmdline.rb +128 -0
  8. data/lib/getch/command.rb +32 -22
  9. data/lib/getch/config/gentoo.rb +58 -0
  10. data/lib/getch/config/void.rb +47 -0
  11. data/lib/getch/config.rb +45 -0
  12. data/lib/getch/filesystem/clean.rb +22 -15
  13. data/lib/getch/filesystem/device.rb +8 -6
  14. data/lib/getch/filesystem/ext4/config.rb +8 -4
  15. data/lib/getch/filesystem/ext4/deps.rb +3 -1
  16. data/lib/getch/filesystem/ext4/device.rb +2 -3
  17. data/lib/getch/filesystem/ext4/encrypt/config.rb +15 -11
  18. data/lib/getch/filesystem/ext4/encrypt/deps.rb +5 -10
  19. data/lib/getch/filesystem/ext4/encrypt/device.rb +5 -3
  20. data/lib/getch/filesystem/ext4/encrypt/format.rb +4 -2
  21. data/lib/getch/filesystem/ext4/encrypt/mount.rb +3 -3
  22. data/lib/getch/filesystem/ext4/encrypt/partition.rb +29 -35
  23. data/lib/getch/filesystem/ext4/encrypt/void.rb +101 -0
  24. data/lib/getch/filesystem/ext4/encrypt.rb +3 -0
  25. data/lib/getch/filesystem/ext4/format.rb +4 -1
  26. data/lib/getch/filesystem/ext4/mount.rb +3 -0
  27. data/lib/getch/filesystem/ext4/partition.rb +11 -8
  28. data/lib/getch/filesystem/ext4/void.rb +44 -0
  29. data/lib/getch/filesystem/ext4.rb +3 -0
  30. data/lib/getch/filesystem/lvm/config.rb +10 -29
  31. data/lib/getch/filesystem/lvm/deps.rb +7 -11
  32. data/lib/getch/filesystem/lvm/device.rb +5 -3
  33. data/lib/getch/filesystem/lvm/encrypt/config.rb +17 -17
  34. data/lib/getch/filesystem/lvm/encrypt/deps.rb +8 -12
  35. data/lib/getch/filesystem/lvm/encrypt/device.rb +7 -5
  36. data/lib/getch/filesystem/lvm/encrypt/format.rb +5 -2
  37. data/lib/getch/filesystem/lvm/encrypt/mount.rb +4 -2
  38. data/lib/getch/filesystem/lvm/encrypt/partition.rb +17 -13
  39. data/lib/getch/filesystem/lvm/encrypt/void.rb +101 -0
  40. data/lib/getch/filesystem/lvm/encrypt.rb +3 -0
  41. data/lib/getch/filesystem/lvm/format.rb +4 -1
  42. data/lib/getch/filesystem/lvm/mount.rb +3 -0
  43. data/lib/getch/filesystem/lvm/partition.rb +10 -7
  44. data/lib/getch/filesystem/lvm/void.rb +46 -0
  45. data/lib/getch/filesystem/lvm.rb +3 -0
  46. data/lib/getch/filesystem/mount.rb +19 -12
  47. data/lib/getch/filesystem/partition.rb +19 -11
  48. data/lib/getch/filesystem/zfs/config.rb +10 -24
  49. data/lib/getch/filesystem/zfs/deps.rb +28 -58
  50. data/lib/getch/filesystem/zfs/device.rb +9 -1
  51. data/lib/getch/filesystem/zfs/encrypt/config.rb +12 -28
  52. data/lib/getch/filesystem/zfs/encrypt/deps.rb +29 -60
  53. data/lib/getch/filesystem/zfs/encrypt/device.rb +9 -1
  54. data/lib/getch/filesystem/zfs/encrypt/format.rb +24 -22
  55. data/lib/getch/filesystem/zfs/encrypt/mount.rb +15 -14
  56. data/lib/getch/filesystem/zfs/encrypt/partition.rb +24 -18
  57. data/lib/getch/filesystem/zfs/encrypt/void.rb +97 -0
  58. data/lib/getch/filesystem/zfs/encrypt.rb +3 -0
  59. data/lib/getch/filesystem/zfs/format.rb +21 -18
  60. data/lib/getch/filesystem/zfs/mount.rb +12 -13
  61. data/lib/getch/filesystem/zfs/partition.rb +20 -15
  62. data/lib/getch/filesystem/zfs/void.rb +81 -0
  63. data/lib/getch/filesystem/zfs.rb +3 -0
  64. data/lib/getch/filesystem.rb +2 -0
  65. data/lib/getch/gentoo/boot.rb +29 -67
  66. data/lib/getch/gentoo/bootloader.rb +68 -0
  67. data/lib/getch/gentoo/chroot.rb +26 -29
  68. data/lib/getch/gentoo/config.rb +69 -31
  69. data/lib/getch/gentoo/sources.rb +73 -38
  70. data/lib/getch/gentoo/stage.rb +12 -13
  71. data/lib/getch/gentoo/use.rb +39 -0
  72. data/lib/getch/gentoo/use_flag.rb +89 -0
  73. data/lib/getch/gentoo.rb +39 -21
  74. data/lib/getch/guard.rb +71 -0
  75. data/lib/getch/helpers.rb +180 -48
  76. data/lib/getch/log.rb +10 -7
  77. data/lib/getch/options.rb +50 -41
  78. data/lib/getch/states.rb +10 -3
  79. data/lib/getch/version.rb +1 -1
  80. data/lib/getch/void/boot.rb +84 -0
  81. data/lib/getch/void/chroot.rb +56 -0
  82. data/lib/getch/void/config.rb +90 -0
  83. data/lib/getch/void/stage.rb +69 -0
  84. data/lib/getch/void.rb +65 -0
  85. data/lib/getch.rb +125 -74
  86. data.tar.gz.sig +0 -0
  87. metadata +28 -10
  88. metadata.gz.sig +0 -0
  89. data/.gitignore +0 -2
  90. data/CHANGELOG.md +0 -80
  91. data/Rakefile +0 -21
  92. data/bin/setup.sh +0 -90
  93. data/getch.gemspec +0 -25
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Lvm
4
6
  class Partition < Getch::FileSystem::Lvm::Device
5
7
  def initialize
6
8
  super
7
- @state = Getch::States.new()
9
+ @state = Getch::States.new
8
10
  @partition = Getch::FileSystem::Partition.new
9
11
  @clean = Getch::FileSystem::Clean
10
12
  run_partition
@@ -12,9 +14,10 @@ module Getch
12
14
 
13
15
  def run_partition
14
16
  return if STATES[:partition ]
17
+
15
18
  @clean.old_vg(@dev_root, @vg)
16
- @clean.struct(@disk, @cache_disk, @home_disk)
17
- @clean.hdd(@disk, @cache_disk, @home_disk)
19
+ @clean.hdd(@disk)
20
+ @clean.external_disk(@disk, @boot_disk, @cache_disk, @home_disk)
18
21
  partition
19
22
  lvm
20
23
  @state.partition
@@ -23,13 +26,13 @@ module Getch
23
26
  private
24
27
 
25
28
  def partition
26
- if Helpers::efi?
29
+ if Helpers.efi?
27
30
  @partition.efi(@dev_esp)
28
- @partition.root(@dev_root, "8e00")
31
+ @partition.root(@dev_root, '8e00')
29
32
  else
30
33
  @partition.gpt(@dev_gpt)
31
34
  @partition.boot(@dev_boot)
32
- @partition.root(@dev_root, "8e00")
35
+ @partition.root(@dev_root, '8e00')
33
36
  end
34
37
  end
35
38
 
@@ -47,7 +50,7 @@ module Getch
47
50
  exec("lvcreate -y -Wy -Zy -l 100%FREE -n root #{@vg}")
48
51
  end
49
52
 
50
- exec("vgchange --available y")
53
+ exec('vgchange --available y')
51
54
  end
52
55
 
53
56
  # Follow https://wiki.archlinux.org/index.php/Partitioning
@@ -0,0 +1,46 @@
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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Lvm
@@ -11,4 +13,5 @@ require_relative 'lvm/format'
11
13
  require_relative 'lvm/mount'
12
14
  require_relative 'lvm/config'
13
15
  require_relative 'lvm/deps'
16
+ require_relative 'lvm/void'
14
17
  require_relative 'lvm/encrypt'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fileutils'
2
4
 
3
5
  module Getch
@@ -8,13 +10,14 @@ module Getch
8
10
  @boot_dir = "#{@root_dir}/boot"
9
11
  @boot_efi_dir = "#{@root_dir}/efi"
10
12
  @home_dir = "#{@root_dir}/home"
11
- @state = Getch::States.new()
13
+ @state = Getch::States.new
12
14
  @log = Getch::Log.new
13
15
  end
14
16
 
15
17
  def swap(dev)
16
- return if ! dev
17
- if Helpers::grep?('/proc/swaps', /^\/dev/)
18
+ return unless dev
19
+
20
+ if Helpers.grep?('/proc/swaps', /^\/dev/)
18
21
  exec("swapoff #{dev}")
19
22
  end
20
23
 
@@ -22,26 +25,30 @@ module Getch
22
25
  end
23
26
 
24
27
  def root(dev)
25
- return if ! dev
26
- Helpers::mkdir(@root_dir)
28
+ return unless dev
29
+
30
+ Helpers.mkdir(@root_dir)
27
31
  exec("mount #{dev} #{@root_dir}")
28
32
  end
29
33
 
30
34
  def esp(dev)
31
- return if ! dev
32
- Helpers::mkdir(@boot_efi_dir)
35
+ return unless dev
36
+
37
+ Helpers.mkdir(@boot_efi_dir)
33
38
  exec("mount #{dev} #{@boot_efi_dir}")
34
39
  end
35
40
 
36
41
  def boot(dev)
37
- return if ! dev
38
- Helpers::mkdir(@boot_dir)
42
+ return unless dev
43
+
44
+ Helpers.mkdir(@boot_dir)
39
45
  exec("mount #{dev} #{@boot_dir}")
40
46
  end
41
47
 
42
48
  def home(dev)
43
- return if ! dev
44
- Helpers::mkdir(@home_dir)
49
+ return unless dev
50
+
51
+ Helpers.mkdir(@home_dir)
45
52
  exec("mount #{dev} #{@home_dir}")
46
53
  end
47
54
 
@@ -49,7 +56,7 @@ module Getch
49
56
 
50
57
  def exec(cmd)
51
58
  @log.info("==> #{cmd}")
52
- Helpers::sys(cmd)
59
+ Helpers.sys(cmd)
53
60
  end
54
61
  end
55
62
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  class Partition
@@ -6,17 +8,19 @@ module Getch
6
8
  end
7
9
 
8
10
  def gpt(dev)
9
- return if ! dev
11
+ return unless dev
12
+
10
13
  disk = disk_name(dev)
11
14
  part = dev.match(/[0-9]/)
12
15
  exec("sgdisk -n#{part}:1MiB:+1MiB -t#{part}:EF02 #{disk}")
13
16
  end
14
17
 
15
18
  def boot(dev)
16
- return if ! dev
19
+ return unless dev
20
+
17
21
  disk = disk_name(dev)
18
22
  part = dev.match(/[0-9]/)
19
- if DEFAULT_OPTIONS[:fs] == "zfs"
23
+ if Getch::OPTIONS[:fs] == 'zfs'
20
24
  exec("sgdisk -n#{part}:0:+2G -t#{part}:BE00 #{disk}")
21
25
  else
22
26
  exec("sgdisk -n#{part}:0:+128MiB -t#{part}:8300 #{disk}")
@@ -24,17 +28,19 @@ module Getch
24
28
  end
25
29
 
26
30
  def efi(dev)
27
- return if ! dev
31
+ return unless dev
32
+
28
33
  disk = disk_name(dev)
29
34
  part = dev.match(/[0-9]/)
30
35
  exec("sgdisk -n#{part}:1M:+260M -t#{part}:EF00 #{disk}")
31
36
  end
32
37
 
33
38
  def swap(dev)
34
- return if ! dev
39
+ return unless dev
40
+
35
41
  disk = disk_name(dev)
36
42
  part = dev.match(/[0-9]/)
37
- if DEFAULT_OPTIONS[:cache_disk]
43
+ if Getch::OPTIONS[:cache_disk]
38
44
  exec("sgdisk -n#{part}:0:0 -t#{part}:8200 #{disk}")
39
45
  else
40
46
  mem=`awk '/MemTotal/ {print $2}' /proc/meminfo`.chomp + 'K'
@@ -43,17 +49,19 @@ module Getch
43
49
  end
44
50
 
45
51
  def root(dev, code)
46
- return if ! dev
52
+ return unless dev
53
+
47
54
  disk = disk_name(dev)
48
55
  part = dev.match(/[0-9]/)
49
56
  exec("sgdisk -n#{part}:0:0 -t#{part}:#{code} #{disk}")
50
57
  end
51
58
 
52
59
  def home(dev, code)
53
- return if ! dev
60
+ return unless dev
61
+
54
62
  disk = disk_name(dev)
55
63
  part = dev.match(/[0-9]/)
56
- if DEFAULT_OPTIONS[:home_disk]
64
+ if Getch::OPTIONS[:home_disk]
57
65
  exec("sgdisk -n#{part}:0:0 -t#{part}:#{code} #{disk}")
58
66
  end
59
67
  end
@@ -66,8 +74,8 @@ module Getch
66
74
 
67
75
  def exec(cmd)
68
76
  @log.debug "Partition disk with #{cmd}"
69
- if DEFAULT_OPTIONS[:encrypt]
70
- Helpers::sys(cmd)
77
+ if Getch::OPTIONS[:encrypt]
78
+ Helpers.sys(cmd)
71
79
  else
72
80
  Getch::Command.new(cmd).run!
73
81
  end
@@ -1,41 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Zfs
4
- class Config < Getch::FileSystem::Zfs::Device
6
+ class Config < Device
5
7
  def initialize
6
8
  super
7
9
  gen_uuid
8
- @root_dir = MOUNTPOINT
9
10
  @init = '/usr/lib/systemd/systemd'
10
11
  end
11
12
 
12
13
  def fstab
13
- file = "#{@root_dir}/etc/fstab"
14
+ file = "#{MOUNTPOINT}/etc/fstab"
14
15
  datas = data_fstab
15
- File.write(file, datas.join("\n"))
16
- end
17
-
18
- def systemd_boot
19
- return if ! Helpers::efi?
20
- esp = '/efi'
21
- dir = "#{@root_dir}/#{esp}/loader/entries/"
22
- datas_gentoo = [
23
- 'title Gentoo Linux',
24
- 'linux /vmlinuz',
25
- 'initrd /initramfs',
26
- "options resume=UUID=#{@uuid_swap} root=ZFS=#{@pool_name}/ROOT/gentoo init=#{@init} dozfs"
27
- ]
28
- File.write("#{dir}/gentoo.conf", datas_gentoo.join("\n"))
16
+ File.write file, datas.join("\n")
29
17
  end
30
18
 
31
19
  # See https://wiki.gentoo.org/wiki/ZFS#ZFS_root
32
- def grub
33
- return if Helpers::efi?
34
- file = "#{@root_dir}/etc/default/grub"
35
- cmdline = [
36
- "GRUB_CMDLINE_LINUX=\"resume=UUID=#{@uuid_swap} root=ZFS=#{@pool_name}/ROOT/gentoo init=#{@init} dozfs\""
37
- ]
38
- File.write("#{file}", cmdline.join("\n"), mode: 'a')
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
39
25
  end
40
26
 
41
27
  private
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Zfs
4
- class Deps < Getch::FileSystem::Zfs::Device
6
+ class Deps < Device
5
7
  def make
6
8
  unstable_zfs
7
9
  install_deps
8
10
  zfs_mountpoint
9
- auto_module_rebuild
10
11
  hostid
11
- options_make
12
- Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
12
+ config_dracut
13
+ zed_update_path
13
14
  end
14
15
 
15
16
  private
@@ -17,75 +18,44 @@ module Getch
17
18
  def unstable_zfs
18
19
  conf = "#{MOUNTPOINT}/etc/portage/package.accept_keywords/zfs"
19
20
  data = [
20
- "sys-fs/zfs-kmod",
21
- "sys-fs/zfs"
21
+ 'sys-fs/zfs-kmod',
22
+ 'sys-fs/zfs'
22
23
  ]
23
- File.write(conf, data.join("\n"), mode: "w")
24
+ File.write(conf, data.join("\n"), mode: 'w')
24
25
  end
25
26
 
26
27
  def install_deps
27
- exec("euse -E libzfs") if ! Helpers::grep?("#{MOUNTPOINT}/etc/portage/make.conf", /libzfs/)
28
- exec("euse -E rootfs") if ! Helpers::grep?("#{MOUNTPOINT}/etc/portage/make.conf", /rootfs/)
29
- Getch::Bask.new('-a zfs').run!
30
- Getch::Make.new("make modules_prepare").run!
31
- Getch::Make.new("make -j$(nproc)").run!
32
- Getch::Emerge.new('genkernel sys-fs/zfs').pkg!
28
+ Getch::Emerge.new('sys-kernel/gentoo-kernel').pkg!
29
+ Getch::Emerge.new('sys-fs/zfs').pkg!
33
30
  end
34
31
 
35
32
  # See: https://wiki.archlinux.org/index.php/ZFS#Using_zfs-mount-generator
36
33
  def zfs_mountpoint
37
- Helpers::mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
38
- Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
39
- Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
40
- exec("ln -fs /usr/libexec/zfs/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d/")
41
- exec("systemctl start zfs-zed.service")
42
- Helpers::sys("sed -Ei \"s|/mnt/?|/|\" #{MOUNTPOINT}/etc/zfs/zfs-list.cache/*")
43
- exec("systemctl enable zfs-zed.service")
44
- exec("systemctl enable zfs.target")
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')
45
41
  end
46
42
 
47
- def auto_module_rebuild
48
- g_dir="#{MOUNTPOINT}/etc/portage/env/sys-kernel"
49
- Helpers::mkdir(g_dir)
50
- # See https://wiki.gentoo.org/wiki/Kernel/Upgrade#Automated_build_and_installation
51
- content=<<EOF
52
- post_pkg_postinst() {
53
- # BUG: reinstalls of a source will cause errors
54
- CURRENT_KV=$(uname -r)
55
- # Check to see if genkernel has been run previously for the running kernel and use that config
56
- if [[ -f "${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" ]] ; then
57
- genkernel --kernel-config="${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" all
58
- elif [[ -f "${EROOT}/usr/src/linux-${CURRENT_KV}/.config" ]] ; then # Use latest kernel config from current kernel
59
- genkernel --kernel-config="${EROOT}/usr/src/linux-${CURRENT_KV}/.config" all
60
- else # No valid configs known
61
- genkernel all
62
- fi
63
- }
64
- EOF
65
- File.write("#{g_dir}/gentoo-sources", content)
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
+ }
66
49
  end
67
50
 
68
51
  def hostid
69
- hostid_value=`hostid`.chomp
70
- File.write("#{MOUNTPOINT}/etc/hostid", hostid_value, mode: 'w')
52
+ exec 'zgenhostid $(hostid)'
71
53
  end
72
54
 
73
- def options_make
74
- bootloader = Helpers::efi? ? 'BOOTLOADER="no"' : 'BOOTLOADER="grub2"'
75
- datas = [
76
- '',
77
- bootloader,
78
- 'INSTALL="yes"',
79
- 'MENUCONFIG="no"',
80
- 'CLEAN="yes"',
81
- 'SAVE_CONFIG="yes"',
82
- 'MOUNTBOOT="no"',
83
- 'MRPROPER="no"',
84
- 'ZFS="yes"',
85
- 'MODULEREBUILD="yes"'
86
- ]
87
- file = "#{MOUNTPOINT}/etc/genkernel.conf"
88
- File.write(file, datas.join("\n"), mode: 'a')
55
+ def config_dracut
56
+ conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
57
+ content = 'hostonly="yes"'
58
+ Helpers.echo conf, content
89
59
  end
90
60
 
91
61
  def exec(cmd)
@@ -1,13 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Zfs
4
6
  class Device < Getch::FileSystem::Device
5
7
  def initialize
6
8
  super
7
- @id = Helpers::pool_id(@dev_root)
9
+ @id = Helpers.pool_id(@dev_root)
8
10
  @boot_pool_name = "bpool-#{@id}"
9
11
  @pool_name = "rpool-#{@id}"
10
12
  @zfs_home = @user ? true : false
13
+ @n = Getch::OPTIONS[:os]
11
14
  end
12
15
 
13
16
  private
@@ -16,9 +19,14 @@ module Getch
16
19
  if @efi
17
20
  if @boot_disk
18
21
  @dev_esp = "/dev/#{@boot_disk}1"
22
+ @dev_boot = "/dev/#{@boot_disk}2" if Getch::OPTIONS[:os] == 'void'
19
23
  else
20
24
  @dev_esp = "/dev/#{@disk}1"
21
25
  @root_part += 1
26
+ if Getch::OPTIONS[:os] == 'void'
27
+ @dev_boot = "/dev/#{@disk}#{@root_part}"
28
+ @root_part += 1
29
+ end
22
30
  end
23
31
  else
24
32
  if @boot_disk
@@ -1,62 +1,46 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Zfs
4
6
  module Encrypt
5
- class Config < Getch::FileSystem::Zfs::Encrypt::Device
7
+ class Config < Device
6
8
  def initialize
7
9
  super
8
10
  gen_uuid
9
- @root_dir = MOUNTPOINT
10
11
  @init = '/usr/lib/systemd/systemd'
11
12
  crypttab
12
13
  end
13
14
 
14
15
  def fstab
15
- file = "#{@root_dir}/etc/fstab"
16
+ file = "#{MOUNTPOINT}/etc/fstab"
16
17
  datas = data_fstab
17
18
  File.write(file, datas.join("\n"))
18
19
  end
19
20
 
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"))
21
+ def cmdline
22
+ src = "#{MOUNTPOINT}/etc/dracut.conf.d/cmdline.conf"
23
+ line = "kernel_cmdline=\"root=zfs:#{@pool_name}/ROOT/#{@n} init=#{@init} rd.vconsole.keymap=#{Getch::OPTIONS[:keymap]} zfs.force=1 zfs.zfs_arc_max=536870912\""
24
+ Helpers.echo src, line
31
25
  end
32
26
 
33
27
  def crypttab
34
28
  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]}\""
29
+ "cryptswap PARTUUID=#{@partuuid_swap} /dev/urandom swap,discard,cipher=aes-xts-plain64:sha256,size=512"
46
30
  ]
47
- File.write("#{file}", cmdline.join("\n"), mode: 'a')
31
+ File.write("#{MOUNTPOINT}/etc/crypttab", datas.join("\n"))
48
32
  end
49
33
 
50
34
  private
51
35
 
52
36
  def gen_uuid
53
- @partuuid_swap = Helpers::partuuid(@dev_swap)
37
+ @partuuid_swap = Helpers.partuuid(@dev_swap)
54
38
  @uuid_esp = `lsblk -o "UUID" #{@dev_esp} | tail -1`.chomp() if @dev_esp
55
39
  end
56
40
 
57
41
  def data_fstab
58
42
  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" : ''
43
+ swap = @dev_swap ? '/dev/mapper/cryptswap none swap sw 0 0' : ''
60
44
 
61
45
  [ boot_efi, swap ]
62
46
  end