getch 0.1.3 → 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 +75 -35
  4. data/assets/network-stack.conf +63 -0
  5. data/assets/system.conf +38 -0
  6. data/bin/getch +14 -4
  7. data/lib/clean.rb +149 -0
  8. data/lib/cmdline.rb +128 -0
  9. data/lib/cryptsetup.rb +132 -0
  10. data/lib/devs.rb +199 -0
  11. data/lib/dracut/encrypt.rb +36 -0
  12. data/lib/dracut/hybrid.rb +15 -0
  13. data/lib/dracut/lvm.rb +14 -0
  14. data/lib/dracut/minimal.rb +11 -0
  15. data/lib/dracut/root.rb +45 -0
  16. data/lib/dracut/zfs.rb +35 -0
  17. data/lib/dracut.rb +11 -0
  18. data/lib/fstab/encrypt.rb +44 -0
  19. data/lib/fstab/hybrid.rb +34 -0
  20. data/lib/fstab/lvm.rb +25 -0
  21. data/lib/fstab/minimal.rb +6 -0
  22. data/lib/fstab/root.rb +93 -0
  23. data/lib/fstab/zfs.rb +23 -0
  24. data/lib/fstab.rb +11 -0
  25. data/lib/getch/assembly.rb +150 -0
  26. data/lib/getch/command.rb +94 -124
  27. data/lib/getch/config/account.rb +39 -0
  28. data/lib/getch/config/dhcp.rb +104 -0
  29. data/lib/getch/config/grub.rb +42 -0
  30. data/lib/getch/config/iwd.rb +60 -0
  31. data/lib/getch/config/keymap.rb +78 -0
  32. data/lib/getch/config/locale.rb +96 -0
  33. data/lib/getch/config/portage.rb +90 -0
  34. data/lib/getch/config/pre_network.rb +37 -0
  35. data/lib/getch/config/timezone.rb +52 -0
  36. data/lib/getch/config/void.rb +11 -0
  37. data/lib/getch/config.rb +19 -53
  38. data/lib/getch/device.rb +67 -0
  39. data/lib/getch/filesystem/ext4/encrypt/config.rb +11 -68
  40. data/lib/getch/filesystem/ext4/encrypt/deps.rb +17 -25
  41. data/lib/getch/filesystem/ext4/encrypt/device.rb +13 -5
  42. data/lib/getch/filesystem/ext4/encrypt/format.rb +8 -15
  43. data/lib/getch/filesystem/ext4/encrypt/mount.rb +9 -13
  44. data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -82
  45. data/lib/getch/filesystem/ext4/encrypt/void.rb +63 -0
  46. data/lib/getch/filesystem/ext4/encrypt.rb +4 -0
  47. data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
  48. data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
  49. data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
  50. data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
  51. data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
  52. data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
  53. data/lib/getch/filesystem/ext4/hybrid/void.rb +62 -0
  54. data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
  55. data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
  56. data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
  57. data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
  58. data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
  59. data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
  60. data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
  61. data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +8 -3
  62. data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
  63. data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +4 -3
  64. data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
  65. data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
  66. data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
  67. data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
  68. data/lib/getch/filesystem/ext4/minimal.rb +19 -0
  69. data/lib/getch/filesystem/ext4.rb +9 -6
  70. data/lib/getch/filesystem/zfs/encrypt/config.rb +12 -57
  71. data/lib/getch/filesystem/zfs/encrypt/deps.rb +7 -86
  72. data/lib/getch/filesystem/zfs/encrypt/device.rb +9 -45
  73. data/lib/getch/filesystem/zfs/encrypt/format.rb +8 -90
  74. data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -34
  75. data/lib/getch/filesystem/zfs/encrypt/partition.rb +8 -50
  76. data/lib/getch/filesystem/zfs/encrypt.rb +4 -0
  77. data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
  78. data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
  79. data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
  80. data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
  81. data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
  82. data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
  83. data/lib/getch/filesystem/zfs/minimal.rb +19 -0
  84. data/lib/getch/filesystem/zfs.rb +3 -6
  85. data/lib/getch/filesystem.rb +2 -6
  86. data/lib/getch/gentoo/bootloader.rb +47 -0
  87. data/lib/getch/gentoo/finalize.rb +25 -0
  88. data/lib/getch/gentoo/post_config.rb +75 -0
  89. data/lib/getch/gentoo/pre_config.rb +37 -0
  90. data/lib/getch/gentoo/services.rb +18 -0
  91. data/lib/getch/gentoo/sources.rb +82 -52
  92. data/lib/getch/gentoo/tarball.rb +91 -0
  93. data/lib/getch/gentoo/terraform.rb +34 -0
  94. data/lib/getch/gentoo/update.rb +54 -0
  95. data/lib/getch/gentoo/use.rb +11 -12
  96. data/lib/getch/gentoo/use_flag.rb +74 -52
  97. data/lib/getch/gentoo.rb +11 -63
  98. data/lib/getch/guard.rb +71 -0
  99. data/lib/getch/helpers.rb +128 -48
  100. data/lib/getch/log.rb +91 -26
  101. data/lib/getch/options.rb +79 -40
  102. data/lib/getch/states.rb +37 -10
  103. data/lib/getch/tree.rb +56 -0
  104. data/lib/getch/version.rb +1 -1
  105. data/lib/getch/void/bootloader.rb +18 -0
  106. data/lib/getch/void/finalize.rb +31 -0
  107. data/lib/getch/void/post_config.rb +19 -0
  108. data/lib/getch/void/pre_config.rb +18 -0
  109. data/lib/getch/void/services.rb +18 -0
  110. data/lib/getch/void/tarball.rb +89 -0
  111. data/lib/getch/void/terraform.rb +28 -0
  112. data/lib/getch/void/update.rb +33 -0
  113. data/lib/getch/void.rb +15 -0
  114. data/lib/getch.rb +104 -92
  115. data/lib/luks.rb +239 -0
  116. data/lib/lvm2.rb +112 -0
  117. data/lib/mkfs/zfs.rb +167 -0
  118. data/lib/mkfs.rb +140 -0
  119. data/lib/mountfs.rb +154 -0
  120. data/lib/nito.rb +131 -0
  121. data/lib/sgdisk.rb +160 -0
  122. data.tar.gz.sig +0 -0
  123. metadata +96 -45
  124. metadata.gz.sig +0 -0
  125. data/.gitignore +0 -2
  126. data/CHANGELOG.md +0 -90
  127. data/Rakefile +0 -21
  128. data/bin/setup.sh +0 -90
  129. data/getch.gemspec +0 -25
  130. data/lib/getch/filesystem/clean.rb +0 -51
  131. data/lib/getch/filesystem/device.rb +0 -61
  132. data/lib/getch/filesystem/ext4/config.rb +0 -58
  133. data/lib/getch/filesystem/ext4/deps.rb +0 -22
  134. data/lib/getch/filesystem/ext4/format.rb +0 -28
  135. data/lib/getch/filesystem/ext4/mount.rb +0 -23
  136. data/lib/getch/filesystem/ext4/partition.rb +0 -52
  137. data/lib/getch/filesystem/lvm/config.rb +0 -59
  138. data/lib/getch/filesystem/lvm/deps.rb +0 -42
  139. data/lib/getch/filesystem/lvm/device.rb +0 -43
  140. data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -71
  141. data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -46
  142. data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -46
  143. data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -32
  144. data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -25
  145. data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -80
  146. data/lib/getch/filesystem/lvm/encrypt.rb +0 -15
  147. data/lib/getch/filesystem/lvm/format.rb +0 -29
  148. data/lib/getch/filesystem/lvm/mount.rb +0 -23
  149. data/lib/getch/filesystem/lvm/partition.rb +0 -69
  150. data/lib/getch/filesystem/mount.rb +0 -56
  151. data/lib/getch/filesystem/partition.rb +0 -77
  152. data/lib/getch/filesystem/zfs/config.rb +0 -57
  153. data/lib/getch/filesystem/zfs/deps.rb +0 -95
  154. data/lib/getch/filesystem/zfs/device.rb +0 -58
  155. data/lib/getch/filesystem/zfs/format.rb +0 -114
  156. data/lib/getch/filesystem/zfs/mount.rb +0 -48
  157. data/lib/getch/filesystem/zfs/partition.rb +0 -64
  158. data/lib/getch/gentoo/boot.rb +0 -109
  159. data/lib/getch/gentoo/chroot.rb +0 -77
  160. data/lib/getch/gentoo/config.rb +0 -129
  161. data/lib/getch/gentoo/stage.rb +0 -74
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'nito'
4
+
5
+ module Getch
6
+ module Config
7
+ # Search and configure the keymap (man loadkeys)
8
+ class Keymap
9
+ include NiTo
10
+
11
+ def initialize
12
+ @log = Log.new
13
+ @rc_conf = "#{OPTIONS[:mountpoint]}/etc/rc.conf"
14
+ @vconsole_conf = "#{OPTIONS[:mountpoint]}/etc/vconsole.conf"
15
+ @conf_d = "#{OPTIONS[:mountpoint]}/etc/conf.d/keymaps"
16
+ @keymaps_dir = nil
17
+ @keymap = nil
18
+ x
19
+ end
20
+
21
+ protected
22
+
23
+ def x
24
+ @log.info "Configuring keymap...\n"
25
+ search_keymap
26
+ apply_conf
27
+ end
28
+
29
+ def search_keymap
30
+ search_dir
31
+ path = "#{OPTIONS[:mountpoint]}#{@keymaps_dir}/**/#{OPTIONS[:keymap]}.map.gz"
32
+ Dir.glob(path) { |f| @keymap = OPTIONS[:keymap] if f }
33
+
34
+ @keymap || @log.fatal("No keymap found for #{OPTIONS[:keymap]}.")
35
+ end
36
+
37
+ def apply_conf
38
+ @log.info "Setting keymap to \"#{@keymap}\"..."
39
+ writing_rc_conf
40
+ writing_vconsole_conf
41
+ writing_conf_d_keymaps
42
+ @log.result_ok
43
+ end
44
+
45
+ def writing_rc_conf
46
+ return unless File.exist? @rc_conf
47
+
48
+ echo_a @rc_conf, "KEYMAP=\"#{@keymap}\""
49
+ end
50
+
51
+ def writing_vconsole_conf
52
+ return unless Helpers.systemd?
53
+
54
+ echo_a @vconsole_conf, "KEYMAP=\"#{@keymap}\""
55
+ end
56
+
57
+ def writing_conf_d_keymaps
58
+ return unless File.exist? @conf_d
59
+
60
+ sed @conf_d, /^keymap=/, "keymap=\"#{@keymap}\""
61
+ end
62
+
63
+ private
64
+
65
+ def search_dir
66
+ case OPTIONS[:os]
67
+ when 'gentoo' then @keymaps_dir = '/usr/share/keymaps'
68
+ when 'void' then @keymaps_dir = '/usr/share/kbd/keymaps'
69
+ else
70
+ @log.fatal('OPTIONS[:os] not supported yet.')
71
+ end
72
+
73
+ File.exist? "#{OPTIONS[:mountpoint]}#{@keymaps_dir}" ||
74
+ @log.fatal("No dir keymaps #{@keymaps_dir} found.")
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'nito'
4
+
5
+ # Gentoo: https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base#Locale_generation
6
+ # Void: https://docs.voidlinux.org/config/locales.html#locales-and-translations
7
+ module Getch
8
+ module Config
9
+ class Locale
10
+ include NiTo
11
+
12
+ # Gentoo use i18n_supported
13
+ # Void use libc_locale
14
+ def initialize
15
+ @log = Log.new
16
+ @i18n_supported = "#{OPTIONS[:mountpoint]}/usr/share/i18n/SUPPORTED"
17
+ @libc_locales = "#{OPTIONS[:mountpoint]}/etc/default/libc-locales"
18
+ @locale_conf = "#{OPTIONS[:mountpoint]}/etc/locale.conf"
19
+ @i18n = nil
20
+ @lang = nil
21
+ x
22
+ end
23
+
24
+ def x
25
+ @log.info "Configuring locales...\n"
26
+ search_locale
27
+ apply_conf
28
+ end
29
+
30
+ protected
31
+
32
+ def search_locale
33
+ search_i18n
34
+ search_libc
35
+ lang
36
+ end
37
+
38
+ def apply_conf
39
+ return if OPTIONS[:musl]
40
+
41
+ File.exist?("#{OPTIONS[:mountpoint]}/etc/locale.gen") && write_locale_gen
42
+ File.exist?(@libc_locales) && write_libc_locales
43
+ end
44
+
45
+ def write_locale_gen
46
+ @log.fatal("No UTF8 locale found for #{OPTIONS[:language]}") unless @i18n
47
+
48
+ @log.info "Using locale #{@i18n}...\n"
49
+ echo "#{OPTIONS[:mountpoint]}/etc/locale.gen", @i18n
50
+ locale_conf
51
+ Getch::Chroot.new('locale-gen')
52
+ end
53
+
54
+ def write_libc_locales
55
+ @log.fatal("No UTF8 locale found for #{OPTIONS[:language]}") unless @i18n
56
+
57
+ @log.info "Using locale #{@i18n}...\n"
58
+ echo @libc_locales, @i18n
59
+ locale_conf
60
+ Getch::Chroot.new('xbps-reconfigure -f glibc-locales')
61
+ end
62
+
63
+ private
64
+
65
+ def search_i18n
66
+ return unless File.exist? @i18n_supported
67
+
68
+ File.open(@i18n_supported).each do |l|
69
+ @i18n = l.chomp if l =~ /#{OPTIONS[:language]}.*UTF-8$/
70
+ end
71
+ end
72
+
73
+ def search_libc
74
+ return unless File.exist? @libc_locales
75
+
76
+ File.open(@libc_locales).each do |l|
77
+ @i18n = l.tr('#', '').chomp if l =~ /\#?#{OPTIONS[:language]}.*UTF-8/
78
+ end
79
+ end
80
+
81
+ def lang
82
+ return unless @i18n
83
+
84
+ lang = @i18n.split(' ')
85
+ @lang = lang[0]
86
+ end
87
+
88
+ def locale_conf
89
+ return unless Helpers.systemd?
90
+
91
+ echo @locale_conf, "LANG=#{@lang}"
92
+ echo_a @locale_conf, 'LC_COLLATE=C.UTF-8'
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,90 @@
1
+ require 'nito'
2
+ require 'tempfile'
3
+
4
+ module Getch
5
+ module Config
6
+ class Portage
7
+ include NiTo
8
+
9
+ def initialize
10
+ @log = Log.new
11
+ @dest = "#{OPTIONS[:mountpoint]}/etc/portage"
12
+ @usr_s = "#{OPTIONS[:mountpoint]}/usr/share/portage"
13
+ x
14
+ end
15
+
16
+ def x
17
+ @log.info "Configuring Portage...\n"
18
+ portage_dir
19
+ gentoo_repo
20
+ cpu_conf
21
+ make_conf
22
+ https_mirror
23
+ license
24
+ end
25
+
26
+ protected
27
+
28
+ def portage_dir
29
+ mkdir "#{@dest}/package.use", 0744
30
+ mkdir "#{@dest}/package.accept_keywords", 0744
31
+ mkdir "#{@dest}/package.unmask", 0744
32
+ mkdir "#{@dest}/package.license", 0744
33
+
34
+ touch "#{@dest}/package.use/zzz_via_autounmask"
35
+ touch "#{@dest}/package.accept_keywords/zzz_via_autounmask"
36
+ touch "#{@dest}/package.unmask/zzz_via_autounmask"
37
+ end
38
+
39
+ # Recreate a gentoo.conf from /usr/share/portage/config/repos.conf
40
+ def gentoo_repo
41
+ mkdir "#{@dest}/repos.conf", 0644
42
+ cp "#{@usr_s}/config/repos.conf", "#{@dest}/repos.conf/gentoo.conf"
43
+ sed "#{@dest}/repos.conf/gentoo.conf", /^sync-type/, 'sync-type = webrsync'
44
+ end
45
+
46
+ # -fomit-frame-pointer reduce code compiled
47
+ # but have repercussions on the debugging of applications
48
+ def cpu_conf
49
+ change = 'COMMON_FLAGS="-march=native -O2 -pipe -fomit-frame-pointer"'
50
+ sed "#{@dest}/make.conf", /^COMMON_FLAGS/, change
51
+ end
52
+
53
+ # https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage#MAKEOPTS
54
+ def make_conf
55
+ mem = get_memory
56
+ makeopts = mem[0].to_i / 2
57
+
58
+ echo_a "#{@dest}/make.conf", 'ACCEPT_KEYWORDS="amd64"'
59
+ echo_a "#{@dest}/make.conf", 'INPUT_DEVICES="libinput"'
60
+ echo_a "#{@dest}/make.conf", "MAKEOPTS=\"-j#{makeopts}\""
61
+ end
62
+
63
+ # https://www.gentoo.org/downloads/mirrors/
64
+ def https_mirror
65
+ list = 'https://gentoo.osuosl.org'
66
+ list << ' https://mirrors.rit.edu/gentoo'
67
+ list << ' https://ftp.belnet.be/pub/rsync.gentoo.org/gentoo'
68
+ list << ' https://mirror.init7.net/gentoo'
69
+ echo_a "#{@dest}/make.conf", "GENTOO_MIRRORS=\"#{list}\""
70
+ end
71
+
72
+ def license
73
+ conf = "#{@dest}/package.license/kernel"
74
+ echo conf, 'sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE'
75
+ echo_a conf, 'sys-firmware/intel-microcode intel-ucode'
76
+ end
77
+
78
+ private
79
+
80
+ def get_memory
81
+ mem = '2048'
82
+ File.open('/proc/meminfo').each do |l|
83
+ t = l.split(' ') if l =~ /memtotal/i
84
+ t && mem = t[1]
85
+ end
86
+ mem
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,37 @@
1
+ require 'nito'
2
+
3
+ module Getch
4
+ module Config
5
+ class PreNetwork
6
+ include NiTo
7
+
8
+ def initialize
9
+ @log = Log.new
10
+ x
11
+ end
12
+
13
+ protected
14
+
15
+ def x
16
+ @log.info "Configuring pre-network...\n"
17
+ hostname
18
+ copy_dns
19
+ end
20
+
21
+ private
22
+
23
+ def hostname
24
+ @log.info 'Writing /etc/hostname...'
25
+ echo "#{OPTIONS[:mountpoint]}/etc/hostname", 'host'
26
+ @log.result_ok
27
+ end
28
+
29
+ def copy_dns
30
+ @log.info 'Copying DNS from current host...'
31
+ cp '/etc/resolv.conf', "#{OPTIONS[:mountpoint]}/etc/resolv.conf"
32
+ echo_a "#{OPTIONS[:mountpoint]}/etc/resolv.conf", 'nameserver 127.0.0.1'
33
+ @log.result_ok
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'nito'
4
+
5
+ module Getch
6
+ module Config
7
+ class TimeZone
8
+ include NiTo
9
+
10
+ def initialize
11
+ @log = Log.new
12
+ @etc_timezone = "#{OPTIONS[:mountpoint]}/etc/timezone"
13
+ @rc_conf = "#{OPTIONS[:mountpoint]}/etc/rc.conf"
14
+ @openrc = "#{OPTIONS[:mountpoint]}/etc/conf.d/keymaps"
15
+ @timezone = OPTIONS[:timezone]
16
+ x
17
+ end
18
+
19
+ protected
20
+
21
+ def x
22
+ @log.info "Configuring timezone to #{@timezone}...\n"
23
+ for_runit
24
+ for_openrc
25
+ for_systemd
26
+ end
27
+
28
+ private
29
+
30
+ def for_runit
31
+ return unless Helpers.runit?
32
+
33
+ echo_a @rc_conf, "TIMEZONE=\"#{@timezone}\""
34
+ end
35
+
36
+ def for_openrc
37
+ return unless Helpers.openrc?
38
+
39
+ echo_a @etc_timezone, OPTIONS[:timezone]
40
+ Getch::Chroot.new('emerge --config sys-libs/timezone-data')
41
+ end
42
+
43
+ def for_systemd
44
+ return unless Helpers.systemd?
45
+
46
+ src = "/usr/share/zoneinfo/#{OPTIONS[:timezone]}"
47
+ dest = "/etc/localtime"
48
+ Getch::Chroot.new('ln', '-sf', src, dest)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Config
5
+ class Void
6
+ def shell
7
+ command 'chsh -s /bin/bash'
8
+ end
9
+ end
10
+ end
11
+ end
data/lib/getch/config.rb CHANGED
@@ -1,58 +1,24 @@
1
- module Getch
2
- class Config
3
- def initialize
4
- @systemd_net_dir = "#{MOUNTPOINT}/etc/systemd"
5
- end
6
-
7
- def network
8
- ethernet
9
- wifi
10
- resolved
11
- Getch::Chroot.new('systemctl enable systemd-networkd').run!
12
- Getch::Chroot.new('systemctl enable systemd-resolved').run!
13
- end
14
-
15
- private
1
+ # frozen_string_literal: true
16
2
 
