getch 0.1.5 → 0.1.6

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 (72) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/README.md +64 -24
  5. data/assets/network-stack.conf +63 -0
  6. data/bin/getch +12 -4
  7. data/lib/getch.rb +113 -78
  8. data/lib/getch/command.rb +1 -1
  9. data/lib/getch/config.rb +33 -49
  10. data/lib/getch/config/gentoo.rb +59 -0
  11. data/lib/getch/config/void.rb +49 -0
  12. data/lib/getch/filesystem/.mount.rb.swp +0 -0
  13. data/lib/getch/filesystem/device.rb +5 -5
  14. data/lib/getch/filesystem/ext4.rb +1 -0
  15. data/lib/getch/filesystem/ext4/encrypt.rb +1 -0
  16. data/lib/getch/filesystem/ext4/encrypt/config.rb +2 -2
  17. data/lib/getch/filesystem/ext4/encrypt/format.rb +0 -1
  18. data/lib/getch/filesystem/ext4/encrypt/mount.rb +0 -1
  19. data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -16
  20. data/lib/getch/filesystem/ext4/encrypt/void.rb +100 -0
  21. data/lib/getch/filesystem/ext4/format.rb +1 -1
  22. data/lib/getch/filesystem/ext4/void.rb +43 -0
  23. data/lib/getch/filesystem/lvm.rb +1 -0
  24. data/lib/getch/filesystem/lvm/encrypt.rb +1 -0
  25. data/lib/getch/filesystem/lvm/encrypt/config.rb +2 -2
  26. data/lib/getch/filesystem/lvm/encrypt/format.rb +1 -2
  27. data/lib/getch/filesystem/lvm/encrypt/mount.rb +1 -2
  28. data/lib/getch/filesystem/lvm/encrypt/partition.rb +10 -7
  29. data/lib/getch/filesystem/lvm/encrypt/void.rb +100 -0
  30. data/lib/getch/filesystem/lvm/format.rb +1 -1
  31. data/lib/getch/filesystem/lvm/void.rb +45 -0
  32. data/lib/getch/filesystem/partition.rb +4 -4
  33. data/lib/getch/filesystem/zfs.rb +1 -0
  34. data/lib/getch/filesystem/zfs/config.rb +3 -3
  35. data/lib/getch/filesystem/zfs/deps.rb +11 -4
  36. data/lib/getch/filesystem/zfs/device.rb +6 -0
  37. data/lib/getch/filesystem/zfs/encrypt.rb +1 -0
  38. data/lib/getch/filesystem/zfs/encrypt/.mount.rb.swp +0 -0
  39. data/lib/getch/filesystem/zfs/encrypt/config.rb +5 -5
  40. data/lib/getch/filesystem/zfs/encrypt/deps.rb +11 -4
  41. data/lib/getch/filesystem/zfs/encrypt/device.rb +6 -0
  42. data/lib/getch/filesystem/zfs/encrypt/format.rb +9 -10
  43. data/lib/getch/filesystem/zfs/encrypt/mount.rb +5 -9
  44. data/lib/getch/filesystem/zfs/encrypt/partition.rb +3 -1
  45. data/lib/getch/filesystem/zfs/encrypt/void.rb +96 -0
  46. data/lib/getch/filesystem/zfs/format.rb +9 -9
  47. data/lib/getch/filesystem/zfs/mount.rb +5 -8
  48. data/lib/getch/filesystem/zfs/partition.rb +2 -1
  49. data/lib/getch/filesystem/zfs/void.rb +81 -0
  50. data/lib/getch/gentoo.rb +12 -15
  51. data/lib/getch/gentoo/boot.rb +7 -4
  52. data/lib/getch/gentoo/config.rb +8 -8
  53. data/lib/getch/gentoo/sources.rb +6 -3
  54. data/lib/getch/gentoo/stage.rb +0 -1
  55. data/lib/getch/gentoo/use_flag.rb +6 -7
  56. data/lib/getch/guard.rb +3 -1
  57. data/lib/getch/helpers.rb +107 -1
  58. data/lib/getch/log.rb +3 -2
  59. data/lib/getch/options.rb +41 -34
  60. data/lib/getch/version.rb +1 -1
  61. data/lib/getch/void.rb +59 -0
  62. data/lib/getch/void/boot.rb +80 -0
  63. data/lib/getch/void/chroot.rb +55 -0
  64. data/lib/getch/void/config.rb +87 -0
  65. data/lib/getch/void/stage.rb +70 -0
  66. metadata +22 -9
  67. metadata.gz.sig +0 -0
  68. data/.gitignore +0 -2
  69. data/CHANGELOG.md +0 -99
  70. data/Rakefile +0 -21
  71. data/bin/setup.sh +0 -90
  72. data/getch.gemspec +0 -25
