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