getch 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
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