17
- def ethernet
18
- conf = "#{@systemd_net_dir}/network/20-ethernet.network"
19
- datas = [
20
- "[Match]",
21
- "Name=en*",
22
- "Name=eth*",
23
- "[Network]",
24
- "DHCP=yes",
25
- "IPv6PrivacyExtensions=yes",
26
- "[DHCP]",
27
- "RouteMetric=512"
28
- ]
29
- File.write(conf, datas.join("\n"), mode: 'w')
30
- end
31
-
32
- def wifi
33
- conf = "#{@systemd_net_dir}/network/20-wireless.network"
34
- datas = [
35
- "[Match]",
36
- "Name=wlp*",
37
- "Name=wlan*",
38
- "[Network]",
39
- "DHCP=yes",
40
- "IPv6PrivacyExtensions=yes",
41
- "[DHCP]",
42
- "RouteMetric=1024",
43
- ]
44
- File.write(conf, datas.join("\n"), mode: 'w')
45
- end
3
+ module Getch
4
+ module Config
5
+ def sysctl
6
+ pwd = File.expand_path(File.dirname(__FILE__))
7
+ dest = "#{Getch::MOUNTPOINT}/etc/sysctl.d/"
46
8
 
47
- def resolved
48
- conf = "#{@systemd_net_dir}/resolved.conf.d/dns_over_tls.conf"
49
- datas = [
50
- "[Resolve]",
51
- "DNS=9.9.9.9#dns.quad9.net",
52
- "DNSOverTLS=yes",
53
- ]
54
- Helpers::create_dir("#{@systemd_net_dir}/resolved.conf.d")
55
- File.write(conf, datas.join("\n"), mode: 'w')
9
+ mkdir dest
10
+ Helpers.cp("#{pwd}/../../assets/network-stack.conf", dest)
11
+ Helpers.cp("#{pwd}/../../assets/system.conf", dest)
56
12
  end
