getch 0.1.9 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +35 -29
  4. data/bin/getch +8 -6
  5. data/lib/clean.rb +149 -0
  6. data/lib/cryptsetup.rb +132 -0
  7. data/lib/devs.rb +199 -0
  8. data/lib/dracut/encrypt.rb +36 -0
  9. data/lib/dracut/hybrid.rb +15 -0
  10. data/lib/dracut/lvm.rb +14 -0
  11. data/lib/dracut/minimal.rb +11 -0
  12. data/lib/dracut/root.rb +45 -0
  13. data/lib/dracut/zfs.rb +35 -0
  14. data/lib/dracut.rb +11 -0
  15. data/lib/fstab/encrypt.rb +44 -0
  16. data/lib/fstab/hybrid.rb +34 -0
  17. data/lib/fstab/lvm.rb +25 -0
  18. data/lib/fstab/minimal.rb +6 -0
  19. data/lib/fstab/root.rb +93 -0
  20. data/lib/fstab/zfs.rb +23 -0
  21. data/lib/fstab.rb +11 -0
  22. data/lib/getch/assembly.rb +150 -0
  23. data/lib/getch/command.rb +88 -128
  24. data/lib/getch/config/account.rb +39 -0
  25. data/lib/getch/config/dhcp.rb +104 -0
  26. data/lib/getch/config/grub.rb +42 -0
  27. data/lib/getch/config/iwd.rb +60 -0
  28. data/lib/getch/config/keymap.rb +78 -0
  29. data/lib/getch/config/locale.rb +96 -0
  30. data/lib/getch/config/portage.rb +90 -0
  31. data/lib/getch/config/pre_network.rb +37 -0
  32. data/lib/getch/config/timezone.rb +52 -0
  33. data/lib/getch/config/void.rb +0 -36
  34. data/lib/getch/config.rb +16 -37
  35. data/lib/getch/device.rb +67 -0
  36. data/lib/getch/filesystem/ext4/encrypt/config.rb +9 -71
  37. data/lib/getch/filesystem/ext4/encrypt/deps.rb +15 -25
  38. data/lib/getch/filesystem/ext4/encrypt/device.rb +11 -5
  39. data/lib/getch/filesystem/ext4/encrypt/format.rb +6 -15
  40. data/lib/getch/filesystem/ext4/encrypt/mount.rb +7 -11
  41. data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -76
  42. data/lib/getch/filesystem/ext4/encrypt/void.rb +0 -38
  43. data/lib/getch/filesystem/ext4/encrypt.rb +2 -1
  44. data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
  45. data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
  46. data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
  47. data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
  48. data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
  49. data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
  50. data/lib/getch/filesystem/{lvm/encrypt → ext4/hybrid}/void.rb +0 -39
  51. data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
  52. data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
  53. data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
  54. data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
  55. data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
  56. data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
  57. data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
  58. data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +6 -4
  59. data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
  60. data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +3 -1
  61. data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
  62. data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
  63. data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
  64. data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
  65. data/lib/getch/filesystem/ext4/minimal.rb +19 -0
  66. data/lib/getch/filesystem/ext4.rb +7 -7
  67. data/lib/getch/filesystem/zfs/encrypt/config.rb +10 -39
  68. data/lib/getch/filesystem/zfs/encrypt/deps.rb +4 -55
  69. data/lib/getch/filesystem/zfs/encrypt/device.rb +7 -51
  70. data/lib/getch/filesystem/zfs/encrypt/format.rb +6 -90
  71. data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -35
  72. data/lib/getch/filesystem/zfs/encrypt/partition.rb +6 -54
  73. data/lib/getch/filesystem/zfs/encrypt.rb +2 -1
  74. data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
  75. data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
  76. data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
  77. data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
  78. data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
  79. data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
  80. data/lib/getch/filesystem/zfs/minimal.rb +19 -0
  81. data/lib/getch/filesystem/zfs.rb +1 -7
  82. data/lib/getch/filesystem.rb +0 -6
  83. data/lib/getch/gentoo/bootloader.rb +23 -44
  84. data/lib/getch/gentoo/finalize.rb +25 -0
  85. data/lib/getch/gentoo/post_config.rb +75 -0
  86. data/lib/getch/gentoo/pre_config.rb +37 -0
  87. data/lib/getch/gentoo/services.rb +18 -0
  88. data/lib/getch/gentoo/sources.rb +39 -33
  89. data/lib/getch/gentoo/tarball.rb +91 -0
  90. data/lib/getch/gentoo/terraform.rb +34 -0
  91. data/lib/getch/gentoo/update.rb +54 -0
  92. data/lib/getch/gentoo/use.rb +9 -6
  93. data/lib/getch/gentoo/use_flag.rb +17 -20
  94. data/lib/getch/gentoo.rb +9 -75
  95. data/lib/getch/guard.rb +2 -2
  96. data/lib/getch/helpers.rb +63 -115
  97. data/lib/getch/log.rb +87 -25
  98. data/lib/getch/options.rb +41 -11
  99. data/lib/getch/states.rb +28 -8
  100. data/lib/getch/tree.rb +56 -0
  101. data/lib/getch/version.rb +1 -1
  102. data/lib/getch/void/bootloader.rb +18 -0
  103. data/lib/getch/void/finalize.rb +31 -0
  104. data/lib/getch/void/post_config.rb +19 -0
  105. data/lib/getch/void/pre_config.rb +18 -0
  106. data/lib/getch/void/services.rb +18 -0
  107. data/lib/getch/void/{stage.rb → tarball.rb} +34 -14
  108. data/lib/getch/void/terraform.rb +28 -0
  109. data/lib/getch/void/update.rb +33 -0
  110. data/lib/getch/void.rb +9 -59
  111. data/lib/getch.rb +58 -90
  112. data/lib/luks.rb +239 -0
  113. data/lib/lvm2.rb +112 -0
  114. data/lib/mkfs/zfs.rb +167 -0
  115. data/lib/mkfs.rb +140 -0
  116. data/lib/mountfs.rb +154 -0
  117. data/lib/nito.rb +131 -0
  118. data/lib/sgdisk.rb +160 -0
  119. data.tar.gz.sig +0 -0
  120. metadata +83 -47
  121. metadata.gz.sig +0 -0
  122. data/lib/getch/config/gentoo.rb +0 -58
  123. data/lib/getch/filesystem/clean.rb +0 -58
  124. data/lib/getch/filesystem/device.rb +0 -63
  125. data/lib/getch/filesystem/ext4/config.rb +0 -62
  126. data/lib/getch/filesystem/ext4/deps.rb +0 -24
  127. data/lib/getch/filesystem/ext4/format.rb +0 -31
  128. data/lib/getch/filesystem/ext4/mount.rb +0 -26
  129. data/lib/getch/filesystem/ext4/partition.rb +0 -55
  130. data/lib/getch/filesystem/ext4/void.rb +0 -44
  131. data/lib/getch/filesystem/lvm/config.rb +0 -44
  132. data/lib/getch/filesystem/lvm/deps.rb +0 -44
  133. data/lib/getch/filesystem/lvm/device.rb +0 -45
  134. data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -74
  135. data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -49
  136. data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -48
  137. data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -35
  138. data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -27
  139. data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -84
  140. data/lib/getch/filesystem/lvm/encrypt.rb +0 -18
  141. data/lib/getch/filesystem/lvm/format.rb +0 -32
  142. data/lib/getch/filesystem/lvm/mount.rb +0 -26
  143. data/lib/getch/filesystem/lvm/partition.rb +0 -72
  144. data/lib/getch/filesystem/lvm/void.rb +0 -46
  145. data/lib/getch/filesystem/mount.rb +0 -63
  146. data/lib/getch/filesystem/partition.rb +0 -85
  147. data/lib/getch/filesystem/zfs/config.rb +0 -43
  148. data/lib/getch/filesystem/zfs/deps.rb +0 -67
  149. data/lib/getch/filesystem/zfs/device.rb +0 -66
  150. data/lib/getch/filesystem/zfs/encrypt/void.rb +0 -97
  151. data/lib/getch/filesystem/zfs/format.rb +0 -117
  152. data/lib/getch/filesystem/zfs/mount.rb +0 -47
  153. data/lib/getch/filesystem/zfs/partition.rb +0 -69
  154. data/lib/getch/filesystem/zfs/void.rb +0 -81
  155. data/lib/getch/gentoo/boot.rb +0 -64
  156. data/lib/getch/gentoo/chroot.rb +0 -75
  157. data/lib/getch/gentoo/config.rb +0 -167
  158. data/lib/getch/gentoo/stage.rb +0 -73
  159. data/lib/getch/void/boot.rb +0 -84
  160. data/lib/getch/void/chroot.rb +0 -56
  161. data/lib/getch/void/config.rb +0 -90
