getch 0.1.9 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +132 -0
- data/LICENSE +10 -0
- data/README.md +35 -29
- data/bin/getch +8 -6
- data/getch.gemspec +31 -0
- data/lib/clean.rb +149 -0
- data/lib/cryptsetup.rb +132 -0
- data/lib/devs.rb +199 -0
- data/lib/dracut/encrypt.rb +36 -0
- data/lib/dracut/hybrid.rb +15 -0
- data/lib/dracut/lvm.rb +14 -0
- data/lib/dracut/minimal.rb +11 -0
- data/lib/dracut/root.rb +45 -0
- data/lib/dracut/zfs.rb +35 -0
- data/lib/dracut.rb +11 -0
- data/lib/fstab/encrypt.rb +44 -0
- data/lib/fstab/hybrid.rb +34 -0
- data/lib/fstab/lvm.rb +25 -0
- data/lib/fstab/minimal.rb +6 -0
- data/lib/fstab/root.rb +93 -0
- data/lib/fstab/zfs.rb +23 -0
- data/lib/fstab.rb +11 -0
- data/lib/getch/assembly.rb +150 -0
- data/lib/getch/command.rb +88 -128
- data/lib/getch/config/account.rb +39 -0
- data/lib/getch/config/dhcp.rb +104 -0
- data/lib/getch/config/grub.rb +42 -0
- data/lib/getch/config/iwd.rb +60 -0
- data/lib/getch/config/keymap.rb +78 -0
- data/lib/getch/config/locale.rb +96 -0
- data/lib/getch/config/portage.rb +90 -0
- data/lib/getch/config/pre_network.rb +37 -0
- data/lib/getch/config/timezone.rb +52 -0
- data/lib/getch/config/void.rb +0 -36
- data/lib/getch/config.rb +16 -37
- data/lib/getch/device.rb +67 -0
- data/lib/getch/filesystem/ext4/encrypt/config.rb +9 -71
- data/lib/getch/filesystem/ext4/encrypt/deps.rb +15 -25
- data/lib/getch/filesystem/ext4/encrypt/device.rb +11 -5
- data/lib/getch/filesystem/ext4/encrypt/format.rb +6 -15
- data/lib/getch/filesystem/ext4/encrypt/mount.rb +7 -11
- data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -76
- data/lib/getch/filesystem/ext4/encrypt/void.rb +0 -38
- data/lib/getch/filesystem/ext4/encrypt.rb +2 -1
- data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
- data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
- data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
- data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
- data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
- data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
- data/lib/getch/filesystem/{lvm/encrypt → ext4/hybrid}/void.rb +0 -39
- data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
- data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
- data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
- data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
- data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
- data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
- data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
- data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +6 -4
- data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
- data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +3 -1
- data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
- data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
- data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
- data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
- data/lib/getch/filesystem/ext4/minimal.rb +19 -0
- data/lib/getch/filesystem/ext4.rb +7 -7
- data/lib/getch/filesystem/zfs/encrypt/config.rb +10 -39
- data/lib/getch/filesystem/zfs/encrypt/deps.rb +4 -55
- data/lib/getch/filesystem/zfs/encrypt/device.rb +7 -51
- data/lib/getch/filesystem/zfs/encrypt/format.rb +6 -90
- data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -35
- data/lib/getch/filesystem/zfs/encrypt/partition.rb +6 -54
- data/lib/getch/filesystem/zfs/encrypt.rb +2 -1
- data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
- data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
- data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
- data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
- data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
- data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
- data/lib/getch/filesystem/zfs/minimal.rb +19 -0
- data/lib/getch/filesystem/zfs.rb +1 -7
- data/lib/getch/filesystem.rb +0 -6
- data/lib/getch/gentoo/bootloader.rb +23 -44
- data/lib/getch/gentoo/finalize.rb +25 -0
- data/lib/getch/gentoo/post_config.rb +75 -0
- data/lib/getch/gentoo/pre_config.rb +37 -0
- data/lib/getch/gentoo/services.rb +18 -0
- data/lib/getch/gentoo/sources.rb +39 -33
- data/lib/getch/gentoo/tarball.rb +91 -0
- data/lib/getch/gentoo/terraform.rb +34 -0
- data/lib/getch/gentoo/update.rb +54 -0
- data/lib/getch/gentoo/use.rb +9 -6
- data/lib/getch/gentoo/use_flag.rb +17 -20
- data/lib/getch/gentoo.rb +9 -75
- data/lib/getch/guard.rb +3 -3
- data/lib/getch/helpers.rb +63 -115
- data/lib/getch/log.rb +87 -25
- data/lib/getch/options.rb +41 -11
- data/lib/getch/states.rb +28 -8
- data/lib/getch/tree.rb +56 -0
- data/lib/getch/version.rb +1 -1
- data/lib/getch/void/bootloader.rb +18 -0
- data/lib/getch/void/finalize.rb +31 -0
- data/lib/getch/void/post_config.rb +19 -0
- data/lib/getch/void/pre_config.rb +18 -0
- data/lib/getch/void/services.rb +18 -0
- data/lib/getch/void/{stage.rb → tarball.rb} +34 -14
- data/lib/getch/void/terraform.rb +28 -0
- data/lib/getch/void/update.rb +33 -0
- data/lib/getch/void.rb +9 -59
- data/lib/getch.rb +58 -90
- data/lib/luks.rb +239 -0
- data/lib/lvm2.rb +112 -0
- data/lib/mkfs/zfs.rb +167 -0
- data/lib/mkfs.rb +144 -0
- data/lib/mountfs.rb +154 -0
- data/lib/nito.rb +131 -0
- data/lib/sgdisk.rb +160 -0
- data.tar.gz.sig +0 -0
- metadata +113 -74
- metadata.gz.sig +0 -0
- data/lib/getch/config/gentoo.rb +0 -58
- data/lib/getch/filesystem/clean.rb +0 -58
- data/lib/getch/filesystem/device.rb +0 -63
- data/lib/getch/filesystem/ext4/config.rb +0 -62
- data/lib/getch/filesystem/ext4/deps.rb +0 -24
- data/lib/getch/filesystem/ext4/format.rb +0 -31
- data/lib/getch/filesystem/ext4/mount.rb +0 -26
- data/lib/getch/filesystem/ext4/partition.rb +0 -55
- data/lib/getch/filesystem/ext4/void.rb +0 -44
- data/lib/getch/filesystem/lvm/config.rb +0 -44
- data/lib/getch/filesystem/lvm/deps.rb +0 -44
- data/lib/getch/filesystem/lvm/device.rb +0 -45
- data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -74
- data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -49
- data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -48
- data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -35
- data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -27
- data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -84
- data/lib/getch/filesystem/lvm/encrypt.rb +0 -18
- data/lib/getch/filesystem/lvm/format.rb +0 -32
- data/lib/getch/filesystem/lvm/mount.rb +0 -26
- data/lib/getch/filesystem/lvm/partition.rb +0 -72
- data/lib/getch/filesystem/lvm/void.rb +0 -46
- data/lib/getch/filesystem/mount.rb +0 -63
- data/lib/getch/filesystem/partition.rb +0 -85
- data/lib/getch/filesystem/zfs/config.rb +0 -43
- data/lib/getch/filesystem/zfs/deps.rb +0 -67
- data/lib/getch/filesystem/zfs/device.rb +0 -66
- data/lib/getch/filesystem/zfs/encrypt/void.rb +0 -97
- data/lib/getch/filesystem/zfs/format.rb +0 -117
- data/lib/getch/filesystem/zfs/mount.rb +0 -47
- data/lib/getch/filesystem/zfs/partition.rb +0 -69
- data/lib/getch/filesystem/zfs/void.rb +0 -81
- data/lib/getch/gentoo/boot.rb +0 -64
- data/lib/getch/gentoo/chroot.rb +0 -75
- data/lib/getch/gentoo/config.rb +0 -167
- data/lib/getch/gentoo/stage.rb +0 -73
- data/lib/getch/void/boot.rb +0 -84
- data/lib/getch/void/chroot.rb +0 -56
- data/lib/getch/void/config.rb +0 -90
data/lib/getch/gentoo/config.rb
DELETED
|
@@ -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
|
data/lib/getch/gentoo/stage.rb
DELETED
|
@@ -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
|
data/lib/getch/void/boot.rb
DELETED
|
@@ -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
|
data/lib/getch/void/chroot.rb
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module Getch
|
|
4
|
-
module Void
|
|
5
|
-
class Chroot
|
|
6
|
-
include Helpers::Void
|
|
7
|
-
|
|
8
|
-
def initialize
|
|
9
|
-
@state = Getch::States.new
|
|
10
|
-
@pkgs = []
|
|
11
|
-
mount
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
# https://docs.voidlinux.org/installation/guides/chroot.html#install-base-system-rootfs-method-only
|
|
15
|
-
def update
|
|
16
|
-
return if STATES[:gentoo_update]
|
|
17
|
-
|
|
18
|
-
command_output '/usr/bin/xbps-install -Suy xbps' # y to force (--yes)
|
|
19
|
-
command_output '/usr/bin/xbps-install -uy'
|
|
20
|
-
command_output '/usr/bin/xbps-install -y base-system'
|
|
21
|
-
#command_output '/usr/bin/xbps-remove base-voidstrap'
|
|
22
|
-
@state.update
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def extras
|
|
26
|
-
@pkgs << 'vim'
|
|
27
|
-
@pkgs << 'iptables'
|
|
28
|
-
@pkgs << 'iwd'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def fs
|
|
32
|
-
@pkgs << 'lvm2' if OPTIONS[:fs] == 'lvm'
|
|
33
|
-
@pkgs << 'zfs' if OPTIONS[:fs] == 'zfs'
|
|
34
|
-
@pkgs << 'cryptsetup' if OPTIONS[:encrypt]
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def install_pkgs
|
|
38
|
-
all_pkgs = @pkgs.join(' ')
|
|
39
|
-
command_output "/usr/bin/xbps-install -y #{all_pkgs}"
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
private
|
|
43
|
-
|
|
44
|
-
def mount
|
|
45
|
-
puts 'Populate /proc, /sys and /dev.'
|
|
46
|
-
Helpers.exec_or_die("mount --types proc /proc \"#{MOUNTPOINT}/proc\"")
|
|
47
|
-
Helpers.exec_or_die("mount --rbind /sys \"#{MOUNTPOINT}/sys\"")
|
|
48
|
-
Helpers.exec_or_die("mount --make-rslave \"#{MOUNTPOINT}/sys\"")
|
|
49
|
-
Helpers.exec_or_die("mount --rbind /dev \"#{MOUNTPOINT}/dev\"")
|
|
50
|
-
Helpers.exec_or_die("mount --make-rslave \"#{MOUNTPOINT}/dev\"")
|
|
51
|
-
# Maybe add /dev/shm like describe here:
|
|
52
|
-
# https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
end
|
data/lib/getch/void/config.rb
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require 'fileutils'
|
|
4
|
-
require 'securerandom'
|
|
5
|
-
|
|
6
|
-
module Getch
|
|
7
|
-
module Void
|
|
8
|
-
class Config
|
|
9
|
-
include Helpers::Void
|
|
10
|
-
|
|
11
|
-
def initialize
|
|
12
|
-
@log = Getch::Log.new
|
|
13
|
-
@network_dir = "#{MOUNTPOINT}/etc"
|
|
14
|
-
@id = SecureRandom.hex(2)
|
|
15
|
-
@hostname = "void-hatch-#{@id}"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def host
|
|
19
|
-
print " => Adding hostname #{@hostname}..."
|
|
20
|
-
conf = "#{@network_dir}/hostname"
|
|
21
|
-
File.write(conf, "#{@hostname}\n", mode: 'w', chmod: 0744)
|
|
22
|
-
puts "\s[OK]"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def network
|
|
26
|
-
print ' => Copying /etc/resolv.conf...'
|
|
27
|
-
src = '/etc/resolv.conf'
|
|
28
|
-
dest = "#{@network_dir}/resolv.conf"
|
|
29
|
-
FileUtils.copy_file(src, dest)
|
|
30
|
-
puts "\s[Ok]"
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def system
|
|
34
|
-
print ' => Updating configs system...'
|
|
35
|
-
control_options
|
|
36
|
-
rc = "#{MOUNTPOINT}/etc/rc.conf"
|
|
37
|
-
add_line(rc, 'HARDWARECLOCK="UTC"') unless search(rc, /^HARDWARECLOCK/)
|
|
38
|
-
add_line(rc, "KEYMAP=\"#{OPTIONS[:keymap]}\"") unless search(rc, /^KEYMAP/)
|
|
39
|
-
add_line(rc, "TIMEZONE=\"#{OPTIONS[:zoneinfo]}\"") unless search(rc, /^TIMEZONE/)
|
|
40
|
-
add_line(rc, "HOSTNAME=\"#{@hostname}\"") unless search(rc, /^HOSTNAME/)
|
|
41
|
-
puts "\s[OK]"
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def locale
|
|
45
|
-
print ' => Updating locale system...'
|
|
46
|
-
control_options
|
|
47
|
-
conf = "#{MOUNTPOINT}/etc/locale.conf"
|
|
48
|
-
File.write(conf, "LANG=#{@lang}\n")
|
|
49
|
-
add_line(conf, 'LC_COLLATE=C')
|
|
50
|
-
conf = "#{MOUNTPOINT}/etc/default/libc-locales"
|
|
51
|
-
add_line(conf, @utf8)
|
|
52
|
-
puts "\s[OK]"
|
|
53
|
-
command 'xbps-reconfigure -f glibc-locales'
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
private
|
|
57
|
-
|
|
58
|
-
def control_options
|
|
59
|
-
search_zone(OPTIONS[:zoneinfo])
|
|
60
|
-
search_utf8(OPTIONS[:language])
|
|
61
|
-
search_key(OPTIONS[:keymap])
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def search_key(keys)
|
|
65
|
-
@keymap = nil
|
|
66
|
-
Dir.glob("#{MOUNTPOINT}/usr/share/kbd/keymaps/**/#{keys}.map.gz") { |f|
|
|
67
|
-
@keymap = f
|
|
68
|
-
}
|
|
69
|
-
raise ArgumentError, "No keymap #{@keymap} found" unless @keymap
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def search_zone(zone)
|
|
73
|
-
unless File.exist? "#{MOUNTPOINT}/usr/share/zoneinfo/#{zone}"
|
|
74
|
-
raise ArgumentError, "Zoneinfo #{zone} doesn\'t exist."
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def search_utf8(lang)
|
|
79
|
-
@utf8, @lang = nil, nil
|
|
80
|
-
File.open("#{MOUNTPOINT}/etc/default/libc-locales").each do |l|
|
|
81
|
-
@utf8 = l.delete_prefix('#') if l.match(/#{lang}.UTF-8/)
|
|
82
|
-
|
|
83
|
-
found = l.split if l.match(/#{lang}.UTF-8/)
|
|
84
|
-
@lang = found[0].delete_prefix('#') if found
|
|
85
|
-
end
|
|
86
|
-
raise ArgumentError, "Lang #{lang} no found" unless @utf8
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|