getch 0.0.5 → 0.1.0

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +30 -0
  5. data/README.md +31 -6
  6. data/bin/setup.sh +29 -13
  7. data/lib/getch.rb +43 -30
  8. data/lib/getch/command.rb +163 -0
  9. data/lib/getch/filesystem.rb +8 -0
  10. data/lib/getch/filesystem/ext4.rb +14 -0
  11. data/lib/getch/filesystem/ext4/config.rb +59 -0
  12. data/lib/getch/filesystem/ext4/deps.rb +22 -0
  13. data/lib/getch/filesystem/ext4/device.rb +16 -0
  14. data/lib/getch/filesystem/ext4/encrypt.rb +15 -0
  15. data/lib/getch/filesystem/ext4/encrypt/config.rb +85 -0
  16. data/lib/getch/filesystem/ext4/encrypt/deps.rb +59 -0
  17. data/lib/getch/filesystem/ext4/encrypt/device.rb +21 -0
  18. data/lib/getch/filesystem/ext4/encrypt/format.rb +32 -0
  19. data/lib/getch/filesystem/ext4/encrypt/mount.rb +64 -0
  20. data/lib/getch/filesystem/ext4/encrypt/partition.rb +116 -0
  21. data/lib/getch/filesystem/ext4/format.rb +30 -0
  22. data/lib/getch/filesystem/ext4/mount.rb +62 -0
  23. data/lib/getch/filesystem/ext4/partition.rb +75 -0
  24. data/lib/getch/filesystem/lvm.rb +14 -0
  25. data/lib/getch/filesystem/lvm/config.rb +63 -0
  26. data/lib/getch/filesystem/lvm/deps.rb +57 -0
  27. data/lib/getch/filesystem/lvm/device.rb +19 -0
  28. data/lib/getch/filesystem/lvm/encrypt.rb +15 -0
  29. data/lib/getch/filesystem/lvm/encrypt/config.rb +74 -0
  30. data/lib/getch/filesystem/lvm/encrypt/deps.rb +63 -0
  31. data/lib/getch/filesystem/lvm/encrypt/device.rb +22 -0
  32. data/lib/getch/filesystem/lvm/encrypt/format.rb +32 -0
  33. data/lib/getch/filesystem/lvm/encrypt/mount.rb +64 -0
  34. data/lib/getch/filesystem/lvm/encrypt/partition.rb +92 -0
  35. data/lib/getch/filesystem/lvm/format.rb +25 -0
  36. data/lib/getch/filesystem/lvm/mount.rb +62 -0
  37. data/lib/getch/filesystem/lvm/partition.rb +81 -0
  38. data/lib/getch/filesystem/zfs.rb +14 -0
  39. data/lib/getch/filesystem/zfs/config.rb +58 -0
  40. data/lib/getch/filesystem/zfs/deps.rb +90 -0
  41. data/lib/getch/filesystem/zfs/device.rb +19 -0
  42. data/lib/getch/filesystem/zfs/encrypt.rb +15 -0
  43. data/lib/getch/filesystem/zfs/encrypt/config.rb +67 -0
  44. data/lib/getch/filesystem/zfs/encrypt/deps.rb +94 -0
  45. data/lib/getch/filesystem/zfs/encrypt/device.rb +21 -0
  46. data/lib/getch/filesystem/zfs/encrypt/format.rb +22 -0
  47. data/lib/getch/filesystem/zfs/encrypt/mount.rb +67 -0
  48. data/lib/getch/filesystem/zfs/encrypt/partition.rb +151 -0
  49. data/lib/getch/filesystem/zfs/format.rb +20 -0
  50. data/lib/getch/filesystem/zfs/mount.rb +67 -0
  51. data/lib/getch/filesystem/zfs/partition.rb +147 -0
  52. data/lib/getch/gentoo.rb +3 -2
  53. data/lib/getch/gentoo/boot.rb +29 -25
  54. data/lib/getch/gentoo/chroot.rb +18 -14
  55. data/lib/getch/gentoo/config.rb +18 -9
  56. data/lib/getch/gentoo/sources.rb +45 -31
  57. data/lib/getch/gentoo/stage.rb +2 -2
  58. data/lib/getch/helpers.rb +24 -6
  59. data/lib/getch/log.rb +54 -0
  60. data/lib/getch/options.rb +16 -7
  61. data/lib/getch/version.rb +1 -1
  62. metadata +48 -5
  63. metadata.gz.sig +0 -0
  64. data/lib/getch/disk.rb +0 -77
  65. data/lib/getch/mount.rb +0 -73
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d947133437b5880e6880404a19c59e272ab01cf3c7acca7f4775d646c9a99597
4
- data.tar.gz: a910853539cd82f577ede94eab669ce323fc71a5986990f060dc54e96338f9b6
3
+ metadata.gz: 259461a4875fb46c062067c9663e211c206475aaaaa89d3066f85d1b3be2c19b
4
+ data.tar.gz: 3ab40d87e3f039ef840156cc81df8ee75e3f8f76c332ae4ba08335b04440625f
5
5
  SHA512:
