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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.md +64 -24
- data/assets/network-stack.conf +63 -0
- data/bin/getch +12 -4
- data/lib/getch.rb +113 -78
- data/lib/getch/command.rb +1 -1
- data/lib/getch/config.rb +33 -49
- data/lib/getch/config/gentoo.rb +59 -0
- data/lib/getch/config/void.rb +49 -0
- data/lib/getch/filesystem/.mount.rb.swp +0 -0
- data/lib/getch/filesystem/device.rb +5 -5
- data/lib/getch/filesystem/ext4.rb +1 -0
- data/lib/getch/filesystem/ext4/encrypt.rb +1 -0
- data/lib/getch/filesystem/ext4/encrypt/config.rb +2 -2
- data/lib/getch/filesystem/ext4/encrypt/format.rb +0 -1
- data/lib/getch/filesystem/ext4/encrypt/mount.rb +0 -1
- data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -16
- data/lib/getch/filesystem/ext4/encrypt/void.rb +100 -0
- data/lib/getch/filesystem/ext4/format.rb +1 -1
- data/lib/getch/filesystem/ext4/void.rb +43 -0
- data/lib/getch/filesystem/lvm.rb +1 -0
- data/lib/getch/filesystem/lvm/encrypt.rb +1 -0
- data/lib/getch/filesystem/lvm/encrypt/config.rb +2 -2
- data/lib/getch/filesystem/lvm/encrypt/format.rb +1 -2
- data/lib/getch/filesystem/lvm/encrypt/mount.rb +1 -2
- data/lib/getch/filesystem/lvm/encrypt/partition.rb +10 -7
- data/lib/getch/filesystem/lvm/encrypt/void.rb +100 -0
- data/lib/getch/filesystem/lvm/format.rb +1 -1
- data/lib/getch/filesystem/lvm/void.rb +45 -0
- data/lib/getch/filesystem/partition.rb +4 -4
- data/lib/getch/filesystem/zfs.rb +1 -0
- data/lib/getch/filesystem/zfs/config.rb +3 -3
- data/lib/getch/filesystem/zfs/deps.rb +11 -4
- data/lib/getch/filesystem/zfs/device.rb +6 -0
- data/lib/getch/filesystem/zfs/encrypt.rb +1 -0
- data/lib/getch/filesystem/zfs/encrypt/.mount.rb.swp +0 -0
- data/lib/getch/filesystem/zfs/encrypt/config.rb +5 -5
- data/lib/getch/filesystem/zfs/encrypt/deps.rb +11 -4
- data/lib/getch/filesystem/zfs/encrypt/device.rb +6 -0
- data/lib/getch/filesystem/zfs/encrypt/format.rb +9 -10
- data/lib/getch/filesystem/zfs/encrypt/mount.rb +5 -9
- data/lib/getch/filesystem/zfs/encrypt/partition.rb +3 -1
- data/lib/getch/filesystem/zfs/encrypt/void.rb +96 -0
- data/lib/getch/filesystem/zfs/format.rb +9 -9
- data/lib/getch/filesystem/zfs/mount.rb +5 -8
- data/lib/getch/filesystem/zfs/partition.rb +2 -1
- data/lib/getch/filesystem/zfs/void.rb +81 -0
- data/lib/getch/gentoo.rb +12 -15
- data/lib/getch/gentoo/boot.rb +7 -4
- data/lib/getch/gentoo/config.rb +8 -8
- data/lib/getch/gentoo/sources.rb +6 -3
- data/lib/getch/gentoo/stage.rb +0 -1
- data/lib/getch/gentoo/use_flag.rb +6 -7
- data/lib/getch/guard.rb +3 -1
- data/lib/getch/helpers.rb +107 -1
- data/lib/getch/log.rb +3 -2
- data/lib/getch/options.rb +41 -34
- data/lib/getch/version.rb +1 -1
- data/lib/getch/void.rb +59 -0
- data/lib/getch/void/boot.rb +80 -0
- data/lib/getch/void/chroot.rb +55 -0
- data/lib/getch/void/config.rb +87 -0
- data/lib/getch/void/stage.rb +70 -0
- metadata +22 -9
- metadata.gz.sig +0 -0
- data/.gitignore +0 -2
- data/CHANGELOG.md +0 -99
- data/Rakefile +0 -21
- data/bin/setup.sh +0 -90
- data/getch.gemspec +0 -25
Binary file
|
@@ -2,7 +2,7 @@ module Getch
|
|
2
2
|
module FileSystem
|
3
3
|
module Zfs
|
4
4
|
module Encrypt
|
5
|
-
class Config <
|
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
|
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
|
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
|
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 <
|
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
|
-
|
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 <
|
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
|
83
|
-
exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/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/
|
86
|
-
exec("zfs create #{@pool_name}/ROOT/
|
87
|
-
exec("zfs create -o canmount=off #{@pool_name}/ROOT/
|
88
|
-
exec("zfs create #{@pool_name}/ROOT/
|
89
|
-
exec("zfs create #{@pool_name}/ROOT/
|
90
|
-
exec("zfs create #{@pool_name}/ROOT/
|
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 <
|
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(
|
35
|
-
exec("zfs mount #{@pool_name}/ROOT
|
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
|
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 <
|
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 <
|
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
|
91
|
-
exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/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/
|
94
|
-
exec("zfs create #{@pool_name}/ROOT/
|
95
|
-
exec("zfs create -o canmount=off #{@pool_name}/ROOT/
|
96
|
-
exec("zfs create #{@pool_name}/ROOT/
|
97
|
-
exec("zfs create #{@pool_name}/ROOT/
|
98
|
-
exec("zfs create #{@pool_name}/ROOT/
|
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 <
|
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(
|
33
|
-
exec("zfs mount #{@pool_name}/ROOT
|
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
|
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 <
|
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
|