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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ab4a85424380fa152f9d5e764799ab85f44c2bcc09a74f0e8d8ba80278f7b880
4
- data.tar.gz: 586e590f3a66d81382193c4e1d0c8735165c39b6d4ef6eed8846aa620fd03a8b
3
+ metadata.gz: 551c234f0650bb73f209c06becaedefe429bb5c14b6c65debc49c4f4f60b86f7
4
+ data.tar.gz: 5f1259b54738dfd0e43787a509c7c327888698c8af43be498bec0f86646ad0bf
5
5
  SHA512:
6
- metadata.gz: 2262f40341744f5d9128ae1372c48c3f1d762054cc600ca202f406e8b6d4c4d2912be157d0af08f61bc039b894e7c3825ff87a7a8ef2070e2411eb21f747aba0
7
- data.tar.gz: 854f785d9cee4e03b1e724881483ae3f9f69388ee0079dcf1c2ed057eb0b98d81236948b170fe6cc1b985f991f8ac13316c48417a943f68f67c3a20a9c9dbbaf
6
+ metadata.gz: de7fcca94c7461638bdf0c9ef691d8299eb52b090394c605e819473dada25e2a15125ce67bd7bc3aca27276b6fad1d422634ffd34ee3f04e69d2975b88b632c2
7
+ data.tar.gz: 3115a72e891651b61020c42c2ccf0cd3d1134192116df7c9bd9baad5b26d5e98db233ae63c8d627e7655f40b69336c35d355fc4d41a2aabc9525e8fbfffd00dc
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ *.swp
data/README.md CHANGED
@@ -1,6 +1,24 @@
1
1
  # Getch
2
- A script to install Gentoo.
2
+ A CLI tool to install Gentoo.
3
3
 
4
- # Install
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
@@ -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
@@ -2,4 +2,8 @@
2
2
 
3
3
  require 'getch'
4
4
 
5
- Getch::main(ARGV)
5
+ def main(argv)
6
+ Getch::main(argv)
7
+ end
8
+
9
+ main(ARGV)
@@ -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
- cd /tmp
43
- [ -f ./getch.tar.gz ] && rm ./getch.tar.gz
44
- [ -d ./getch-master ] && rm -rf ./getch-master
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
- curl -s -L -o getch.tar.gz https://github.com/szorfein/getch/archive/master.tar.gz
47
- tar xzf getch.tar.gz
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
- cd $DIR \
54
- && ruby -I lib bin/getch
70
+ set_shell
71
+ get_getch
55
72
  }
56
73
 
57
74
  main "$@"
@@ -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 script to install Gentoo"
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
@@ -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
- puts "Starting..."
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
@@ -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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Getch
2
- VERSION = '0.0.1'.freeze
2
+ VERSION = '0.0.2'.freeze
3
3
  end
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.1
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-10 00:00:00.000000000 Z
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 script to install Gentoo
81
+ summary: A CLI tool to install Gentoo
77
82
  test_files: []
metadata.gz.sig CHANGED
Binary file