@@ -13,3 +13,4 @@ require_relative 'encrypt/format'
13
13
  require_relative 'encrypt/mount'
14
14
  require_relative 'encrypt/config'
15
15
  require_relative 'encrypt/deps'
16
+ require_relative 'encrypt/void'
@@ -2,7 +2,7 @@ module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
4
  module Encrypt
5
- class Config < Getch::FileSystem::Zfs::Encrypt::Device
5
+ class Config < Device
6
6
  def initialize
7
7
  super
8
8
  gen_uuid
@@ -25,14 +25,14 @@ module Getch
25
25
  'title Gentoo Linux',
26
26
  'linux /vmlinuz',
27
27
  'initrd /initramfs',
28
- "options root=ZFS=#{@pool_name}/ROOT/gentoo init=#{@init} dozfs keymap=#{DEFAULT_OPTIONS[:keymap]}"
28
+ "options root=ZFS=#{@pool_name}/ROOT/#{@n} init=#{@init} dozfs keymap=#{Getch::OPTIONS[:keymap]}"
29
29
  ]
30
30
  File.write("#{dir}/gentoo.conf", datas_gentoo.join("\n"))
31
31
  end
32
32
 
33
33
  def crypttab
34
34
  datas = [
35
- "cryptswap PARTUUID=#{@partuuid_swap} /dev/urandom swap,cipher=aes-xts-plain64:sha256,size=512"
35
+ "cryptswap PARTUUID=#{@partuuid_swap} /dev/urandom swap,discard,cipher=aes-xts-plain64:sha256,size=512"
36
36
  ]
37
37
  File.write("#{@root_dir}/etc/crypttab", datas.join("\n"))
38
38
  end
@@ -42,7 +42,7 @@ module Getch
42
42
  return if @efi
43
43
  file = "#{@root_dir}/etc/default/grub"
44
44
  cmdline = [
45
- "GRUB_CMDLINE_LINUX=\"root=ZFS=#{@pool_name}/ROOT/gentoo init=#{@init} dozfs keymap=#{DEFAULT_OPTIONS[:keymap]}\""
45
+ "GRUB_CMDLINE_LINUX=\"root=ZFS=#{@pool_name}/ROOT/#{@n} init=#{@init} dozfs keymap=#{Getch::OPTIONS[:keymap]}\""
46
46
  ]
47
47
  File.write("#{file}", cmdline.join("\n"), mode: 'a')
48
48
  end
@@ -56,7 +56,7 @@ module Getch
56
56
 
57
57
  def data_fstab
58
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" : ''
59
+ swap = @dev_swap ? "/dev/mapper/cryptswap none swap sw 0 0" : ''
60
60
 
61
61
  [ boot_efi, swap ]
62
62
  end
@@ -2,7 +2,7 @@ module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
4
  module Encrypt
5
- class Deps < Getch::FileSystem::Zfs::Encrypt::Device
5
+ class Deps < Device
6
6
  def make
7
7
  unstable_zfs
8
8
  install_deps
@@ -11,6 +11,7 @@ module Getch
11
11
  hostid
12
12
  options_make
13
13
  Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
