getch 0.1.9 → 0.3.0
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 +35 -29
- data/bin/getch +8 -6
- data/lib/clean.rb +149 -0
- data/lib/cryptsetup.rb +132 -0
- data/lib/devs.rb +199 -0
- data/lib/dracut/encrypt.rb +36 -0
- data/lib/dracut/hybrid.rb +15 -0
- data/lib/dracut/lvm.rb +14 -0
- data/lib/dracut/minimal.rb +11 -0
- data/lib/dracut/root.rb +45 -0
- data/lib/dracut/zfs.rb +35 -0
- data/lib/dracut.rb +11 -0
- data/lib/fstab/encrypt.rb +44 -0
- data/lib/fstab/hybrid.rb +34 -0
- data/lib/fstab/lvm.rb +25 -0
- data/lib/fstab/minimal.rb +6 -0
- data/lib/fstab/root.rb +93 -0
- data/lib/fstab/zfs.rb +23 -0
- data/lib/fstab.rb +11 -0
- data/lib/getch/assembly.rb +150 -0
- data/lib/getch/command.rb +88 -128
- data/lib/getch/config/account.rb +39 -0
- data/lib/getch/config/dhcp.rb +104 -0
- data/lib/getch/config/grub.rb +42 -0
- data/lib/getch/config/iwd.rb +60 -0
- data/lib/getch/config/keymap.rb +78 -0
- data/lib/getch/config/locale.rb +96 -0
- data/lib/getch/config/portage.rb +90 -0
- data/lib/getch/config/pre_network.rb +37 -0
- data/lib/getch/config/timezone.rb +52 -0
- data/lib/getch/config/void.rb +0 -36
- data/lib/getch/config.rb +16 -37
- data/lib/getch/device.rb +67 -0
- data/lib/getch/filesystem/ext4/encrypt/config.rb +9 -71
- data/lib/getch/filesystem/ext4/encrypt/deps.rb +15 -25
- data/lib/getch/filesystem/ext4/encrypt/device.rb +11 -5
- data/lib/getch/filesystem/ext4/encrypt/format.rb +6 -15
- data/lib/getch/filesystem/ext4/encrypt/mount.rb +7 -11
- data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -76
- data/lib/getch/filesystem/ext4/encrypt/void.rb +0 -38
- data/lib/getch/filesystem/ext4/encrypt.rb +2 -1
- data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
- data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
- data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
- data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
- data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
- data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
- data/lib/getch/filesystem/{lvm/encrypt → ext4/hybrid}/void.rb +0 -39
- data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
- data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
- data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
- data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
- data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
- data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
- data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
- data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +6 -4
- data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
- data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +3 -1
- data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
- data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
- data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
- data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
- data/lib/getch/filesystem/ext4/minimal.rb +19 -0
- data/lib/getch/filesystem/ext4.rb +7 -7
- data/lib/getch/filesystem/zfs/encrypt/config.rb +10 -39
- data/lib/getch/filesystem/zfs/encrypt/deps.rb +4 -55
- data/lib/getch/filesystem/zfs/encrypt/device.rb +7 -51
- data/lib/getch/filesystem/zfs/encrypt/format.rb +6 -90
- data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -35
- data/lib/getch/filesystem/zfs/encrypt/partition.rb +6 -54
- data/lib/getch/filesystem/zfs/encrypt.rb +2 -1
- data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
- data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
- data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
- data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
- data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
- data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
- data/lib/getch/filesystem/zfs/minimal.rb +19 -0
- data/lib/getch/filesystem/zfs.rb +1 -7
- data/lib/getch/filesystem.rb +0 -6
- data/lib/getch/gentoo/bootloader.rb +23 -44
- data/lib/getch/gentoo/finalize.rb +25 -0
- data/lib/getch/gentoo/post_config.rb +75 -0
- data/lib/getch/gentoo/pre_config.rb +37 -0
- data/lib/getch/gentoo/services.rb +18 -0
- data/lib/getch/gentoo/sources.rb +39 -33
- data/lib/getch/gentoo/tarball.rb +91 -0
- data/lib/getch/gentoo/terraform.rb +34 -0
- data/lib/getch/gentoo/update.rb +54 -0
- data/lib/getch/gentoo/use.rb +9 -6
- data/lib/getch/gentoo/use_flag.rb +17 -20
- data/lib/getch/gentoo.rb +9 -75
- data/lib/getch/guard.rb +2 -2
- data/lib/getch/helpers.rb +63 -115
- data/lib/getch/log.rb +87 -25
- data/lib/getch/options.rb +41 -11
- data/lib/getch/states.rb +28 -8
- data/lib/getch/tree.rb +56 -0
- data/lib/getch/version.rb +1 -1
- data/lib/getch/void/bootloader.rb +18 -0
- data/lib/getch/void/finalize.rb +31 -0
- data/lib/getch/void/post_config.rb +19 -0
- data/lib/getch/void/pre_config.rb +18 -0
- data/lib/getch/void/services.rb +18 -0
- data/lib/getch/void/{stage.rb → tarball.rb} +34 -14
- data/lib/getch/void/terraform.rb +28 -0
- data/lib/getch/void/update.rb +33 -0
- data/lib/getch/void.rb +9 -59
- data/lib/getch.rb +58 -90
- data/lib/luks.rb +239 -0
- data/lib/lvm2.rb +112 -0
- data/lib/mkfs/zfs.rb +167 -0
- data/lib/mkfs.rb +140 -0
- data/lib/mountfs.rb +154 -0
- data/lib/nito.rb +131 -0
- data/lib/sgdisk.rb +160 -0
- data.tar.gz.sig +0 -0
- metadata +83 -47
- metadata.gz.sig +0 -0
- data/lib/getch/config/gentoo.rb +0 -58
- data/lib/getch/filesystem/clean.rb +0 -58
- data/lib/getch/filesystem/device.rb +0 -63
- data/lib/getch/filesystem/ext4/config.rb +0 -62
- data/lib/getch/filesystem/ext4/deps.rb +0 -24
- data/lib/getch/filesystem/ext4/format.rb +0 -31
- data/lib/getch/filesystem/ext4/mount.rb +0 -26
- data/lib/getch/filesystem/ext4/partition.rb +0 -55
- data/lib/getch/filesystem/ext4/void.rb +0 -44
- data/lib/getch/filesystem/lvm/config.rb +0 -44
- data/lib/getch/filesystem/lvm/deps.rb +0 -44
- data/lib/getch/filesystem/lvm/device.rb +0 -45
- data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -74
- data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -49
- data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -48
- data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -35
- data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -27
- data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -84
- data/lib/getch/filesystem/lvm/encrypt.rb +0 -18
- data/lib/getch/filesystem/lvm/format.rb +0 -32
- data/lib/getch/filesystem/lvm/mount.rb +0 -26
- data/lib/getch/filesystem/lvm/partition.rb +0 -72
- data/lib/getch/filesystem/lvm/void.rb +0 -46
- data/lib/getch/filesystem/mount.rb +0 -63
- data/lib/getch/filesystem/partition.rb +0 -85
- data/lib/getch/filesystem/zfs/config.rb +0 -43
- data/lib/getch/filesystem/zfs/deps.rb +0 -67
- data/lib/getch/filesystem/zfs/device.rb +0 -66
- data/lib/getch/filesystem/zfs/encrypt/void.rb +0 -97
- data/lib/getch/filesystem/zfs/format.rb +0 -117
- data/lib/getch/filesystem/zfs/mount.rb +0 -47
- data/lib/getch/filesystem/zfs/partition.rb +0 -69
- data/lib/getch/filesystem/zfs/void.rb +0 -81
- data/lib/getch/gentoo/boot.rb +0 -64
- data/lib/getch/gentoo/chroot.rb +0 -75
- data/lib/getch/gentoo/config.rb +0 -167
- data/lib/getch/gentoo/stage.rb +0 -73
- data/lib/getch/void/boot.rb +0 -84
- data/lib/getch/void/chroot.rb +0 -56
- data/lib/getch/void/config.rb +0 -90
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
module Getch
|
|
2
|
-
module FileSystem
|
|
3
|
-
module Zfs
|
|
4
|
-
class Mount < Device
|
|
5
|
-
def initialize
|
|
6
|
-
super
|
|
7
|
-
@mount = Getch::FileSystem::Mount.new
|
|
8
|
-
@state = Getch::States.new
|
|
9
|
-
@log = Getch::Log.new
|
|
10
|
-
@import = '/dev/disk/by-id'
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def run
|
|
14
|
-
return if STATES[:mount]
|
|
15
|
-
exec('zpool export -a')
|
|
16
|
-
exec("rm -rf #{MOUNTPOINT}/*")
|
|
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
|
|
19
|
-
@mount.swap(@dev_swap)
|
|
20
|
-
mount_root
|
|
21
|
-
mount_boot
|
|
22
|
-
@mount.esp(@dev_esp)
|
|
23
|
-
exec('zfs mount -a')
|
|
24
|
-
@state.mount
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
private
|
|
28
|
-
|
|
29
|
-
def mount_root
|
|
30
|
-
Helpers.mkdir(MOUNTPOINT)
|
|
31
|
-
exec("zfs mount #{@pool_name}/ROOT/#{@n}")
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
def mount_boot
|
|
35
|
-
return unless @dev_boot
|
|
36
|
-
|
|
37
|
-
exec("zfs mount #{@boot_pool_name}/BOOT/#{@n}")
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def exec(cmd)
|
|
41
|
-
@log.info("==> #{cmd}")
|
|
42
|
-
Helpers.sys(cmd)
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Getch
|
|
4
|
-
module FileSystem
|
|
5
|
-
module Zfs
|
|
6
|
-
class Partition < Device
|
|
7
|
-
def initialize
|
|
8
|
-
super
|
|
9
|
-
@clean = Getch::FileSystem::Clean
|
|
10
|
-
@partition = Getch::FileSystem::Partition.new
|
|
11
|
-
@state = Getch::States.new
|
|
12
|
-
@log = Getch::Log.new
|
|
13
|
-
run_partition
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def run_partition
|
|
17
|
-
return if STATES[:partition ]
|
|
18
|
-
|
|
19
|
-
@clean.old_zpool
|
|
20
|
-
@clean.hdd(@disk)
|
|
21
|
-
@clean.external_disk(@disk, @boot_disk, @cache_disk, @home_disk)
|
|
22
|
-
|
|
23
|
-
partition
|
|
24
|
-
cache
|
|
25
|
-
@state.partition
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
private
|
|
29
|
-
|
|
30
|
-
def partition
|
|
31
|
-
if @efi
|
|
32
|
-
@partition.efi(@dev_esp)
|
|
33
|
-
@partition.boot(@dev_boot) if Getch::OPTIONS[:os] == 'void'
|
|
34
|
-
@partition.swap(@dev_swap) unless @cache_disk
|
|
35
|
-
@partition.root(@dev_root, 'BF00') if @root_part != 1
|
|
36
|
-
else
|
|
37
|
-
@partition.gpt(@dev_gpt)
|
|
38
|
-
# Boot pool for GRUB2
|
|
39
|
-
@partition.boot(@dev_boot)
|
|
40
|
-
@partition.swap(@dev_swap) unless @cache_disk
|
|
41
|
-
@partition.root(@dev_root, 'BF00') if @root_part != 1
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def cache
|
|
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}")
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
# Partition_efi
|
|
55
|
-
# /efi - EFI system partition - 260MB
|
|
56
|
-
# / - Root
|
|
57
|
-
|
|
58
|
-
# Partition_bios
|
|
59
|
-
# None - Bios Boot Partition - 1MiB
|
|
60
|
-
# /boot - Boot - 8300
|
|
61
|
-
# / - Root
|
|
62
|
-
|
|
63
|
-
def exec(cmd)
|
|
64
|
-
Getch::Command.new(cmd).run!
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Getch
|
|
4
|
-
module FileSystem
|
|
5
|
-
module Zfs
|
|
6
|
-
class Void < Device
|
|
7
|
-
include Helpers::Void
|
|
8
|
-
|
|
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
|
-
line_fstab(@dev_swap, 'swap swap rw,noatime,discard 0 0') if @dev_swap
|
|
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
|
-
]
|
|
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', 'zfs.zfs_arc_max=536870912')
|
|
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 do |f|
|
|
69
|
-
unless system('sed', '-Ei', "s|#{MOUNTPOINT}/?|/|", f)
|
|
70
|
-
raise 'System exec sed'
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def hostid
|
|
76
|
-
command 'zgenhostid $(hostid)'
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
data/lib/getch/gentoo/boot.rb
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
|
|
5
|
-
module Getch
|
|
6
|
-
module Gentoo
|
|
7
|
-
class Boot
|
|
8
|
-
def initialize
|
|
9
|
-
@user = Getch::OPTIONS[:username]
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def start
|
|
13
|
-
bootloader
|
|
14
|
-
password
|
|
15
|
-
permission
|
|
16
|
-
the_end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def bootloader
|
|
20
|
-
# Ensure all packages are build
|
|
21
|
-
Getch::Emerge.new('@world').pkg!
|
|
22
|
-
bootloader = Getch::Gentoo::Bootloader.new
|
|
23
|
-
bootloader.setup
|
|
24
|
-
bootloader.update
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def password
|
|
28
|
-
puts 'Password for root'
|
|
29
|
-
chroot "passwd"
|
|
30
|
-
return unless @user
|
|
31
|
-
|
|
32
|
-
puts "Creating user #{@user}"
|
|
33
|
-
Getch::Chroot.new("useradd -m -G users,wheel,audio,video #{@user}").run!
|
|
34
|
-
puts "Password for your user #{@user}"
|
|
35
|
-
chroot "passwd #{@user}"
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
private
|
|
39
|
-
|
|
40
|
-
def permission
|
|
41
|
-
FileUtils.chmod_R 0755, "#{MOUNTPOINT}/etc/portage"
|
|
42
|
-
if @user
|
|
43
|
-
Getch::Chroot.new("chown -R #{@user}:#{@user} /home/#{@user}").run!
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def the_end
|
|
48
|
-
puts
|
|
49
|
-
puts 'getch has finish, before reboot, you can:'
|
|
50
|
-
puts " + Chroot on your system with: chroot #{MOUNTPOINT} /bin/bash"
|
|
51
|
-
puts ' + Install more packages like networkmanager or emacs'
|
|
52
|
-
puts
|
|
53
|
-
puts ' + Add more modules for your kernel (graphic, wifi card) and recompile it with:'
|
|
54
|
-
puts ' genkernel --kernel-config=/usr/src/linux/.config all '
|
|
55
|
-
puts
|
|
56
|
-
puts 'Reboot the system when you have done !'
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def chroot(cmd)
|
|
60
|
-
system('chroot', MOUNTPOINT, '/bin/bash', '-c', cmd)
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
end
|
|
64
|
-
end
|
data/lib/getch/gentoo/chroot.rb
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Getch
|
|
4
|
-
module Gentoo
|
|
5
|
-
class Chroot
|
|
6
|
-
def initialize
|
|
7
|
-
@pkgs = []
|
|
8
|
-
mount
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def cpuflags
|
|
12
|
-
Getch::Emerge.new('app-portage/cpuid2cpuflags').pkg!
|
|
13
|
-
cpuflags = `chroot #{MOUNTPOINT} /bin/bash -c "source /etc/profile; cpuid2cpuflags"`.chomp
|
|
14
|
-
File.write("#{MOUNTPOINT}/etc/portage/package.use/00cpuflags", "*/* #{cpuflags}")
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def update
|
|
18
|
-
return if STATES[:gentoo_update]
|
|
19
|
-
|
|
20
|
-
puts 'Downloading the last ebuilds for Gentoo...'
|
|
21
|
-
Helpers.create_dir("#{MOUNTPOINT}/var/db/repos/gentoo")
|
|
22
|
-
cmd = 'emaint sync --auto'
|
|
23
|
-
exec_chroot(cmd)
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def world
|
|
27
|
-
return if STATES[:gentoo_update]
|
|
28
|
-
|
|
29
|
-
puts 'Update Gentoo world'
|
|
30
|
-
Getch::Emerge.new('emerge --update --deep --changed-use --newuse @world').run!
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def systemd
|
|
34
|
-
puts 'Updating locale, keymap...'
|
|
35
|
-
cmd = 'locale-gen; emerge --config sys-libs/timezone-data'
|
|
36
|
-
exec_chroot(cmd)
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def kernel_license
|
|
40
|
-
return if Dir.exist? "#{MOUNTPOINT}/usr/src/linux"
|
|
41
|
-
|
|
42
|
-
license = "#{MOUNTPOINT}/etc/portage/package.license"
|
|
43
|
-
File.write(license, "sys-kernel/linux-firmware linux-fw-redistributable no-source-code\n")
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def install_pkgs
|
|
47
|
-
@pkgs << 'app-portage/gentoolkit'
|
|
48
|
-
@pkgs << 'app-admin/sudo'
|
|
49
|
-
@pkgs << 'app-editors/vim'
|
|
50
|
-
@pkgs << 'net-firewall/iptables'
|
|
51
|
-
@pkgs << 'sys-fs/dosftools' if Helpers.efi?
|
|
52
|
-
all_pkgs = @pkgs.join(' ')
|
|
53
|
-
puts "Installing #{all_pkgs}..."
|
|
54
|
-
Getch::Emerge.new(all_pkgs).pkg!
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
private
|
|
58
|
-
|
|
59
|
-
def mount
|
|
60
|
-
puts 'Populate /proc, /sys and /dev.'
|
|
61
|
-
Helpers.exec_or_die("mount --types proc /proc \"#{MOUNTPOINT}/proc\"")
|
|
62
|
-
Helpers.exec_or_die("mount --rbind /sys \"#{MOUNTPOINT}/sys\"")
|
|
63
|
-
Helpers.exec_or_die("mount --make-rslave \"#{MOUNTPOINT}/sys\"")
|
|
64
|
-
Helpers.exec_or_die("mount --rbind /dev \"#{MOUNTPOINT}/dev\"")
|
|
65
|
-
Helpers.exec_or_die("mount --make-rslave \"#{MOUNTPOINT}/dev\"")
|
|
66
|
-
# Maybe add /dev/shm like describe here:
|
|
67
|
-
# https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def exec_chroot(cmd)
|
|
71
|
-
Getch::Chroot.new(cmd).run!
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
end
|
|
75
|
-
end
|
data/lib/getch/gentoo/config.rb
DELETED
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
require 'tempfile'
|
|
5
|
-
require 'securerandom'
|
|
6
|
-
|
|
7
|
-
module Getch
|
|
8
|
-
module Gentoo
|
|
9
|
-
class Config
|
|
10
|
-
def initialize
|
|
11
|
-
@make = "#{MOUNTPOINT}/etc/portage/make.conf"
|
|
12
|
-
@log = Getch::Log.new
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def portage
|
|
16
|
-
grub_pc = Helpers.efi? ? '' : 'GRUB_PLATFORMS="pc"'
|
|
17
|
-
nproc = `nproc`.chomp()
|
|
18
|
-
|
|
19
|
-
# Add cpu name
|
|
20
|
-
cpu=`chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile ; gcc -c -Q -march=native --help=target | grep march\" | awk '{print $2}' | head -1`.chomp
|
|
21
|
-
raise 'Error, no cpu found' unless cpu || cpu == ''
|
|
22
|
-
|
|
23
|
-
@log.debug "CPU found ==> #{cpu}"
|
|
24
|
-
|
|
25
|
-
tmp = Tempfile.new('make.conf')
|
|
26
|
-
|
|
27
|
-
File.open(@make).each { |l|
|
|
28
|
-
if l.match(/^COMMON_FLAGS/)
|
|
29
|
-
File.write(tmp, "COMMON_FLAGS=\"-march=#{cpu} -O2 -pipe -fomit-frame-pointer\"\n", mode: 'a')
|
|
30
|
-
else
|
|
31
|
-
File.write(tmp, l, mode: 'a')
|
|
32
|
-
end
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
FileUtils.copy_file(tmp, @make)
|
|
36
|
-
|
|
37
|
-
# Add the rest
|
|
38
|
-
data = [
|
|
39
|
-
'',
|
|
40
|
-
"MAKEOPTS=\"-j#{nproc}\"",
|
|
41
|
-
'ACCEPT_KEYWORDS="amd64"',
|
|
42
|
-
'INPUT_DEVICES="libinput"',
|
|
43
|
-
'USE="${USE} audit"',
|
|
44
|
-
grub_pc
|
|
45
|
-
]
|
|
46
|
-
File.write(@make, data.join("\n"), mode: 'a')
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Write a repos.conf/gentoo.conf with the gpg verification
|
|
50
|
-
def repo
|
|
51
|
-
src = "#{MOUNTPOINT}/usr/share/portage/config/repos.conf"
|
|
52
|
-
dest = "#{MOUNTPOINT}/etc/portage/repos.conf"
|
|
53
|
-
FileUtils.mkdir dest, mode: 0644 unless Dir.exist?(dest)
|
|
54
|
-
tmp = Tempfile.new('gentoo.conf')
|
|
55
|
-
line_count = 0
|
|
56
|
-
|
|
57
|
-
File.open(src).each { |l|
|
|
58
|
-
File.write(tmp, "sync-allow-hardlinks = yes\n", mode: 'a') if line_count == 2
|
|
59
|
-
if l.match(/^sync-type = rsync/)
|
|
60
|
-
File.write(tmp, "sync-type = webrsync\n", mode: 'a')
|
|
61
|
-
else
|
|
62
|
-
File.write(tmp, l, mode: 'a')
|
|
63
|
-
end
|
|
64
|
-
line_count += 1
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
FileUtils.copy_file(tmp, "#{dest}/gentoo.conf")
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def network
|
|
71
|
-
src = '/etc/resolv.conf'
|
|
72
|
-
dest = "#{MOUNTPOINT}/etc/resolv.conf"
|
|
73
|
-
FileUtils.copy_file(src, dest)
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
def systemd
|
|
77
|
-
control_options
|
|
78
|
-
Helpers.echo "#{MOUNTPOINT}/etc/locale.gen", @utf8
|
|
79
|
-
Helpers.echo "#{MOUNTPOINT}/etc/locale.conf", "LANG=#{@lang}"
|
|
80
|
-
Helpers.echo_a "#{MOUNTPOINT}/etc/locale.conf", 'LC_COLLATE=C'
|
|
81
|
-
File.write("#{MOUNTPOINT}/etc/timezone", "#{Getch::OPTIONS[:zoneinfo]}\n")
|
|
82
|
-
File.write("#{MOUNTPOINT}/etc/vconsole.conf", "KEYMAP=#{Getch::OPTIONS[:keymap]}\n")
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def hostname
|
|
86
|
-
id = SecureRandom.hex(2)
|
|
87
|
-
File.write("#{MOUNTPOINT}/etc/hostname", "gentoo-hatch-#{id}")
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def portage_fs
|
|
91
|
-
portage = "#{MOUNTPOINT}/etc/portage"
|
|
92
|
-
Helpers.mkdir("#{portage}/package.use")
|
|
93
|
-
Helpers.mkdir("#{portage}/package.accept_keywords")
|
|
94
|
-
Helpers.mkdir("#{portage}/package.unmask")
|
|
95
|
-
|
|
96
|
-
Helpers.add_file("#{portage}/package.use/zzz_via_autounmask")
|
|
97
|
-
Helpers.add_file("#{portage}/package.accept_keywords/zzz_via_autounmask")
|
|
98
|
-
Helpers.add_file("#{portage}/package.unmask/zzz_via_autounmask")
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# https://wiki.gentoo.org/wiki/Signed_kernel_module_support
|
|
102
|
-
def portage_bashrc
|
|
103
|
-
conf = "#{MOUNTPOINT}/etc/portage/bashrc"
|
|
104
|
-
content = %q{
|
|
105
|
-
function pre_pkg_preinst() {
|
|
106
|
-
# This hook signs any out-of-tree kernel modules.
|
|
107
|
-
if [[ "$(type -t linux-mod_pkg_preinst)" != "function" ]]; then
|
|
108
|
-
# The package does not seem to install any kernel modules.
|
|
109
|
-
return
|
|
110
|
-
fi
|
|
111
|
-
# Get the signature algorithm used by the kernel.
|
|
112
|
-
local module_sig_hash="$(grep -Po '(?<=CONFIG_MODULE_SIG_HASH=").*(?=")' "${KERNEL_DIR}/.config")"
|
|
113
|
-
# Get the key file used by the kernel.
|
|
114
|
-
local module_sig_key="$(grep -Po '(?<=CONFIG_MODULE_SIG_KEY=").*(?=")' "${KERNEL_DIR}/.config")"
|
|
115
|
-
module_sig_key="${module_sig_key:-certs/signing_key.pem}"
|
|
116
|
-
# Path to the key file or PKCS11 URI
|
|
117
|
-
if [[ "${module_sig_key#pkcs11:}" == "${module_sig_key}" && "${module_sig_key#/}" == "${module_sig_key}" ]]; then
|
|
118
|
-
local key_path="${KERNEL_DIR}/${module_sig_key}"
|
|
119
|
-
else
|
|
120
|
-
local key_path="${module_sig_key}"
|
|
121
|
-
fi
|
|
122
|
-
# Certificate path
|
|
123
|
-
local cert_path="${KERNEL_DIR}/certs/signing_key.x509"
|
|
124
|
-
# Sign all installed modules before merging.
|
|
125
|
-
find "${D%/}/${INSDESTTREE#/}/" -name "*.ko" -exec "${KERNEL_DIR}/scripts/sign-file" "${module_sig_hash}" "${key_path}" "${cert_path}" '{}' \;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
f = File.new(conf, 'w')
|
|
130
|
-
f.write("#{content}\n")
|
|
131
|
-
f.chmod(0700)
|
|
132
|
-
f.close
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
private
|
|
136
|
-
|
|
137
|
-
def control_options
|
|
138
|
-
search_zone(Getch::OPTIONS[:zoneinfo])
|
|
139
|
-
search_utf8(Getch::OPTIONS[:language])
|
|
140
|
-
search_key(Getch::OPTIONS[:keymap])
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
def search_key(keys)
|
|
144
|
-
@keymap = nil
|
|
145
|
-
Dir.glob("#{MOUNTPOINT}/usr/share/keymaps/**/#{keys}.map.gz") { |f|
|
|
146
|
-
@keymap = f
|
|
147
|
-
}
|
|
148
|
-
raise ArgumentError, "No keymap #{@keymap} found" unless @keymap
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def search_zone(zone)
|
|
152
|
-
unless File.exist? "#{MOUNTPOINT}/usr/share/zoneinfo/#{zone}"
|
|
153
|
-
raise ArgumentError, "Zoneinfo #{zone} doesn\'t exist."
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
def search_utf8(lang)
|
|
158
|
-
@utf8, @lang = nil, nil
|
|
159
|
-
File.open("#{MOUNTPOINT}/usr/share/i18n/SUPPORTED").each do |l|
|
|
160
|
-
@utf8 = l if l.match(/^#{lang}[. ]+utf-8 /i)
|
|
161
|
-
@lang = $~[0] if l.match(/^#{lang}[. ]+utf-8/i)
|
|
162
|
-
end
|
|
163
|
-
raise ArgumentError, "Lang #{lang} no found" unless @utf8
|
|
164
|
-
end
|
|
165
|
-
end
|
|
166
|
-
end
|
|
167
|
-
end
|
data/lib/getch/gentoo/stage.rb
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'open-uri'
|
|
4
|
-
require 'open3'
|
|
5
|
-
|
|
6
|
-
module Getch
|
|
7
|
-
module Gentoo
|
|
8
|
-
class Stage
|
|
9
|
-
def initialize
|
|
10
|
-
@mirror = 'https://mirrors.soeasyto.com/distfiles.gentoo.org'
|
|
11
|
-
@release = release
|
|
12
|
-
@stage_file="stage3-amd64-systemd-#{@release}.tar.xz"
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def stage3
|
|
16
|
-
@mirror + '/releases/amd64/autobuilds/latest-stage3-amd64-systemd.txt'
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def release
|
|
20
|
-
URI.open(stage3) do |file|
|
|
21
|
-
file.read.match(/^[[:alnum:]]+/)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def file
|
|
26
|
-
"#{@release}/#{@stage_file}"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def get_stage3
|
|
30
|
-
Dir.chdir(MOUNTPOINT)
|
|
31
|
-
return if File.exist?(@stage_file)
|
|
32
|
-
puts "Download the last #{@stage_file}, please wait..."
|
|
33
|
-
Helpers.get_file_online(@mirror + '/releases/amd64/autobuilds/' + file, @stage_file)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def control_files
|
|
37
|
-
puts 'Download the DIGESTS'
|
|
38
|
-
Helpers.get_file_online(@mirror + '/releases/amd64/autobuilds/' + file + '.DIGESTS', "#{@stage_file}.DIGESTS")
|
|
39
|
-
puts 'Download the DIGESTS.asc'
|
|
40
|
-
Helpers.get_file_online(@mirror + '/releases/amd64/autobuilds/' + file + '.DIGESTS.asc', "#{@stage_file}.DIGESTS.asc")
|
|
41
|
-
puts "Download the CONTENTS.gz"
|
|
42
|
-
Helpers.get_file_online(@mirror + '/releases/amd64/autobuilds/' + file + '.CONTENTS.gz', "#{@stage_file}.CONTENTS.gz")
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def checksum
|
|
46
|
-
puts 'Check the SHA512 checksum.'
|
|
47
|
-
command = "awk '/SHA512 HASH/{getline;print}' #{@stage_file}.DIGESTS.asc | sha512sum --check"
|
|
48
|
-
_, stderr, status = Open3.capture3(command)
|
|
49
|
-
if status.success? then
|
|
50
|
-
puts 'Checksum is ok'
|
|
51
|
-
decompress
|
|
52
|
-
cleaning
|
|
53
|
-
else
|
|
54
|
-
cleaning
|
|
55
|
-
raise "Problem with the checksum, stderr\n#{stderr}"
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
private
|
|
60
|
-
|
|
61
|
-
# https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage
|
|
62
|
-
def decompress
|
|
63
|
-
puts "Decompressing archive #{@stage_file}..."
|
|
64
|
-
cmd = "tar xpf #{@stage_file} --xattrs-include=\'*.*\' --numeric-owner"
|
|
65
|
-
Getch::Command.new(cmd).run!
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
def cleaning
|
|
69
|
-
Dir.glob('stage3-amd64-systemd*').each { |f| File.delete(f) }
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
|
-
end
|
data/lib/getch/void/boot.rb
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
|
|
5
|
-
module Getch
|
|
6
|
-
module Void
|
|
7
|
-
class Boot
|
|
8
|
-
include Helpers::Void
|
|
9
|
-
|
|
10
|
-
def initialize
|
|
11
|
-
@efi = Helpers.efi?
|
|
12
|
-
@class_fs = Getch::select_fs
|
|
13
|
-
@fs = @class_fs::Void.new
|
|
14
|
-
@user = OPTIONS[:username]
|
|
15
|
-
@fs.create_key if @class_fs::Void.method_defined? :create_key
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def new_user
|
|
19
|
-
puts ' => Add a password for root.'
|
|
20
|
-
chroot 'passwd'
|
|
21
|
-
puts
|
|
22
|
-
return unless @user
|
|
23
|
-
|
|
24
|
-
print " => Creating a new user #{@user}..."
|
|
25
|
-
puts "\s[OK]"
|
|
26
|
-
command "useradd -m -G users,wheel,audio,video #{@user}"
|
|
27
|
-
puts " => Add a password for #{@user}."
|
|
28
|
-
chroot "passwd #{@user}"
|
|
29
|
-
puts
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def fstab
|
|
33
|
-
print ' => Configuring fstab...'
|
|
34
|
-
@fs.fstab
|
|
35
|
-
puts "\s[OK]"
|
|
36
|
-
@fs.crypttab if @class_fs::Void.method_defined? :crypttab
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# Test dracut in chroot (version in /lib/modules/5.1.7-1):
|
|
40
|
-
# dracut -H -f --kver 5.1.7-1
|
|
41
|
-
def dracut
|
|
42
|
-
print ' => Configuring Dracut...'
|
|
43
|
-
@fs.config_dracut
|
|
44
|
-
@fs.kernel_cmdline_dracut
|
|
45
|
-
puts "\s[OK]"
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def grub
|
|
49
|
-
disk = OPTIONS[:boot_disk] ||= OPTIONS[:disk]
|
|
50
|
-
# https://wiki.archlinux.org/title/Install_Arch_Linux_on_ZFS
|
|
51
|
-
prefix = OPTIONS[:fs] == 'zfs' ? 'ZPOOL_VDEV_NAME_PATH=1' : ''
|
|
52
|
-
print " => Installing Grub on #{disk}..."
|
|
53
|
-
if @efi
|
|
54
|
-
command_output 'xbps-install -y grub-x86_64-efi'
|
|
55
|
-
@fs.config_grub if @class_fs::Void.method_defined? :config_grub
|
|
56
|
-
command_output "#{prefix} grub-install --target=x86_64-efi --efi-directory=/efi --bootloader-id=\"Void\""
|
|
57
|
-
else
|
|
58
|
-
command_output 'xbps-install -y grub'
|
|
59
|
-
@fs.config_grub if @class_fs::Void.method_defined? :config_grub
|
|
60
|
-
command_output "#{prefix} grub-install /dev/#{disk}"
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def initramfs
|
|
65
|
-
puts ' => Generating an initramfs...'
|
|
66
|
-
command_output 'xbps-reconfigure -fa' # this command also start grub-mkconfig
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def finish
|
|
70
|
-
puts
|
|
71
|
-
puts '[*!*] Install finished [*!*]'
|
|
72
|
-
puts
|
|
73
|
-
@fs.finish
|
|
74
|
-
puts
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
private
|
|
78
|
-
|
|
79
|
-
def chroot(cmd)
|
|
80
|
-
system('chroot', MOUNTPOINT, '/bin/bash', '-c', cmd)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|