getch 0.0.1 → 0.0.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/.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
|