data/lib/getch/log.rb CHANGED
@@ -4,54 +4,116 @@ require 'logger'
4
4
 
5
5
  module Getch
6
6
  class Log
7
+
8
+ WHITE = "\033[37m"
9
+ CYAN = "\033[36m"
10
+ MAGENTA = "\033[35m"
11
+ BLUE = "\033[34m"
12
+ YELLOW = "\033[33m"
13
+ GREEN = "\033[32m"
14
+ RED = "\033[31m"
15
+ BLACK = "\033[30m"
16
+ BOLD = "\033[1m"
17
+ CLEAR = "\033[0m"
18
+
7
19
  def initialize(verbose = false)
8
20
  @log_file = '/tmp/log_install.txt'
9
21
  @verbose = verbose
10
- check_file
11
- init_log
12
- init_log_text
22
+ init
13
23
  end
14
24
 
25
+ # TODO remove length
15
26
  def info(msg)
16
- @logger.info(msg)
17
- @logger_text.info(msg)
27
+ tab = msg.match("\n") ? '' : add_tab(msg)
28
+ l = msg.length
29
+ @info.info "#{GREEN}#{BOLD} >>> #{CLEAR}#{l} #{WHITE}#{msg}#{CLEAR}" + tab
30
+ @save.info(msg)
31
+ end
32
+
33
+ def result_ok
34
+ @result.info "#{GREEN}[ #{WHITE}ok#{GREEN} ]#{CLEAR}\n"
18
35
  end
