getch 0.0.7 → 0.1.2
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 +43 -4
- data/README.md +61 -8
- data/bin/setup.sh +5 -3
- data/lib/getch.rb +38 -13
- data/lib/getch/command.rb +138 -16
- data/lib/getch/filesystem.rb +7 -0
- data/lib/getch/filesystem/clean.rb +51 -0
- data/lib/getch/filesystem/device.rb +61 -0
- data/lib/getch/filesystem/ext4.rb +1 -0
- data/lib/getch/filesystem/ext4/config.rb +9 -9
- data/lib/getch/filesystem/ext4/device.rb +2 -7
- data/lib/getch/filesystem/ext4/encrypt/config.rb +70 -47
- data/lib/getch/filesystem/ext4/encrypt/deps.rb +25 -12
- data/lib/getch/filesystem/ext4/encrypt/device.rb +5 -9
- data/lib/getch/filesystem/ext4/encrypt/format.rb +10 -6
- data/lib/getch/filesystem/ext4/encrypt/mount.rb +6 -43
- data/lib/getch/filesystem/ext4/encrypt/partition.rb +57 -55
- data/lib/getch/filesystem/ext4/format.rb +10 -6
- data/lib/getch/filesystem/ext4/mount.rb +7 -46
- data/lib/getch/filesystem/ext4/partition.rb +16 -39
- data/lib/getch/filesystem/lvm.rb +14 -0
- data/lib/getch/filesystem/lvm/config.rb +63 -0
- data/lib/getch/filesystem/lvm/deps.rb +48 -0
- data/lib/getch/filesystem/lvm/device.rb +43 -0
- data/lib/getch/filesystem/lvm/encrypt.rb +15 -0
- data/lib/getch/filesystem/lvm/encrypt/config.rb +74 -0
- data/lib/getch/filesystem/lvm/encrypt/deps.rb +53 -0
- data/lib/getch/filesystem/lvm/encrypt/device.rb +46 -0
- data/lib/getch/filesystem/lvm/encrypt/format.rb +32 -0
- data/lib/getch/filesystem/lvm/encrypt/mount.rb +25 -0
- data/lib/getch/filesystem/lvm/encrypt/partition.rb +80 -0
- data/lib/getch/filesystem/lvm/format.rb +29 -0
- data/lib/getch/filesystem/lvm/mount.rb +23 -0
- data/lib/getch/filesystem/lvm/partition.rb +69 -0
- 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 +97 -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 +100 -0
- data/lib/getch/filesystem/zfs/encrypt/device.rb +60 -0
- data/lib/getch/filesystem/zfs/encrypt/format.rb +105 -0
- data/lib/getch/filesystem/zfs/encrypt/mount.rb +51 -0
- data/lib/getch/filesystem/zfs/encrypt/partition.rb +65 -0
- data/lib/getch/filesystem/zfs/format.rb +114 -0
- data/lib/getch/filesystem/zfs/mount.rb +48 -0
- data/lib/getch/filesystem/zfs/partition.rb +64 -0
- data/lib/getch/gentoo.rb +2 -2
- data/lib/getch/gentoo/boot.rb +25 -14
- data/lib/getch/gentoo/chroot.rb +18 -30
- data/lib/getch/gentoo/config.rb +38 -11
- data/lib/getch/gentoo/sources.rb +34 -40
- data/lib/getch/gentoo/stage.rb +1 -1
- data/lib/getch/helpers.rb +35 -13
- data/lib/getch/log.rb +54 -0
- data/lib/getch/options.rb +24 -8
- data/lib/getch/version.rb +1 -1
- metadata +51 -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: 476822c82abc15e37ab19b3e111b4b4109beb127fb775a9075757948c9e202a4
|
4
|
+
data.tar.gz: 1a2290c23d28c9fb0fa45ac47882698ad4f61dfe10f699804ab53162ea337e00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b299fd1b7b9daa4be76a482ed768e85c2372c847a7f18e4ffaebf173d8d80fddbfe9b4fccc42f3037e51d53751acaf7d12f26e87b7e68fad385d280223c8471
|
7
|
+
data.tar.gz: 2e97a961aaa0e8a5380fa61f1dafaa958d8941287d2c16e6d493038e6bb52f94153aeb35d5762f1b8347eef8f85f0be496ca372fac6ff070caaf03b94c237b0e
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,46 @@
|
|
1
|
-
|
2
|
-
*
|
3
|
-
*
|
4
|
-
*
|
1
|
+
## 0.1.2, release 2021-05-12
|
2
|
+
* DOCS update.
|
3
|
+
* Keep Nano for those who need :)
|
4
|
+
* ZFS use the last version >=2.0 with kernel stable =5.10
|
5
|
+
* ZFS create a Log device and Cache device if getch is used with `--separate-cache`.
|
6
|
+
* GRUB or Systemd-boot can now be installed on separate disk with `--separate-boot`.
|
7
|
+
* Adding flag for ZFS `-o autotrim=on` (used with `zpool create`).
|
8
|
+
* Encrypted swap use: `cipher=aes-xts-plain64:sha256,size=512` by default.
|
9
|
+
* In the make.conf: add `-fomit-frame-pointer`, designed to reduce generated code size.
|
10
|
+
|
11
|
+
## 0.1.1, release 2020-11-01
|
12
|
+
* Change mountpoint for the esp at /efi rather than /boot/efi
|
13
|
+
* Replace Garden by Bask https://github.com/szorfein/bask
|
14
|
+
* Correct option --username USERNAME, do not create a new partition.
|
15
|
+
* New set of options --separate-{boot,cache,home} to install them on another disk
|
16
|
+
* Refactor codes
|
17
|
+
* Add cpu name to COMMON_FLAGS
|
18
|
+
* Add cpuflags with app-portage/cpuid2cpuflags
|
19
|
+
+ Use the whole disk space available for / when option --username is unset
|
20
|
+
|
21
|
+
## 0.1.0, release 2020-10-15
|
22
|
+
* Add the (Zeta) filesystem ZFS
|
23
|
+
* `emerge --depclean` to save space.
|
24
|
+
* Add a message when getch have finish, keep /mnt/gentoo if you need to add something.
|
25
|
+
* Use systemd-detect-virt to detect a Virtual Guest.
|
26
|
+
|
27
|
+
## 0.0.9, release 2020-10-03
|
28
|
+
* Add encryption on ext4 and lvm (BIOS,UEFI)
|
29
|
+
* Correct KEYMAP="yes" with genkernel
|
30
|
+
* Renaming option keyboard with keymap
|
31
|
+
* GPG verification for ebuild
|
32
|
+
|
33
|
+
## 0.0.8, release 2020-09-30
|
34
|
+
* Adding LVM via the option fs, `--fs lvm`.
|
35
|
+
* Systemd-boot use the value of PARTUUID without initramfs.
|
36
|
+
* Include lib logger.
|
37
|
+
* Enhance functions to call program system Emerge, Make, ...
|
38
|
+
|
39
|
+
## 0.0.7, release 2020-09-22
|
40
|
+
* Correct fstab.
|
41
|
+
* Repair GRUB/fstab for BIOS system, add secure cmdline.
|
42
|
+
* Create a swap volume equal to the memory installed.
|
43
|
+
* Add vim and sudo
|
5
44
|
|
6
45
|
## 0.0.6, release 2020-09-19
|
7
46
|
* Add support for QEMU guest with KVM and Virtio driver
|
data/README.md
CHANGED
@@ -3,15 +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
|
-
Filesystem supported by Getch are
|
9
|
-
+
|
7
|
+
BIOS system will use `Grub2` and `systemd-boot` for UEFI. Filesystem supported by Getch are for now:
|
8
|
+
+ Ext4
|
9
|
+
+ LVM
|
10
|
+
+ ZFS
|
10
11
|
|
11
|
-
|
12
|
+
Encryption is also supported.
|
12
13
|
|
13
14
|
The ISO images i was able to test and that works:
|
14
15
|
+ [Archlinux](https://www.archlinux.org/download/)
|
16
|
+
+ [Archaeidae](https://github.com/szorfein/archaeidae): Custom Archiso that includes ZFS support.
|
15
17
|
|
16
18
|
## Install
|
17
19
|
Getch is cryptographically signed, so add my public key (if you haven’t already) as a trusted certificate.
|
@@ -23,19 +25,70 @@ With `gem` installed:
|
|
23
25
|
|
24
26
|
When you boot from an `iso`, you can install `ruby`, `getch` and correct your `PATH=` directly with the `bin/setup.sh`:
|
25
27
|
|
26
|
-
# curl https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh
|
28
|
+
# sh <(curl -L https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh)
|
27
29
|
# source ~/.zshrc # or ~/.bashrc
|
28
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
|
+
|
29
37
|
## Usage
|
38
|
+
Just ensure than the script is run with a root account.
|
39
|
+
|
40
|
+
# getch -h
|
30
41
|
|
31
|
-
|
42
|
+
After an install by Getch, take a look on the [wiki](https://github.com/szorfein/getch/wiki).
|
32
43
|
|
33
44
|
## Examples
|
34
45
|
For a french user:
|
35
46
|
|
36
|
-
# getch --
|
47
|
+
# getch --zoneinfo "Europe/Paris" --language fr_FR --keymap fr
|
37
48
|
|
38
|
-
|
49
|
+
Install Gentoo on LVM:
|
50
|
+
|
51
|
+
# getch --format lvm --disk sda
|
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
|
+
|
65
|
+
## Troubleshooting
|
66
|
+
|
67
|
+
#### LVM
|
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 two times. One time for Grub and another time for the initramfs (Genkernel). [post](https://wiki.archlinux.org/index.php/GRUB#Encrypted_/boot).
|
76
|
+
Also with GRUB, only a `us` keymap is working.
|
77
|
+
|
78
|
+
#### With ZFS
|
79
|
+
When Gentoo boot, the pool may fail to start, it's happen when the pool has not been `export` to the ISO. So just reboot on your ISO:
|
80
|
+
|
81
|
+
You need the partuuid, pool are create with the first 5 characters, just replace `sdX` by your real device:
|
82
|
+
|
83
|
+
# ls -l /dev/disk/by-partuuid/ | grep sdX4
|
84
|
+
-> 150ed969...
|
85
|
+
# zpool import -N -R /mnt rpool-150ed
|
86
|
+
|
87
|
+
And export them correctly:
|
88
|
+
|
89
|
+
# zpool export -a
|
90
|
+
|
91
|
+
It's all.
|
39
92
|
|
40
93
|
## Issues
|
41
94
|
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:
|
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
|
@@ -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
@@ -4,16 +4,20 @@ 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
|
|
10
11
|
DEFAULT_OPTIONS = {
|
11
12
|
language: 'en_US',
|
12
13
|
zoneinfo: 'US/Eastern',
|
13
|
-
|
14
|
+
keymap: 'us',
|
14
15
|
disk: 'sda',
|
15
16
|
fs: 'ext4',
|
16
17
|
username: nil,
|
18
|
+
boot_disk: nil,
|
19
|
+
cache_disk: nil,
|
20
|
+
home_disk: nil,
|
17
21
|
encrypt: false,
|
18
22
|
verbose: false
|
19
23
|
}
|
@@ -29,19 +33,38 @@ module Getch
|
|
29
33
|
}
|
30
34
|
|
31
35
|
MOUNTPOINT = "/mnt/gentoo".freeze
|
32
|
-
|
33
|
-
|
36
|
+
DEFAULT_FS = {
|
37
|
+
true => {
|
38
|
+
ext4: Getch::FileSystem::Ext4::Encrypt,
|
39
|
+
lvm: Getch::FileSystem::Lvm::Encrypt,
|
40
|
+
zfs: Getch::FileSystem::Zfs::Encrypt
|
41
|
+
},
|
42
|
+
false => {
|
43
|
+
ext4: Getch::FileSystem::Ext4,
|
44
|
+
lvm: Getch::FileSystem::Lvm,
|
45
|
+
zfs: Getch::FileSystem::Zfs,
|
46
|
+
}
|
34
47
|
}.freeze
|
35
48
|
|
49
|
+
def self.class_fs
|
50
|
+
encrypt = DEFAULT_OPTIONS[:encrypt]
|
51
|
+
fs = DEFAULT_OPTIONS[:fs].to_sym
|
52
|
+
DEFAULT_FS[encrypt][fs]
|
53
|
+
end
|
54
|
+
|
36
55
|
def self.resume_options(opts)
|
37
56
|
puts "\nBuild Gentoo with the following args:\n"
|
38
|
-
puts "
|
39
|
-
puts "
|
40
|
-
puts "
|
41
|
-
puts "
|
42
|
-
puts "
|
43
|
-
puts "
|
44
|
-
puts "
|
57
|
+
puts "Lang: #{DEFAULT_OPTIONS[:language]}"
|
58
|
+
puts "Zoneinfo: #{DEFAULT_OPTIONS[:zoneinfo]}"
|
59
|
+
puts "Keymap: #{DEFAULT_OPTIONS[:keymap]}"
|
60
|
+
puts "Disk: #{DEFAULT_OPTIONS[:disk]}"
|
61
|
+
puts "Filesystem: #{DEFAULT_OPTIONS[:fs]}"
|
62
|
+
puts "Username: #{DEFAULT_OPTIONS[:username]}"
|
63
|
+
puts "Encrypt: #{DEFAULT_OPTIONS[:encrypt]}"
|
64
|
+
puts
|
65
|
+
puts "separate-boot disk: #{DEFAULT_OPTIONS[:boot_disk]}"
|
66
|
+
puts "separate-cache disk: #{DEFAULT_OPTIONS[:cache_disk]}"
|
67
|
+
puts "separate-home disk: #{DEFAULT_OPTIONS[:home_disk]}"
|
45
68
|
puts
|
46
69
|
print "Continue? (n,y) "
|
47
70
|
case gets.chomp
|
@@ -54,12 +77,14 @@ module Getch
|
|
54
77
|
|
55
78
|
def self.format(disk, fs, user)
|
56
79
|
return if STATES[:format] and STATES[:partition]
|
80
|
+
log = Log.new
|
57
81
|
puts
|
58
82
|
print "Partition and format disk #{disk}, this will erase all data, continue? (n,y) "
|
59
83
|
case gets.chomp
|
60
84
|
when /^y|^Y/
|
61
|
-
|
62
|
-
|
85
|
+
log.info("Partition start")
|
86
|
+
class_fs::Partition.new
|
87
|
+
class_fs::Format.new
|
63
88
|
else
|
64
89
|
exit 1
|
65
90
|
end
|
@@ -80,7 +105,7 @@ module Getch
|
|
80
105
|
resume_options(options)
|
81
106
|
Getch::States.new # Update States
|
82
107
|
format(options.disk, options.fs, options.username)
|
83
|
-
|
108
|
+
class_fs::Mount.new.run
|
84
109
|
init_gentoo(options)
|
85
110
|
end
|
86
111
|
end
|
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.debug 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,124 @@ 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 Bask
|
131
|
+
def initialize(cmd)
|
132
|
+
@gentoo = MOUNTPOINT
|
133
|
+
@cmd = cmd
|
134
|
+
@log = Getch::Log.new
|
135
|
+
@version = "0.4"
|
136
|
+
end
|
137
|
+
|
138
|
+
def run!
|
139
|
+
download_bask if ! Dir.exist? "#{MOUNTPOINT}/root/bask-#{@version}"
|
140
|
+
@log.info "Running Bask: #{@cmd}"
|
141
|
+
cmd = "chroot #{@gentoo} /bin/bash -c \"source /etc/profile \
|
142
|
+
&& env-update \
|
143
|
+
&& cd /root/bask-#{@version} \
|
144
|
+
&& ./bask.sh #{@cmd} -k /usr/src/linux\""
|
145
|
+
Open3.popen2e(cmd) do |stdin, stdout_err, wait_thr|
|
146
|
+
while line = stdout_err.gets
|
147
|
+
puts line
|
148
|
+
end
|
149
|
+
|
150
|
+
exit_status = wait_thr.value
|
151
|
+
unless exit_status.success?
|
152
|
+
@log.fatal "Running #{cmd}"
|
153
|
+
exit 1
|
154
|
+
end
|
155
|
+
end
|
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
|
54
176
|
end
|
55
177
|
end
|