14
+ zed_update_path
14
15
  end
15
16
 
16
17
  private
@@ -37,11 +38,18 @@ module Getch
37
38
  Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
38
39
  exec("ln -fs /usr/libexec/zfs/zed.d/history_event-zfs-list-cacher.sh /etc/zfs/zed.d/")
39
40
  exec("systemctl start zfs-zed.service")
40
- Helpers::sys("sed -Ei \"s|/mnt/?|/|\" #{MOUNTPOINT}/etc/zfs/zfs-list.cache/*")
41
41
  exec("systemctl enable zfs-zed.service")
42
42
  exec("systemctl enable zfs.target")
43
43
  end
44
44
 
45
+ def zed_update_path
46
+ Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each { |f|
47
+ if !system("sed", "-Ei", "s|#{MOUNTPOINT}/?|/|", f)
48
+ raise "System exec sed"
49
+ end
50
+ }
51
+ end
52
+
45
53
  def auto_module_rebuild
46
54
  g_dir="#{MOUNTPOINT}/etc/portage/env/sys-kernel"
47
55
  Helpers::mkdir(g_dir)
@@ -64,8 +72,7 @@ EOF
64
72
  end
65
73
 
66
74
  def hostid
67
- hostid_value=`hostid`.chomp
68
- File.write("#{MOUNTPOINT}/etc/hostid", hostid_value, mode: 'w')
75
+ exec "zgenhostid $(hostid)"
69
76
  end
70
77
 
71
78
  def options_make
@@ -9,6 +9,7 @@ module Getch
9
9
  @boot_pool_name = "bpool-#{@id}"
10
10
  @pool_name = "rpool-#{@id}"
11
11
  @zfs_home = @user ? true : false
12
+ @n = Getch::OPTIONS[:os]
12
13
  end
13
14
 
14
15
  private
@@ -17,9 +18,14 @@ module Getch
17
18
  if @efi
18
19
  if @boot_disk
19
20
  @dev_esp = "/dev/#{@boot_disk}1"
21
+ @dev_boot = "/dev/#{@boot_disk}2" if Getch::OPTIONS[:os] == 'void'
20
22
  else
21
23
  @dev_esp = "/dev/#{@disk}1"
22
24
  @root_part += 1
25
+ if Getch::OPTIONS[:os] == 'void'
26
+ @dev_boot = "/dev/#{@disk}#{@root_part}"
27
+ @root_part += 1
28
+ end
23
29
  end
24
30
  else
25
31
  if @boot_disk
@@ -2,7 +2,7 @@ module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
4
  module Encrypt
5
- class Format < Getch::FileSystem::Zfs::Encrypt::Device
5
+ class Format < Device
6
6
  def initialize
7
7
  super
8
8
  @log = Getch::Log.new()
@@ -22,7 +22,6 @@ module Getch
22
22
  return if STATES[:format]
23
23
  raise "Error, no id found for #{@dev_root}." if ! @id
24
24
  system("mkfs.fat -F32 #{@dev_esp}") if @dev_esp
25
- system("mkswap -f #{@dev_swap}")
26
25
  zfs
27
26
  datasets
28
27
  @state.format
@@ -79,15 +78,15 @@ module Getch
79
78
  exec("zfs create -o canmount=off -o mountpoint=none #{@pool_name}/ROOT")
80
79
  exec("zfs create -o canmount=off -o mountpoint=none #{@boot_pool_name}/BOOT") if @dev_boot
81
80
 
82
- exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/gentoo")
83
- exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/gentoo") if @dev_boot
81
+ exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/#{@n}")
82
+ exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/#{@n}") if @dev_boot
84
83
 
85
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/usr")
86
- exec("zfs create #{@pool_name}/ROOT/gentoo/usr/src")
87
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/var")
88
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/log")
89
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/db")
90
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/tmp")
84
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/#{@n}/usr")
85
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/usr/src")
86
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/#{@n}/var")
87
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/var/log")
88
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/var/db")
89
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/var/tmp")
91
90
 
