getch 0.1.6 → 0.1.9
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/README.md +17 -26
- data/assets/system.conf +38 -0
- data/lib/cmdline.rb +128 -0
- data/lib/getch/command.rb +31 -21
- data/lib/getch/config/gentoo.rb +22 -23
- data/lib/getch/config/void.rb +8 -10
- data/lib/getch/config.rb +5 -2
- data/lib/getch/filesystem/clean.rb +15 -15
- data/lib/getch/filesystem/device.rb +3 -1
- data/lib/getch/filesystem/ext4/config.rb +8 -4
- data/lib/getch/filesystem/ext4/deps.rb +3 -1
- data/lib/getch/filesystem/ext4/device.rb +2 -3
- data/lib/getch/filesystem/ext4/encrypt/config.rb +12 -7
- data/lib/getch/filesystem/ext4/encrypt/deps.rb +4 -2
- data/lib/getch/filesystem/ext4/encrypt/device.rb +5 -3
- data/lib/getch/filesystem/ext4/encrypt/format.rb +4 -1
- data/lib/getch/filesystem/ext4/encrypt/mount.rb +3 -2
- data/lib/getch/filesystem/ext4/encrypt/partition.rb +21 -21
- data/lib/getch/filesystem/ext4/encrypt/void.rb +22 -21
- data/lib/getch/filesystem/ext4/encrypt.rb +2 -0
- data/lib/getch/filesystem/ext4/format.rb +3 -0
- data/lib/getch/filesystem/ext4/mount.rb +3 -0
- data/lib/getch/filesystem/ext4/partition.rb +9 -6
- data/lib/getch/filesystem/ext4/void.rb +8 -7
- data/lib/getch/filesystem/ext4.rb +2 -0
- data/lib/getch/filesystem/lvm/config.rb +7 -22
- data/lib/getch/filesystem/lvm/deps.rb +6 -4
- data/lib/getch/filesystem/lvm/device.rb +2 -0
- data/lib/getch/filesystem/lvm/encrypt/config.rb +12 -9
- data/lib/getch/filesystem/lvm/encrypt/deps.rb +6 -3
- data/lib/getch/filesystem/lvm/encrypt/device.rb +4 -2
- data/lib/getch/filesystem/lvm/encrypt/format.rb +4 -0
- data/lib/getch/filesystem/lvm/encrypt/mount.rb +3 -0
- data/lib/getch/filesystem/lvm/encrypt/partition.rb +7 -7
- data/lib/getch/filesystem/lvm/encrypt/void.rb +20 -19
- data/lib/getch/filesystem/lvm/encrypt.rb +2 -0
- data/lib/getch/filesystem/lvm/format.rb +3 -0
- data/lib/getch/filesystem/lvm/mount.rb +3 -0
- data/lib/getch/filesystem/lvm/partition.rb +8 -5
- data/lib/getch/filesystem/lvm/void.rb +7 -6
- data/lib/getch/filesystem/lvm.rb +2 -0
- data/lib/getch/filesystem/mount.rb +19 -12
- data/lib/getch/filesystem/partition.rb +16 -8
- data/lib/getch/filesystem/zfs/config.rb +9 -23
- data/lib/getch/filesystem/zfs/deps.rb +22 -57
- data/lib/getch/filesystem/zfs/device.rb +3 -1
- data/lib/getch/filesystem/zfs/encrypt/config.rb +10 -26
- data/lib/getch/filesystem/zfs/encrypt/deps.rb +25 -60
- data/lib/getch/filesystem/zfs/encrypt/device.rb +3 -1
- data/lib/getch/filesystem/zfs/encrypt/format.rb +12 -8
- data/lib/getch/filesystem/zfs/encrypt/mount.rb +13 -8
- data/lib/getch/filesystem/zfs/encrypt/partition.rb +18 -15
- data/lib/getch/filesystem/zfs/encrypt/void.rb +23 -22
- data/lib/getch/filesystem/zfs/encrypt.rb +2 -0
- data/lib/getch/filesystem/zfs/format.rb +9 -5
- data/lib/getch/filesystem/zfs/mount.rb +9 -7
- data/lib/getch/filesystem/zfs/partition.rb +15 -12
- data/lib/getch/filesystem/zfs/void.rb +20 -20
- data/lib/getch/filesystem/zfs.rb +2 -0
- data/lib/getch/filesystem.rb +2 -0
- data/lib/getch/gentoo/boot.rb +21 -72
- data/lib/getch/gentoo/bootloader.rb +68 -0
- data/lib/getch/gentoo/chroot.rb +26 -33
- data/lib/getch/gentoo/config.rb +30 -26
- data/lib/getch/gentoo/sources.rb +55 -66
- data/lib/getch/gentoo/stage.rb +12 -12
- data/lib/getch/gentoo/use.rb +3 -7
- data/lib/getch/gentoo/use_flag.rb +77 -51
- data/lib/getch/gentoo.rb +22 -8
- data/lib/getch/guard.rb +50 -43
- data/lib/getch/helpers.rb +155 -143
- data/lib/getch/log.rb +7 -5
- data/lib/getch/options.rb +16 -14
- data/lib/getch/states.rb +10 -3
- data/lib/getch/version.rb +1 -1
- data/lib/getch/void/boot.rb +18 -14
- data/lib/getch/void/chroot.rb +20 -19
- data/lib/getch/void/config.rb +20 -17
- data/lib/getch/void/stage.rb +13 -14
- data/lib/getch/void.rb +7 -1
- data/lib/getch.rb +13 -5
- data.tar.gz.sig +0 -0
- metadata +6 -5
- metadata.gz.sig +0 -0
- data/lib/getch/filesystem/.mount.rb.swp +0 -0
- data/lib/getch/filesystem/zfs/encrypt/.mount.rb.swp +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -6,57 +8,39 @@ module Getch
|
|
|
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 = "#{
|
|
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
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
datas_gentoo = [
|
|
25
|
-
'title Gentoo Linux',
|
|
26
|
-
'linux /vmlinuz',
|
|
27
|
-
'initrd /initramfs',
|
|
28
|
-
"options root=ZFS=#{@pool_name}/ROOT/#{@n} init=#{@init} dozfs keymap=#{Getch::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
29
|
"cryptswap PARTUUID=#{@partuuid_swap} /dev/urandom swap,discard,cipher=aes-xts-plain64:sha256,size=512"
|
|
36
30
|
]
|
|
37
|
-
File.write("#{
|
|
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/#{@n} init=#{@init} dozfs keymap=#{Getch::OPTIONS[:keymap]}\""
|
|
46
|
-
]
|
|
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
|
|
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 ?
|
|
43
|
+
swap = @dev_swap ? '/dev/mapper/cryptswap none swap sw 0 0' : ''
|
|
60
44
|
|
|
61
45
|
[ boot_efi, swap ]
|
|
62
46
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -7,91 +9,54 @@ module Getch
|
|
|
7
9
|
unstable_zfs
|
|
8
10
|
install_deps
|
|
9
11
|
zfs_mountpoint
|
|
10
|
-
auto_module_rebuild
|
|
11
12
|
hostid
|
|
12
|
-
|
|
13
|
-
Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
|
|
13
|
+
config_dracut
|
|
14
14
|
zed_update_path
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
private
|
|
18
|
+
|
|
18
19
|
def unstable_zfs
|
|
19
20
|
conf = "#{MOUNTPOINT}/etc/portage/package.accept_keywords/zfs"
|
|
20
21
|
data = [
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
'sys-fs/zfs-kmod',
|
|
23
|
+
'sys-fs/zfs'
|
|
23
24
|
]
|
|
24
|
-
File.write(conf, data.join("\n"), mode:
|
|
25
|
+
File.write(conf, data.join("\n"), mode: 'w')
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
def install_deps
|
|
28
|
-
Getch::
|
|
29
|
-
Getch::
|
|
30
|
-
Getch::Make.new("make -j$(nproc)").run!
|
|
31
|
-
Getch::Emerge.new('genkernel sys-fs/zfs').pkg!
|
|
29
|
+
Getch::Emerge.new('sys-kernel/gentoo-kernel').pkg!
|
|
30
|
+
Getch::Emerge.new('sys-fs/zfs').pkg!
|
|
32
31
|
end
|
|
33
32
|
|
|
34
33
|
# See: https://wiki.archlinux.org/index.php/ZFS#Using_zfs-mount-generator
|
|
35
34
|
def zfs_mountpoint
|
|
36
|
-
Helpers
|
|
37
|
-
Helpers
|
|
38
|
-
Helpers
|
|
39
|
-
exec(
|
|
40
|
-
exec(
|
|
41
|
-
exec(
|
|
42
|
-
exec(
|
|
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
|
+
exec('systemctl enable zfs-zed.service')
|
|
41
|
+
exec('systemctl enable zfs.target')
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
def zed_update_path
|
|
46
|
-
Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each
|
|
47
|
-
|
|
48
|
-
raise
|
|
45
|
+
Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each do |f|
|
|
46
|
+
unless system('sed', '-Ei', "s|#{MOUNTPOINT}/?|/|", f)
|
|
47
|
+
raise 'System exec sed'
|
|
49
48
|
end
|
|
50
|
-
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def auto_module_rebuild
|
|
54
|
-
g_dir="#{MOUNTPOINT}/etc/portage/env/sys-kernel"
|
|
55
|
-
Helpers::mkdir(g_dir)
|
|
56
|
-
# See https://wiki.gentoo.org/wiki/Kernel/Upgrade#Automated_build_and_installation
|
|
57
|
-
content=<<EOF
|
|
58
|
-
post_pkg_postinst() {
|
|
59
|
-
# BUG: reinstalls of a source will cause errors
|
|
60
|
-
CURRENT_KV=$(uname -r)
|
|
61
|
-
# Check to see if genkernel has been run previously for the running kernel and use that config
|
|
62
|
-
if [[ -f "${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" ]] ; then
|
|
63
|
-
genkernel --kernel-config="${EROOT}/etc/kernels/kernel-config-${CURRENT_KV}" all
|
|
64
|
-
elif [[ -f "${EROOT}/usr/src/linux-${CURRENT_KV}/.config" ]] ; then # Use latest kernel config from current kernel
|
|
65
|
-
genkernel --kernel-config="${EROOT}/usr/src/linux-${CURRENT_KV}/.config" all
|
|
66
|
-
else # No valid configs known
|
|
67
|
-
genkernel all
|
|
68
|
-
fi
|
|
69
|
-
}
|
|
70
|
-
EOF
|
|
71
|
-
File.write("#{g_dir}/gentoo-sources", content)
|
|
49
|
+
end
|
|
72
50
|
end
|
|
73
51
|
|
|
74
52
|
def hostid
|
|
75
|
-
exec
|
|
53
|
+
exec 'zgenhostid $(hostid)'
|
|
76
54
|
end
|
|
77
55
|
|
|
78
|
-
def
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
bootloader,
|
|
83
|
-
'INSTALL="yes"',
|
|
84
|
-
'MENUCONFIG="no"',
|
|
85
|
-
'CLEAN="yes"',
|
|
86
|
-
'KEYMAP="yes"',
|
|
87
|
-
'SAVE_CONFIG="yes"',
|
|
88
|
-
'MOUNTBOOT="no"',
|
|
89
|
-
'MRPROPER="no"',
|
|
90
|
-
'ZFS="yes"',
|
|
91
|
-
'MODULEREBUILD="yes"'
|
|
92
|
-
]
|
|
93
|
-
file = "#{MOUNTPOINT}/etc/genkernel.conf"
|
|
94
|
-
File.write(file, datas.join("\n"), mode: 'a')
|
|
56
|
+
def config_dracut
|
|
57
|
+
conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
|
|
58
|
+
content = 'hostonly="yes"'
|
|
59
|
+
Helpers.echo conf, content
|
|
95
60
|
end
|
|
96
61
|
|
|
97
62
|
def exec(cmd)
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -5,7 +7,7 @@ module Getch
|
|
|
5
7
|
class Device < Getch::FileSystem::Device
|
|
6
8
|
def initialize
|
|
7
9
|
super
|
|
8
|
-
@id = Helpers
|
|
10
|
+
@id = Helpers.pool_id(@dev_root)
|
|
9
11
|
@boot_pool_name = "bpool-#{@id}"
|
|
10
12
|
@pool_name = "rpool-#{@id}"
|
|
11
13
|
@zfs_home = @user ? true : false
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -5,11 +7,11 @@ module Getch
|
|
|
5
7
|
class Format < Device
|
|
6
8
|
def initialize
|
|
7
9
|
super
|
|
8
|
-
@log = Getch::Log.new
|
|
9
|
-
@state = Getch::States.new
|
|
10
|
-
|
|
10
|
+
@log = Getch::Log.new
|
|
11
|
+
@state = Getch::States.new
|
|
12
|
+
unless @id
|
|
11
13
|
@log.info "Research pool id for #{@dev_root}..."
|
|
12
|
-
@id = Helpers
|
|
14
|
+
@id = Helpers.pool_id(@dev_root)
|
|
13
15
|
@boot_pool_name = "bpool-#{@id}"
|
|
14
16
|
@pool_name = "rpool-#{@id}"
|
|
15
17
|
end
|
|
@@ -20,7 +22,8 @@ module Getch
|
|
|
20
22
|
|
|
21
23
|
def format
|
|
22
24
|
return if STATES[:format]
|
|
23
|
-
raise "Error, no id found for #{@dev_root}."
|
|
25
|
+
raise "Error, no id found for #{@dev_root}." unless @id
|
|
26
|
+
|
|
24
27
|
system("mkfs.fat -F32 #{@dev_esp}") if @dev_esp
|
|
25
28
|
zfs
|
|
26
29
|
datasets
|
|
@@ -29,7 +32,8 @@ module Getch
|
|
|
29
32
|
|
|
30
33
|
def zfs
|
|
31
34
|
bloc=`blockdev --getpbsz #{@dev_root}`
|
|
32
|
-
ashift =
|
|
35
|
+
ashift =
|
|
36
|
+
case bloc
|
|
33
37
|
when /8096/
|
|
34
38
|
13
|
|
35
39
|
when /4096/
|
|
@@ -38,7 +42,7 @@ module Getch
|
|
|
38
42
|
9
|
|
39
43
|
end
|
|
40
44
|
|
|
41
|
-
Helpers
|
|
45
|
+
Helpers.mkdir(MOUNTPOINT)
|
|
42
46
|
|
|
43
47
|
@log.debug("ashift found for #{bloc} - #{ashift}")
|
|
44
48
|
if @dev_boot
|
|
@@ -94,7 +98,7 @@ module Getch
|
|
|
94
98
|
end
|
|
95
99
|
|
|
96
100
|
def exec(cmd)
|
|
97
|
-
Helpers
|
|
101
|
+
Helpers.sys(cmd)
|
|
98
102
|
end
|
|
99
103
|
end
|
|
100
104
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -8,37 +10,40 @@ module Getch
|
|
|
8
10
|
@mount = Getch::FileSystem::Mount.new
|
|
9
11
|
@state = Getch::States.new
|
|
10
12
|
@log = Getch::Log.new
|
|
13
|
+
@import = '/dev/disk/by-id'
|
|
11
14
|
end
|
|
12
15
|
|
|
13
16
|
def run
|
|
14
17
|
return if STATES[:mount]
|
|
15
|
-
|
|
18
|
+
|
|
19
|
+
exec('zpool export -a')
|
|
16
20
|
exec("rm -rf #{MOUNTPOINT}/*")
|
|
17
|
-
exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
|
|
18
|
-
exec("zpool import -f -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
|
|
19
|
-
exec(
|
|
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')
|
|
20
24
|
mount_root
|
|
21
25
|
mount_boot
|
|
22
26
|
@mount.esp(@dev_esp)
|
|
23
|
-
exec(
|
|
27
|
+
exec('zfs mount -a')
|
|
24
28
|
@state.mount
|
|
25
29
|
end
|
|
26
30
|
|
|
27
31
|
private
|
|
28
32
|
|
|
29
33
|
def mount_root
|
|
30
|
-
Helpers
|
|
34
|
+
Helpers.mkdir(MOUNTPOINT)
|
|
31
35
|
exec("zfs mount #{@pool_name}/ROOT/#{@n}")
|
|
32
36
|
end
|
|
33
37
|
|
|
34
38
|
def mount_boot
|
|
35
|
-
return
|
|
39
|
+
return unless @dev_boot
|
|
40
|
+
|
|
36
41
|
exec("zfs mount #{@boot_pool_name}/BOOT/#{@n}")
|
|
37
42
|
end
|
|
38
43
|
|
|
39
44
|
def exec(cmd)
|
|
40
45
|
@log.info("==> #{cmd}")
|
|
41
|
-
Helpers
|
|
46
|
+
Helpers.sys(cmd)
|
|
42
47
|
end
|
|
43
48
|
end
|
|
44
49
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -5,15 +7,16 @@ module Getch
|
|
|
5
7
|
class Partition < Device
|
|
6
8
|
def initialize
|
|
7
9
|
super
|
|
8
|
-
@state = Getch::States.new
|
|
10
|
+
@state = Getch::States.new
|
|
9
11
|
@clean = Getch::FileSystem::Clean
|
|
10
12
|
@partition = Getch::FileSystem::Partition.new
|
|
11
|
-
@log = Getch::Log.new
|
|
13
|
+
@log = Getch::Log.new
|
|
12
14
|
run
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
def run
|
|
16
|
-
return if STATES[:partition
|
|
18
|
+
return if STATES[:partition]
|
|
19
|
+
|
|
17
20
|
@clean.old_zpool
|
|
18
21
|
@clean.hdd(@disk)
|
|
19
22
|
@clean.external_disk(@disk, @boot_disk, @cache_disk, @home_disk)
|
|
@@ -26,26 +29,26 @@ module Getch
|
|
|
26
29
|
private
|
|
27
30
|
|
|
28
31
|
def partition
|
|
29
|
-
if Helpers
|
|
32
|
+
if Helpers.efi?
|
|
30
33
|
@partition.efi(@dev_esp)
|
|
31
34
|
@partition.boot(@dev_boot) if Getch::OPTIONS[:os] == 'void'
|
|
32
|
-
@partition.swap(@dev_swap)
|
|
33
|
-
@partition.root(@dev_root,
|
|
35
|
+
@partition.swap(@dev_swap) unless @cache_disk
|
|
36
|
+
@partition.root(@dev_root, 'BF00') if @root_part != 1
|
|
34
37
|
else
|
|
35
38
|
@partition.gpt(@dev_gpt)
|
|
36
39
|
@partition.boot(@dev_boot)
|
|
37
|
-
@partition.swap(@dev_swap)
|
|
38
|
-
@partition.root(@dev_root,
|
|
40
|
+
@partition.swap(@dev_swap) unless @cache_disk
|
|
41
|
+
@partition.root(@dev_root, 'BF00') if @root_part != 1
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
44
|
|
|
42
45
|
def cache
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
return unless @cache_disk
|
|
47
|
+
|
|
48
|
+
mem = `awk '/MemTotal/ {print $2}' /proc/meminfo`.chomp + 'K'
|
|
49
|
+
exec("sgdisk -n1:0:+#{mem} -t1:8200 /dev/#{@cache_disk}")
|
|
50
|
+
exec("sgdisk -n2:0:+4G -t2:BF07 /dev/#{@cache_disk}")
|
|
51
|
+
exec("sgdisk -n3:0:0 -t3:BF08 /dev/#{@cache_disk}")
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
# Partition_efi
|
|
@@ -59,7 +62,7 @@ module Getch
|
|
|
59
62
|
|
|
60
63
|
def exec(cmd)
|
|
61
64
|
@log.info("===> #{cmd}")
|
|
62
|
-
Helpers
|
|
65
|
+
Helpers.sys(cmd)
|
|
63
66
|
end
|
|
64
67
|
end
|
|
65
68
|
end
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Getch
|
|
4
4
|
module FileSystem
|
|
@@ -6,6 +6,7 @@ module Getch
|
|
|
6
6
|
module Encrypt
|
|
7
7
|
class Void < Device
|
|
8
8
|
include Helpers::Void
|
|
9
|
+
|
|
9
10
|
attr_reader :boot_disk
|
|
10
11
|
|
|
11
12
|
def initialize
|
|
@@ -23,19 +24,18 @@ module Getch
|
|
|
23
24
|
conf = "#{MOUNTPOINT}/etc/fstab"
|
|
24
25
|
File.write(conf, "\n", mode: 'w', chmod: 0644)
|
|
25
26
|
line_fstab(@dev_esp, "/efi vfat noauto,rw,relatime 0 0") if @dev_esp
|
|
26
|
-
add_line(conf,
|
|
27
|
+
add_line(conf, '/dev/mapper/cryptswap none swap sw 0 0')
|
|
27
28
|
add_line(conf, "##{@boot_pool_name}/BOOT/#{@n} /boot zfs defaults 0 0") if @dev_boot
|
|
28
|
-
add_line(conf,
|
|
29
|
+
add_line(conf, 'tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0')
|
|
29
30
|
end
|
|
30
31
|
|
|
31
32
|
def config_dracut
|
|
32
33
|
conf = "#{MOUNTPOINT}/etc/dracut.conf.d/zfs.conf"
|
|
33
34
|
# dracut: value+= should be surrounding by white space
|
|
34
35
|
content = [
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
""
|
|
36
|
+
'hostonly="yes"',
|
|
37
|
+
'omit_dracutmodules+=" btrfs lvm "',
|
|
38
|
+
'install_items+=" /etc/crypttab "',
|
|
39
39
|
]
|
|
40
40
|
File.write(conf, content.join("\n"), mode: 'w', chmod: 0644)
|
|
41
41
|
end
|
|
@@ -45,17 +45,17 @@ module Getch
|
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
def config_grub
|
|
48
|
-
grub_cmdline("root=zfs:#{@pool_name}/ROOT/#{@n}",
|
|
48
|
+
grub_cmdline("root=zfs:#{@pool_name}/ROOT/#{@n}", 'zfs_force=1', 'zfs.zfs_arc_max=536870912')
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def finish
|
|
52
52
|
zed_update_path
|
|
53
|
-
puts
|
|
54
|
-
puts
|
|
53
|
+
puts '+ Enter in your system: chroot /mnt /bin/bash'
|
|
54
|
+
puts '+ Reboot with: shutdown -r now'
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
def crypttab
|
|
58
|
-
line_crypttab(
|
|
58
|
+
line_crypttab('cryptswap', @dev_swap, '/dev/urandom', 'swap,discard,cipher=aes-xts-plain64:sha256,size=512')
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
private
|
|
@@ -63,31 +63,32 @@ module Getch
|
|
|
63
63
|
def line_crypttab(mapname, dev, point, rest)
|
|
64
64
|
conf = "#{MOUNTPOINT}/etc/crypttab"
|
|
65
65
|
device = s_uuid(dev)
|
|
66
|
-
raise "No partuuid for #{dev} #{device}"
|
|
66
|
+
raise "No partuuid for #{dev} #{device}" unless device
|
|
67
67
|
raise "Bad partuuid for #{dev} #{device}" if device.kind_of? Array
|
|
68
|
+
|
|
68
69
|
add_line(conf, "#{mapname} PARTUUID=#{device} #{point} #{rest}")
|
|
69
70
|
end
|
|
70
71
|
|
|
71
72
|
def zfs_zed
|
|
72
|
-
service_dir =
|
|
73
|
+
service_dir = '/etc/runit/runsvdir/default/'
|
|
73
74
|
|
|
74
|
-
Helpers
|
|
75
|
-
Helpers
|
|
76
|
-
Helpers
|
|
77
|
-
fork { command
|
|
75
|
+
Helpers.mkdir("#{MOUNTPOINT}/etc/zfs/zfs-list.cache")
|
|
76
|
+
Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@boot_pool_name}") if @dev_boot
|
|
77
|
+
Helpers.touch("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/#{@pool_name}")
|
|
78
|
+
fork { command '/etc/sv/zed/run' }
|
|
78
79
|
command "ln -fs /etc/sv/zed #{service_dir}"
|
|
79
80
|
end
|
|
80
81
|
|
|
81
82
|
def zed_update_path
|
|
82
|
-
Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each
|
|
83
|
-
|
|
84
|
-
raise
|
|
83
|
+
Dir.glob("#{MOUNTPOINT}/etc/zfs/zfs-list.cache/*").each do |f|
|
|
84
|
+
unless system('sed', '-Ei', "s|#{MOUNTPOINT}/?|/|", f)
|
|
85
|
+
raise 'System exec sed'
|
|
85
86
|
end
|
|
86
|
-
|
|
87
|
+
end
|
|
87
88
|
end
|
|
88
89
|
|
|
89
90
|
def hostid
|
|
90
|
-
command
|
|
91
|
+
command 'zgenhostid $(hostid)'
|
|
91
92
|
end
|
|
92
93
|
end
|
|
93
94
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -6,9 +8,9 @@ module Getch
|
|
|
6
8
|
super
|
|
7
9
|
@log = Getch::Log.new
|
|
8
10
|
@state = Getch::States.new
|
|
9
|
-
|
|
11
|
+
unless @id
|
|
10
12
|
@log.info "Research pool id for #{@dev_root}..."
|
|
11
|
-
@id = Helpers
|
|
13
|
+
@id = Helpers.pool_id(@dev_root)
|
|
12
14
|
@boot_pool_name = "bpool-#{@id}"
|
|
13
15
|
@pool_name = "rpool-#{@id}"
|
|
14
16
|
end
|
|
@@ -19,7 +21,8 @@ module Getch
|
|
|
19
21
|
|
|
20
22
|
def format
|
|
21
23
|
return if STATES[:format]
|
|
22
|
-
raise "Error, no id found for #{@dev_root}."
|
|
24
|
+
raise "Error, no id found for #{@dev_root}." unless @id
|
|
25
|
+
|
|
23
26
|
@log.info "Create #{@id} for #{@pool_name}"
|
|
24
27
|
system("mkfs.fat -F32 #{@dev_esp}") if @dev_esp
|
|
25
28
|
zfs
|
|
@@ -30,7 +33,8 @@ module Getch
|
|
|
30
33
|
|
|
31
34
|
def zfs
|
|
32
35
|
bloc=`blockdev --getpbsz #{@dev_root}`
|
|
33
|
-
ashift =
|
|
36
|
+
ashift =
|
|
37
|
+
case bloc
|
|
34
38
|
when /8096/
|
|
35
39
|
13
|
|
36
40
|
when /4096/
|
|
@@ -39,7 +43,7 @@ module Getch
|
|
|
39
43
|
9
|
|
40
44
|
end
|
|
41
45
|
|
|
42
|
-
Helpers
|
|
46
|
+
Helpers.mkdir(MOUNTPOINT)
|
|
43
47
|
@log.debug("ashift found for #{bloc} - #{ashift}")
|
|
44
48
|
|
|
45
49
|
if @dev_boot
|
|
@@ -7,37 +7,39 @@ module Getch
|
|
|
7
7
|
@mount = Getch::FileSystem::Mount.new
|
|
8
8
|
@state = Getch::States.new
|
|
9
9
|
@log = Getch::Log.new
|
|
10
|
+
@import = '/dev/disk/by-id'
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
def run
|
|
13
14
|
return if STATES[:mount]
|
|
14
|
-
exec(
|
|
15
|
+
exec('zpool export -a')
|
|
15
16
|
exec("rm -rf #{MOUNTPOINT}/*")
|
|
16
|
-
exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
|
|
17
|
-
exec("zpool import -f -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
|
|
17
|
+
exec("zpool import -N -d #{@import} -R #{MOUNTPOINT} #{@pool_name}")
|
|
18
|
+
exec("zpool import -f -N -d #{@import} -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
|
|
18
19
|
@mount.swap(@dev_swap)
|
|
19
20
|
mount_root
|
|
20
21
|
mount_boot
|
|
21
22
|
@mount.esp(@dev_esp)
|
|
22
|
-
exec(
|
|
23
|
+
exec('zfs mount -a')
|
|
23
24
|
@state.mount
|
|
24
25
|
end
|
|
25
26
|
|
|
26
27
|
private
|
|
27
28
|
|
|
28
29
|
def mount_root
|
|
29
|
-
Helpers
|
|
30
|
+
Helpers.mkdir(MOUNTPOINT)
|
|
30
31
|
exec("zfs mount #{@pool_name}/ROOT/#{@n}")
|
|
31
32
|
end
|
|
32
33
|
|
|
33
34
|
def mount_boot
|
|
34
|
-
return
|
|
35
|
+
return unless @dev_boot
|
|
36
|
+
|
|
35
37
|
exec("zfs mount #{@boot_pool_name}/BOOT/#{@n}")
|
|
36
38
|
end
|
|
37
39
|
|
|
38
40
|
def exec(cmd)
|
|
39
41
|
@log.info("==> #{cmd}")
|
|
40
|
-
Helpers
|
|
42
|
+
Helpers.sys(cmd)
|
|
41
43
|
end
|
|
42
44
|
end
|
|
43
45
|
end
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -6,13 +8,14 @@ module Getch
|
|
|
6
8
|
super
|
|
7
9
|
@clean = Getch::FileSystem::Clean
|
|
8
10
|
@partition = Getch::FileSystem::Partition.new
|
|
9
|
-
@state = Getch::States.new
|
|
10
|
-
@log = Getch::Log.new
|
|
11
|
+
@state = Getch::States.new
|
|
12
|
+
@log = Getch::Log.new
|
|
11
13
|
run_partition
|
|
12
14
|
end
|
|
13
15
|
|
|
14
16
|
def run_partition
|
|
15
17
|
return if STATES[:partition ]
|
|
18
|
+
|
|
16
19
|
@clean.old_zpool
|
|
17
20
|
@clean.hdd(@disk)
|
|
18
21
|
@clean.external_disk(@disk, @boot_disk, @cache_disk, @home_disk)
|
|
@@ -28,24 +31,24 @@ module Getch
|
|
|
28
31
|
if @efi
|
|
29
32
|
@partition.efi(@dev_esp)
|
|
30
33
|
@partition.boot(@dev_boot) if Getch::OPTIONS[:os] == 'void'
|
|
31
|
-
@partition.swap(@dev_swap)
|
|
32
|
-
@partition.root(@dev_root,
|
|
34
|
+
@partition.swap(@dev_swap) unless @cache_disk
|
|
35
|
+
@partition.root(@dev_root, 'BF00') if @root_part != 1
|
|
33
36
|
else
|
|
34
37
|
@partition.gpt(@dev_gpt)
|
|
35
38
|
# Boot pool for GRUB2
|
|
36
39
|
@partition.boot(@dev_boot)
|
|
37
|
-
@partition.swap(@dev_swap)
|
|
38
|
-
@partition.root(@dev_root,
|
|
40
|
+
@partition.swap(@dev_swap) unless @cache_disk
|
|
41
|
+
@partition.root(@dev_root, 'BF00') if @root_part != 1
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
44
|
|
|
42
45
|
def cache
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
return unless @cache_disk
|
|
47
|
+
|
|
48
|
+
mem = `awk '/MemTotal/ {print $2}' /proc/meminfo`.chomp + 'K'
|
|
49
|
+
exec("sgdisk -n1:0:+#{mem} -t1:8200 /dev/#{@cache_disk}")
|
|
50
|
+
exec("sgdisk -n2:0:+4G -t2:BF07 /dev/#{@cache_disk}")
|
|
51
|
+
exec("sgdisk -n3:0:0 -t3:BF00 /dev/#{@cache_disk}")
|
|
49
52
|
end
|
|
50
53
|
|
|
51
54
|
# Partition_efi
|