6
- metadata.gz: c0e4a3c3ade0f4acc7793de34419248168bcce5211deaf48befbb85cf357519262157850b8c7524e178d9447e28b28c2bf5a89dcde0a1c887d46fd324656e96a
7
- data.tar.gz: cb41112758289ca2bf43fe433cb69177608b859c02a61cfa0af724a874a94f812d1231ee09e8ababc884c270160976be18c52b735ceca3d74ad694ee2eb11d50
6
+ metadata.gz: eef130ea5b78dcde7f2897d16f3f74293c16da487ca029c0d47c905489d5cd4d9f32d5bffeba30fe06ab13694370f99a380aceaec6da053dece11598eb938ba4
7
+ data.tar.gz: f9f4584abb87c4287ba81e16bb0274c483627a712916728fbcc9a4667a2d91f03e09a092bdf09400bd1f92318c67ddabdf4c20217eff1eeb64f2d8d0c97a1a02
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,33 @@
1
+ ## 0.1.0, release 2020-10-15
2
+ * Add the (Zeta) filesystem ZFS
3
+ * `emerge --depclean` to save space.
4
+ * Add a message when getch have finish, keep /mnt/gentoo if you need to add something.
5
+ * Use systemd-detect-virt to detect a Virtual Guest.
6
+
7
+ ## 0.0.9, release 2020-10-03
8
+ * Add encryption on ext4 and lvm (BIOS,UEFI)
9
+ * Correct KEYMAP="yes" with genkernel
10
+ * Renaming option keyboard with keymap
11
+ * GPG verification for ebuild
12
+
13
+ ## 0.0.8, release 2020-09-30
14
+ * Adding LVM via the option fs, `--fs lvm`.
15
+ * Systemd-boot use the value of PARTUUID without initramfs.
16
+ * Include lib logger.
17
+ * Enhance functions to call program system Emerge, Make, ...
18
+
19
+ ## 0.0.7, release 2020-09-22
20
+ * Correct fstab.
21
+ * Repair GRUB/fstab for BIOS system, add secure cmdline.
22
+ * Create a swap volume equal to the memory installed.
23
+ * Add vim and sudo
24
+
25
+ ## 0.0.6, release 2020-09-19
26
+ * Add support for QEMU guest with KVM and Virtio driver
27
+ * Kernel compilation, initialize a config file with `make localyesconfig`.
28
+ * More modular codes to start with encryption and other filesystems.
29
+ * Add the new option --verbose to display output of compilation, etc...
30
+
1
31
  ## 0.0.5, release 2020-09-17
2
32
  * Generate a hostname
3
33
  * Configure systemd-boot for UEFI system
data/README.md CHANGED
@@ -5,10 +5,11 @@ A CLI tool to install Gentoo.
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
6
  It also require a disk (only one for now) with a minimum of 20G.
7
7
 
8
- Filesystem supported by Getch are: (the list will evolve...)
9
- + ext4 with GRUB2 for BIOS based system and systemd-boot for UEFI systems.
8
+ BIOS system will use Grub2 and UEFI, systemd-boot. Filesystem supported by Getch are for now:
9
+ + ext4
10
+ + lvm
10
11
 
11
- I would also add disk encryption soon.
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/)
@@ -23,17 +24,41 @@ With `gem` installed:
23
24
 
24
25
  When you boot from an `iso`, you can install `ruby`, `getch` and correct your `PATH=` directly with the `bin/setup.sh`:
25
26
 
26
- # curl https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh | sh
27
+ # sh <(curl -L https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh)
27
28
  # source ~/.zshrc # or ~/.bashrc
28
29
 
29
30
  ## Usage
31
+ Just ensure than the script is run with a root account, not just sudo.
30
32
 