92
91
  exec("zfs create -o canmount=off -o mountpoint=/ #{@pool_name}/USERDATA")
93
92
  exec("zfs create -o canmount=on -o mountpoint=/root #{@pool_name}/USERDATA/root")
@@ -1,13 +1,10 @@
1
- require 'fileutils'
2
-
3
1
  module Getch
4
2
  module FileSystem
5
3
  module Zfs
6
4
  module Encrypt
7
- class Mount < Getch::FileSystem::Zfs::Encrypt::Device
5
+ class Mount < Device
8
6
  def initialize
9
7
  super
10
- @root_dir = MOUNTPOINT
11
8
  @mount = Getch::FileSystem::Mount.new
12
9
  @state = Getch::States.new
13
10
  @log = Getch::Log.new
@@ -18,9 +15,8 @@ module Getch
18
15
  exec("zpool export -a")
19
16
  exec("rm -rf #{MOUNTPOINT}/*")
20
17
  exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
21
- exec("zpool import -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
18
+ exec("zpool import -f -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
22
19
  exec("zfs load-key -a")
23
- @mount.swap(@dev_swap)
24
20
  mount_root
25
21
  mount_boot
26
22
  @mount.esp(@dev_esp)
@@ -31,13 +27,13 @@ module Getch
31
27
  private
32
28
 
33
29
  def mount_root
34
- Helpers::mkdir(@root_dir)
35
- exec("zfs mount #{@pool_name}/ROOT/gentoo")
30
+ Helpers::mkdir(MOUNTPOINT)
31
+ exec("zfs mount #{@pool_name}/ROOT/#{@n}")
36
32
  end
37
33
 
38
34
  def mount_boot
39
35
  return if ! @dev_boot
40
- exec("zfs mount #{@boot_pool_name}/BOOT/gentoo")
36
+ exec("zfs mount #{@boot_pool_name}/BOOT/#{@n}")
41
37
  end
42
38
 
43
39
  def exec(cmd)
@@ -2,7 +2,7 @@ module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
4
  module Encrypt
5
- class Partition < Getch::FileSystem::Zfs::Encrypt::Device
5
+ class Partition < Device
6
6
  def initialize
7
7
  super
8
8
  @state = Getch::States.new()
@@ -28,6 +28,7 @@ module Getch
28
28
  def partition
29
29
  if Helpers::efi?
30
30
  @partition.efi(@dev_esp)
31
+ @partition.boot(@dev_boot) if Getch::OPTIONS[:os] == 'void'
31
32
  @partition.swap(@dev_swap) if !@cache_disk
32
33
  @partition.root(@dev_root, "BF00") if @root_part != 1
33
34
  else
@@ -57,6 +58,7 @@ module Getch
57
58
  # / - Root
58
59
 
59
60
  def exec(cmd)
61
+ @log.info("===> #{cmd}")
60
62
  Helpers::sys(cmd)
61
63
  end
62
64
  end
@@ -0,0 +1,96 @@
1
+ require_relative '../../../helpers'
2
+
3
+ module Getch
4
+ module FileSystem
5
+ module Zfs
6
+ module Encrypt
7
+ class Void < Device
8
+ include Helpers::Void
9
+ attr_reader :boot_disk
10
+
11
+ def initialize
12
+ super
13
+ hostid
14
+ zfs_zed # mountpoint for zfs
15
+ end
16
+
17
+ # Fstab contain:
18
+ # > /efi noauto
19
+ # > swap
20
+ # > /boot zfs-legacy
21
+ # > /tmp
22
+ def fstab
23
+ conf = "#{MOUNTPOINT}/etc/fstab"
24
+ File.write(conf, "\n", mode: 'w', chmod: 0644)
25
+ line_fstab(@dev_esp, "/efi vfat noauto,rw,relatime 0 0") if @dev_esp
26
+ add_line(conf, "/dev/mapper/cryptswap none swap sw 0 0")
27
+ add_line(conf, "##{@boot_pool_name}/BOOT/#{@n} /boot zfs defaults 0 0") if @dev_boot
28
+ add_line(conf, "tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0")
29
+ end
30
+
31
+ def config_dracut
32
+ conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
33
+ # dracut: value+= should be surrounding by white space
34
+ content = [
35
+ "hostonly=\"yes\"",
36
+ "omit_dracutmodules+=\" btrfs lvm \"",
37
+ "install_items+=\" /etc/crypttab \"",
38
+ ""
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")
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}" if !device
67
+ raise "Bad partuuid for #{dev} #{device}" if device.kind_of? Array
68
+ add_line(conf, "#{mapname} PARTUUID=#{device} #{point} #{rest}")
69
+ end
70
+
71
+ def zfs_zed
72
+ service_dir = "/etc/runit/runsvdir/default/"
73
+
74
+ Helpers::mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
75
+ Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
76
+ Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
77
+ fork { command "/etc/sv/zed/run" }
78
+ command "ln -fs /etc/sv/zed #{service_dir}"
79
+ end
80
+
81
+ def zed_update_path
82
+ Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each { |f|
83
+ if !system("sed", "-Ei", "s|#{MOUNTPOINT}/?|/|", f)
84
+ raise "System exec sed"
85
+ end
86
+ }
87
+ end
88
+
89
+ def hostid
90
+ command "zgenhostid $(hostid)"
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -1,7 +1,7 @@
1
1
  module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
- class Format < Getch::FileSystem::Zfs::Device
4
+ class Format < Device
5
5
  def initialize
6
6
  super
7
7
  @log = Getch::Log.new
@@ -87,15 +87,15 @@ module Getch
87
87
  exec("zfs create -o canmount=off -o mountpoint=none #{@pool_name}/ROOT")
88
88
  exec("zfs create -o canmount=off -o mountpoint=none #{@boot_pool_name}/BOOT") if @dev_boot
89
89
 
90
- exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/gentoo")
91
- exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/gentoo") if @dev_boot
90
+ exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/#{@n}")
91
+ exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/#{@n}") if @dev_boot
92
92
 
93
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/usr")
94
- exec("zfs create #{@pool_name}/ROOT/gentoo/usr/src")
95
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/var")
96
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/log")
97
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/db")
98
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/tmp")
93
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/#{@n}/usr")
94
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/usr/src")
95
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/#{@n}/var")
96
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/var/log")
97
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/var/db")
98
+ exec("zfs create #{@pool_name}/ROOT/#{@n}/var/tmp")
99
99
 
100
100
  exec("zfs create -o canmount=off -o mountpoint=/ #{@pool_name}/USERDATA")
101
101
  exec("zfs create -o canmount=on -o mountpoint=/root #{@pool_name}/USERDATA/root")
@@ -1,12 +1,9 @@
1
- require 'fileutils'
2
-
3
1
  module Getch
4
2
  module FileSystem
5
3
  module Zfs
6
- class Mount < Getch::FileSystem::Zfs::Device
4
+ class Mount < Device
7
5
  def initialize
8
6
  super
9
- @root_dir = MOUNTPOINT
10
7
  @mount = Getch::FileSystem::Mount.new
11
8
  @state = Getch::States.new
12
9
  @log = Getch::Log.new
@@ -17,7 +14,7 @@ module Getch
17
14
  exec("zpool export -a")
18
15
  exec("rm -rf #{MOUNTPOINT}/*")
19
16
  exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
20
- exec("zpool import -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
17
+ exec("zpool import -f -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
21
18
  @mount.swap(@dev_swap)
22
19
  mount_root
23
20
  mount_boot
@@ -29,13 +26,13 @@ module Getch
29
26
  private
30
27
 
31
28
  def mount_root
32
- Helpers::mkdir(@root_dir)
33
- exec("zfs mount #{@pool_name}/ROOT/gentoo")
29
+ Helpers::mkdir(MOUNTPOINT)
30
+ exec("zfs mount #{@pool_name}/ROOT/#{@n}")
34
31
  end
35
32
 
36
33
  def mount_boot
37
34
  return if ! @dev_boot
38
- exec("zfs mount #{@boot_pool_name}/BOOT/gentoo")
35
+ exec("zfs mount #{@boot_pool_name}/BOOT/#{@n}")
39
36
  end
40
37
 
41
38
  def exec(cmd)
@@ -1,7 +1,7 @@
1
1
  module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
- class Partition < Getch::FileSystem::Zfs::Device
4
+ class Partition < Device
5
5
  def initialize
6
6
  super
7
7
  @clean = Getch::FileSystem::Clean
@@ -27,6 +27,7 @@ module Getch
27
27
  def partition
28
28
  if @efi
29
29
  @partition.efi(@dev_esp)
30
+ @partition.boot(@dev_boot) if Getch::OPTIONS[:os] == 'void'
30
31
  @partition.swap(@dev_swap) if !@cache_disk
31
32
  @partition.root(@dev_root, "BF00") if @root_part != 1
32
33
  else
@@ -0,0 +1,81 @@
1
+ require_relative '../../helpers'
2
+
3
+ module Getch
4
+ module FileSystem
5
+ module Zfs
6
+ class Void < Device
7
+ include Helpers::Void
8
+ attr_reader :boot_disk
9
+
10
+ def initialize
11
+ super
12
+ hostid
13
+ zfs_zed # mountpoint for zfs
14
+ end
15
+
16
+ # Fstab contain:
17
+ # > /efi noauto
18
+ # > swap
19
+ # > /boot zfs-legacy
20
+ # > /tmp
21
+ def fstab
22
+ conf = "#{MOUNTPOINT}/etc/fstab"
23
+ File.write(conf, "\n", mode: 'w', chmod: 0644)
24
+ line_fstab(@dev_esp, "/efi vfat noauto,rw,relatime 0 0") if @dev_esp
25
+ line_fstab(@dev_swap, "swap swap rw,noatime,discard 0 0") if @dev_swap
26
+ #add_line(conf, "#{@boot_pool_name}/BOOT/#{@n} /boot zfs defaults 0 0") if @dev_boot
27
+ add_line(conf, "tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0")
28
+ end
29
+
30
+ def config_dracut
31
+ conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
32
+ # dracut: value+= should be surrounding by white space
33
+ content = [
34
+ "hostonly=\"yes\"",
35
+ "omit_dracutmodules+=\" btrfs lvm \"",
36
+ ""
37
+ ]
38
+ File.write(conf, content.join("\n"), mode: 'w', chmod: 0644)
39
+ end
40
+
41
+ def kernel_cmdline_dracut
42
+ #command "zfs set mountpoint=legacy #{@boot_pool_name}/BOOT/#{@n}"
43
+ end
44
+
45
+ def config_grub
46
+ grub_cmdline("root=zfs:#{@pool_name}/ROOT/#{@n}", "zfs_force=1")
47
+ end
48
+
49
+ def finish
50
+ zed_update_path
51
+ puts "+ Enter in your system: chroot /mnt /bin/bash"
52
+ puts "+ Reboot with: shutdown -r now"
53
+ end
54
+
55
+ private
56
+
57
+ def zfs_zed
58
+ service_dir = "/etc/runit/runsvdir/default/"
59
+
60
+ Helpers::mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
61
+ Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
62
+ Helpers::touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
63
+ fork { command "/etc/sv/zed/run" }
64
+ command "ln -fs /etc/sv/zed #{service_dir}"
65
+ end
66
+
67
+ def zed_update_path
68
+ Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each { |f|
69
+ if !system("sed", "-Ei", "s|#{MOUNTPOINT}/?|/|", f)
70
+ raise "System exec sed"
71
+ end
72
+ }
73
+ end
74
+
75
+ def hostid
76
+ command "zgenhostid $(hostid)"
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end