57
13
  end
58
14
  end
15
+
16
+ require_relative 'config/portage'
17
+ require_relative 'config/locale'
18
+ require_relative 'config/pre_network'
19
+ require_relative 'config/keymap'
20
+ require_relative 'config/timezone'
21
+ require_relative 'config/grub'
22
+ require_relative 'config/account'
23
+ require_relative 'config/iwd'
24
+ require_relative 'config/dhcp'
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+
5
+ module Getch
6
+ class Device
7
+ def initialize
8
+ @file = File.join('/tmp/getch_devs.yaml')
9
+ load_devs
10
+ end
11
+
12
+ def gpt(dev)
13
+ DEVS[:gpt] = dev
14
+ save
15
+ end
16
+
17
+ def efi(dev)
18
+ DEVS[:efi] = dev
19
+ save
20
+ end
21
+
22
+ def boot(dev)
23
+ DEVS[:boot] = dev
24
+ save
25
+ end
26
+
27
+ def swap(dev)
28
+ DEVS[:swap] = dev
29
+ save
30
+ end
31
+
32
+ def root(dev)
33
+ DEVS[:root] = dev
34
+ save
35
+ end
36
+
37
+ def home(dev)
38
+ DEVS[:home] = dev
39
+ save
40
+ end
41
+
42
+ def zlog(dev)
43
+ DEVS[:zlog] = dev
44
+ save
45
+ end
46
+
47
+ def zcache(dev)
48
+ DEVS[:zcache] = dev
49
+ save
50
+ end
51
+
52
+ private
53
+
54
+ def load_devs
55
+ if File.exist? @file
56
+ DEVS.merge! YAML.load_file @file
57
+ else
58
+ save
59
+ warn "Init devs at #{@file}"
60
+ end
61
+ end
62
+
63
+ def save
64
+ File.open(@file, 'w') { |f| YAML.dump(DEVS, f) }
65
+ end
66
+ end
67
+ end
@@ -1,81 +1,24 @@
1
- require 'fileutils'
1
+ # frozen_string_literal: true
2
+
3
+ require 'fstab'
4
+ require 'dracut'
5
+ require 'cryptsetup'
2
6
 
