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
data/lib/getch/gentoo/chroot.rb
CHANGED
@@ -7,6 +7,12 @@ module Getch
|
|
7
7
|
mount
|
8
8
|
end
|
9
9
|
|
10
|
+
def cpuflags
|
11
|
+
Getch::Emerge.new("app-portage/cpuid2cpuflags").pkg!
|
12
|
+
cpuflags = `chroot #{MOUNTPOINT} /bin/bash -c "source /etc/profile; cpuid2cpuflags"`.chomp
|
13
|
+
File.write("#{MOUNTPOINT}/etc/portage/package.use/00cpuflags", "*/* #{cpuflags}")
|
14
|
+
end
|
15
|
+
|
10
16
|
def update
|
11
17
|
return if STATES[:gentoo_update]
|
12
18
|
puts "Downloading the last ebuilds for Gentoo..."
|
@@ -18,7 +24,7 @@ module Getch
|
|
18
24
|
def world
|
19
25
|
return if STATES[:gentoo_update]
|
20
26
|
puts "Update Gentoo world"
|
21
|
-
Getch::Emerge.new("emerge --update --deep --newuse @world").run!
|
27
|
+
Getch::Emerge.new("emerge --update --deep --changed-use --newuse @world").run!
|
22
28
|
@state.update
|
23
29
|
end
|
24
30
|
|
@@ -33,40 +39,29 @@ module Getch
|
|
33
39
|
license = "#{MOUNTPOINT}/etc/portage/package.license"
|
34
40
|
File.write(license, "sys-kernel/linux-firmware linux-fw-redistributable no-source-code\n")
|
35
41
|
@pkgs << "sys-kernel/gentoo-sources"
|
36
|
-
@pkgs << "dev-util/dwarves"
|
37
42
|
end
|
38
43
|
|
39
44
|
def kernel_deps
|
40
|
-
|
41
|
-
get_garden
|
42
|
-
garden_dep
|
45
|
+
@pkgs << "sys-apps/kmod"
|
43
46
|
end
|
44
47
|
|
45
48
|
def install_pkgs
|
49
|
+
@pkgs << "app-portage/gentoolkit"
|
46
50
|
@pkgs << "app-admin/sudo"
|
47
51
|
@pkgs << "app-editors/vim"
|
52
|
+
@pkgs << "sys-kernel/linux-firmware"
|
48
53
|
all_pkgs = @pkgs.join(" ")
|
49
54
|
puts "Installing #{all_pkgs}..."
|
50
55
|
Getch::Emerge.new(all_pkgs).pkg!
|
51
56
|
end
|
52
57
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
url = 'https://github.com/szorfein/garden/archive/master.tar.gz'
|
58
|
-
file = 'garden-master.tar.gz'
|
59
|
-
|
60
|
-
Dir.chdir("#{MOUNTPOINT}/root")
|
61
|
-
Helpers::get_file_online(url, file)
|
62
|
-
Getch::Command.new("tar xzf #{file}").run! if ! Dir.exist? 'garden-master'
|
58
|
+
# create a symbolic link for /usr/src/linux
|
59
|
+
def kernel_link
|
60
|
+
cmd = "eselect kernel set 1"
|
61
|
+
exec_chroot(cmd)
|
63
62
|
end
|
64
63
|
|
65
|
-
|
66
|
-
Getch::Emerge.new("gentoolkit").pkg!
|
67
|
-
exec_chroot("euse -p sys-apps/kmod -E lzma")
|
68
|
-
@pkgs << "sys-apps/kmod"
|
69
|
-
end
|
64
|
+
private
|
70
65
|
|
71
66
|
def mount
|
72
67
|
puts "Populate /proc, /sys and /dev."
|
@@ -80,11 +75,7 @@ module Getch
|
|
80
75
|
end
|
81
76
|
|
82
77
|
def exec_chroot(cmd)
|
83
|
-
|
84
|
-
source /etc/profile
|
85
|
-
#{cmd}
|
86
|
-
\""
|
87
|
-
Getch::Command.new(script).run!
|
78
|
+
Getch::Chroot.new(cmd).run!
|
88
79
|
end
|
89
80
|
end
|
90
81
|
end
|
data/lib/getch/gentoo/config.rb
CHANGED
@@ -7,17 +7,35 @@ module Getch
|
|
7
7
|
class Config
|
8
8
|
def initialize
|
9
9
|
@make = "#{MOUNTPOINT}/etc/portage/make.conf"
|
10
|
+
@log = Getch::Log.new
|
10
11
|
end
|
11
12
|
|
12
13
|
def portage
|
13
|
-
nproc = `nproc`.chomp()
|
14
14
|
grub_pc = Helpers::efi? ? '' : 'GRUB_PLATFORMS="pc"'
|
15
|
-
|
15
|
+
nproc = `nproc`.chomp()
|
16
|
+
|
17
|
+
# Add cpu name
|
18
|
+
cpu=`chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile ; gcc -c -Q -march=native --help=target | grep march\" | awk '{print $2}' | head -1`.chomp
|
19
|
+
raise "Error, no cpu found" if ! cpu or cpu == ""
|
20
|
+
@log.debug "CPU found ==> #{cpu}"
|
21
|
+
|
22
|
+
tmp = Tempfile.new('make.conf')
|
23
|
+
|
24
|
+
File.open(@make).each { |l|
|
25
|
+
if l.match(/^COMMON_FLAGS/)
|
26
|
+
File.write(tmp, "COMMON_FLAGS=\"-march=#{cpu} -O2 -pipe -fomit-frame-pointer\"\n", mode: 'a')
|
27
|
+
else
|
28
|
+
File.write(tmp, l, mode: 'a')
|
29
|
+
end
|
30
|
+
}
|
31
|
+
|
32
|
+
FileUtils.copy_file(tmp, @make, preserve = true)
|
33
|
+
|
34
|
+
# Add the rest
|
16
35
|
data = [
|
17
36
|
'',
|
37
|
+
"MAKEOPTS=\"-j#{nproc}\"",
|
18
38
|
'ACCEPT_KEYWORDS="amd64"',
|
19
|
-
"MAKEOPTS=\"-j#{nproc} -l#{nproc}\"",
|
20
|
-
quiet,
|
21
39
|
'INPUT_DEVICES="libinput"',
|
22
40
|
grub_pc
|
23
41
|
]
|
@@ -42,13 +60,13 @@ module Getch
|
|
42
60
|
line_count += 1
|
43
61
|
}
|
44
62
|
|
45
|
-
FileUtils.copy_file(tmp, "#{dest}/gentoo.conf", preserve =
|
63
|
+
FileUtils.copy_file(tmp, "#{dest}/gentoo.conf", preserve = true)
|
46
64
|
end
|
47
65
|
|
48
66
|
def network
|
49
67
|
src = '/etc/resolv.conf'
|
50
68
|
dest = "#{MOUNTPOINT}/etc/resolv.conf"
|
51
|
-
FileUtils.copy_file(src, dest, preserve =
|
69
|
+
FileUtils.copy_file(src, dest, preserve = true)
|
52
70
|
end
|
53
71
|
|
54
72
|
def systemd(options)
|
@@ -76,6 +94,40 @@ module Getch
|
|
76
94
|
Helpers::add_file("#{portage}/package.unmask/zzz_via_autounmask")
|
77
95
|
end
|
78
96
|
|
97
|
+
def portage_bashrc
|
98
|
+
conf = "#{MOUNTPOINT}/etc/portage/bashrc"
|
99
|
+
content = %q{
|
100
|
+
# https://wiki.gentoo.org/wiki/Signed_kernel_module_support
|
101
|
+
function pre_pkg_preinst() {
|
102
|
+
# This hook signs any out-of-tree kernel modules.
|
103
|
+
if [[ "$(type -t linux-mod_pkg_preinst)" != "function" ]]; then
|
104
|
+
# The package does not seem to install any kernel modules.
|
105
|
+
return
|
106
|
+
fi
|
107
|
+
# Get the signature algorithm used by the kernel.
|
108
|
+
local module_sig_hash="$(grep -Po '(?<=CONFIG_MODULE_SIG_HASH=").*(?=")' "${KERNEL_DIR}/.config")"
|
109
|
+
# Get the key file used by the kernel.
|
110
|
+
local module_sig_key="$(grep -Po '(?<=CONFIG_MODULE_SIG_KEY=").*(?=")' "${KERNEL_DIR}/.config")"
|
111
|
+
module_sig_key="${module_sig_key:-certs/signing_key.pem}"
|
112
|
+
# Path to the key file or PKCS11 URI
|
113
|
+
if [[ "${module_sig_key#pkcs11:}" == "${module_sig_key}" && "${module_sig_key#/}" == "${module_sig_key}" ]]; then
|
114
|
+
local key_path="${KERNEL_DIR}/${module_sig_key}"
|
115
|
+
else
|
116
|
+
local key_path="${module_sig_key}"
|
117
|
+
fi
|
118
|
+
# Certificate path
|
119
|
+
local cert_path="${KERNEL_DIR}/certs/signing_key.x509"
|
120
|
+
# Sign all installed modules before merging.
|
121
|
+
find "${D%/}/${INSDESTTREE#/}/" -name "*.ko" -exec "${KERNEL_DIR}/scripts/sign-file" "${module_sig_hash}" "${key_path}" "${cert_path}" '{}' \;
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
f = File.new(conf, "w")
|
126
|
+
f.write("#{content}\n")
|
127
|
+
f.chmod(0644)
|
128
|
+
f.close
|
129
|
+
end
|
130
|
+
|
79
131
|
private
|
80
132
|
|
81
133
|
def control_options(options)
|
@@ -93,7 +145,7 @@ module Getch
|
|
93
145
|
end
|
94
146
|
|
95
147
|
def search_zone(zone)
|
96
|
-
if !
|
148
|
+
if !File.exist?("#{MOUNTPOINT}/usr/share/zoneinfo/#{zone}")
|
97
149
|
raise ArgumentError, "Zoneinfo #{zone} doesn\'t exist."
|
98
150
|
end
|
99
151
|
end
|
data/lib/getch/gentoo/sources.rb
CHANGED
@@ -7,37 +7,35 @@ module Getch
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def build_others
|
10
|
-
|
10
|
+
cryptsetup
|
11
11
|
virtualbox_guest
|
12
12
|
qemu_guest
|
13
13
|
install_wifi
|
14
14
|
install_audio
|
15
|
+
flash_mod
|
15
16
|
end
|
16
17
|
|
17
18
|
def build_kspp
|
18
19
|
puts "Adding KSPP to the kernel source"
|
19
|
-
|
20
|
+
bask("-b -a systemd")
|
20
21
|
end
|
21
22
|
|
22
23
|
def make
|
23
|
-
if DEFAULT_OPTIONS[:fs] == 'lvm'
|
24
|
+
if DEFAULT_OPTIONS[:fs] == 'lvm' || DEFAULT_OPTIONS[:fs] == 'zfs' || DEFAULT_OPTIONS[:encrypt]
|
24
25
|
@filesystem.make
|
25
26
|
else
|
26
|
-
|
27
|
+
make_kernel
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
|
-
def
|
31
|
-
|
31
|
+
def firewall
|
32
|
+
bask("-a iptables")
|
33
|
+
Getch::Emerge.new("net-firewall/iptables").pkg!
|
32
34
|
end
|
33
35
|
|
34
36
|
private
|
35
37
|
|
36
|
-
def
|
37
|
-
Getch::Make.new("make -j$(nproc)").run!
|
38
|
-
end
|
39
|
-
|
40
|
-
def just_make
|
38
|
+
def make_kernel
|
41
39
|
puts "Compiling kernel sources"
|
42
40
|
cmd = "make -j$(nproc) && make modules_install && make install"
|
43
41
|
Getch::Make.new(cmd).run!
|
@@ -45,46 +43,76 @@ module Getch
|
|
45
43
|
raise "No kernel installed, compiling source fail..." if is_kernel == []
|
46
44
|
end
|
47
45
|
|
46
|
+
def cryptsetup
|
47
|
+
return unless DEFAULT_OPTIONS[:encrypt]
|
48
|
+
make_conf = "#{MOUNTPOINT}/etc/portage/make.conf"
|
49
|
+
|
50
|
+
puts "Adding support for cryptsetup."
|
51
|
+
bask("-a cryptsetup")
|
52
|
+
Getch::Chroot.new("euse -E cryptsetup").run! unless Helpers::grep?(make_conf, /cryptsetup/)
|
53
|
+
Getch::Emerge.new("sys-fs/cryptsetup").pkg!
|
54
|
+
end
|
55
|
+
|
48
56
|
def virtualbox_guest
|
49
|
-
|
50
|
-
|
57
|
+
systemd=`systemd-detect-virt`.chomp
|
58
|
+
return if ! ismatch?('vmwgfx') || systemd.match(/none/)
|
59
|
+
bask("-a virtualbox-guest")
|
51
60
|
Getch::Emerge.new("app-emulation/virtualbox-guest-additions").pkg!
|
52
61
|
end
|
53
62
|
|
54
63
|
def qemu_guest
|
55
|
-
|
56
|
-
|
64
|
+
bask("-a kvm-host") if ismatch?('kvm')
|
65
|
+
bask("-a kvm-guest") if ismatch?('virtio')
|
57
66
|
end
|
58
67
|
|
59
68
|
def ismatch?(arg)
|
60
69
|
@lsmod.match?(/#{arg}/)
|
61
70
|
end
|
62
71
|
|
63
|
-
def
|
64
|
-
Getch::
|
72
|
+
def bask(cmd)
|
73
|
+
Getch::Bask.new(cmd).run!
|
65
74
|
end
|
66
75
|
|
67
76
|
def install_wifi
|
68
77
|
return if ! ismatch?('cfg80211')
|
69
|
-
|
78
|
+
bask("-a wifi")
|
70
79
|
wifi_drivers
|
71
80
|
Getch::Emerge.new("net-wireless/iw wpa_supplicant net-wireless/iwd").pkg!
|
72
81
|
end
|
73
82
|
|
74
83
|
def install_audio
|
75
84
|
return if ! ismatch?('snd_pcm')
|
76
|
-
|
85
|
+
bask("-a sound")
|
77
86
|
end
|
78
87
|
|
79
|
-
def
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
88
|
+
def wifi_drivers
|
89
|
+
conf = "#{MOUNTPOINT}/etc/modules-load.d/wifi.conf"
|
90
|
+
File.delete(conf) if File.exists? conf
|
91
|
+
|
92
|
+
if ismatch?('ath9k')
|
93
|
+
bask("-a ath9k-driver")
|
94
|
+
end
|
95
|
+
|
96
|
+
module_load("iwlmvm", conf)
|
97
|
+
module_load("ath9k", conf)
|
84
98
|
end
|
85
99
|
|
86
|
-
def
|
87
|
-
|
100
|
+
def flash_mod
|
101
|
+
conf = "#{MOUNTPOINT}/etc/modules-load.d/usb.conf"
|
102
|
+
File.delete(conf) if File.exists? conf
|
103
|
+
|
104
|
+
module_load("ehci_pci", conf)
|
105
|
+
module_load("rtsx_pci_sdmmc", conf)
|
106
|
+
module_load("sdhci_pci", conf)
|
107
|
+
module_load("uas", conf)
|
108
|
+
module_load("uhci_hcd", conf)
|
109
|
+
module_load("xhci_pci", conf)
|
110
|
+
end
|
111
|
+
|
112
|
+
def module_load(name, file)
|
113
|
+
return unless name
|
114
|
+
return unless ismatch?(name)
|
115
|
+
File.write(file, "#{name}\n", mode: 'a')
|
88
116
|
end
|
89
117
|
end
|
90
118
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Getch
|
2
|
+
module Gentoo
|
3
|
+
class Use
|
4
|
+
def initialize(pkg = nil)
|
5
|
+
@use_dir = "#{MOUNTPOINT}/etc/portage/package.use"
|
6
|
+
@pkg = pkg
|
7
|
+
@file = @pkg ? @pkg.match(/[\w]+$/) : nil
|
8
|
+
@make = "#{MOUNTPOINT}/etc/portage/make.conf"
|
9
|
+
end
|
10
|
+
|
11
|
+
def add(*flags)
|
12
|
+
@flags = flags.join(' ')
|
13
|
+
write
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_global(*flags)
|
17
|
+
@flags = flags
|
18
|
+
write_global
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def write
|
24
|
+
content = "#{@pkg} #{@flags}\n"
|
25
|
+
File.write("#{@use_dir}/#{@file}", content, mode: 'w')
|
26
|
+
end
|
27
|
+
|
28
|
+
def write_global
|
29
|
+
list = []
|
30
|
+
|
31
|
+
@flags.each { |f|
|
32
|
+
unless Helpers::grep?(@make, /#{f}/)
|
33
|
+
list << f
|
34
|
+
end
|
35
|
+
}
|
36
|
+
|
37
|
+
use = list.join(' ')
|
38
|
+
line = "USE=\"${USE} #{use}\"\n"
|
39
|
+
File.write(@make, line, mode: 'a')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# lib/use_flag.rb
|
2
|
+
|
3
|
+
module Getch::Gentoo
|
4
|
+
class UseFlag
|
5
|
+
def initialize(options)
|
6
|
+
@efi = Helpers::efi?
|
7
|
+
@o = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def apply
|
11
|
+
systemd
|
12
|
+
kmod
|
13
|
+
grub
|
14
|
+
zfs
|
15
|
+
lvm
|
16
|
+
cryptsetup
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def systemd
|
22
|
+
flags = []
|
23
|
+
use = Getch::Gentoo::Use.new('sys-apps/systemd')
|
24
|
+
flags << 'dns-over-tls'
|
25
|
+
flags << 'gnuefi' if @efi
|
26
|
+
use.add(flags)
|
27
|
+
end
|
28
|
+
|
29
|
+
def kmod
|
30
|
+
use = Getch::Gentoo::Use.new('sys-apps/kmod')
|
31
|
+
use.add('zstd', 'lzma')
|
32
|
+
end
|
33
|
+
|
34
|
+
def grub
|
35
|
+
return if @efi
|
36
|
+
flags = []
|
37
|
+
use = Getch::Gentoo::Use.new('sys-boot/grub')
|
38
|
+
flags << '-grub_platforms_efi-64'
|
39
|
+
flags << 'libzfs' if @o.fs == 'zfs'
|
40
|
+
flags << 'device-mapper' if @o.fs == 'lvm'
|
41
|
+
use.add(flags)
|
42
|
+
end
|
43
|
+
|
44
|
+
def zfs
|
45
|
+
return unless @o.fs == 'zfs'
|
46
|
+
use = Getch::Gentoo::Use.new('sys-fs/zfs-kmod')
|
47
|
+
use.add('rootfs')
|
48
|
+
use = Getch::Gentoo::Use.new('sys-fs/zfs')
|
49
|
+
use.add('rootfs')
|
50
|
+
end
|
51
|
+
|
52
|
+
def lvm
|
53
|
+
return unless @o.fs == 'lvm'
|
54
|
+
use = Getch::Gentoo::Use.new
|
55
|
+
use.add_global('lvm', 'device-mapper')
|
56
|
+
end
|
57
|
+
|
58
|
+
def cryptsetup
|
59
|
+
return unless @o.encrypt
|
60
|
+
use = Getch::Gentoo::Use.new
|
61
|
+
use.add_global('cryptsetup')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/getch/guard.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
class InvalidDisk < StandardError
|
2
|
+
end
|
3
|
+
|
4
|
+
class InvalidFormat < StandardError
|
5
|
+
end
|
6
|
+
|
7
|
+
class InvalidZone < StandardError
|
8
|
+
end
|
9
|
+
|
10
|
+
class InvalidKeymap < StandardError
|
11
|
+
end
|
12
|
+
|
13
|
+
module Getch::Guard
|
14
|
+
def self.disk(name)
|
15
|
+
raise InvalidDisk, "No disk." unless name
|
16
|
+
raise InvalidDisk, "Bad device name #{name}." unless name.match(/^sd[a-z]{1}$/)
|
17
|
+
raise InvalidDisk, "Disk /dev/#{name} no found." unless File.exist? "/dev/#{name}"
|
18
|
+
name
|
19
|
+
rescue InvalidDisk => e
|
20
|
+
puts "#{e.class} => #{e}"
|
21
|
+
exit 1
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.format(name)
|
25
|
+
raise InvalidFormat, "No format specified." unless name
|
26
|
+
raise InvalidFormat, "Format #{name} not yet available." if name.match(/btrfs/)
|
27
|
+
raise InvalidFormat, "Format #{name} not supported." unless name.match(/zfs|lvm|zfs/)
|
28
|
+
rescue InvalidFormat => e
|
29
|
+
puts "#{e.class} => #{e}"
|
30
|
+
exit 1
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.zone(name)
|
34
|
+
raise InvalidZone, "No zoneinfo specified." unless name
|
35
|
+
raise InvalidZone, "Directory /usr/share/zoneinfo/ no found on this system..." unless Dir.exist? "/usr/share/zoneinfo/"
|
36
|
+
raise InvalidZone, "Zoneinfo #{name} is no found in /usr/share/zoneinfo/." unless File.exist? "/usr/share/zoneinfo/#{name}"
|
37
|
+
rescue InvalidZone => e
|
38
|
+
puts "#{e.class} => #{e}"
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.keymap(name)
|
43
|
+
raise InvalidKeymap, "No keymap specified." unless name
|
44
|
+
key = []
|
45
|
+
|
46
|
+
if Dir.exist? '/usr/share/keymaps'
|
47
|
+
key = Dir.glob("/usr/share/keymaps/**/#{name}.map.gz")
|
48
|
+
elsif Dir.exist? '/usr/share/kbd/keymaps'
|
49
|
+
key = Dir.glob("/usr/share/kbd/keymaps/**/#{name}.map.gz")
|
50
|
+
else
|
51
|
+
raise InvalidKeymap, "No directory found for keymap."
|
52
|
+
end
|
53
|
+
|
54
|
+
if key == []
|
55
|
+
raise InvalidKeymap, "Keymap #{name} no found."
|
56
|
+
end
|
57
|
+
name
|
58
|
+
rescue InvalidKeymap => e
|
59
|
+
puts "#{e.class} => #{e}"
|
60
|
+
exit 1
|
61
|
+
end
|
62
|
+
end
|