getch 0.0.1 → 0.0.2
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/.gitignore +2 -0
- data/README.md +20 -2
- data/Rakefile +21 -0
- data/bin/getch +5 -1
- data/bin/setup.sh +27 -10
- data/getch.gemspec +1 -2
- data/lib/getch.rb +58 -1
- data/lib/getch/disk.rb +83 -0
- data/lib/getch/options.rb +46 -0
- data/lib/getch/states.rb +36 -0
- data/lib/getch/version.rb +1 -1
- metadata +8 -3
- 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: 551c234f0650bb73f209c06becaedefe429bb5c14b6c65debc49c4f4f60b86f7
|
4
|
+
data.tar.gz: 5f1259b54738dfd0e43787a509c7c327888698c8af43be498bec0f86646ad0bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de7fcca94c7461638bdf0c9ef691d8299eb52b090394c605e819473dada25e2a15125ce67bd7bc3aca27276b6fad1d422634ffd34ee3f04e69d2975b88b632c2
|
7
|
+
data.tar.gz: 3115a72e891651b61020c42c2ccf0cd3d1134192116df7c9bd9baad5b26d5e98db233ae63c8d627e7655f40b69336c35d355fc4d41a2aabc9525e8fbfffd00dc
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/.gitignore
ADDED
data/README.md
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
# Getch
|
2
|
-
A
|
2
|
+
A CLI tool to install Gentoo.
|
3
3
|
|
4
|
-
|
4
|
+
## Install
|
5
|
+
Getch is cryptographically signed, so add my public key (if you haven’t already) as a trusted certificate.
|
6
|
+
With `gem` installed:
|
7
|
+
|
8
|
+
$ gem cert --add <(curl -Ls https://raw.githubusercontent.com/szorfein/getch/master/certs/szorfein.pem)
|
9
|
+
|
10
|
+
$ gem install getch -P HighSecurity
|
11
|
+
|
12
|
+
When you boot from an `iso`, you can install `ruby`, `getch` and correct your `PATH=` directly with the `bin/setup.sh`:
|
5
13
|
|
6
14
|
# curl https://raw.githubusercontent.com/szorfein/getch/master/bin/setup.sh | sh
|
15
|
+
# source ~/.zshrc # or ~/.bashrc
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
$ getch -h
|
20
|
+
|
21
|
+
## Examples
|
22
|
+
For a french user:
|
23
|
+
|
24
|
+
# getch --username ninja --zoneinfo Europe/Paris --language fr_FR --keyboard fr
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# https://github.com/seattlerb/minitest#running-your-tests-
|
2
|
+
require "rake/testtask"
|
3
|
+
require File.dirname(__FILE__) + "/lib/getch/version"
|
4
|
+
|
5
|
+
Rake::TestTask.new(:test) do |t|
|
6
|
+
t.libs << "test"
|
7
|
+
t.libs << "lib"
|
8
|
+
t.test_files = FileList["test/test_*.rb"]
|
9
|
+
end
|
10
|
+
|
11
|
+
# Usage: rake gem:build
|
12
|
+
namespace :gem do
|
13
|
+
desc "build the gem"
|
14
|
+
task :build do
|
15
|
+
Dir["getch*.gem"].each {|f| File.unlink(f) }
|
16
|
+
system("gem build getch.gemspec")
|
17
|
+
system("gem install getch-#{Getch::VERSION}.gem -P HighSecurity")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
task :default => :test
|
data/bin/getch
CHANGED
data/bin/setup.sh
CHANGED
@@ -26,8 +26,7 @@ search_ruby() {
|
|
26
26
|
else
|
27
27
|
echo "Install ruby"
|
28
28
|
if hash pacman 2>/dev/null ; then
|
29
|
-
pacman -Syy
|
30
|
-
pacman -S --needed ruby
|
29
|
+
pacman -Syy libyaml ruby ruby-irb ruby-reline rubygems
|
31
30
|
elif hash emerge 2>/dev/null ; then
|
32
31
|
emerge -av dev-lang/ruby
|
33
32
|
elif hash apt-get 2>/dev/null ; then
|
@@ -39,19 +38,37 @@ search_ruby() {
|
|
39
38
|
}
|
40
39
|
|
41
40
|
get_getch() {
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
if hash gem 2>/dev/null ; then
|
42
|
+
gem install getch
|
43
|
+
getch -h
|
44
|
+
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
|
53
|
+
fi
|
54
|
+
}
|
45
55
|
|
46
|
-
|
47
|
-
|
56
|
+
set_shell() {
|
57
|
+
your_shell=~/.bashrc
|
58
|
+
[ -f ~/.zshrc ] && your_shell=~/.zshrc
|
59
|
+
|
60
|
+
[ -f "$your_shell" ] && {
|
61
|
+
if ! grep -q ".gem/ruby/[0-9.]*/bin" "$your_shell" ; then
|
62
|
+
echo "export PATH=\$PATH:$(ruby -e 'puts Gem.user_dir')/bin" >> "$your_shell"
|
63
|
+
fi
|
64
|
+
. "$your_shell"
|
65
|
+
}
|
48
66
|
}
|
49
67
|
|
50
68
|
main() {
|
51
|
-
get_getch
|
52
69
|
search_ruby
|
53
|
-
|
54
|
-
|
70
|
+
set_shell
|
71
|
+
get_getch
|
55
72
|
}
|
56
73
|
|
57
74
|
main "$@"
|
data/getch.gemspec
CHANGED
@@ -3,7 +3,7 @@ require File.dirname(__FILE__) + "/lib/getch/version"
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "getch"
|
5
5
|
s.version = Getch::VERSION
|
6
|
-
s.summary = "A
|
6
|
+
s.summary = "A CLI tool to install Gentoo"
|
7
7
|
s.authors = ["szorfein"]
|
8
8
|
s.email = ["szorfein@protonmail.com"]
|
9
9
|
s.homepage = 'https://github.com/szorfein/getch'
|
@@ -15,7 +15,6 @@ Gem::Specification.new do |s|
|
|
15
15
|
|
16
16
|
s.executables = [ 'getch' ]
|
17
17
|
|
18
|
-
|
19
18
|
s.cert_chain = ['certs/szorfein.pem']
|
20
19
|
s.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
|
21
20
|
end
|
data/lib/getch.rb
CHANGED
@@ -1,5 +1,62 @@
|
|
1
|
+
require_relative 'getch/options'
|
2
|
+
require_relative 'getch/disk'
|
3
|
+
require_relative 'getch/states'
|
4
|
+
|
1
5
|
module Getch
|
6
|
+
|
7
|
+
DEFAULT_OPTIONS = {
|
8
|
+
language: 'en_US',
|
9
|
+
location: 'US/Eastern',
|
10
|
+
keyboard: 'us',
|
11
|
+
disk: 'sda',
|
12
|
+
fs: 'ext4',
|
13
|
+
username: nil
|
14
|
+
}
|
15
|
+
|
16
|
+
STATES = {
|
17
|
+
:partition => false,
|
18
|
+
:format => false,
|
19
|
+
:mount => false,
|
20
|
+
:gentoo_base => false
|
21
|
+
}
|
22
|
+
|
23
|
+
def self.resume_options(opts)
|
24
|
+
puts "\nBuild Gentoo with the following args:\n"
|
25
|
+
puts "lang: #{opts.language}"
|
26
|
+
puts "zoneinfo: #{opts.zoneinfo}"
|
27
|
+
puts "keyboard: #{opts.keyboard}"
|
28
|
+
puts "disk: #{opts.disk}"
|
29
|
+
puts "fs: #{opts.fs}"
|
30
|
+
puts "username: #{opts.username}"
|
31
|
+
puts
|
32
|
+
print "Continue? (n,y) "
|
33
|
+
case gets.chomp
|
34
|
+
when /^y|^Y/
|
35
|
+
return
|
36
|
+
else
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.format(disk, fs)
|
42
|
+
return if STATES[:format] and STATES[:partition]
|
43
|
+
puts
|
44
|
+
print "Partition and format disk #{disk}, this will erase all data, continue? (n,y) "
|
45
|
+
case gets.chomp
|
46
|
+
when /^y|^Y/
|
47
|
+
disk = Getch::Disk.new(disk, fs)
|
48
|
+
disk.cleaning
|
49
|
+
disk.partition
|
50
|
+
disk.format
|
51
|
+
else
|
52
|
+
exit 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
2
56
|
def self.main(argv)
|
3
|
-
|
57
|
+
options = Options.new(DEFAULT_OPTIONS, argv)
|
58
|
+
resume_options(options)
|
59
|
+
Getch::States.new() # Update States
|
60
|
+
format(options.disk, options.fs)
|
4
61
|
end
|
5
62
|
end
|
data/lib/getch/disk.rb
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
module Getch
|
2
|
+
class Disk
|
3
|
+
def initialize(disk, fs)
|
4
|
+
@hdd = disk
|
5
|
+
@fs = fs
|
6
|
+
@state = Getch::States.new()
|
7
|
+
end
|
8
|
+
|
9
|
+
def efi?
|
10
|
+
Dir.exist? '/sys/firmware/efi/efivars'
|
11
|
+
end
|
12
|
+
|
13
|
+
# https://wiki.archlinux.org/index.php/Securely_wipe_disk
|
14
|
+
def cleaning
|
15
|
+
return if STATES[:partition ]
|
16
|
+
puts
|
17
|
+
print "Cleaning data on #{@hdd}, can be long, avoid this on Flash Memory (SSD,USB,...) ? (n,y) "
|
18
|
+
case gets.chomp
|
19
|
+
when /^y|^Y/
|
20
|
+
system("dd if=/dev/urandom of=/dev/#{@hdd} bs=4M status=progress")
|
21
|
+
else
|
22
|
+
return
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def partition
|
27
|
+
return if STATES[:partition]
|
28
|
+
system("wipefs -a /dev/#{@hdd}")
|
29
|
+
system("sgdisk --zap-all /dev/#{@hdd}")
|
30
|
+
if efi? then
|
31
|
+
puts "Partition disk #{@hdd} for an EFI system"
|
32
|
+
partition_efi
|
33
|
+
else
|
34
|
+
puts "Partition disk #{@hdd} for a Bios system"
|
35
|
+
partition_bios
|
36
|
+
end
|
37
|
+
@state.partition
|
38
|
+
end
|
39
|
+
|
40
|
+
def format
|
41
|
+
return if STATES[:format]
|
42
|
+
puts "Format #{@hdd} with #{@fs}"
|
43
|
+
if efi? then
|
44
|
+
system("mkfs.vfat -F32 /dev/#{@hdd}1")
|
45
|
+
system("mkswap /dev/#{@hdd}2")
|
46
|
+
system("swapon /dev/#{@hdd}2")
|
47
|
+
system("mkfs.ext4 /dev/#{@hdd}3")
|
48
|
+
system("mkfs.ext4 /dev/#{@hdd}4")
|
49
|
+
else
|
50
|
+
system("mkswap /dev/#{@hdd}2")
|
51
|
+
system("swapon /dev/#{@hdd}2")
|
52
|
+
system("mkfs.ext4 /dev/#{@hdd}3")
|
53
|
+
system("mkfs.ext4 /dev/#{@hdd}4")
|
54
|
+
end
|
55
|
+
@state.format
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
# follow https://wiki.archlinux.org/index.php/Partitioning
|
61
|
+
def partition_efi
|
62
|
+
# /boot/efi - EFI system partition - 260MB
|
63
|
+
# swap - Linux Swap - size of the ram
|
64
|
+
# / - Root
|
65
|
+
# /home - Home
|
66
|
+
system("sgdisk -n1:1M:+260M -t1:EF00 /dev/#{@hdd}") # boot EFI
|
67
|
+
system("sgdisk -n2:0:+2G -t2:8200 /dev/#{@hdd}") # swap
|
68
|
+
system("sgdisk -n3:0:+15G -t3:8304 /dev/#{@hdd}") # root
|
69
|
+
system("sgdisk -n4:0:0 -t3:8302 /dev/#{@hdd}") # home
|
70
|
+
end
|
71
|
+
|
72
|
+
def partition_bios
|
73
|
+
# None - Bios Boot Partition - 1MiB
|
74
|
+
# swap - Linux Swap - size of the ram
|
75
|
+
# / - Root
|
76
|
+
# /home - Home
|
77
|
+
system("sgdisk -n1:1MiB:+1MiB -t1:EF02 /dev/#{@hdd}") # Bios boot
|
78
|
+
system("sgdisk -n2:0:+2G -t2:8200 /dev/#{@hdd}") # swap
|
79
|
+
system("sgdisk -n3:0:+15G -t3:8304 /dev/#{@hdd}") # root
|
80
|
+
system("sgdisk -n4:0:0 -t3:8302 /dev/#{@hdd}") # home
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Getch
|
4
|
+
class Options
|
5
|
+
attr_reader :language, :zoneinfo, :keyboard, :disk, :fs, :username
|
6
|
+
|
7
|
+
def initialize(default, argv)
|
8
|
+
@language = default[:language]
|
9
|
+
@zoneinfo = default[:location]
|
10
|
+
@keyboard = default[:keyboard]
|
11
|
+
@disk = default[:disk]
|
12
|
+
@fs = default[:fs]
|
13
|
+
@username = default[:username]
|
14
|
+
parse(argv)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def parse(argv)
|
20
|
+
OptionParser.new do |opts|
|
21
|
+
opts.on("-l", "--language LANG", "Default is en_US") do |lang|
|
22
|
+
@language = lang
|
23
|
+
end
|
24
|
+
opts.on("-z", "--zoneinfo ZONE", "Default is US/Eastern") do |zone|
|
25
|
+
@zoneinfo = zone
|
26
|
+
end
|
27
|
+
opts.on("-k", "--keyboard KEY", "Default is us") do |key|
|
28
|
+
@keyboard = key
|
29
|
+
end
|
30
|
+
opts.on("-d", "--disk DISK", "Disk where install Gentoo (sda,sdb)") do |disk|
|
31
|
+
@disk = disk
|
32
|
+
end
|
33
|
+
opts.on("-f", "--format FS", "Default use ext4") do |fs|
|
34
|
+
@fs = fs
|
35
|
+
end
|
36
|
+
opts.on("-u", "--username USERNAME", "Initialize /home/username") do |user|
|
37
|
+
@username = user
|
38
|
+
end
|
39
|
+
opts.on("-h", "--help", "Display this") do
|
40
|
+
puts opts
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
end.parse!
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/getch/states.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Getch
|
4
|
+
class States
|
5
|
+
def initialize
|
6
|
+
@file = File.join('/tmp/install_gentoo.yaml')
|
7
|
+
load_state
|
8
|
+
end
|
9
|
+
|
10
|
+
def partition
|
11
|
+
STATES[:partition] = true
|
12
|
+
save
|
13
|
+
end
|
14
|
+
|
15
|
+
def format
|
16
|
+
STATES[:format] = true
|
17
|
+
save
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def save
|
23
|
+
File.open(@file, 'w') { |f| YAML::dump(STATES, f) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def load_state()
|
27
|
+
if File.exists? @file
|
28
|
+
state_file = YAML.load_file(@file)
|
29
|
+
STATES.merge!(state_file)
|
30
|
+
else
|
31
|
+
save
|
32
|
+
STDERR.puts "Initialize states"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/getch/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: getch
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- szorfein
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
J/zT/q2Ac7BWpSLbv6p9lChBiEnD9j24x463LR5QQjDNS5SsjzRQfFuprsa9Nqf2
|
36
36
|
Tw==
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2020-09-
|
38
|
+
date: 2020-09-12 00:00:00.000000000 Z
|
39
39
|
dependencies: []
|
40
40
|
description:
|
41
41
|
email:
|
@@ -45,11 +45,16 @@ executables:
|
|
45
45
|
extensions: []
|
46
46
|
extra_rdoc_files: []
|
47
47
|
files:
|
48
|
+
- ".gitignore"
|
48
49
|
- README.md
|
50
|
+
- Rakefile
|
49
51
|
- bin/getch
|
50
52
|
- bin/setup.sh
|
51
53
|
- getch.gemspec
|
52
54
|
- lib/getch.rb
|
55
|
+
- lib/getch/disk.rb
|
56
|
+
- lib/getch/options.rb
|
57
|
+
- lib/getch/states.rb
|
53
58
|
- lib/getch/version.rb
|
54
59
|
homepage: https://github.com/szorfein/getch
|
55
60
|
licenses:
|
@@ -73,5 +78,5 @@ requirements: []
|
|
73
78
|
rubygems_version: 3.1.3
|
74
79
|
signing_key:
|
75
80
|
specification_version: 4
|
76
|
-
summary: A
|
81
|
+
summary: A CLI tool to install Gentoo
|
77
82
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|