getch 0.0.7 → 0.0.8
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.tar.gz.sig +0 -0
- data/CHANGELOG.md +9 -4
- data/README.md +5 -1
- data/bin/setup.sh +1 -1
- data/lib/getch.rb +5 -1
- data/lib/getch/command.rb +117 -16
- data/lib/getch/filesystem.rb +1 -0
- data/lib/getch/filesystem/ext4/config.rb +2 -1
- data/lib/getch/filesystem/ext4/encrypt/deps.rb +1 -1
- data/lib/getch/filesystem/ext4/format.rb +10 -4
- data/lib/getch/filesystem/lvm.rb +13 -0
- data/lib/getch/filesystem/lvm/config.rb +62 -0
- data/lib/getch/filesystem/lvm/deps.rb +57 -0
- data/lib/getch/filesystem/lvm/device.rb +19 -0
- data/lib/getch/filesystem/lvm/format.rb +25 -0
- data/lib/getch/filesystem/lvm/mount.rb +62 -0
- data/lib/getch/filesystem/lvm/partition.rb +81 -0
- data/lib/getch/gentoo.rb +1 -1
- data/lib/getch/gentoo/boot.rb +6 -3
- data/lib/getch/gentoo/chroot.rb +7 -6
- data/lib/getch/gentoo/config.rb +3 -1
- data/lib/getch/gentoo/sources.rb +43 -35
- data/lib/getch/gentoo/stage.rb +1 -1
- data/lib/getch/log.rb +54 -0
- data/lib/getch/options.rb +2 -1
- data/lib/getch/version.rb +1 -1
- metadata +10 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d697434a5e8a44edb8027582ece052145c440247524597afe5ad28118115154
|
4
|
+
data.tar.gz: 42eb9e224e6581752f28d6997a9e10feb0e65c432e0dd80bc87236d7e597d828
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e17128164b81b58d59f296e360197a2b9fbb33fd2b1cbd58128b1b04885eef4480d067c5588d40802c889e5a80861b63c37454b685bdb6263e9806b2e99b208
|
7
|
+
data.tar.gz: f8eee6f6b37fb036a05003d109672615cc7439dcc5277f2d4604d58e66b2407fa648bdccb850269545f2aef5441777a0d936842326cecb7410b05dfb6dbcee64
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
*
|
2
|
-
*
|
3
|
-
*
|
4
|
-
|
1
|
+
* Adding LVM via the option fs, `--fs lvm`.
|
2
|
+
* Systemd-boot use the value of PARTUUID without initramfs.
|
3
|
+
* Include lib logger.
|
4
|
+
|
5
|
+
## 0.0.7, release 2020-09-22
|
6
|
+
* Correct fstab.
|
7
|
+
* Repair GRUB/fstab for BIOS system, add secure cmdline.
|
8
|
+
* Create a swap volume equal to the memory installed.
|
9
|
+
* Add vim and sudo
|
5
10
|
|
6
11
|
## 0.0.6, release 2020-09-19
|
7
12
|
* Add support for QEMU guest with KVM and Virtio driver
|
data/README.md
CHANGED
@@ -23,7 +23,7 @@ With `gem` installed:
|
|
23
23
|
|
24
24
|
When you boot from an `iso`, you can install `ruby`, `getch` and correct your `PATH=` directly with the `bin/setup.sh`:
|
25
25
|
|
26
|
-
# curl https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh
|
26
|
+
# sh <(curl -L https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh)
|
27
27
|
# source ~/.zshrc # or ~/.bashrc
|
28
28
|
|
29
29
|
## Usage
|
@@ -37,6 +37,10 @@ For a french user:
|
|
37
37
|
|
38
38
|
After an install by Getch, take a look on the [wiki](https://github.com/szorfein/getch/wiki).
|
39
39
|
|
40
|
+
Install Gentoo on LVM:
|
41
|
+
|
42
|
+
# getch --format lvm --disk sda
|
43
|
+
|
40
44
|
## Issues
|
41
45
|
If need more support for your hardware (network, sound card, ...), you can submit a [new issue](https://github.com/szorfein/getch/issues/new) and post the output of the following command:
|
42
46
|
+ lspci
|
data/bin/setup.sh
CHANGED
@@ -26,7 +26,7 @@ search_ruby() {
|
|
26
26
|
else
|
27
27
|
echo "Install ruby"
|
28
28
|
if hash pacman 2>/dev/null ; then
|
29
|
-
pacman -Syy libyaml ruby ruby-irb ruby-reline rubygems
|
29
|
+
pacman -Syy --noconfirm libyaml ruby ruby-irb ruby-reline rubygems
|
30
30
|
elif hash emerge 2>/dev/null ; then
|
31
31
|
emerge -av dev-lang/ruby
|
32
32
|
elif hash apt-get 2>/dev/null ; then
|
data/lib/getch.rb
CHANGED
@@ -4,6 +4,7 @@ require_relative 'getch/gentoo'
|
|
4
4
|
require_relative 'getch/filesystem'
|
5
5
|
require_relative 'getch/command'
|
6
6
|
require_relative 'getch/helpers'
|
7
|
+
require_relative 'getch/log'
|
7
8
|
|
8
9
|
module Getch
|
9
10
|
|
@@ -30,7 +31,8 @@ module Getch
|
|
30
31
|
|
31
32
|
MOUNTPOINT = "/mnt/gentoo".freeze
|
32
33
|
OPTIONS_FS = {
|
33
|
-
'ext4' => DEFAULT_OPTIONS[:encrypt] ? Getch::FileSystem::Ext4::Encrypt : Getch::FileSystem::Ext4
|
34
|
+
'ext4' => DEFAULT_OPTIONS[:encrypt] ? Getch::FileSystem::Ext4::Encrypt : Getch::FileSystem::Ext4,
|
35
|
+
'lvm' => DEFAULT_OPTIONS[:encrypt] ? Getch::FileSystem::Lvm::Encrypt : Getch::FileSystem::Lvm
|
34
36
|
}.freeze
|
35
37
|
|
36
38
|
def self.resume_options(opts)
|
@@ -54,10 +56,12 @@ module Getch
|
|
54
56
|
|
55
57
|
def self.format(disk, fs, user)
|
56
58
|
return if STATES[:format] and STATES[:partition]
|
59
|
+
log = Log.new
|
57
60
|
puts
|
58
61
|
print "Partition and format disk #{disk}, this will erase all data, continue? (n,y) "
|
59
62
|
case gets.chomp
|
60
63
|
when /^y|^Y/
|
64
|
+
log.info("Partition start")
|
61
65
|
OPTIONS_FS[fs]::Partition.new
|
62
66
|
OPTIONS_FS[fs]::Format.new
|
63
67
|
else
|
data/lib/getch/command.rb
CHANGED
@@ -4,14 +4,22 @@ module Getch
|
|
4
4
|
class Command
|
5
5
|
def initialize(cmd)
|
6
6
|
@cmd = cmd
|
7
|
-
@block_size =
|
7
|
+
@block_size = 1024
|
8
|
+
@log = Getch::Log.new
|
8
9
|
end
|
9
10
|
|
10
11
|
def run!
|
11
|
-
|
12
|
+
@log.info "Running command: " + @cmd.gsub(/\"/, '')
|
12
13
|
|
13
|
-
Open3.popen3(@cmd) do |stdin, stdout, stderr|
|
14
|
+
Open3.popen3(@cmd) do |stdin, stdout, stderr, wait_thr|
|
14
15
|
stdin.close_write
|
16
|
+
code = wait_thr.value
|
17
|
+
|
18
|
+
# only stderr
|
19
|
+
begin
|
20
|
+
@log.error stderr.readline until stderr.eof.nil?
|
21
|
+
rescue EOFError
|
22
|
+
end
|
15
23
|
|
16
24
|
begin
|
17
25
|
files = [stdout, stderr]
|
@@ -24,25 +32,20 @@ module Getch
|
|
24
32
|
# writable = ready[1]
|
25
33
|
# exceptions = ready[2]
|
26
34
|
|
27
|
-
readable
|
28
|
-
fileno = f.fileno
|
29
|
-
|
30
|
-
begin
|
31
|
-
data = f.read_nonblock(@block_size)
|
32
|
-
|
33
|
-
# Do something with the data...
|
34
|
-
puts "#{data}" if DEFAULT_OPTIONS[:verbose]
|
35
|
-
rescue EOFError
|
36
|
-
puts "fileno: #{fileno} EOF"
|
37
|
-
end
|
38
|
-
end
|
35
|
+
display_lines(readable)
|
39
36
|
end
|
40
37
|
end
|
41
38
|
rescue IOError => e
|
42
39
|
puts "IOError: #{e}"
|
43
40
|
end
|
41
|
+
|
42
|
+
unless code.success?
|
43
|
+
@log.fatal "Running #{@cmd}"
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
@log.debug "Done - #{@cmd} - #{code}"
|
44
48
|
end
|
45
|
-
puts "Done"
|
46
49
|
end
|
47
50
|
|
48
51
|
private
|
@@ -51,5 +54,103 @@ module Getch
|
|
51
54
|
def all_eof(files)
|
52
55
|
files.find { |f| !f.eof }.nil?
|
53
56
|
end
|
57
|
+
|
58
|
+
def display_lines(block)
|
59
|
+
block.each do |f|
|
60
|
+
begin
|
61
|
+
data = f.read_nonblock(@block_size)
|
62
|
+
puts data if DEFAULT_OPTIONS[:verbose]
|
63
|
+
rescue EOFError
|
64
|
+
puts ""
|
65
|
+
rescue => e
|
66
|
+
puts "Fatal - #{e}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Use system, the only ruby method to display stdout with colors !
|
73
|
+
class Emerge
|
74
|
+
def initialize(cmd)
|
75
|
+
@gentoo = MOUNTPOINT
|
76
|
+
@cmd = cmd
|
77
|
+
@log = Getch::Log.new
|
78
|
+
end
|
79
|
+
|
80
|
+
def run!
|
81
|
+
@log.info "Running emerge: #{@cmd}"
|
82
|
+
system("chroot", @gentoo, "/bin/bash", "-c", "source /etc/profile && #{@cmd}")
|
83
|
+
read_exit
|
84
|
+
end
|
85
|
+
|
86
|
+
def pkg!
|
87
|
+
@log.info "Running emerge pkg: #{@cmd}"
|
88
|
+
system("chroot", @gentoo, "/bin/bash", "-c", "source /etc/profile && emerge --changed-use #{@cmd}")
|
89
|
+
read_exit
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
def read_exit
|
95
|
+
if $?.exitstatus > 0
|
96
|
+
@log.fatal "Running #{@cmd}"
|
97
|
+
else
|
98
|
+
@log.info "Done #{@cmd}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
class Make
|
104
|
+
def initialize(cmd)
|
105
|
+
@gentoo = MOUNTPOINT
|
106
|
+
@cmd = cmd
|
107
|
+
@log = Getch::Log.new
|
108
|
+
end
|
109
|
+
|
110
|
+
def run!
|
111
|
+
@log.info "Running Make: #{@cmd}"
|
112
|
+
cmd = "chroot #{@gentoo} /bin/bash -c \"source /etc/profile \
|
113
|
+
&& env-update \
|
114
|
+
&& cd /usr/src/linux \
|
115
|
+
&& #{@cmd}\""
|
116
|
+
Open3.popen2e(cmd) do |stdin, stdout_err, wait_thr|
|
117
|
+
while line = stdout_err.gets
|
118
|
+
puts line
|
119
|
+
end
|
120
|
+
|
121
|
+
exit_status = wait_thr.value
|
122
|
+
unless exit_status.success?
|
123
|
+
@log.fatal "Running #{cmd}"
|
124
|
+
exit 1
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
class Garden
|
131
|
+
def initialize(cmd)
|
132
|
+
@gentoo = MOUNTPOINT
|
133
|
+
@cmd = cmd
|
134
|
+
@log = Getch::Log.new
|
135
|
+
end
|
136
|
+
|
137
|
+
def run!
|
138
|
+
@log.info "Running Garden: #{@cmd}"
|
139
|
+
cmd = "chroot #{@gentoo} /bin/bash -c \"source /etc/profile \
|
140
|
+
&& env-update \
|
141
|
+
&& cd /root/garden-master \
|
142
|
+
&& ./kernel.sh #{@cmd} -k /usr/src/linux\""
|
143
|
+
Open3.popen2e(cmd) do |stdin, stdout_err, wait_thr|
|
144
|
+
while line = stdout_err.gets
|
145
|
+
puts line
|
146
|
+
end
|
147
|
+
|
148
|
+
exit_status = wait_thr.value
|
149
|
+
unless exit_status.success?
|
150
|
+
@log.fatal "Running #{cmd}"
|
151
|
+
exit 1
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
54
155
|
end
|
55
156
|
end
|
data/lib/getch/filesystem.rb
CHANGED
@@ -22,7 +22,7 @@ module Getch
|
|
22
22
|
datas_gentoo = [
|
23
23
|
'title Gentoo Linux',
|
24
24
|
'linux /vmlinuz',
|
25
|
-
"options root=
|
25
|
+
"options root=PARTUUID=#{@partuuid_root} init=#{@init} rw"
|
26
26
|
]
|
27
27
|
File.write("#{dir}/gentoo.conf", datas_gentoo.join("\n"))
|
28
28
|
end
|
@@ -37,6 +37,7 @@ module Getch
|
|
37
37
|
private
|
38
38
|
|
39
39
|
def gen_uuid
|
40
|
+
@partuuid_root = `lsblk -o "PARTUUID" #{@dev_root} | tail -1`.chomp() if @dev_root
|
40
41
|
@uuid_swap = `lsblk -o "UUID" #{@dev_swap} | tail -1`.chomp() if @dev_swap
|
41
42
|
@uuid_root = `lsblk -o "UUID" #{@dev_root} | tail -1`.chomp() if @dev_root
|
42
43
|
@uuid_boot = `lsblk -o "UUID" #{@dev_boot} | tail -1`.chomp() if @dev_boot
|
@@ -22,7 +22,7 @@ module Getch
|
|
22
22
|
|
23
23
|
def install_deps
|
24
24
|
exec("euse -p sys-apps/systemd -E cryptsetup")
|
25
|
-
|
25
|
+
Getch::Emerge.new('genkernel cryptsetup lvm2').pkg!
|
26
26
|
exec("genkernel --install --luks --keymap #{DEFAULT_OPTIONS[:keyboard]} --lvm --kernel-config=/usr/src/linux/.config initramfs")
|
27
27
|
exec("systemctl enable lvm2-monitor")
|
28
28
|
end
|
@@ -12,12 +12,18 @@ module Getch
|
|
12
12
|
def format
|
13
13
|
return if STATES[:format]
|
14
14
|
puts "Format #{@disk} with #{@fs}"
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
exec("mkfs.fat -F32 #{@dev_boot_efi}") if Helpers::efi?
|
16
|
+
exec("mkswap -f #{@dev_swap}")
|
17
|
+
exec("mkfs.#{@fs} -F #{@dev_root}")
|
18
|
+
exec("mkfs.#{@fs} -F #{@dev_home}") if @dev_home
|
19
19
|
@state.format
|
20
20
|
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def exec(cmd)
|
25
|
+
Getch::Command.new(cmd).run!
|
26
|
+
end
|
21
27
|
end
|
22
28
|
end
|
23
29
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Getch
|
2
|
+
module FileSystem
|
3
|
+
module Lvm
|
4
|
+
end
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
require_relative 'lvm/device'
|
9
|
+
require_relative 'lvm/partition'
|
10
|
+
require_relative 'lvm/format'
|
11
|
+
require_relative 'lvm/mount'
|
12
|
+
require_relative 'lvm/config'
|
13
|
+
require_relative 'lvm/deps'
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Getch
|
2
|
+
module FileSystem
|
3
|
+
module Lvm
|
4
|
+
class Config < Getch::FileSystem::Lvm::Device
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
gen_uuid
|
8
|
+
@root_dir = MOUNTPOINT
|
9
|
+
@init = '/usr/lib/systemd/systemd'
|
10
|
+
end
|
11
|
+
|
12
|
+
def fstab
|
13
|
+
file = "#{@root_dir}/etc/fstab"
|
14
|
+
datas = data_fstab
|
15
|
+
File.write(file, datas.join("\n"))
|
16
|
+
end
|
17
|
+
|
18
|
+
def systemd_boot
|
19
|
+
return if ! Helpers::efi?
|
20
|
+
esp = '/boot/efi'
|
21
|
+
dir = "#{@root_dir}/#{esp}/loader/entries/"
|
22
|
+
datas_gentoo = [
|
23
|
+
'title Gentoo Linux',
|
24
|
+
'linux /vmlinuz',
|
25
|
+
'initrd /initramfs',
|
26
|
+
"options resume=UUID=#{@uuid_swap} root=UUID=#{@uuid_root} init=#{@init} dolvm rw"
|
27
|
+
]
|
28
|
+
File.write("#{dir}/gentoo.conf", datas_gentoo.join("\n"))
|
29
|
+
end
|
30
|
+
|
31
|
+
def grub
|
32
|
+
return if Helpers::efi?
|
33
|
+
file = "#{@root_dir}/etc/default/grub"
|
34
|
+
cmdline = [
|
35
|
+
"GRUB_CMDLINE_LINUX=\"resume=UUID=#{@uuid_swap} root=UUID=#{@uuid_root} init=#{@init} dolvm rw\""
|
36
|
+
]
|
37
|
+
File.write("#{file}", cmdline.join("\n"), mode: 'a')
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def gen_uuid
|
43
|
+
@uuid_swap = `lsblk -o "UUID" #{@lv_swap} | tail -1`.chomp() if @lv_swap
|
44
|
+
@uuid_root = `lsblk -o "UUID" #{@lv_root} | tail -1`.chomp() if @lv_root
|
45
|
+
@uuid_dev_root = `lsblk -o "UUID" #{@dev_root} | tail -1`.chomp() if @dev_root
|
46
|
+
@uuid_boot = `lsblk -o "UUID" #{@dev_boot} | tail -1`.chomp() if @dev_boot
|
47
|
+
@uuid_boot_efi = `lsblk -o "UUID" #{@dev_boot_efi} | tail -1`.chomp() if @dev_boot_efi
|
48
|
+
@uuid_home = `lsblk -o "UUID" #{@lv_home} | tail -1`.chomp() if @lv_home
|
49
|
+
end
|
50
|
+
|
51
|
+
def data_fstab
|
52
|
+
boot_efi = @dev_boot_efi ? "UUID=#{@uuid_boot_efi} /boot/efi vfat noauto,noatime 1 2" : ''
|
53
|
+
swap = @lv_swap ? "UUID=#{@uuid_swap} none swap discard 0 0" : ''
|
54
|
+
root = @lv_root ? "UUID=#{@uuid_root} / ext4 defaults 0 1" : ''
|
55
|
+
home = @lv_home ? "UUID=#{@uuid_home} /home/#{@user} ext4 defaults 0 2" : ''
|
56
|
+
|
57
|
+
[ boot_efi, swap, root, home ]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Getch
|
2
|
+
module FileSystem
|
3
|
+
module Lvm
|
4
|
+
class Deps
|
5
|
+
def initialize
|
6
|
+
if Helpers::efi?
|
7
|
+
install_efi
|
8
|
+
else
|
9
|
+
install_bios
|
10
|
+
end
|
11
|
+
install_deps
|
12
|
+
end
|
13
|
+
|
14
|
+
def make
|
15
|
+
options_make
|
16
|
+
Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
def options_make
|
21
|
+
grub = Helpers::efi? ? 'BOOTLOADER="no"' : 'BOOTLOADER="grub2"'
|
22
|
+
datas = [
|
23
|
+
'',
|
24
|
+
grub,
|
25
|
+
'INSTALL="yes"',
|
26
|
+
'MENUCONFIG="no"',
|
27
|
+
'CLEAN="yes"',
|
28
|
+
'SAVE_CONFIG="yes"',
|
29
|
+
'MOUNTBOOT="yes"',
|
30
|
+
'MRPROPER="no"',
|
31
|
+
'LVM="yes"',
|
32
|
+
]
|
33
|
+
file = "#{MOUNTPOINT}/etc/genkernel.conf"
|
34
|
+
File.write(file, datas.join("\n"), mode: 'a')
|
35
|
+
end
|
36
|
+
|
37
|
+
def install_efi
|
38
|
+
end
|
39
|
+
|
40
|
+
def install_bios
|
41
|
+
exec("euse -p sys-boot/grub -E device-mapper")
|
42
|
+
end
|
43
|
+
|
44
|
+
def install_deps
|
45
|
+
exec("euse -E lvm")
|
46
|
+
Getch::Emerge.new('genkernel lvm2').pkg!
|
47
|
+
Getch::Garden.new('-a lvm').run!
|
48
|
+
exec("systemctl enable lvm2-monitor")
|
49
|
+
end
|
50
|
+
|
51
|
+
def exec(cmd)
|
52
|
+
Helpers::run_chroot(cmd, MOUNTPOINT)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Getch
|
2
|
+
module FileSystem
|
3
|
+
module Lvm
|
4
|
+
class Device
|
5
|
+
def initialize
|
6
|
+
@disk = DEFAULT_OPTIONS[:disk]
|
7
|
+
@user = DEFAULT_OPTIONS[:username]
|
8
|
+
@dev_boot_efi = Helpers::efi? ? "/dev/#{@disk}1" : nil
|
9
|
+
@dev_boot = Helpers::efi? ? nil : "/dev/#{@disk}2"
|
10
|
+
@dev_root = Helpers::efi? ? "/dev/#{@disk}2" : "/dev/#{@disk}3"
|
11
|
+
@vg = 'vg0'
|
12
|
+
@lv_root = "/dev/mapper/#{@vg}-root"
|
13
|
+
@lv_swap = "/dev/mapper/#{@vg}-swap"
|
14
|
+
@lv_home = @user ? "/dev/mapper/#{@vg}-home" : nil
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Getch
|
2
|
+
module FileSystem
|
3
|
+
module Lvm
|
4
|
+
class Format < Getch::FileSystem::Lvm::Device
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
@fs = 'ext4'
|
8
|
+
@state = Getch::States.new()
|
9
|
+
format
|
10
|
+
end
|
11
|
+
|
12
|
+
def format
|
13
|
+
return if STATES[:format]
|
14
|
+
puts "Format #{@disk} with #{@fs}"
|
15
|
+
system("mkfs.fat -F32 #{@dev_boot_efi}") if @dev_boot_efi
|
16
|
+
system("mkfs.#{@fs} -F #{@dev_boot}") if @dev_boot
|
17
|
+
system("mkswap -f #{@lv_swap}")
|
18
|
+
system("mkfs.#{@fs} -F #{@lv_root}")
|
19
|
+
system("mkfs.#{@fs} -F #{@lv_home}") if @lv_home
|
20
|
+
@state.format
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Getch
|
4
|
+
module FileSystem
|
5
|
+
module Lvm
|
6
|
+
class Mount < Getch::FileSystem::Lvm::Device
|
7
|
+
def initialize
|
8
|
+
super
|
9
|
+
@root_dir = MOUNTPOINT
|
10
|
+
@boot_dir = "#{@root_dir}/boot"
|
11
|
+
@boot_efi_dir = "#{@root_dir}/boot/efi"
|
12
|
+
@home_dir = @user ? "#{@root_dir}/home/#{@user}" : nil
|
13
|
+
@state = Getch::States.new()
|
14
|
+
end
|
15
|
+
|
16
|
+
def run
|
17
|
+
return if STATES[:mount]
|
18
|
+
mount_swap
|
19
|
+
mount_root
|
20
|
+
mount_boot
|
21
|
+
mount_home
|
22
|
+
mount_boot_efi
|
23
|
+
@state.mount
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def mount_swap
|
29
|
+
return if ! @lv_swap
|
30
|
+
system("swapon #{@lv_swap}")
|
31
|
+
end
|
32
|
+
|
33
|
+
def mount_root
|
34
|
+
return if ! @lv_root
|
35
|
+
Dir.mkdir(@root_dir, 0700) if ! Dir.exist?(@root_dir)
|
36
|
+
system("mount #{@lv_root} #{@root_dir}")
|
37
|
+
end
|
38
|
+
|
39
|
+
def mount_boot_efi
|
40
|
+
return if ! @dev_boot_efi
|
41
|
+
FileUtils.mkdir_p @boot_efi_dir, mode: 0700 if ! Dir.exist?(@boot_efi_dir)
|
42
|
+
system("mount #{@dev_boot_efi} #{@boot_efi_dir}")
|
43
|
+
end
|
44
|
+
|
45
|
+
def mount_boot
|
46
|
+
return if ! @dev_boot
|
47
|
+
FileUtils.mkdir_p @boot_dir, mode: 0700 if ! Dir.exist?(@boot_dir)
|
48
|
+
system("mount #{@dev_boot} #{@boot_dir}")
|
49
|
+
end
|
50
|
+
|
51
|
+
def mount_home
|
52
|
+
return if ! @lv_home
|
53
|
+
if @user != nil then
|
54
|
+
FileUtils.mkdir_p @home_dir, mode: 0700 if ! Dir.exist?(@home_dir)
|
55
|
+
system("mount #{@lv_home} #{@home_dir}")
|
56
|
+
end
|
57
|
+
@state.mount
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Getch
|
2
|
+
module FileSystem
|
3
|
+
module Lvm
|
4
|
+
class Partition < Getch::FileSystem::Lvm::Device
|
5
|
+
def initialize
|
6
|
+
super
|
7
|
+
@state = Getch::States.new()
|
8
|
+
run_partition
|
9
|
+
end
|
10
|
+
|
11
|
+
def run_partition
|
12
|
+
return if STATES[:partition ]
|
13
|
+
clear_struct
|
14
|
+
cleaning
|
15
|
+
partition
|
16
|
+
lvm
|
17
|
+
@state.partition
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def clear_struct
|
23
|
+
oldvg = `vgdisplay | grep #{@vg}`.chomp
|
24
|
+
exec("vgremove -f #{@vg}") if oldvg != '' # remove older volume group
|
25
|
+
exec("pvremove -f #{@dev_root}") if oldvg != '' and File.exist? @dev_root # remove older volume group
|
26
|
+
|
27
|
+
exec("sgdisk -Z /dev/#{@disk}")
|
28
|
+
exec("wipefs -a /dev/#{@disk}")
|
29
|
+
end
|
30
|
+
|
31
|
+
def cleaning
|
32
|
+
puts
|
33
|
+
print "Cleaning data on #{@disk}, can be long, avoid this on Flash Memory (SSD,USB,...) ? (n,y) "
|
34
|
+
case gets.chomp
|
35
|
+
when /^y|^Y/
|
36
|
+
bloc=`blockdev --getbsz /dev/#{@disk}`.chomp
|
37
|
+
exec("dd if=/dev/urandom of=/dev/#{@disk} bs=#{bloc} status=progress")
|
38
|
+
else
|
39
|
+
return
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def partition
|
44
|
+
if Helpers::efi?
|
45
|
+
exec("sgdisk -n1:1M:+260M -t1:EF00 /dev/#{@disk}")
|
46
|
+
exec("sgdisk -n2:0:+0 -t2:8e00 /dev/#{@disk}")
|
47
|
+
else
|
48
|
+
exec("sgdisk -n1:1MiB:+1MiB -t1:EF02 /dev/#{@disk}")
|
49
|
+
exec("sgdisk -n2:0:+128MiB -t2:8300 /dev/#{@disk}")
|
50
|
+
exec("sgdisk -n3:0:+0 -t3:8e00 /dev/#{@disk}")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def lvm
|
55
|
+
mem=`awk '/MemTotal/ {print $2}' /proc/meminfo`.chomp + 'K'
|
56
|
+
exec("pvcreate -f #{@dev_root}")
|
57
|
+
exec("vgcreate -f #{@vg} #{@dev_root}")
|
58
|
+
# Wipe old signature: https://github.com/chef-cookbooks/lvm/issues/45
|
59
|
+
exec("lvcreate -y -Wy -Zy -L 15G -n root #{@vg}")
|
60
|
+
exec("lvcreate -y -Wy -Zy -L #{mem} -n swap #{@vg}")
|
61
|
+
exec("lvcreate -y -Wy -Zy -l 100%FREE -n home #{@vg}") if @user
|
62
|
+
exec("vgchange --available y")
|
63
|
+
end
|
64
|
+
|
65
|
+
# Follow https://wiki.archlinux.org/index.php/Partitioning
|
66
|
+
# Partition_efi
|
67
|
+
# /boot/efi - EFI system partition - 260MB
|
68
|
+
# / - Root
|
69
|
+
|
70
|
+
# Partition_bios
|
71
|
+
# None - Bios Boot Partition - 1MiB
|
72
|
+
# /boot - Boot - 8300
|
73
|
+
# / - Root
|
74
|
+
|
75
|
+
def exec(cmd)
|
76
|
+
Getch::Command.new(cmd).run!
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
data/lib/getch/gentoo.rb
CHANGED
data/lib/getch/gentoo/boot.rb
CHANGED
@@ -11,7 +11,6 @@ module Getch
|
|
11
11
|
|
12
12
|
def start
|
13
13
|
@config.fstab
|
14
|
-
OPTIONS_FS[DEFAULT_OPTIONS[:fs]]::Deps.new()
|
15
14
|
bootloader
|
16
15
|
password
|
17
16
|
umount
|
@@ -41,18 +40,22 @@ module Getch
|
|
41
40
|
File.write("#{MOUNTPOINT}/#{esp}/loader/loader.conf", datas_loader.join("\n"))
|
42
41
|
|
43
42
|
FileUtils.cp("#{MOUNTPOINT}/usr/src/linux/arch/x86/boot/bzImage", "#{MOUNTPOINT}/#{esp}/vmlinuz", preserve: true)
|
43
|
+
|
44
|
+
initramfs = Dir.glob("#{MOUNTPOINT}/boot/initramfs-*.img")
|
45
|
+
FileUtils.cp("#{initramfs[0]}", "#{MOUNTPOINT}/#{esp}/initramfs", preserve: true) if initramfs != []
|
46
|
+
|
44
47
|
exec_chroot("bootctl --path #{esp} update")
|
45
48
|
end
|
46
49
|
|
47
50
|
def bootctl_dep
|
48
51
|
puts 'Installing systemd-boot...'
|
49
52
|
exec_chroot("euse -p sys-apps/systemd -E gnuefi")
|
50
|
-
|
53
|
+
Getch::Emerge.new("sys-apps/systemd efivar").pkg!
|
51
54
|
end
|
52
55
|
|
53
56
|
def grub
|
54
57
|
puts 'Installing GRUB...'
|
55
|
-
|
58
|
+
Getch::Emerge.new("sys-boot/grub:2").pkg!
|
56
59
|
@config.grub
|
57
60
|
exec_chroot("grub-install /dev/#{@disk}")
|
58
61
|
exec_chroot('grub-mkconfig -o /boot/grub/grub.cfg')
|
data/lib/getch/gentoo/chroot.rb
CHANGED
@@ -10,15 +10,15 @@ module Getch
|
|
10
10
|
def update
|
11
11
|
return if STATES[:gentoo_update]
|
12
12
|
puts "Downloading the last ebuilds for Gentoo..."
|
13
|
+
Helpers::create_dir("#{MOUNTPOINT}/var/db/repos/gentoo")
|
13
14
|
cmd = "emerge-webrsync"
|
14
15
|
exec_chroot(cmd)
|
15
16
|
end
|
16
17
|
|
17
18
|
def world
|
18
19
|
return if STATES[:gentoo_update]
|
19
|
-
puts "Update Gentoo"
|
20
|
-
|
21
|
-
exec_chroot(cmd)
|
20
|
+
puts "Update Gentoo world"
|
21
|
+
Getch::Emerge.new("emerge --update --deep --newuse @world").run!
|
22
22
|
@state.update
|
23
23
|
end
|
24
24
|
|
@@ -30,7 +30,6 @@ module Getch
|
|
30
30
|
|
31
31
|
def kernel
|
32
32
|
return if Dir.exist? "#{MOUNTPOINT}/usr/src/linux"
|
33
|
-
puts "Installing kernel gentoo-sources..."
|
34
33
|
license = "#{MOUNTPOINT}/etc/portage/package.license"
|
35
34
|
File.write(license, "sys-kernel/linux-firmware linux-fw-redistributable no-source-code\n")
|
36
35
|
@pkgs << "sys-kernel/gentoo-sources"
|
@@ -46,7 +45,9 @@ module Getch
|
|
46
45
|
def install_pkgs
|
47
46
|
@pkgs << "app-admin/sudo"
|
48
47
|
@pkgs << "app-editors/vim"
|
49
|
-
|
48
|
+
all_pkgs = @pkgs.join(" ")
|
49
|
+
puts "Installing #{all_pkgs}..."
|
50
|
+
Getch::Emerge.new(all_pkgs).pkg!
|
50
51
|
end
|
51
52
|
|
52
53
|
private
|
@@ -62,7 +63,7 @@ module Getch
|
|
62
63
|
end
|
63
64
|
|
64
65
|
def garden_dep
|
65
|
-
|
66
|
+
Getch::Emerge.new("gentoolkit").pkg!
|
66
67
|
exec_chroot("euse -p sys-apps/kmod -E lzma")
|
67
68
|
@pkgs << "sys-apps/kmod"
|
68
69
|
end
|
data/lib/getch/gentoo/config.rb
CHANGED
@@ -12,10 +12,12 @@ module Getch
|
|
12
12
|
def portage
|
13
13
|
nproc = `nproc`.chomp()
|
14
14
|
grub_pc = Helpers::efi? ? '' : 'GRUB_PLATFORMS="pc"'
|
15
|
+
quiet = DEFAULT_OPTIONS[:verbose] ? '' : "EMERGE_DEFAULT_OPTS=\"--jobs=#{nproc} --load-average=#{nproc}\""
|
15
16
|
data = [
|
16
17
|
'',
|
17
|
-
'
|
18
|
+
'ACCEPT_KEYWORDS="amd64"',
|
18
19
|
"MAKEOPTS=\"-j#{nproc} -l#{nproc}\"",
|
20
|
+
quiet,
|
19
21
|
'INPUT_DEVICES="libinput"',
|
20
22
|
grub_pc
|
21
23
|
]
|
data/lib/getch/gentoo/sources.rb
CHANGED
@@ -3,79 +3,87 @@ module Getch
|
|
3
3
|
class Sources
|
4
4
|
def initialize
|
5
5
|
@lsmod = `lsmod`.chomp
|
6
|
-
@
|
6
|
+
@filesystem = OPTIONS_FS[DEFAULT_OPTIONS[:fs]]::Deps.new()
|
7
7
|
end
|
8
8
|
|
9
9
|
def build_others
|
10
|
-
install_wifi if ismatch?('iwlwifi')
|
11
10
|
install_zfs if ismatch?('zfs')
|
12
11
|
virtualbox_guest
|
13
12
|
qemu_guest
|
13
|
+
install_wifi
|
14
|
+
install_audio
|
14
15
|
end
|
15
16
|
|
16
17
|
def build_kspp
|
17
18
|
puts "Adding KSPP to the kernel source"
|
18
|
-
|
19
|
+
garden("-b -a systemd")
|
19
20
|
end
|
20
21
|
|
21
22
|
def make
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
28
|
-
|
29
|
-
def only_make
|
30
|
-
exec_chroot("cd #{@linux} && make -j$(nproc)")
|
23
|
+
if DEFAULT_OPTIONS[:fs] == 'lvm'
|
24
|
+
@filesystem.make
|
25
|
+
else
|
26
|
+
just_make
|
27
|
+
end
|
31
28
|
end
|
32
29
|
|
33
30
|
def init_config
|
34
|
-
|
31
|
+
Getch::Make.new("make localyesconfig").run!
|
35
32
|
end
|
36
33
|
|
37
34
|
private
|
38
35
|
|
36
|
+
def only_make
|
37
|
+
Getch::Make.new("make -j$(nproc)").run!
|
38
|
+
end
|
39
|
+
|
40
|
+
def just_make
|
41
|
+
puts "Compiling kernel sources"
|
42
|
+
cmd = "make -j$(nproc) && make modules_install && make install"
|
43
|
+
Getch::Make.new(cmd).run!
|
44
|
+
is_kernel = Dir.glob("#{MOUNTPOINT}/boot/vmlinuz-*")
|
45
|
+
raise "No kernel installed, compiling source fail..." if is_kernel == []
|
46
|
+
end
|
47
|
+
|
39
48
|
def virtualbox_guest
|
40
|
-
|
41
|
-
|
49
|
+
return if ! ismatch?('vmwgfx')
|
50
|
+
garden("-a virtualbox-guest")
|
51
|
+
Getch::Emerge.new("app-emulation/virtualbox-guest-additions").pkg!
|
42
52
|
end
|
43
53
|
|
44
54
|
def qemu_guest
|
45
|
-
|
46
|
-
|
55
|
+
garden("-a kvm-guest") if ismatch?('virtio')
|
56
|
+
garden("-a kvm") if ismatch?('kvm')
|
47
57
|
end
|
48
58
|
|
49
59
|
def ismatch?(arg)
|
50
60
|
@lsmod.match?(/#{arg}/)
|
51
61
|
end
|
52
62
|
|
53
|
-
def
|
54
|
-
|
55
|
-
source /etc/profile
|
56
|
-
cd /root/garden-master
|
57
|
-
#{cmd}
|
58
|
-
\""
|
59
|
-
Getch::Command.new(script).run!
|
63
|
+
def garden(cmd)
|
64
|
+
Getch::Garden.new(cmd).run!
|
60
65
|
end
|
61
66
|
|
62
|
-
def
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
Getch::Command.new(script).run!
|
67
|
+
def install_wifi
|
68
|
+
return if ! ismatch?('cfg80211')
|
69
|
+
garden("-a wifi")
|
70
|
+
wifi_drivers
|
71
|
+
Getch::Emerge.new("net-wireless/iw wpa_supplicant net-wireless/iwd").pkg!
|
68
72
|
end
|
69
73
|
|
70
|
-
def
|
71
|
-
|
72
|
-
|
74
|
+
def install_audio
|
75
|
+
return if ! ismatch?('snd_pcm')
|
76
|
+
garden("-a sound")
|
73
77
|
end
|
74
78
|
|
75
79
|
def install_zfs
|
76
|
-
|
80
|
+
garden("-a zfs")
|
77
81
|
only_make # a first 'make' is necessary before emerge zfs
|
78
|
-
|
82
|
+
Getch::Emerge.new("sys-fs/zfs").pkg!
|
83
|
+
end
|
84
|
+
|
85
|
+
def wifi_drivers
|
86
|
+
garden("-a ath9k-driver") if ismatch?('ath9k')
|
79
87
|
end
|
80
88
|
end
|
81
89
|
end
|
data/lib/getch/gentoo/stage.rb
CHANGED
@@ -60,7 +60,7 @@ module Getch
|
|
60
60
|
# https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage
|
61
61
|
def decompress
|
62
62
|
puts "Decompressing archive #{@stage_file}..."
|
63
|
-
cmd = "tar
|
63
|
+
cmd = "tar xpf #{@stage_file} --xattrs-include=\'*.*\' --numeric-owner"
|
64
64
|
Getch::Command.new(cmd).run!
|
65
65
|
end
|
66
66
|
|
data/lib/getch/log.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'logger'
|
2
|
+
|
3
|
+
module Getch
|
4
|
+
class Log
|
5
|
+
def initialize
|
6
|
+
@log_file = '/tmp/log_install.txt'
|
7
|
+
check_file
|
8
|
+
init_log
|
9
|
+
init_log_text
|
10
|
+
end
|
11
|
+
|
12
|
+
def info(msg)
|
13
|
+
@logger.info(msg)
|
14
|
+
@logger_text.info(msg)
|
15
|
+
end
|
16
|
+
|
17
|
+
def error(msg)
|
18
|
+
@logger.error(msg)
|
19
|
+
@logger_text.error(msg)
|
20
|
+
end
|
21
|
+
|
22
|
+
def debug(msg)
|
23
|
+
@logger.debug(msg)
|
24
|
+
@logger_text.debug(msg)
|
25
|
+
end
|
26
|
+
|
27
|
+
def fatal(msg)
|
28
|
+
@logger.fatal(msg)
|
29
|
+
@logger_text.fatal(msg)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def check_file
|
35
|
+
puts "Creating log at #{@log_file}" if ! File.exist? @log_file
|
36
|
+
end
|
37
|
+
|
38
|
+
def init_log
|
39
|
+
@logger = Logger.new(STDOUT)
|
40
|
+
@logger.level = DEFAULT_OPTIONS[:verbose] ? Logger::DEBUG : Logger::INFO
|
41
|
+
@logger.formatter = proc { |severity, datetime, progname, msg|
|
42
|
+
"#{severity}, #{msg}\n"
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def init_log_text
|
47
|
+
@logger_text = Logger.new(@log_file, 1)
|
48
|
+
@logger_text.level = Logger::DEBUG
|
49
|
+
@logger_text.formatter = proc { |severity, datetime, progname, msg|
|
50
|
+
"#{severity}, #{datetime}, #{msg}\n"
|
51
|
+
}
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/getch/options.rb
CHANGED
@@ -32,8 +32,9 @@ module Getch
|
|
32
32
|
opts.on("-d", "--disk DISK", "Disk where install Gentoo (sda,sdb)") do |disk|
|
33
33
|
@disk = disk
|
34
34
|
end
|
35
|
-
opts.on("-f", "--format FS", "Default use ext4") do |fs|
|
35
|
+
opts.on("-f", "--format FS", "Can be ext4, lvm. Default use ext4") do |fs|
|
36
36
|
@fs = fs
|
37
|
+
DEFAULT_OPTIONS[:fs] = fs # dont known why, but it should be enforce
|
37
38
|
end
|
38
39
|
opts.on("-u", "--username USERNAME", "Initialize /home/username") do |user|
|
39
40
|
@username = user
|
data/lib/getch/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: getch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szorfein
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
J/zT/q2Ac7BWpSLbv6p9lChBiEnD9j24x463LR5QQjDNS5SsjzRQfFuprsa9Nqf2
|
36
36
|
Tw==
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2020-09-
|
38
|
+
date: 2020-09-30 00:00:00.000000000 Z
|
39
39
|
dependencies: []
|
40
40
|
description:
|
41
41
|
email:
|
@@ -69,6 +69,13 @@ files:
|
|
69
69
|
- lib/getch/filesystem/ext4/format.rb
|
70
70
|
- lib/getch/filesystem/ext4/mount.rb
|
71
71
|
- lib/getch/filesystem/ext4/partition.rb
|
72
|
+
- lib/getch/filesystem/lvm.rb
|
73
|
+
- lib/getch/filesystem/lvm/config.rb
|
74
|
+
- lib/getch/filesystem/lvm/deps.rb
|
75
|
+
- lib/getch/filesystem/lvm/device.rb
|
76
|
+
- lib/getch/filesystem/lvm/format.rb
|
77
|
+
- lib/getch/filesystem/lvm/mount.rb
|
78
|
+
- lib/getch/filesystem/lvm/partition.rb
|
72
79
|
- lib/getch/gentoo.rb
|
73
80
|
- lib/getch/gentoo/boot.rb
|
74
81
|
- lib/getch/gentoo/chroot.rb
|
@@ -76,6 +83,7 @@ files:
|
|
76
83
|
- lib/getch/gentoo/sources.rb
|
77
84
|
- lib/getch/gentoo/stage.rb
|
78
85
|
- lib/getch/helpers.rb
|
86
|
+
- lib/getch/log.rb
|
79
87
|
- lib/getch/options.rb
|
80
88
|
- lib/getch/states.rb
|
81
89
|
- lib/getch/version.rb
|
metadata.gz.sig
CHANGED
Binary file
|