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.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +35 -29
  4. data/bin/getch +8 -6
  5. data/lib/clean.rb +149 -0
  6. data/lib/cryptsetup.rb +132 -0
  7. data/lib/devs.rb +199 -0
  8. data/lib/dracut/encrypt.rb +36 -0
  9. data/lib/dracut/hybrid.rb +15 -0
  10. data/lib/dracut/lvm.rb +14 -0
  11. data/lib/dracut/minimal.rb +11 -0
  12. data/lib/dracut/root.rb +45 -0
  13. data/lib/dracut/zfs.rb +35 -0
  14. data/lib/dracut.rb +11 -0
  15. data/lib/fstab/encrypt.rb +44 -0
  16. data/lib/fstab/hybrid.rb +34 -0
  17. data/lib/fstab/lvm.rb +25 -0
  18. data/lib/fstab/minimal.rb +6 -0
  19. data/lib/fstab/root.rb +93 -0
  20. data/lib/fstab/zfs.rb +23 -0
  21. data/lib/fstab.rb +11 -0
  22. data/lib/getch/assembly.rb +150 -0
  23. data/lib/getch/command.rb +88 -128
  24. data/lib/getch/config/account.rb +39 -0
  25. data/lib/getch/config/dhcp.rb +104 -0
  26. data/lib/getch/config/grub.rb +42 -0
  27. data/lib/getch/config/iwd.rb +60 -0
  28. data/lib/getch/config/keymap.rb +78 -0
  29. data/lib/getch/config/locale.rb +96 -0
  30. data/lib/getch/config/portage.rb +90 -0
  31. data/lib/getch/config/pre_network.rb +37 -0
  32. data/lib/getch/config/timezone.rb +52 -0
  33. data/lib/getch/config/void.rb +0 -36
  34. data/lib/getch/config.rb +16 -37
  35. data/lib/getch/device.rb +67 -0
  36. data/lib/getch/filesystem/ext4/encrypt/config.rb +9 -71
  37. data/lib/getch/filesystem/ext4/encrypt/deps.rb +15 -25
  38. data/lib/getch/filesystem/ext4/encrypt/device.rb +11 -5
  39. data/lib/getch/filesystem/ext4/encrypt/format.rb +6 -15
  40. data/lib/getch/filesystem/ext4/encrypt/mount.rb +7 -11
  41. data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -76
  42. data/lib/getch/filesystem/ext4/encrypt/void.rb +0 -38
  43. data/lib/getch/filesystem/ext4/encrypt.rb +2 -1
  44. data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
  45. data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
  46. data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
  47. data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
  48. data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
  49. data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
  50. data/lib/getch/filesystem/{lvm/encrypt → ext4/hybrid}/void.rb +0 -39
  51. data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
  52. data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
  53. data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
  54. data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
  55. data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
  56. data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
  57. data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
  58. data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +6 -4
  59. data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
  60. data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +3 -1
  61. data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
  62. data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
  63. data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
  64. data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
  65. data/lib/getch/filesystem/ext4/minimal.rb +19 -0
  66. data/lib/getch/filesystem/ext4.rb +7 -7
  67. data/lib/getch/filesystem/zfs/encrypt/config.rb +10 -39
  68. data/lib/getch/filesystem/zfs/encrypt/deps.rb +4 -55
  69. data/lib/getch/filesystem/zfs/encrypt/device.rb +7 -51
  70. data/lib/getch/filesystem/zfs/encrypt/format.rb +6 -90
  71. data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -35
  72. data/lib/getch/filesystem/zfs/encrypt/partition.rb +6 -54
  73. data/lib/getch/filesystem/zfs/encrypt.rb +2 -1
  74. data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
  75. data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
  76. data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
  77. data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
  78. data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
  79. data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
  80. data/lib/getch/filesystem/zfs/minimal.rb +19 -0
  81. data/lib/getch/filesystem/zfs.rb +1 -7
  82. data/lib/getch/filesystem.rb +0 -6
  83. data/lib/getch/gentoo/bootloader.rb +23 -44
  84. data/lib/getch/gentoo/finalize.rb +25 -0
  85. data/lib/getch/gentoo/post_config.rb +75 -0
  86. data/lib/getch/gentoo/pre_config.rb +37 -0
  87. data/lib/getch/gentoo/services.rb +18 -0
  88. data/lib/getch/gentoo/sources.rb +39 -33
  89. data/lib/getch/gentoo/tarball.rb +91 -0
  90. data/lib/getch/gentoo/terraform.rb +34 -0
  91. data/lib/getch/gentoo/update.rb +54 -0
  92. data/lib/getch/gentoo/use.rb +9 -6
  93. data/lib/getch/gentoo/use_flag.rb +17 -20
  94. data/lib/getch/gentoo.rb +9 -75
  95. data/lib/getch/guard.rb +2 -2
  96. data/lib/getch/helpers.rb +63 -115
  97. data/lib/getch/log.rb +87 -25
  98. data/lib/getch/options.rb +41 -11
  99. data/lib/getch/states.rb +28 -8
  100. data/lib/getch/tree.rb +56 -0
  101. data/lib/getch/version.rb +1 -1
  102. data/lib/getch/void/bootloader.rb +18 -0
  103. data/lib/getch/void/finalize.rb +31 -0
  104. data/lib/getch/void/post_config.rb +19 -0
  105. data/lib/getch/void/pre_config.rb +18 -0
  106. data/lib/getch/void/services.rb +18 -0
  107. data/lib/getch/void/{stage.rb → tarball.rb} +34 -14
  108. data/lib/getch/void/terraform.rb +28 -0
  109. data/lib/getch/void/update.rb +33 -0
  110. data/lib/getch/void.rb +9 -59
  111. data/lib/getch.rb +58 -90
  112. data/lib/luks.rb +239 -0
  113. data/lib/lvm2.rb +112 -0
  114. data/lib/mkfs/zfs.rb +167 -0
  115. data/lib/mkfs.rb +140 -0
  116. data/lib/mountfs.rb +154 -0
  117. data/lib/nito.rb +131 -0
  118. data/lib/sgdisk.rb +160 -0
  119. data.tar.gz.sig +0 -0
  120. metadata +83 -47
  121. metadata.gz.sig +0 -0
  122. data/lib/getch/config/gentoo.rb +0 -58
  123. data/lib/getch/filesystem/clean.rb +0 -58
  124. data/lib/getch/filesystem/device.rb +0 -63
  125. data/lib/getch/filesystem/ext4/config.rb +0 -62
  126. data/lib/getch/filesystem/ext4/deps.rb +0 -24
  127. data/lib/getch/filesystem/ext4/format.rb +0 -31
  128. data/lib/getch/filesystem/ext4/mount.rb +0 -26
  129. data/lib/getch/filesystem/ext4/partition.rb +0 -55
  130. data/lib/getch/filesystem/ext4/void.rb +0 -44
  131. data/lib/getch/filesystem/lvm/config.rb +0 -44
  132. data/lib/getch/filesystem/lvm/deps.rb +0 -44
  133. data/lib/getch/filesystem/lvm/device.rb +0 -45
  134. data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -74
  135. data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -49
  136. data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -48
  137. data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -35
  138. data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -27
  139. data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -84
  140. data/lib/getch/filesystem/lvm/encrypt.rb +0 -18
  141. data/lib/getch/filesystem/lvm/format.rb +0 -32
  142. data/lib/getch/filesystem/lvm/mount.rb +0 -26
  143. data/lib/getch/filesystem/lvm/partition.rb +0 -72
  144. data/lib/getch/filesystem/lvm/void.rb +0 -46
  145. data/lib/getch/filesystem/mount.rb +0 -63
  146. data/lib/getch/filesystem/partition.rb +0 -85
  147. data/lib/getch/filesystem/zfs/config.rb +0 -43
  148. data/lib/getch/filesystem/zfs/deps.rb +0 -67
  149. data/lib/getch/filesystem/zfs/device.rb +0 -66
  150. data/lib/getch/filesystem/zfs/encrypt/void.rb +0 -97
  151. data/lib/getch/filesystem/zfs/format.rb +0 -117
  152. data/lib/getch/filesystem/zfs/mount.rb +0 -47
  153. data/lib/getch/filesystem/zfs/partition.rb +0 -69
  154. data/lib/getch/filesystem/zfs/void.rb +0 -81
  155. data/lib/getch/gentoo/boot.rb +0 -64
  156. data/lib/getch/gentoo/chroot.rb +0 -75
  157. data/lib/getch/gentoo/config.rb +0 -167
  158. data/lib/getch/gentoo/stage.rb +0 -73
  159. data/lib/getch/void/boot.rb +0 -84
  160. data/lib/getch/void/chroot.rb +0 -56
  161. 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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