3
7
  module Getch
4
8
  module FileSystem
5
9
  module Ext4
6
10
  module Encrypt
7
- class Config < Getch::FileSystem::Ext4::Encrypt::Device
11
+ class Config
8
12
  def initialize
9
- super
10
- gen_uuid
11
- @root_dir = MOUNTPOINT
12
- @init = '/usr/lib/systemd/systemd'
13
- move_secret_keys
14
- crypttab
15
- end
16
-
17
- def fstab
18
- file = "#{@root_dir}/etc/fstab"
19
- datas = data_fstab
20
- File.write(file, datas.join("\n"))
21
- end
22
-
23
- def systemd_boot
24
- return if ! Helpers::efi?
25
- esp = '/efi'
26
- dir = "#{@root_dir}/#{esp}/loader/entries/"
27
- datas_gentoo = [
28
- 'title Gentoo Linux',
29
- 'linux /vmlinuz',
30
- 'initrd /initramfs',
31
- "options crypt_root=UUID=#{@uuid_dev_root} root=/dev/mapper/root init=#{@init} keymap=#{DEFAULT_OPTIONS[:keymap]} rw"
32
- ]
33
- File.write("#{dir}/gentoo.conf", datas_gentoo.join("\n"))
34
- end
35
-
36
- def crypttab
37
- home = @home_disk ? "crypthome UUID=#{@uuid_home} /root/secretkeys/crypto_keyfile.bin luks" : ''
38
- datas = [
39
- "cryptswap PARTUUID=#{@partuuid_swap} /dev/urandom swap,cipher=aes-xts-plain64:sha256,size=512",
40
- home
41
- ]
42
- File.write("#{@root_dir}/etc/crypttab", datas.join("\n"))
43
- end
44
-
45
- def grub
46
- return if Helpers::efi?
47
- file = "#{@root_dir}/etc/default/grub"
48
- cmdline = [
49
- "GRUB_CMDLINE_LINUX=\"crypt_root=UUID=#{@uuid_dev_root} root=/dev/mapper/root init=#{@init} rw slub_debug=P page_poison=1 slab_nomerge pti=on vsyscall=none spectre_v2=on spec_store_bypass_disable=seccomp iommu=force keymap=#{DEFAULT_OPTIONS[:keymap]}\"",
50
- "GRUB_ENABLE_CRYPTODISK=y"
51
- ]
52
- File.write(file, cmdline.join("\n"), mode: 'a')
13
+ x
53
14
  end
