getch 0.0.9 → 0.1.5
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 +45 -0
- data/README.md +57 -11
- data/bin/setup.sh +4 -2
- data/lib/getch.rb +27 -10
- data/lib/getch/command.rb +25 -4
- data/lib/getch/config.rb +58 -0
- data/lib/getch/filesystem.rb +6 -0
- data/lib/getch/filesystem/clean.rb +58 -0
- data/lib/getch/filesystem/device.rb +61 -0
- data/lib/getch/filesystem/ext4/config.rb +8 -9
- data/lib/getch/filesystem/ext4/device.rb +2 -7
- data/lib/getch/filesystem/ext4/encrypt/config.rb +8 -9
- data/lib/getch/filesystem/ext4/encrypt/deps.rb +3 -19
- data/lib/getch/filesystem/ext4/encrypt/device.rb +3 -8
- data/lib/getch/filesystem/ext4/encrypt/format.rb +3 -5
- data/lib/getch/filesystem/ext4/encrypt/mount.rb +6 -43
- data/lib/getch/filesystem/ext4/encrypt/partition.rb +19 -38
- data/lib/getch/filesystem/ext4/format.rb +3 -5
- data/lib/getch/filesystem/ext4/mount.rb +7 -46
- data/lib/getch/filesystem/ext4/partition.rb +16 -39
- data/lib/getch/filesystem/lvm/config.rb +11 -15
- data/lib/getch/filesystem/lvm/deps.rb +5 -20
- data/lib/getch/filesystem/lvm/device.rb +33 -9
- data/lib/getch/filesystem/lvm/encrypt/config.rb +9 -12
- data/lib/getch/filesystem/lvm/encrypt/deps.rb +5 -22
- data/lib/getch/filesystem/lvm/encrypt/device.rb +33 -9
- data/lib/getch/filesystem/lvm/encrypt/format.rb +3 -3
- data/lib/getch/filesystem/lvm/encrypt/mount.rb +7 -46
- data/lib/getch/filesystem/lvm/encrypt/partition.rb +20 -31
- data/lib/getch/filesystem/lvm/format.rb +11 -7
- data/lib/getch/filesystem/lvm/mount.rb +7 -46
- data/lib/getch/filesystem/lvm/partition.rb +19 -31
- data/lib/getch/filesystem/mount.rb +56 -0
- data/lib/getch/filesystem/partition.rb +77 -0
- data/lib/getch/filesystem/zfs.rb +14 -0
- data/lib/getch/filesystem/zfs/config.rb +57 -0
- data/lib/getch/filesystem/zfs/deps.rb +95 -0
- data/lib/getch/filesystem/zfs/device.rb +58 -0
- data/lib/getch/filesystem/zfs/encrypt.rb +15 -0
- data/lib/getch/filesystem/zfs/encrypt/config.rb +67 -0
- data/lib/getch/filesystem/zfs/encrypt/deps.rb +97 -0
- data/lib/getch/filesystem/zfs/encrypt/device.rb +60 -0
- data/lib/getch/filesystem/zfs/encrypt/format.rb +104 -0
- data/lib/getch/filesystem/zfs/encrypt/mount.rb +51 -0
- data/lib/getch/filesystem/zfs/encrypt/partition.rb +66 -0
- data/lib/getch/filesystem/zfs/format.rb +113 -0
- data/lib/getch/filesystem/zfs/mount.rb +48 -0
- data/lib/getch/filesystem/zfs/partition.rb +65 -0
- data/lib/getch/gentoo.rb +11 -4
- data/lib/getch/gentoo/boot.rb +34 -16
- data/lib/getch/gentoo/chroot.rb +16 -25
- data/lib/getch/gentoo/config.rb +59 -7
- data/lib/getch/gentoo/sources.rb +54 -26
- data/lib/getch/gentoo/use.rb +43 -0
- data/lib/getch/gentoo/use_flag.rb +64 -0
- data/lib/getch/guard.rb +62 -0
- data/lib/getch/helpers.rb +31 -13
- data/lib/getch/options.rb +24 -9
- data/lib/getch/version.rb +1 -1
- metadata +40 -18
- 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: cb3fc628a7308969d14505c6f56623c11c5adda014841e162b264f189b5ad54c
|
4
|
+
data.tar.gz: ea50a6890b8c0c718ec38876809144fab98442daeddad2db85bc591a77996948
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2395983c7fc521cc7867cdd54550177a2ed3f5eccdcd070f36eec256e73d06b8bfe961dc3f922fa9c5afac30d28e898625b32655ee89d45bc8e1da79dbf54d15
|
7
|
+
data.tar.gz: 1e8eeda1ff45f0d633820ced177fb6ae97645d5aa2e7f02e69279f0b9e611035269c23707f6677820886c92122a27e92d3906401a873fc60a1e1e9064c8de3bf
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,48 @@
|
|
1
|
+
## 0.1.4, release 2021-06-20
|
2
|
+
* Install `iptables` by default.
|
3
|
+
* Control input for options `--disk`, `--format`, `--zoneinfo`, `--keymap`.
|
4
|
+
* Add a `/etc/portage/bashrc` to automatically signing kernel modules with `emerge`.
|
5
|
+
* Now clean properly another disk used with option `--separate-x DISK`.
|
6
|
+
* For ZFS, use `blockdev --getpbsz` to find correct bloc (sector) size.
|
7
|
+
* Populate `/etc/modules-load.d/` with modules found with `lsmod` (only few wifi's, flash usb related (ehci, ohci, xhci, etc)).
|
8
|
+
* Remove the package `dev-util/dwarves`.
|
9
|
+
|
10
|
+
## 0.1.3, release 2021-05-17
|
11
|
+
* LVM use the format /dev/vg_name/lv_name for mount/format/fstab.
|
12
|
+
* Stop using `euse` from `gentoolkit`, use native Ruby code here.
|
13
|
+
* Optimization on package installation, they shouln't be installed more than once.
|
14
|
+
* Regroup use flags under Getch::Gentoo::UseFlag.
|
15
|
+
* Upd Bask v0.5 (zstd compression, better support for wifi...)
|
16
|
+
* Config for systemd-resolved, enable DNS over TLS with Quad9 (9.9.9.9)
|
17
|
+
* Add configs for systemd-network with DHCP for wifi and ethernet.
|
18
|
+
* Correct permissions (/home/[user] and /etc/portage)
|
19
|
+
|
20
|
+
## 0.1.2, release 2021-05-12
|
21
|
+
* DOCS update.
|
22
|
+
* Keep Nano for those who need :)
|
23
|
+
* ZFS use the last version >=2.0 with kernel stable =5.10
|
24
|
+
* ZFS create a Log device and Cache device if getch is used with `--separate-cache`.
|
25
|
+
* GRUB or Systemd-boot can now be installed on separate disk with `--separate-boot`.
|
26
|
+
* Adding flag for ZFS `-o autotrim=on` (used with `zpool create`).
|
27
|
+
* Encrypted swap use: `cipher=aes-xts-plain64:sha256,size=512` by default.
|
28
|
+
* In the make.conf: add `-fomit-frame-pointer`, designed to reduce generated code size.
|
29
|
+
|
30
|
+
## 0.1.1, release 2020-11-01
|
31
|
+
* Change mountpoint for the esp at /efi rather than /boot/efi
|
32
|
+
* Replace Garden by Bask https://github.com/szorfein/bask
|
33
|
+
* Correct option --username USERNAME, do not create a new partition.
|
34
|
+
* New set of options --separate-{boot,cache,home} to install them on another disk
|
35
|
+
* Refactor codes
|
36
|
+
* Add cpu name to COMMON_FLAGS
|
37
|
+
* Add cpuflags with app-portage/cpuid2cpuflags
|
38
|
+
+ Use the whole disk space available for / when option --username is unset
|
39
|
+
|
40
|
+
## 0.1.0, release 2020-10-15
|
41
|
+
* Add the (Zeta) filesystem ZFS
|
42
|
+
* `emerge --depclean` to save space.
|
43
|
+
* Add a message when getch have finish, keep /mnt/gentoo if you need to add something.
|
44
|
+
* Use systemd-detect-virt to detect a Virtual Guest.
|
45
|
+
|
1
46
|
## 0.0.9, release 2020-10-03
|
2
47
|
* Add encryption on ext4 and lvm (BIOS,UEFI)
|
3
48
|
* Correct KEYMAP="yes" with genkernel
|
data/README.md
CHANGED
@@ -3,16 +3,17 @@ A CLI tool to install Gentoo.
|
|
3
3
|
|
4
4
|
## Description
|
5
5
|
Actually, Getch support only the [AMD64 handbook](https://wiki.gentoo.org/wiki/Handbook:AMD64) and only with the last `stage3-amd64-systemd`.
|
6
|
-
It also require a disk (only one for now) with a minimum of 20G.
|
7
6
|
|
8
|
-
BIOS system will use Grub2 and
|
9
|
-
+
|
10
|
-
+
|
7
|
+
BIOS system will use `Grub2` and `systemd-boot` for UEFI. Filesystem supported by Getch are for now:
|
8
|
+
+ Ext4
|
9
|
+
+ LVM
|
10
|
+
+ ZFS
|
11
11
|
|
12
|
-
|
12
|
+
Encryption is also supported.
|
13
13
|
|
14
14
|
The ISO images i was able to test and that works:
|
15
15
|
+ [Archlinux](https://www.archlinux.org/download/)
|
16
|
+
+ [Archaeidae](https://github.com/szorfein/archaeidae): Custom Archiso that includes ZFS support.
|
16
17
|
|
17
18
|
## Install
|
18
19
|
Getch is cryptographically signed, so add my public key (if you haven’t already) as a trusted certificate.
|
@@ -27,27 +28,72 @@ When you boot from an `iso`, you can install `ruby`, `getch` and correct your `P
|
|
27
28
|
# sh <(curl -L https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh)
|
28
29
|
# source ~/.zshrc # or ~/.bashrc
|
29
30
|
|
31
|
+
If you want to try the master branch:
|
32
|
+
|
33
|
+
# git clone https://github.com/szorfein/getch
|
34
|
+
# cd getch
|
35
|
+
# ruby -I lib bin/getch -h
|
36
|
+
|
30
37
|
## Usage
|
38
|
+
Just ensure than the script is run with a root account.
|
39
|
+
|
40
|
+
# getch -h
|
31
41
|
|
32
|
-
|
42
|
+
After an install by Getch, take a look on the [wiki](https://github.com/szorfein/getch/wiki).
|
33
43
|
|
34
44
|
## Examples
|
35
45
|
For a french user:
|
36
46
|
|
37
|
-
# getch --
|
38
|
-
|
39
|
-
After an install by Getch, take a look on the [wiki](https://github.com/szorfein/getch/wiki).
|
47
|
+
# getch --zoneinfo "Europe/Paris" --language fr_FR --keymap fr
|
40
48
|
|
41
49
|
Install Gentoo on LVM:
|
42
50
|
|
43
51
|
# getch --format lvm --disk sda
|
44
52
|
|
53
|
+
Encrypt your disk with LVM with a french keymap
|
54
|
+
|
55
|
+
# getch --format lvm --encrypt --keymap fr
|
56
|
+
|
57
|
+
Encrypt with ext4 and create a home directory /home/ninja
|
58
|
+
|
59
|
+
# getch --format ext4 --encrypt --username ninja
|
60
|
+
|
61
|
+
With ZFS:
|
62
|
+
|
63
|
+
# getch --format zfs
|
64
|
+
|
45
65
|
## Troubleshooting
|
46
66
|
|
47
67
|
#### LVM
|
48
|
-
Unless
|
68
|
+
Unless your old LVM volume group is also named `vg0`, `getch` may fail to partition your disk. You have to clean up your device before proceed with `vgremove` and `pvremove`. An short example how doing this with a volume group named `vg0`:
|
69
|
+
|
70
|
+
# vgdisplay | grep vg0
|
71
|
+
# vgremove -f vg0
|
72
|
+
# pvremove -f /dev/sdb
|
73
|
+
|
74
|
+
#### Encryption enable on BIOS with ext4
|
75
|
+
To decrypt your disk on BIOS system, you have to enter your password twice. One time for Grub and another time for Genkernel. [post](https://wiki.archlinux.org/index.php/GRUB#Encrypted_/boot).
|
76
|
+
Also with GRUB, only a `us` keymap is working.
|
77
|
+
|
78
|
+
#### ZFS
|
79
|
+
When Gentoo boot the first time, the pool may fail to start, it's happen when the pool has not been `export` to the ISO. So just `export` your pool from the genkernel shell:
|
80
|
+
|
81
|
+
The zpool name should be visible (rpool-150ed here), so enter in the Genkernel shell:
|
82
|
+
|
83
|
+
> shell
|
84
|
+
zpool import -f -N -R /mnt rpool-150ed
|
85
|
+
zpool export -a
|
86
|
+
|
87
|
+
Then, just reboot now, it's all.
|
88
|
+
|
89
|
+
*INFO*: To create the zpool, getch use the 5 fist characters from the `partuuid`, just replace `sdX` by your real device:
|
90
|
+
|
91
|
+
# ls -l /dev/disk/by-partuuid/ | grep sdX4
|
92
|
+
-> 150ed969...
|
93
|
+
|
94
|
+
The pool will be called `rpool-150ed`.
|
49
95
|
|
50
96
|
## Issues
|
51
97
|
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:
|
52
98
|
+ lspci
|
53
|
-
+
|
99
|
+
+ cat /proc/modules
|
data/bin/setup.sh
CHANGED
@@ -72,10 +72,12 @@ set_shell() {
|
|
72
72
|
[ -f ~/.zshrc ] && your_shell=~/.zshrc
|
73
73
|
|
74
74
|
[ -f "$your_shell" ] && {
|
75
|
-
if ! grep -q "
|
75
|
+
if ! grep -q "ruby" "$your_shell" ; then
|
76
76
|
echo "export PATH=\$PATH:$(ruby -e 'puts Gem.user_dir')/bin" >> "$your_shell"
|
77
77
|
fi
|
78
|
-
. "$your_shell"
|
78
|
+
if $(. "$your_shell") ; then
|
79
|
+
echo "Shell loaded"
|
80
|
+
fi
|
79
81
|
}
|
80
82
|
}
|
81
83
|
|
data/lib/getch.rb
CHANGED
@@ -5,6 +5,8 @@ require_relative 'getch/filesystem'
|
|
5
5
|
require_relative 'getch/command'
|
6
6
|
require_relative 'getch/helpers'
|
7
7
|
require_relative 'getch/log'
|
8
|
+
require_relative 'getch/config'
|
9
|
+
require_relative 'getch/guard'
|
8
10
|
|
9
11
|
module Getch
|
10
12
|
|
@@ -15,6 +17,9 @@ module Getch
|
|
15
17
|
disk: 'sda',
|
16
18
|
fs: 'ext4',
|
17
19
|
username: nil,
|
20
|
+
boot_disk: nil,
|
21
|
+
cache_disk: nil,
|
22
|
+
home_disk: nil,
|
18
23
|
encrypt: false,
|
19
24
|
verbose: false
|
20
25
|
}
|
@@ -33,11 +38,13 @@ module Getch
|
|
33
38
|
DEFAULT_FS = {
|
34
39
|
true => {
|
35
40
|
ext4: Getch::FileSystem::Ext4::Encrypt,
|
36
|
-
lvm: Getch::FileSystem::Lvm::Encrypt
|
41
|
+
lvm: Getch::FileSystem::Lvm::Encrypt,
|
42
|
+
zfs: Getch::FileSystem::Zfs::Encrypt
|
37
43
|
},
|
38
44
|
false => {
|
39
45
|
ext4: Getch::FileSystem::Ext4,
|
40
|
-
lvm: Getch::FileSystem::Lvm
|
46
|
+
lvm: Getch::FileSystem::Lvm,
|
47
|
+
zfs: Getch::FileSystem::Zfs,
|
41
48
|
}
|
42
49
|
}.freeze
|
43
50
|
|
@@ -49,13 +56,17 @@ module Getch
|
|
49
56
|
|
50
57
|
def self.resume_options(opts)
|
51
58
|
puts "\nBuild Gentoo with the following args:\n"
|
52
|
-
puts "
|
53
|
-
puts "
|
54
|
-
puts "
|
55
|
-
puts "
|
56
|
-
puts "
|
57
|
-
puts "
|
58
|
-
puts "
|
59
|
+
puts "Lang: #{DEFAULT_OPTIONS[:language]}"
|
60
|
+
puts "Zoneinfo: #{DEFAULT_OPTIONS[:zoneinfo]}"
|
61
|
+
puts "Keymap: #{DEFAULT_OPTIONS[:keymap]}"
|
62
|
+
puts "Disk: #{DEFAULT_OPTIONS[:disk]}"
|
63
|
+
puts "Filesystem: #{DEFAULT_OPTIONS[:fs]}"
|
64
|
+
puts "Username: #{DEFAULT_OPTIONS[:username]}"
|
65
|
+
puts "Encrypt: #{DEFAULT_OPTIONS[:encrypt]}"
|
66
|
+
puts
|
67
|
+
puts "separate-boot disk: #{DEFAULT_OPTIONS[:boot_disk]}"
|
68
|
+
puts "separate-cache disk: #{DEFAULT_OPTIONS[:cache_disk]}"
|
69
|
+
puts "separate-home disk: #{DEFAULT_OPTIONS[:home_disk]}"
|
59
70
|
puts
|
60
71
|
print "Continue? (n,y) "
|
61
72
|
case gets.chomp
|
@@ -85,11 +96,16 @@ module Getch
|
|
85
96
|
gentoo = Getch::Gentoo
|
86
97
|
gentoo.stage3
|
87
98
|
gentoo.config(options)
|
88
|
-
gentoo.chroot
|
99
|
+
gentoo.chroot(options)
|
89
100
|
gentoo.kernel
|
90
101
|
gentoo.boot(options)
|
91
102
|
end
|
92
103
|
|
104
|
+
def self.configure(options)
|
105
|
+
config = Getch::Config.new
|
106
|
+
config.network
|
107
|
+
end
|
108
|
+
|
93
109
|
def self.main(argv)
|
94
110
|
options = Options.new(argv)
|
95
111
|
DEFAULT_OPTIONS.freeze
|
@@ -98,5 +114,6 @@ module Getch
|
|
98
114
|
format(options.disk, options.fs, options.username)
|
99
115
|
class_fs::Mount.new.run
|
100
116
|
init_gentoo(options)
|
117
|
+
configure(options)
|
101
118
|
end
|
102
119
|
end
|
data/lib/getch/command.rb
CHANGED
@@ -127,19 +127,21 @@ module Getch
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
|
130
|
-
class
|
130
|
+
class Bask
|
131
131
|
def initialize(cmd)
|
132
132
|
@gentoo = MOUNTPOINT
|
133
133
|
@cmd = cmd
|
134
134
|
@log = Getch::Log.new
|
135
|
+
@version = "0.5"
|
135
136
|
end
|
136
137
|
|
137
138
|
def run!
|
138
|
-
|
139
|
+
download_bask if ! Dir.exist? "#{MOUNTPOINT}/root/bask-#{@version}"
|
140
|
+
@log.info "Running Bask: #{@cmd}"
|
139
141
|
cmd = "chroot #{@gentoo} /bin/bash -c \"source /etc/profile \
|
140
142
|
&& env-update \
|
141
|
-
&& cd /root/
|
142
|
-
&& ./
|
143
|
+
&& cd /root/bask-#{@version} \
|
144
|
+
&& ./bask.sh #{@cmd} -k /usr/src/linux\""
|
143
145
|
Open3.popen2e(cmd) do |stdin, stdout_err, wait_thr|
|
144
146
|
while line = stdout_err.gets
|
145
147
|
puts line
|
@@ -152,5 +154,24 @@ module Getch
|
|
152
154
|
end
|
153
155
|
end
|
154
156
|
end
|
157
|
+
|
158
|
+
private
|
159
|
+
|
160
|
+
def download_bask
|
161
|
+
@log.info "Installing Bask..."
|
162
|
+
url = "https://github.com/szorfein/bask/archive/v#{@version}.tar.gz"
|
163
|
+
file = "bask-#{@version}.tar.gz"
|
164
|
+
|
165
|
+
Dir.chdir("#{MOUNTPOINT}/root")
|
166
|
+
Helpers::get_file_online(url, file)
|
167
|
+
Getch::Command.new("tar xzf #{file}").run!
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
class Chroot < Command
|
172
|
+
def initialize(cmd)
|
173
|
+
super
|
174
|
+
@cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile; #{cmd}\""
|
175
|
+
end
|
155
176
|
end
|
156
177
|
end
|
data/lib/getch/config.rb
ADDED
@@ -0,0 +1,58 @@
|
|
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
|
16
|
+
|
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
|
46
|
+
|
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')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/getch/filesystem.rb
CHANGED
@@ -3,5 +3,11 @@ module Getch
|
|
3
3
|
end
|
4
4
|
end
|
5
5
|
|
6
|
+
require_relative 'filesystem/device'
|
7
|
+
require_relative 'filesystem/clean'
|
8
|
+
require_relative 'filesystem/partition'
|
9
|
+
require_relative 'filesystem/mount'
|
10
|
+
|
6
11
|
require_relative 'filesystem/ext4'
|
7
12
|
require_relative 'filesystem/lvm'
|
13
|
+
require_relative 'filesystem/zfs'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Getch
|
2
|
+
module FileSystem
|
3
|
+
module Clean
|
4
|
+
def self.clean_hdd(disk)
|
5
|
+
return if ! disk
|
6
|
+
raise ArgumentError, "Disk #{disk} is no found." if ! File.exist? "/dev/#{disk}"
|
7
|
+
puts
|
8
|
+
print "Cleaning data on #{disk}, can be long, avoid this on Flash Memory (SSD,USB,...) ? [y,N] "
|
9
|
+
case gets.chomp
|
10
|
+
when /^y|^Y/
|
11
|
+
bloc=`blockdev --getbsz /dev/#{disk}`.chomp
|
12
|
+
Helpers::sys("dd if=/dev/urandom of=/dev/#{disk} bs=#{bloc} status=progress")
|
13
|
+
else
|
14
|
+
return
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.clean_struct(disk)
|
19
|
+
return if ! disk
|
20
|
+
raise ArgumentError, "Disk #{disk} is no found." if ! File.exist? "/dev/#{disk}"
|
21
|
+
Helpers::sys("sgdisk -Z /dev/#{disk}")
|
22
|
+
Helpers::sys("wipefs -a /dev/#{disk}")
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.hdd(*disks)
|
26
|
+
disks.each { |d|
|
27
|
+
clean_struct(d)
|
28
|
+
clean_hdd(d)
|
29
|
+
}
|
30
|
+
end
|
31
|
+
# See https://wiki.archlinux.org/index.php/Solid_state_drive/Memory_cell_clearing
|
32
|
+
# for SSD
|
33
|
+
def self.sdd
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.external_disk(root_disk, *disks)
|
37
|
+
disks.each { |d|
|
38
|
+
unless d && d != "" && d != nil && d == root_disk
|
39
|
+
hdd(d)
|
40
|
+
end
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.old_vg(disk, vg)
|
45
|
+
oldvg = `vgdisplay | grep #{vg}`.chomp
|
46
|
+
Helpers::sys("vgremove -f #{vg}") if oldvg != ''
|
47
|
+
Helpers::sys("pvremove -f #{disk}") if oldvg != '' and File.exist? disk
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.old_zpool
|
51
|
+
oldzpool = `zpool status | grep pool:`.gsub(/pool: /, '').delete(' ').split("\n")
|
52
|
+
if oldzpool[0] != "" and $?.success?
|
53
|
+
oldzpool.each { |p| Helpers::sys("zpool destroy #{p}") if p }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|