getch 0.1.2 → 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 +66 -32
- data/assets/network-stack.conf +63 -0
- data/assets/system.conf +38 -0
- data/bin/getch +12 -4
- data/lib/cmdline.rb +128 -0
- data/lib/getch/command.rb +32 -22
- data/lib/getch/config/gentoo.rb +58 -0
- data/lib/getch/config/void.rb +47 -0
- data/lib/getch/config.rb +45 -0
- data/lib/getch/filesystem/clean.rb +22 -15
- data/lib/getch/filesystem/device.rb +8 -6
- 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 +15 -11
- data/lib/getch/filesystem/ext4/encrypt/deps.rb +5 -10
- data/lib/getch/filesystem/ext4/encrypt/device.rb +5 -3
- data/lib/getch/filesystem/ext4/encrypt/format.rb +4 -2
- data/lib/getch/filesystem/ext4/encrypt/mount.rb +3 -3
- data/lib/getch/filesystem/ext4/encrypt/partition.rb +29 -35
- data/lib/getch/filesystem/ext4/encrypt/void.rb +101 -0
- data/lib/getch/filesystem/ext4/encrypt.rb +3 -0
- data/lib/getch/filesystem/ext4/format.rb +4 -1
- data/lib/getch/filesystem/ext4/mount.rb +3 -0
- data/lib/getch/filesystem/ext4/partition.rb +11 -8
- data/lib/getch/filesystem/ext4/void.rb +44 -0
- data/lib/getch/filesystem/ext4.rb +3 -0
- data/lib/getch/filesystem/lvm/config.rb +10 -29
- data/lib/getch/filesystem/lvm/deps.rb +7 -11
- data/lib/getch/filesystem/lvm/device.rb +5 -3
- data/lib/getch/filesystem/lvm/encrypt/config.rb +17 -17
- data/lib/getch/filesystem/lvm/encrypt/deps.rb +8 -12
- data/lib/getch/filesystem/lvm/encrypt/device.rb +7 -5
- data/lib/getch/filesystem/lvm/encrypt/format.rb +5 -2
- data/lib/getch/filesystem/lvm/encrypt/mount.rb +4 -2
- data/lib/getch/filesystem/lvm/encrypt/partition.rb +17 -13
- data/lib/getch/filesystem/lvm/encrypt/void.rb +101 -0
- data/lib/getch/filesystem/lvm/encrypt.rb +3 -0
- data/lib/getch/filesystem/lvm/format.rb +4 -1
- data/lib/getch/filesystem/lvm/mount.rb +3 -0
- data/lib/getch/filesystem/lvm/partition.rb +10 -7
- data/lib/getch/filesystem/lvm/void.rb +46 -0
- data/lib/getch/filesystem/lvm.rb +3 -0
- data/lib/getch/filesystem/mount.rb +19 -12
- data/lib/getch/filesystem/partition.rb +19 -11
- data/lib/getch/filesystem/zfs/config.rb +10 -24
- data/lib/getch/filesystem/zfs/deps.rb +28 -58
- data/lib/getch/filesystem/zfs/device.rb +9 -1
- data/lib/getch/filesystem/zfs/encrypt/config.rb +12 -28
- data/lib/getch/filesystem/zfs/encrypt/deps.rb +29 -60
- data/lib/getch/filesystem/zfs/encrypt/device.rb +9 -1
- data/lib/getch/filesystem/zfs/encrypt/format.rb +24 -22
- data/lib/getch/filesystem/zfs/encrypt/mount.rb +15 -14
- data/lib/getch/filesystem/zfs/encrypt/partition.rb +24 -18
- data/lib/getch/filesystem/zfs/encrypt/void.rb +97 -0
- data/lib/getch/filesystem/zfs/encrypt.rb +3 -0
- data/lib/getch/filesystem/zfs/format.rb +21 -18
- data/lib/getch/filesystem/zfs/mount.rb +12 -13
- data/lib/getch/filesystem/zfs/partition.rb +20 -15
- data/lib/getch/filesystem/zfs/void.rb +81 -0
- data/lib/getch/filesystem/zfs.rb +3 -0
- data/lib/getch/filesystem.rb +2 -0
- data/lib/getch/gentoo/boot.rb +29 -67
- data/lib/getch/gentoo/bootloader.rb +68 -0
- data/lib/getch/gentoo/chroot.rb +26 -29
- data/lib/getch/gentoo/config.rb +69 -31
- data/lib/getch/gentoo/sources.rb +73 -38
- data/lib/getch/gentoo/stage.rb +12 -13
- data/lib/getch/gentoo/use.rb +39 -0
- data/lib/getch/gentoo/use_flag.rb +89 -0
- data/lib/getch/gentoo.rb +39 -21
- data/lib/getch/guard.rb +71 -0
- data/lib/getch/helpers.rb +180 -48
- data/lib/getch/log.rb +10 -7
- data/lib/getch/options.rb +50 -41
- data/lib/getch/states.rb +10 -3
- data/lib/getch/version.rb +1 -1
- data/lib/getch/void/boot.rb +84 -0
- data/lib/getch/void/chroot.rb +56 -0
- data/lib/getch/void/config.rb +90 -0
- data/lib/getch/void/stage.rb +69 -0
- data/lib/getch/void.rb +65 -0
- data/lib/getch.rb +125 -74
- data.tar.gz.sig +0 -0
- metadata +28 -10
- metadata.gz.sig +0 -0
- data/.gitignore +0 -2
- data/CHANGELOG.md +0 -80
- data/Rakefile +0 -21
- data/bin/setup.sh +0 -90
- data/getch.gemspec +0 -25
|
@@ -1,21 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
4
|
-
class Partition <
|
|
6
|
+
class Partition < Device
|
|
5
7
|
def initialize
|
|
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
|
-
@clean.
|
|
18
|
-
@clean.
|
|
20
|
+
@clean.hdd(@disk)
|
|
21
|
+
@clean.external_disk(@disk, @boot_disk, @cache_disk, @home_disk)
|
|
22
|
+
|
|
19
23
|
partition
|
|
20
24
|
cache
|
|
21
25
|
@state.partition
|
|
@@ -26,24 +30,25 @@ module Getch
|
|
|
26
30
|
def partition
|
|
27
31
|
if @efi
|
|
28
32
|
@partition.efi(@dev_esp)
|
|
29
|
-
@partition.
|
|
30
|
-
@partition.
|
|
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
|
|
31
36
|
else
|
|
32
37
|
@partition.gpt(@dev_gpt)
|
|
33
38
|
# Boot pool for GRUB2
|
|
34
39
|
@partition.boot(@dev_boot)
|
|
35
|
-
@partition.swap(@dev_swap)
|
|
36
|
-
@partition.root(@dev_root,
|
|
40
|
+
@partition.swap(@dev_swap) unless @cache_disk
|
|
41
|
+
@partition.root(@dev_root, 'BF00') if @root_part != 1
|
|
37
42
|
end
|
|
38
43
|
end
|
|
39
44
|
|
|
40
45
|
def cache
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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}")
|
|
47
52
|
end
|
|
48
53
|
|
|
49
54
|
# Partition_efi
|
|
@@ -0,0 +1,81 @@
|
|
|
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/filesystem/zfs.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module FileSystem
|
|
3
5
|
module Zfs
|
|
@@ -11,4 +13,5 @@ require_relative 'zfs/format'
|
|
|
11
13
|
require_relative 'zfs/mount'
|
|
12
14
|
require_relative 'zfs/config'
|
|
13
15
|
require_relative 'zfs/deps'
|
|
16
|
+
require_relative 'zfs/void'
|
|
14
17
|
require_relative 'zfs/encrypt'
|
data/lib/getch/filesystem.rb
CHANGED
data/lib/getch/gentoo/boot.rb
CHANGED
|
@@ -1,101 +1,63 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'fileutils'
|
|
2
4
|
|
|
3
5
|
module Getch
|
|
4
6
|
module Gentoo
|
|
5
7
|
class Boot
|
|
6
|
-
def initialize
|
|
7
|
-
@
|
|
8
|
-
@user = opts.username
|
|
9
|
-
@config = Getch.class_fs::Config.new()
|
|
8
|
+
def initialize
|
|
9
|
+
@user = Getch::OPTIONS[:username]
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def start
|
|
13
|
-
@config.fstab
|
|
14
13
|
bootloader
|
|
15
14
|
password
|
|
15
|
+
permission
|
|
16
16
|
the_end
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
def bootloader
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
25
|
end
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
# ref: https://forums.gentoo.org/viewtopic-p-8118822.html
|
|
32
|
-
esp = '/efi'
|
|
33
|
-
exec_chroot("bootctl --path #{esp} install")
|
|
34
|
-
datas_loader = [
|
|
35
|
-
'default gentoo',
|
|
36
|
-
'timeout 3',
|
|
37
|
-
'editor 0'
|
|
38
|
-
]
|
|
39
|
-
@config.systemd_boot
|
|
40
|
-
File.write("#{MOUNTPOINT}/#{esp}/loader/loader.conf", datas_loader.join("\n"))
|
|
41
|
-
|
|
42
|
-
FileUtils.cp("#{MOUNTPOINT}/usr/src/linux/arch/x86/boot/bzImage", "#{MOUNTPOINT}/#{esp}/vmlinuz", preserve: true)
|
|
43
|
-
|
|
44
|
-
initramfs = Dir.glob("#{MOUNTPOINT}/boot/initramfs-*.img")
|
|
45
|
-
FileUtils.cp("#{initramfs[0]}", "#{MOUNTPOINT}/#{esp}/initramfs", preserve: true) if initramfs != []
|
|
46
|
-
|
|
47
|
-
exec_chroot("bootctl --path #{esp} update")
|
|
48
|
-
end
|
|
27
|
+
def password
|
|
28
|
+
puts 'Password for root'
|
|
29
|
+
chroot "passwd"
|
|
30
|
+
return unless @user
|
|
49
31
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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}"
|
|
54
36
|
end
|
|
55
37
|
|
|
56
|
-
|
|
57
|
-
puts 'Installing GRUB...'
|
|
58
|
-
Getch::Emerge.new("sys-boot/grub:2").pkg!
|
|
59
|
-
@config.grub
|
|
60
|
-
exec_chroot("grub-install /dev/#{@disk}")
|
|
61
|
-
exec_chroot('grub-mkconfig -o /boot/grub/grub.cfg')
|
|
62
|
-
end
|
|
38
|
+
private
|
|
63
39
|
|
|
64
|
-
def
|
|
65
|
-
|
|
66
|
-
cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile && passwd\""
|
|
67
|
-
system(cmd)
|
|
40
|
+
def permission
|
|
41
|
+
FileUtils.chmod_R 0755, "#{MOUNTPOINT}/etc/portage"
|
|
68
42
|
if @user
|
|
69
|
-
|
|
70
|
-
exec_chroot("useradd -m -G users,wheel,audio,video #{@user}")
|
|
71
|
-
puts "Password for your user #{@user}"
|
|
72
|
-
cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile && passwd #{@user}\""
|
|
73
|
-
system(cmd)
|
|
43
|
+
Getch::Chroot.new("chown -R #{@user}:#{@user} /home/#{@user}").run!
|
|
74
44
|
end
|
|
75
45
|
end
|
|
76
46
|
|
|
77
|
-
private
|
|
78
|
-
|
|
79
47
|
def the_end
|
|
80
|
-
#Helpers::exec_or_die("umount -l /mnt/gentoo/dev{/shm,/pts,}")
|
|
81
|
-
#Helpers::exec_or_die("umount -R #{MOUNTPOINT}")
|
|
82
48
|
puts
|
|
83
|
-
puts
|
|
49
|
+
puts 'getch has finish, before reboot, you can:'
|
|
84
50
|
puts " + Chroot on your system with: chroot #{MOUNTPOINT} /bin/bash"
|
|
85
|
-
puts
|
|
51
|
+
puts ' + Install more packages like networkmanager or emacs'
|
|
86
52
|
puts
|
|
87
|
-
puts
|
|
88
|
-
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 '
|
|
89
55
|
puts
|
|
90
|
-
puts
|
|
56
|
+
puts 'Reboot the system when you have done !'
|
|
91
57
|
end
|
|
92
58
|
|
|
93
|
-
def
|
|
94
|
-
|
|
95
|
-
source /etc/profile
|
|
96
|
-
#{cmd}
|
|
97
|
-
\""
|
|
98
|
-
Getch::Command.new(script).run!
|
|
59
|
+
def chroot(cmd)
|
|
60
|
+
system('chroot', MOUNTPOINT, '/bin/bash', '-c', cmd)
|
|
99
61
|
end
|
|
100
62
|
end
|
|
101
63
|
end
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# frozen_strin_literal: true
|
|
2
|
+
|
|
3
|
+
module Getch
|
|
4
|
+
module Gentoo
|
|
5
|
+
class Bootloader
|
|
6
|
+
def initialize
|
|
7
|
+
@pkgs = []
|
|
8
|
+
@class_fs = Getch.select_fs
|
|
9
|
+
@config = @class_fs::Config.new
|
|
10
|
+
@disk = Getch::OPTIONS[:boot_disk] ?
|
|
11
|
+
Getch::OPTIONS[:boot_disk] :
|
|
12
|
+
Getch::OPTIONS[:disk]
|
|
13
|
+
@esp = '/efi'
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def start
|
|
17
|
+
@config.fstab
|
|
18
|
+
config_useflag
|
|
19
|
+
dependencies
|
|
20
|
+
install
|
|
21
|
+
@config.cmdline
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def config_useflag
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Dracut is used by sys-kernel/gentoo-kernel
|
|
28
|
+
def dependencies
|
|
29
|
+
@pkgs << 'app-shells/dash'
|
|
30
|
+
@pkgs << 'sys-kernel/dracut'
|
|
31
|
+
if Helpers.efi?
|
|
32
|
+
@pkgs << 'efivar'
|
|
33
|
+
@pkgs << 'sys-kernel/installkernel-systemd-boot'
|
|
34
|
+
else
|
|
35
|
+
@pkgs << 'sys-boot/grub:2'
|
|
36
|
+
@pkgs << 'sys-kernel/installkernel-gentoo' # for Grub
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def install
|
|
41
|
+
all_pkgs = @pkgs.join(' ')
|
|
42
|
+
Getch::Emerge.new(all_pkgs).pkg!
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def setup
|
|
46
|
+
if Helpers.efi?
|
|
47
|
+
Getch::Chroot.new("bootctl --path #{@esp} install").run!
|
|
48
|
+
else
|
|
49
|
+
Getch::Chroot.new("grub-install /dev/#{@disk}").run!
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def update
|
|
54
|
+
Getch::Emerge.new('--config sys-kernel/gentoo-kernel').pkg!
|
|
55
|
+
if Helpers.efi?
|
|
56
|
+
puts ' => Updating systemd-boot...'
|
|
57
|
+
Getch::Chroot.new("bootctl --path #{@esp} update").run!
|
|
58
|
+
else
|
|
59
|
+
puts ' => Updating grub...'
|
|
60
|
+
Getch::Chroot.new('grub-mkconfig -o /boot/grub/grub.cfg').run!
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def config
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
data/lib/getch/gentoo/chroot.rb
CHANGED
|
@@ -1,58 +1,55 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Getch
|
|
2
4
|
module Gentoo
|
|
3
5
|
class Chroot
|
|
4
6
|
def initialize
|
|
5
|
-
@state = Getch::States.new()
|
|
6
7
|
@pkgs = []
|
|
7
8
|
mount
|
|
8
9
|
end
|
|
9
10
|
|
|
10
11
|
def cpuflags
|
|
11
|
-
Getch::Emerge.new(
|
|
12
|
+
Getch::Emerge.new('app-portage/cpuid2cpuflags').pkg!
|
|
12
13
|
cpuflags = `chroot #{MOUNTPOINT} /bin/bash -c "source /etc/profile; cpuid2cpuflags"`.chomp
|
|
13
14
|
File.write("#{MOUNTPOINT}/etc/portage/package.use/00cpuflags", "*/* #{cpuflags}")
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
def update
|
|
17
18
|
return if STATES[:gentoo_update]
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
|
|
20
|
+
puts 'Downloading the last ebuilds for Gentoo...'
|
|
21
|
+
Helpers.create_dir("#{MOUNTPOINT}/var/db/repos/gentoo")
|
|
22
|
+
cmd = 'emaint sync --auto'
|
|
21
23
|
exec_chroot(cmd)
|
|
22
24
|
end
|
|
23
25
|
|
|
24
26
|
def world
|
|
25
27
|
return if STATES[:gentoo_update]
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
@
|
|
28
|
+
|
|
29
|
+
puts 'Update Gentoo world'
|
|
30
|
+
Getch::Emerge.new('emerge --update --deep --changed-use --newuse @world').run!
|
|
29
31
|
end
|
|
30
32
|
|
|
31
33
|
def systemd
|
|
32
|
-
puts
|
|
33
|
-
cmd =
|
|
34
|
+
puts 'Updating locale, keymap...'
|
|
35
|
+
cmd = 'locale-gen; emerge --config sys-libs/timezone-data'
|
|
34
36
|
exec_chroot(cmd)
|
|
35
37
|
end
|
|
36
38
|
|
|
37
|
-
def
|
|
39
|
+
def kernel_license
|
|
38
40
|
return if Dir.exist? "#{MOUNTPOINT}/usr/src/linux"
|
|
41
|
+
|
|
39
42
|
license = "#{MOUNTPOINT}/etc/portage/package.license"
|
|
40
43
|
File.write(license, "sys-kernel/linux-firmware linux-fw-redistributable no-source-code\n")
|
|
41
|
-
@pkgs << "sys-kernel/gentoo-sources"
|
|
42
|
-
@pkgs << "dev-util/dwarves"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def kernel_deps
|
|
46
|
-
Getch::Emerge.new("gentoolkit").pkg!
|
|
47
|
-
exec_chroot("euse -p sys-apps/kmod -E lzma")
|
|
48
|
-
@pkgs << "sys-apps/kmod"
|
|
49
44
|
end
|
|
50
45
|
|
|
51
46
|
def install_pkgs
|
|
52
|
-
@pkgs <<
|
|
53
|
-
@pkgs <<
|
|
54
|
-
@pkgs <<
|
|
55
|
-
|
|
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(' ')
|
|
56
53
|
puts "Installing #{all_pkgs}..."
|
|
57
54
|
Getch::Emerge.new(all_pkgs).pkg!
|
|
58
55
|
end
|
|
@@ -60,12 +57,12 @@ module Getch
|
|
|
60
57
|
private
|
|
61
58
|
|
|
62
59
|
def mount
|
|
63
|
-
puts
|
|
64
|
-
Helpers
|
|
65
|
-
Helpers
|
|
66
|
-
Helpers
|
|
67
|
-
Helpers
|
|
68
|
-
Helpers
|
|
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\"")
|
|
69
66
|
# Maybe add /dev/shm like describe here:
|
|
70
67
|
# https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base
|
|
71
68
|
end
|
data/lib/getch/gentoo/config.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'fileutils'
|
|
2
4
|
require 'tempfile'
|
|
3
5
|
require 'securerandom'
|
|
@@ -11,12 +13,13 @@ module Getch
|
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
def portage
|
|
14
|
-
grub_pc = Helpers
|
|
16
|
+
grub_pc = Helpers.efi? ? '' : 'GRUB_PLATFORMS="pc"'
|
|
15
17
|
nproc = `nproc`.chomp()
|
|
16
18
|
|
|
17
19
|
# Add cpu name
|
|
18
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
|
|
19
|
-
raise
|
|
21
|
+
raise 'Error, no cpu found' unless cpu || cpu == ''
|
|
22
|
+
|
|
20
23
|
@log.debug "CPU found ==> #{cpu}"
|
|
21
24
|
|
|
22
25
|
tmp = Tempfile.new('make.conf')
|
|
@@ -29,7 +32,7 @@ module Getch
|
|
|
29
32
|
end
|
|
30
33
|
}
|
|
31
34
|
|
|
32
|
-
FileUtils.copy_file(tmp, @make
|
|
35
|
+
FileUtils.copy_file(tmp, @make)
|
|
33
36
|
|
|
34
37
|
# Add the rest
|
|
35
38
|
data = [
|
|
@@ -37,16 +40,17 @@ module Getch
|
|
|
37
40
|
"MAKEOPTS=\"-j#{nproc}\"",
|
|
38
41
|
'ACCEPT_KEYWORDS="amd64"',
|
|
39
42
|
'INPUT_DEVICES="libinput"',
|
|
43
|
+
'USE="${USE} audit"',
|
|
40
44
|
grub_pc
|
|
41
45
|
]
|
|
42
|
-
File.write(@make, data.join("\n"), mode:
|
|
46
|
+
File.write(@make, data.join("\n"), mode: 'a')
|
|
43
47
|
end
|
|
44
48
|
|
|
45
49
|
# Write a repos.conf/gentoo.conf with the gpg verification
|
|
46
50
|
def repo
|
|
47
51
|
src = "#{MOUNTPOINT}/usr/share/portage/config/repos.conf"
|
|
48
52
|
dest = "#{MOUNTPOINT}/etc/portage/repos.conf"
|
|
49
|
-
FileUtils.mkdir dest, mode: 0644
|
|
53
|
+
FileUtils.mkdir dest, mode: 0644 unless Dir.exist?(dest)
|
|
50
54
|
tmp = Tempfile.new('gentoo.conf')
|
|
51
55
|
line_count = 0
|
|
52
56
|
|
|
@@ -60,22 +64,22 @@ module Getch
|
|
|
60
64
|
line_count += 1
|
|
61
65
|
}
|
|
62
66
|
|
|
63
|
-
FileUtils.copy_file(tmp, "#{dest}/gentoo.conf"
|
|
67
|
+
FileUtils.copy_file(tmp, "#{dest}/gentoo.conf")
|
|
64
68
|
end
|
|
65
69
|
|
|
66
70
|
def network
|
|
67
71
|
src = '/etc/resolv.conf'
|
|
68
72
|
dest = "#{MOUNTPOINT}/etc/resolv.conf"
|
|
69
|
-
FileUtils.copy_file(src, dest
|
|
73
|
+
FileUtils.copy_file(src, dest)
|
|
70
74
|
end
|
|
71
75
|
|
|
72
|
-
def systemd
|
|
73
|
-
control_options
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
File.write("#{MOUNTPOINT}/etc/timezone", "#{
|
|
78
|
-
File.write("#{MOUNTPOINT}/etc/vconsole.conf", "KEYMAP=#{
|
|
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")
|
|
79
83
|
end
|
|
80
84
|
|
|
81
85
|
def hostname
|
|
@@ -85,21 +89,55 @@ module Getch
|
|
|
85
89
|
|
|
86
90
|
def portage_fs
|
|
87
91
|
portage = "#{MOUNTPOINT}/etc/portage"
|
|
88
|
-
Helpers
|
|
89
|
-
Helpers
|
|
90
|
-
Helpers
|
|
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
|
|
91
100
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
|
95
133
|
end
|
|
96
134
|
|
|
97
135
|
private
|
|
98
136
|
|
|
99
|
-
def control_options
|
|
100
|
-
search_zone(
|
|
101
|
-
search_utf8(
|
|
102
|
-
search_key(
|
|
137
|
+
def control_options
|
|
138
|
+
search_zone(Getch::OPTIONS[:zoneinfo])
|
|
139
|
+
search_utf8(Getch::OPTIONS[:language])
|
|
140
|
+
search_key(Getch::OPTIONS[:keymap])
|
|
103
141
|
end
|
|
104
142
|
|
|
105
143
|
def search_key(keys)
|
|
@@ -107,22 +145,22 @@ module Getch
|
|
|
107
145
|
Dir.glob("#{MOUNTPOINT}/usr/share/keymaps/**/#{keys}.map.gz") { |f|
|
|
108
146
|
@keymap = f
|
|
109
147
|
}
|
|
110
|
-
raise ArgumentError, "No keymap #{@keymap} found"
|
|
148
|
+
raise ArgumentError, "No keymap #{@keymap} found" unless @keymap
|
|
111
149
|
end
|
|
112
150
|
|
|
113
151
|
def search_zone(zone)
|
|
114
|
-
|
|
152
|
+
unless File.exist? "#{MOUNTPOINT}/usr/share/zoneinfo/#{zone}"
|
|
115
153
|
raise ArgumentError, "Zoneinfo #{zone} doesn\'t exist."
|
|
116
154
|
end
|
|
117
155
|
end
|
|
118
156
|
|
|
119
157
|
def search_utf8(lang)
|
|
120
158
|
@utf8, @lang = nil, nil
|
|
121
|
-
File.open("#{MOUNTPOINT}/usr/share/i18n/SUPPORTED").each
|
|
122
|
-
@utf8 =
|
|
123
|
-
@lang = $~[0] if l.match(/^#{lang}[. ]+utf
|
|
124
|
-
|
|
125
|
-
raise ArgumentError, "Lang #{lang} no found"
|
|
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
|
|
126
164
|
end
|
|
127
165
|
end
|
|
128
166
|
end
|