54
15
 
55
16
  private
56
17
 
57
- def gen_uuid
58
- @partuuid_swap = Helpers::partuuid(@dev_swap)
59
- @uuid_dev_root = `lsblk -d -o "UUID" #{@dev_root} | tail -1`.chomp() if @dev_root
60
- @uuid_esp = Helpers::uuid(@dev_esp) if @dev_esp
61
- @uuid_root = `lsblk -d -o "UUID" #{@luks_root} | tail -1`.chomp() if @dev_root
62
- @uuid_home = `lsblk -d -o "UUID" #{@dev_home} | tail -1`.chomp() if @luks_home
63
- end
64
-
65
- def data_fstab
66
- boot_efi = @dev_esp ? "UUID=#{@uuid_esp} /efi vfat noauto,noatime 1 2" : ''
67
- swap = @dev_swap ? "#{@luks_swap} none swap discard 0 0 " : ''
68
- root = @dev_root ? "UUID=#{@uuid_root} / ext4 defaults 0 1" : ''
69
- home = @dev_home ? "#{@luks_home} /home/#{@user} ext4 defaults 0 2" : ''
70
-
71
- [ boot_efi, swap, root, home ]
72
- end
73
-
74
- def move_secret_keys
75
- return if ! @luks_home
76
- puts "Moving secret keys"
77
- keys_path = "#{@root_dir}/root/secretkeys"
78
- FileUtils.mv("/root/secretkeys", keys_path) if ! Dir.exist?(keys_path)
18
+ def x
19
+ Fstab::Encrypt.new(DEVS, OPTIONS).generate
20
+ Dracut::Encrypt.new(DEVS, OPTIONS).generate
21
+ CryptSetup.new(DEVS, OPTIONS).configs
79
22
  end
