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 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