19
36
 
20
37
  def error(msg)
21
- @logger.error(msg)
22
- @logger_text.error(msg)
38
+ @error.error "#{BOLD} > #{CLEAR}#{WHITE}#{msg}#{CLEAR}"
39
+ @save.error(msg)
23
40
  end
24
41
 
25
42
  def debug(msg)
26
- @logger.debug(msg)
27
- @logger_text.debug(msg)
43
+ @debug.debug "#{BOLD} > #{CLEAR}#{WHITE}#{msg}#{CLEAR}"
44
+ @save.debug(msg)
28
45
  end
29
46
 
30
47
  def fatal(msg)
31
- @logger.fatal(msg)
32
- @logger_text.fatal(msg)
48
+ @fatal.fatal "#{BOLD} > #{CLEAR}#{WHITE}#{msg}#{CLEAR}\n"
49
+ @save.fatal(msg)
50
+ exit 1
33
51
  end
34
52
 
35
- private
36
-
37
- def check_file
38
- puts "Creating log at #{@log_file}" unless File.exist? @log_file
39
- end
53
+ protected
40
54
 
41
55
  def init_log
42
- @logger = Logger.new($stdout)
43
- @logger.level = @verbose ? Logger::DEBUG : Logger::INFO
44
- @logger.formatter = proc { |severity, _, _, msg|
45
- "#{severity}, #{msg}\n"
56
+ @info = Logger.new $stdout
57
+ @info.level = @verbose ? Logger::DEBUG : Logger::INFO
58
+ @info.formatter = proc { |severity, _, _, msg|
59
+ "#{BOLD}#{severity[0]}#{CLEAR}#{msg}"
46
60
  }
47
61
  end
48
62
 
49
- def init_log_text
50
- @logger_text = Logger.new(@log_file, 1)
51
- @logger_text.level = Logger::DEBUG
52
- @logger_text.formatter = proc { |severity, datetime, _, msg|
53
- "#{severity}, #{datetime}, #{msg}\n"
63
+ def init_res
64
+ @result = Logger.new $stdout, level: 'INFO'
65
+ @result.formatter = proc do | _, _, _, msg | msg end
66
+ end
67
+
68
+ def init_debug
69
+ @debug = Logger.new $stdout
70
+ @debug.formatter = proc do | severity, _, _, msg |
71
+ "\n#{BLUE}#{BOLD}#{severity[0]}#{CLEAR} [#{Process.pid}]#{CLEAR}#{msg}"
72
+ end
73
+ end
74
+
75
+ def init_error
76
+ @error = Logger.new $stdout
77
+ @error.formatter = proc do | severity, _, _, msg |
78
+ "#{RED}#{BOLD}#{severity[0]}#{CLEAR}#{msg}\t"
79
+ end
80
+ end
81
+
82
+ def init_fatal
83
+ @fatal = Logger.new $stdout
84
+ @fatal.formatter = proc do | severity, _, _, msg |
85
+ "\n#{YELLOW}#{BOLD}#{severity[0]}#{CLEAR}#{msg}"
86
+ end
87
+ end
88
+
89
+ def init_save
90
+ File.exist? @log_file || puts("Creating log at #{@log_file}")
91
+ @save = Logger.new(@log_file, 1)
92
+ @save.level = Logger::DEBUG
93
+ @save.formatter = proc { |severity, datetime, _, msg|
94
+ "#{severity}, #{datetime}, #{msg}\n"
54
95
  }
55
96
  end
97
+
98
+ private
99
+
100
+ def init
101
+ init_log
102
+ init_res
103
+ init_error
104
+ init_debug
105
+ init_fatal
106
+ init_save
107
+ end
108
+
109
+ def add_tab(text)
110
+ case text.length
111
+ when 39..47 then "\t\t"
112
+ when 31..38 then "\t\t\t"
113
+ when 23..30 then "\t\t\t\t"
114
+ when 16..22 then "\t\t\t\t\t"
115
+ else "\t"
116
+ end
117
+ end
56
118
  end
57
119
  end
data/lib/getch/options.rb CHANGED
@@ -1,9 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'optparse'
4
+ require 'nito'
4
5
 
5
6
  module Getch
6
7
  class Options
8
+ include NiTo
9
+
7
10
  def initialize(argv)
8
11
  parse(argv)
9
12
  end
@@ -12,52 +15,71 @@ module Getch
12
15
 
13
16
  def parse(argv)
14
17
  OptionParser.new do |opts|
15
- opts.version = VERSION
18
+ opts.banner = 'Usage: getch [OPTION...] <action>'
19
+
20
+ opts.separator "\noptions:"
16
21
 
17
22
  opts.on('-l', '--language LANG', 'Default is en_US') do |lang|
18
23
  OPTIONS[:language] = lang
19
24
  end
20
25
 
21
- opts.on('-z', '--zoneinfo ZONE', 'Default is US/Eastern') do |zone|
22
- OPTIONS[:zoneinfo] = Getch::Guard.zone(zone)
26
+ opts.on('-t', '--timezone ZONE', 'Default is UTC') do |zone|
27
+ OPTIONS[:timezone] = Getch::Guard.zone(zone)
23
28
  end
24
29
 
25
30
  opts.on('-k', '--keymap KEY', 'Default is us') do |key|
26
31
  OPTIONS[:keymap] = Getch::Guard.keymap(key)
27
32
  end
28
33
 
29
- opts.on('-d', '--disk DISK', 'Root Disk where install the system (sda,sdb)') do |disk|
34
+ opts.on('-d', '--disk DISK',
35
+ 'Root Disk where install the system (sda,sdb)') do |disk|
30
36
  OPTIONS[:disk] = Getch::Guard.disk(disk)
31
37
  end
32
38
 
33
- opts.on('-f', '--format FS', 'Can be ext4, lvm or zfs. Default use ext4') do |fs|
39
+ opts.on('-f', '--format FS',
40
+ 'Can be ext4, zfs. Default use ext4') do |fs|
34
41
  OPTIONS[:fs] = Getch::Guard.format(fs)
35
42
  end
36
43
 
37
- opts.on('-u', '--username USERNAME', 'Create a new user /home/USERNAME with password.') do |user|
44
+ opts.on('-u', '--username USERNAME',
45
+ 'Create a new user /home/USERNAME with password.') do |user|
38
46
  OPTIONS[:username] = user
39
47
  end
40
48
 
41
- opts.on('-o', '--os NAME', /gentoo|void/, 'Install distro NAME, can be gentoo or void.') do |name|
49
+ opts.on('-o', '--os NAME', /gentoo|void/,
50
+ 'Install distro NAME, can be gentoo or void.') do |name|
42
51
  OPTIONS[:os] = name
43
52
  end
44
53
 
45
- opts.on('--separate-boot DISK', 'Use a different DISK for the /boot or /efi partition.') do |boot|
54
+ opts.on('--separate-boot DISK',
55
+ 'Use a different DISK for the /boot or /efi partition.') do |boot|
46
56
  OPTIONS[:boot_disk] = Getch::Guard.disk(boot)
47
57
  end
48
58
 
49
- opts.on('--separate-cache DISK', 'Use a different DISK for the swap partition, add ZIL/L2ARC for ZFS when set.') do |swap|
59
+ opts.on('--separate-cache DISK',
60
+ 'Use a different DISK for the swap partition, add ZIL/L2ARC for ZFS when set.') do |swap|
50
61
  OPTIONS[:cache_disk] = Getch::Guard.disk(swap)
51
62
  end
52
63
 
53
- opts.on('--separate-home DISK', 'Use a different DISK for the /home partition.') do |home|
64
+ opts.on('--separate-home DISK',
65
+ 'Use a different DISK for the /home partition.') do |home|
54
66
  OPTIONS[:home_disk] = Getch::Guard.disk(home)
55
67
  end
56
68
 
57
- opts.on('--encrypt', 'Encrypt your system, use LUKS or native encryption for ZFS.') do
69
+ opts.on('--lvm',
70
+ 'System will use LVM, do not work with ZFS.') do
71
+ OPTIONS[:lvm] = true
72
+ end
73
+
74
+ opts.on('--encrypt',
75
+ 'Encrypt your system, use LUKS or native encryption for ZFS.') do
58
76
  OPTIONS[:encrypt] = true
59
77
  end
60
78
 
79
+ opts.on('--musl', 'Prefer to install Musl over Glibc.') do
80
+ OPTIONS[:musl] = true
81
+ end
82
+
61
83
  opts.on('--verbose', 'Write more messages to the standard output.') do
62
84
  OPTIONS[:verbose] = true
63
85
  end
@@ -67,6 +89,14 @@ module Getch
67
89
  exit
68
90
  end
69
91
 
92
+ opts.separator "\n<action> is one of:"
93
+
94
+ opts.on('--restart', 'Restart the whole installation') do
95
+ rm '/tmp/install_gentoo.yaml'
96
+ rm '/tmp/log_install.txt'
97
+ rm '/tmp/getch_devs.yaml'
98
+ end
99
+
70
100
  begin
71
101
  opts.parse!(argv)
72
102
  rescue OptionParser::ParseError => e
data/lib/getch/states.rb CHANGED
@@ -24,28 +24,48 @@ module Getch
24
24
  save
25
25
  end
26
26
 
27
- def stage3
28
- STATES[:gentoo_base] = true
27
+ def tarball
28
+ STATES[:tarball] = true
29
29
  save
30
30
  end
31
31
 
32
- def config
33
- STATES[:gentoo_config] = true
32
+ def pre_config
33
+ STATES[:pre_config] = true
34
34
  save
35
35
  end
36
36
 
37
37
  def update
38
- STATES[:gentoo_update] = true
38
+ STATES[:update] = true
39
+ save
40
+ end
41
+
42
+ def post_config
43
+ STATES[:post_config] = true
44
+ save
45
+ end
46
+
47
+ def terraform
48
+ STATES[:terraform] = true
49
+ save
50
+ end
51
+
52
+ def services
53
+ STATES[:services] = true
54
+ save
55
+ end
56
+
57
+ def luks_keys
58
+ STATES[:luks_keys] = true
39
59
  save
40
60
  end
41
61
 
42
62
  def bootloader
43
- STATES[:gentoo_bootloader] = true
63
+ STATES[:bootloader] = true
44
64
  save
45
65
  end
46
66
 
47
- def kernel
48
- STATES[:gentoo_kernel] = true
67
+ def finalize
68
+ STATES[:finalize] = true
49
69
  save
50
70
  end
51
71
 
data/lib/getch/tree.rb ADDED
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Tree
5
+ class Os
6
+
7
+ OS_TREE = {
8
+ gentoo: Gentoo,
9
+ void: Void
10
+ }.freeze
11
+
12
+ def initialize
13
+ @os = OPTIONS[:os]
14
+ @log = Log.new
15
+ end
16
+
17
+ def select
18
+ OS_TREE[@os.to_sym] || @log.fatal('OS no found')
19
+ end
20
+ end
21
+ class FS
22
+
23
+ FS_TREE = {
24
+ true => { # + encrypt
25
+ true => { # + lvm
26
+ ext4: FileSystem::Ext4::Hybrid,
27
+ },
28
+ false => { # - lvm
29
+ ext4: FileSystem::Ext4::Encrypt,
30
+ zfs: FileSystem::Zfs::Encrypt
31
+ },
32
+ },
33
+ false => { # - encrypt
34
+ true => { # + lvm
35
+ ext4: FileSystem::Ext4::Lvm,
36
+ },
37
+ false => { # - lvm
38
+ ext4: FileSystem::Ext4::Minimal,
39
+ zfs: FileSystem::Zfs::Minimal,
40
+ },
41
+ }
42
+ }.freeze
43
+
44
+ def initialize
45
+ @encrypt = OPTIONS[:encrypt]
46
+ @lvm = OPTIONS[:lvm]
47
+ @fs = OPTIONS[:fs]
48
+ @log = Log.new
49
+ end
50
+
51
+ def select
52
+ FS_TREE[@encrypt][@lvm][@fs.to_sym] || @log.fatal('Error in FS_TREE or no comptatible options')
53
+ end
54
+ end
55
+ end
56
+ end
data/lib/getch/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Getch
2
- VERSION = '0.1.9'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Void
5
+ class Bootloader
6
+ def dependencies
7
+ Helpers.efi? ?
8
+ Install.new('grub-x86_64-efi') :
9
+ Install.new('grub')
10
+ end
11
+
12
+ def install
13
+ Config::Grub.new
14
+ ChrootOutput.new('xbps-reconfigure -fa') # this command also start grub-mkconfig
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Void
5
+ class Finalize
6
+ def initialize
7
+ x
8
+ end
9
+
10
+ protected
11
+
12
+ def x
13
+ shell
14
+ accounts
15
+ end
16
+
17
+ private
18
+
19
+ # Make the default shell /bin/bash instead of /bin/sh
20
+ def shell
21
+ Chroot.new('chsh -s /bin/bash')
22
+ end
23
+
24
+ def accounts
25
+ account = Config::Account.new
26
+ account.root
27
+ account.new_user
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Void
5
+ class PostConfig
6
+ def initialize
7
+ x
8
+ end
9
+
10
+ protected
11
+
12
+ def x
13
+ Getch::Config::Locale.new
14
+ Getch::Config::Keymap.new
15
+ Getch::Config::TimeZone.new
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Void
5
+ class PreConfig
6
+ def initialize
7
+ x
8
+ end
9
+
10
+ private
11
+
12
+ def x
13
+ Getch::Config::Locale.new
14
+ Getch::Config::PreNetwork.new
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Void
5
+ class Services
6
+ def initialize
7
+ x
8
+ end
9
+
10
+ protected
11
+
12
+ def x
13
+ Config::Iwd.new
14
+ Config::Dhcp.new
15
+ end
16
+ end
17
+ end
18
+ end
@@ -5,59 +5,79 @@ require 'open3'
5
5
 
6
6
  module Getch
7
7
  module Void
8
- class RootFS
8
+ class Tarball
9
9
  def initialize
10
+ @log = Log.new
10
11
  @url = 'https://alpha.de.repo.voidlinux.org/live/current'
11
12
  @file = 'sha256sum.txt'
12
13
  @xbps = false
13
- Dir.chdir(MOUNTPOINT)
14
+ Dir.chdir OPTIONS[:mountpoint]
15
+ end
16
+
17
+ def x
18
+ search_archive
19
+ download
20
+ checksum
21
+ install
22
+ end
23
+
24
+ protected
25
+
26
+ def tarball
27
+ OPTIONS[:musl] ?
28
+ /void-x86_64-musl-ROOTFS-[\d._]+.tar.xz/ :
29
+ /void-x86_64-ROOTFS-[\d._]+.tar.xz/
14
30
  end
15
31
 
16
32
  # Search only the glibc x86_64 for now
17
33
  def search_archive
18
34
  yurl = "#{@url}/#{@file}"
19
- puts "Open #{yurl}"
35
+ @log.info "Opening #{yurl}...\n"
20
36
  Helpers.get_file_online(yurl, @file)
21
37
  File.open(@file).each do |l|
22
- @xbps = l.tr('()', '').split(' ') if l.match(/void-x86_64-ROOTFS-[\d._]+.tar.xz/)
38
+ @xbps = l.tr('()', '').split(' ') if l.match(tarball)
23
39
  end
24
40
  end
25
41
 
26
42
  def download
27
- raise StandardError, 'No file found, retry later.' unless @xbps
43
+ @log.fatal 'No file found, retry later.' unless @xbps
28
44
  return if File.exist? @xbps[1]
29
45
 
30
- puts "Downloading #{@xbps[1]}..."
46
+ @log.info "Downloading #{@xbps[1]}..."
31
47
  Helpers.get_file_online("#{@url}/#{@xbps[1]}", @xbps[1])
48
+ @log.result_ok
32
49
  end
33
50
 
34
51
  def checksum
35
- print ' => Checking SHA256 checksum...'
52
+ @log.info 'Checking SHA256 checksum...'
36
53
  # Should contain 2 spaces...
37
54
  command = "echo #{@xbps[3]} #{@xbps[1]} | sha256sum --check"
38
55
  _, stderr, status = Open3.capture3(command)
39
56
  if status.success? then
40
- puts "\t[OK]"
41
- decompress
42
- cleaning
57
+ @log.result_ok
43
58
  return
44
59
  end
45
60
  cleaning
46
- raise "Problem with the checksum, stderr\n#{stderr}"
61
+ @log.fatal "Problem with the checksum, stderr\n#{stderr}"
62
+ end
63
+
64
+ def install
65
+ decompress
66
+ cleaning
47
67
  end
48
68
 
49
69
  private
50
70
 
51
71
  def decompress
52
- print " => Decompressing archive #{@xbps[1]}..."
72
+ @log.info "Decompressing #{@xbps[1]}..."
53
73
  cmd = "tar xpf #{@xbps[1]} --xattrs-include=\'*.*\' --numeric-owner"
54
74
  _, stderr, status = Open3.capture3(cmd)
55
75
  if status.success? then
56
- puts "\s[OK]"
76
+ @log.result_ok
57
77
  return
58
78
  end
59
79
  cleaning
60
- raise "Fail to decompress archive #{@xbps[1]} - #{stderr}."
80
+ @log.fatal "Fail to decompressing #{@xbps[1]} - #{stderr}."
61
81
  end
62
82
 
63
83
  def cleaning
@@ -0,0 +1,28 @@
1
+ module Getch
2
+ module Void
3
+ class Terraform
4
+ def initialize
5
+ x
6
+ end
7
+
8
+ protected
9
+
10
+ def x
11
+ install_pkgs
12
+ end
13
+
14
+ def install_pkgs
15
+ @pkgs = 'sudo'
16
+ @pkgs << ' vim'
17
+ @pkgs << ' iptables'
18
+ @pkgs << ' runit-iptables'
19
+ @pkgs << ' iwd'
20
+ @pkgs << ' dhcpcd'
21
+ @pkgs << ' lvm2' if OPTIONS[:fs] == 'lvm'
22
+ @pkgs << ' zfs' if OPTIONS[:fs] == 'zfs'
23
+ @pkgs << ' cryptsetup' if OPTIONS[:encrypt]
24
+ Install.new(@pkgs)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Getch
4
+ module Void
5
+ class Update
6
+ def initialize
7
+ @log = Log.new
8
+ x
9
+ end
10
+
11
+ protected
12
+
13
+ # https://docs.voidlinux.org/installation/guides/chroot.html#install-base-system-rootfs-method-only
14
+ def x
15
+ sync
16
+ update
17
+ end
18
+
19
+ private
20
+
21
+ def sync
22
+ @log.info "Synchronize index...\n"
23
+ ChrootOutput.new '/usr/bin/xbps-install', '-Suy', 'xbps'
24
+ end
25
+
26
+ def update
27
+ ChrootOutput.new '/usr/bin/xbps-install -uy'
28
+ ChrootOutput.new '/usr/bin/xbps-install -y base-system'
29
+ ChrootOutput.new '/usr/bin/xbps-remove -y base-voidstrap'
30
+ end
31
+ end
32
+ end
33
+ end