80
23
  end
81
24
  end
@@ -1,40 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Getch
2
4
  module FileSystem
3
5
  module Ext4
4
6
  module Encrypt
5
7
  class Deps
6
- def make
7
- install_deps
8
- genkernel
9
- Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
8
+ def initialize
9
+ install
10
+ service
10
11
  end
11
12
 
12
- private
13
+ protected
13
14
 
14
- def genkernel
15
- grub = Helpers::efi? ? 'BOOTLOADER="no"' : 'BOOTLOADER="grub2"'
16
- datas = [
17
- '',
18
- grub,
19
- 'INSTALL="yes"',
20
- 'MENUCONFIG="no"',
21
- 'CLEAN="yes"',
22
- 'KEYMAP="yes"',
23
- 'SAVE_CONFIG="yes"',
24
- 'MOUNTBOOT="yes"',
25
- 'MRPROPER="no"',
26
- 'LUKS="yes"',
27
- ]
28
- file = "#{MOUNTPOINT}/etc/genkernel.conf"
29
- File.write(file, datas.join("\n"), mode: 'a')
15
+ def install
16
+ case OPTIONS[:os]
17
+ when 'gentoo' then Install.new('sys-fs/cryptsetup')
18
+ when 'void' then Install.new('cryptsetup')
19
+ end
30
20
  end
31
21
 
32
- def install_deps
33
- Getch::Emerge.new('genkernel').pkg!
22
+ def service
23
+ openrc
34
24
  end
35
25
 
36
- def exec(cmd)
37
- Getch::Chroot.new(cmd).run!
26
+ def openrc
27
+ Helpers.openrc? || return
28
+
29
+ Chroot.new('rc-update add dmcrypt boot')
38
30
  end
39
31
  end
40
32
  end
@@ -1,13 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'devs'
4
+
1
5
  module Getch
2
6
  module FileSystem
3
7
  module Ext4
4
8
  module Encrypt
5
- class Device < Getch::FileSystem::Device
9
+ class Device
6
10
  def initialize
7
- super
8
- @luks_root = "/dev/mapper/cryptroot"
9
- @luks_home = @home_disk ? "/dev/mapper/crypthome" : nil
10
- @luks_swap = "/dev/mapper/cryptswap"
11
+ @args = { start: true, boot: true, swap: true, root: true }
12
+ x
13
+ end
14
+
15
+ private
16
+
17
+ def x
18
+ Devs::Settings.new(@args, OPTIONS)
11
19
  end
12
20
  end
13
21
  end