getch 0.0.9 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- 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
|