getch 0.1.3 → 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 +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