getch 0.1.9 → 0.3.0

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