31
- $ getch -h
33
+ # getch -h
34
+
35
+ After an install by Getch, take a look on the [wiki](https://github.com/szorfein/getch/wiki).
32
36
 
33
37
  ## Examples
34
38
  For a french user:
35
39
 
36
- # getch --username ninja --zoneinfo "Europe/Paris" --language fr_FR --keyboard fr
40
+ # getch --zoneinfo "Europe/Paris" --language fr_FR --keymap fr
41
+
42
+ Install Gentoo on LVM:
43
+
44
+ # getch --format lvm --disk sda
45
+
46
+ Encrypt your disk with LVM with a french keymap
47
+
48
+ # getch --format lvm --encrypt --keymap fr
49
+
50
+ Encrypt with ext4 and create a home directory /home/ninja
51
+
52
+ # getch --format ext4 --encrypt --username ninja
53
+
54
+ ## Troubleshooting
55
+
56
+ #### LVM
57
+ 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`.
58
+
59
+ #### Encryption enable on BIOS with ext4
60
+ 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).
61
+ Also with GRUB, only a `us` keymap is working.
37
62
 
38
63
  ## Issues
39
64
  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:
@@ -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
@@ -37,19 +37,33 @@ search_ruby() {
37
37
  fi
38
38
  }
39
39
 
40
+ install_with_gem() {
41
+ gem install getch
42
+ getch -h
43
+ }
44
+
45
+ dll_test_version() {
46
+ echo "Downloading the test version..."
47
+ cd /tmp
48
+ [ -f ./getch.tar.gz ] && rm ./getch.tar.gz
49
+ [ -d ./getch-master ] && rm -rf ./getch-master
50
+
51
+ curl -s -L -o getch.tar.gz https://github.com/szorfein/getch/archive/master.tar.gz
52
+ tar xzf getch.tar.gz \
53
+ && cd $DIR \
54
+ && ruby -I lib bin/getch -h
55
+ }
56
+
40
57
  get_getch() {
41
58
  if hash gem 2>/dev/null ; then
42
- gem install getch
43
- getch -h
59
+ printf "Which version? [1] stable , [2] test (no recommended) " ; read -r
60
+ if echo "$REPLY" | grep -qP "2" ; then
61
+ dll_test_version
62
+ else
63
+ install_with_gem
64
+ fi
44
65
  else
45
- cd /tmp
46
- [ -f ./getch.tar.gz ] && rm ./getch.tar.gz
47
- [ -d ./getch-master ] && rm -rf ./getch-master
48
-
49
- curl -s -L -o getch.tar.gz https://github.com/szorfein/getch/archive/master.tar.gz
50
- tar xzf getch.tar.gz \
51
- && cd $DIR \
52
- && ruby -I lib bin/getch -h
66
+ dll_test_version
53
67
  fi
54
68
  }
55
69
 
@@ -58,10 +72,12 @@ set_shell() {
58
72
  [ -f ~/.zshrc ] && your_shell=~/.zshrc
59
73
 
60
74
  [ -f "$your_shell" ] && {
61
- if ! grep -q ".gem/ruby/[0-9.]*/bin" "$your_shell" ; then
75
+ if ! grep -q "ruby" "$your_shell" ; then
62
76
  echo "export PATH=\$PATH:$(ruby -e 'puts Gem.user_dir')/bin" >> "$your_shell"
63
77
  fi
64
- . "$your_shell"
78
+ if $(. "$your_shell") ; then
79
+ echo "Shell loaded"
80
+ fi
65
81
  }
66
82
  }
67
83
 
@@ -1,20 +1,23 @@
1
1
  require_relative 'getch/options'
2
- require_relative 'getch/disk'
3
2
  require_relative 'getch/states'
4
- require_relative 'getch/mount'
5
3
  require_relative 'getch/gentoo'
4
+ require_relative 'getch/filesystem'
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
- location: 'US/Eastern',
13
- keyboard: 'us',
13
+ zoneinfo: 'US/Eastern',
14
+ keymap: 'us',
14
15
  disk: 'sda',
15
16
  fs: 'ext4',
16
- username: nil
17
- }.freeze
17
+ username: nil,
18
+ encrypt: false,
19
+ verbose: false
20
+ }
18
21
 
19
22
  STATES = {
20
23
  :partition => false,
@@ -27,16 +30,34 @@ module Getch
27
30
  }
28
31
 
29
32
  MOUNTPOINT = "/mnt/gentoo".freeze
30
- #MOUNTPOINT = "/home/daggoth/lol".freeze
33
+ DEFAULT_FS = {
34
+ true => {
35
+ ext4: Getch::FileSystem::Ext4::Encrypt,
36
+ lvm: Getch::FileSystem::Lvm::Encrypt,
37
+ zfs: Getch::FileSystem::Zfs::Encrypt
38
+ },
39
+ false => {
40
+ ext4: Getch::FileSystem::Ext4,
41
+ lvm: Getch::FileSystem::Lvm,
42
+ zfs: Getch::FileSystem::Zfs,
43
+ }
44
+ }.freeze
45
+
46
+ def self.class_fs
47
+ encrypt = DEFAULT_OPTIONS[:encrypt]
48
+ fs = DEFAULT_OPTIONS[:fs].to_sym
49
+ DEFAULT_FS[encrypt][fs]
50
+ end
31
51
 
32
52
  def self.resume_options(opts)
33
53
  puts "\nBuild Gentoo with the following args:\n"
34
- puts "lang: #{opts.language}"
35
- puts "zoneinfo: #{opts.zoneinfo}"
36
- puts "keyboard: #{opts.keyboard}"
37
- puts "disk: #{opts.disk}"
38
- puts "fs: #{opts.fs}"
39
- puts "username: #{opts.username}"
54
+ puts "lang: #{DEFAULT_OPTIONS[:language]}"
55
+ puts "zoneinfo: #{DEFAULT_OPTIONS[:zoneinfo]}"
56
+ puts "keymap: #{DEFAULT_OPTIONS[:keymap]}"
57
+ puts "disk: #{DEFAULT_OPTIONS[:disk]}"
58
+ puts "fs: #{DEFAULT_OPTIONS[:fs]}"
59
+ puts "username: #{DEFAULT_OPTIONS[:username]}"
60
+ puts "encrypt: #{DEFAULT_OPTIONS[:encrypt]}"
40
61
  puts
41
62
  print "Continue? (n,y) "
42
63
  case gets.chomp
@@ -47,30 +68,21 @@ module Getch
47
68
  end
48
69
  end
49
70
 
50
- def self.format(disk, fs)
71
+ def self.format(disk, fs, user)
51
72
  return if STATES[:format] and STATES[:partition]
73
+ log = Log.new
52
74
  puts
53
75
  print "Partition and format disk #{disk}, this will erase all data, continue? (n,y) "
54
76
  case gets.chomp
55
77
  when /^y|^Y/
56
- disk = Getch::Disk.new(disk, fs)
57
- disk.cleaning
58
- disk.partition
59
- disk.format
78
+ log.info("Partition start")
79
+ class_fs::Partition.new
80
+ class_fs::Format.new
60
81
  else
61
82
  exit 1
62
83
  end
63
84
  end
64
85
 
65
- def self.mount(disk, user)
66
- return if STATES[:mount]
67
- mount = Getch::Mount.new(disk, user)
68
- mount.swap
69
- mount.root
70
- mount.boot
71
- mount.home
72
- end
73
-
74
86
  def self.init_gentoo(options)
75
87
  gentoo = Getch::Gentoo
76
88
  gentoo.stage3
@@ -82,10 +94,11 @@ module Getch
82
94
 
83
95
  def self.main(argv)
84
96
  options = Options.new(argv)
97
+ DEFAULT_OPTIONS.freeze
85
98
  resume_options(options)
86
- Getch::States.new() # Update States
87
- format(options.disk, options.fs)
88
- mount(options.disk, options.username)
99
+ Getch::States.new # Update States
100
+ format(options.disk, options.fs, options.username)
101
+ class_fs::Mount.new.run
89
102
  init_gentoo(options)
90
103
  end
91
104
  end
@@ -0,0 +1,163 @@
1
+ require 'open3'
2
+
3
+ module Getch
4
+ class Command
5
+ def initialize(cmd)
6
+ @cmd = cmd
7
+ @block_size = 1024
8
+ @log = Getch::Log.new
9
+ end
10
+
11
+ def run!
12
+ @log.info "Running command: " + @cmd.gsub(/\"/, '')
13
+
14
+ Open3.popen3(@cmd) do |stdin, stdout, stderr, wait_thr|
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
23
+
24
+ begin
25
+ files = [stdout, stderr]
26
+
27
+ until all_eof(files) do
28
+ ready = IO.select(files)
29
+
30
+ if ready
31
+ readable = ready[0]
32
+ # writable = ready[1]
33
+ # exceptions = ready[2]
34
+
35
+ display_lines(readable)
36
+ end
37
+ end
38
+ rescue IOError => e
39
+ puts "IOError: #{e}"
40
+ end
41
+
42
+ unless code.success?
43
+ @log.fatal "Running #{@cmd}"
44
+ exit 1
45
+ end
46
+
47
+ @log.debug "Done - #{@cmd} - #{code}"
48
+ end
49
+ end
50
+
51
+ private
52
+
53
+ # Returns true if all files are EOF
54
+ def all_eof(files)
55
+ files.find { |f| !f.eof }.nil?
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
155
+ end
156
+
157
+ class Chroot < Command
158
+ def initialize(cmd)
159
+ super
160
+ @cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile; #{cmd}\""
161
+ end
162
+ end
163
+ end