getch 0.1.3 → 0.3.0

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.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +75 -35
  4. data/assets/network-stack.conf +63 -0
  5. data/assets/system.conf +38 -0
  6. data/bin/getch +14 -4
  7. data/lib/clean.rb +149 -0
  8. data/lib/cmdline.rb +128 -0
  9. data/lib/cryptsetup.rb +132 -0
  10. data/lib/devs.rb +199 -0
  11. data/lib/dracut/encrypt.rb +36 -0
  12. data/lib/dracut/hybrid.rb +15 -0
  13. data/lib/dracut/lvm.rb +14 -0
  14. data/lib/dracut/minimal.rb +11 -0
  15. data/lib/dracut/root.rb +45 -0
  16. data/lib/dracut/zfs.rb +35 -0
  17. data/lib/dracut.rb +11 -0
  18. data/lib/fstab/encrypt.rb +44 -0
  19. data/lib/fstab/hybrid.rb +34 -0
  20. data/lib/fstab/lvm.rb +25 -0
  21. data/lib/fstab/minimal.rb +6 -0
  22. data/lib/fstab/root.rb +93 -0
  23. data/lib/fstab/zfs.rb +23 -0
  24. data/lib/fstab.rb +11 -0
  25. data/lib/getch/assembly.rb +150 -0
  26. data/lib/getch/command.rb +94 -124
  27. data/lib/getch/config/account.rb +39 -0
  28. data/lib/getch/config/dhcp.rb +104 -0
  29. data/lib/getch/config/grub.rb +42 -0
  30. data/lib/getch/config/iwd.rb +60 -0
  31. data/lib/getch/config/keymap.rb +78 -0
  32. data/lib/getch/config/locale.rb +96 -0
  33. data/lib/getch/config/portage.rb +90 -0
  34. data/lib/getch/config/pre_network.rb +37 -0
  35. data/lib/getch/config/timezone.rb +52 -0
  36. data/lib/getch/config/void.rb +11 -0
  37. data/lib/getch/config.rb +19 -53
  38. data/lib/getch/device.rb +67 -0
  39. data/lib/getch/filesystem/ext4/encrypt/config.rb +11 -68
  40. data/lib/getch/filesystem/ext4/encrypt/deps.rb +17 -25
  41. data/lib/getch/filesystem/ext4/encrypt/device.rb +13 -5
  42. data/lib/getch/filesystem/ext4/encrypt/format.rb +8 -15
  43. data/lib/getch/filesystem/ext4/encrypt/mount.rb +9 -13
  44. data/lib/getch/filesystem/ext4/encrypt/partition.rb +10 -82
  45. data/lib/getch/filesystem/ext4/encrypt/void.rb +63 -0
  46. data/lib/getch/filesystem/ext4/encrypt.rb +4 -0
  47. data/lib/getch/filesystem/ext4/hybrid/config.rb +27 -0
  48. data/lib/getch/filesystem/ext4/hybrid/deps.rb +55 -0
  49. data/lib/getch/filesystem/ext4/hybrid/device.rb +24 -0
  50. data/lib/getch/filesystem/ext4/hybrid/format.rb +23 -0
  51. data/lib/getch/filesystem/ext4/hybrid/mount.rb +21 -0
  52. data/lib/getch/filesystem/ext4/hybrid/partition.rb +27 -0
  53. data/lib/getch/filesystem/ext4/hybrid/void.rb +62 -0
  54. data/lib/getch/filesystem/ext4/hybrid.rb +19 -0
  55. data/lib/getch/filesystem/ext4/lvm/config.rb +25 -0
  56. data/lib/getch/filesystem/ext4/lvm/deps.rb +56 -0
  57. data/lib/getch/filesystem/ext4/lvm/device.rb +28 -0
  58. data/lib/getch/filesystem/ext4/lvm/format.rb +21 -0
  59. data/lib/getch/filesystem/ext4/lvm/mount.rb +21 -0
  60. data/lib/getch/filesystem/ext4/lvm/partition.rb +28 -0
  61. data/lib/getch/filesystem/{lvm.rb → ext4/lvm.rb} +8 -3
  62. data/lib/getch/filesystem/ext4/minimal/config.rb +25 -0
  63. data/lib/getch/filesystem/ext4/{device.rb → minimal/deps.rb} +4 -3
  64. data/lib/getch/filesystem/ext4/minimal/device.rb +22 -0
  65. data/lib/getch/filesystem/ext4/minimal/format.rb +23 -0
  66. data/lib/getch/filesystem/ext4/minimal/mount.rb +21 -0
  67. data/lib/getch/filesystem/ext4/minimal/partition.rb +28 -0
  68. data/lib/getch/filesystem/ext4/minimal.rb +19 -0
  69. data/lib/getch/filesystem/ext4.rb +9 -6
  70. data/lib/getch/filesystem/zfs/encrypt/config.rb +12 -57
  71. data/lib/getch/filesystem/zfs/encrypt/deps.rb +7 -86
  72. data/lib/getch/filesystem/zfs/encrypt/device.rb +9 -45
  73. data/lib/getch/filesystem/zfs/encrypt/format.rb +8 -90
  74. data/lib/getch/filesystem/zfs/encrypt/mount.rb +16 -34
  75. data/lib/getch/filesystem/zfs/encrypt/partition.rb +8 -50
  76. data/lib/getch/filesystem/zfs/encrypt.rb +4 -0
  77. data/lib/getch/filesystem/zfs/minimal/config.rb +37 -0
  78. data/lib/getch/filesystem/zfs/minimal/deps.rb +126 -0
  79. data/lib/getch/filesystem/zfs/minimal/device.rb +24 -0
  80. data/lib/getch/filesystem/zfs/minimal/format.rb +23 -0
  81. data/lib/getch/filesystem/zfs/minimal/mount.rb +23 -0
  82. data/lib/getch/filesystem/zfs/minimal/partition.rb +23 -0
  83. data/lib/getch/filesystem/zfs/minimal.rb +19 -0
  84. data/lib/getch/filesystem/zfs.rb +3 -6
  85. data/lib/getch/filesystem.rb +2 -6
  86. data/lib/getch/gentoo/bootloader.rb +47 -0
  87. data/lib/getch/gentoo/finalize.rb +25 -0
  88. data/lib/getch/gentoo/post_config.rb +75 -0
  89. data/lib/getch/gentoo/pre_config.rb +37 -0
  90. data/lib/getch/gentoo/services.rb +18 -0
  91. data/lib/getch/gentoo/sources.rb +82 -52
  92. data/lib/getch/gentoo/tarball.rb +91 -0
  93. data/lib/getch/gentoo/terraform.rb +34 -0
  94. data/lib/getch/gentoo/update.rb +54 -0
  95. data/lib/getch/gentoo/use.rb +11 -12
  96. data/lib/getch/gentoo/use_flag.rb +74 -52
  97. data/lib/getch/gentoo.rb +11 -63
  98. data/lib/getch/guard.rb +71 -0
  99. data/lib/getch/helpers.rb +128 -48
  100. data/lib/getch/log.rb +91 -26
  101. data/lib/getch/options.rb +79 -40
  102. data/lib/getch/states.rb +37 -10
  103. data/lib/getch/tree.rb +56 -0
  104. data/lib/getch/version.rb +1 -1
  105. data/lib/getch/void/bootloader.rb +18 -0
  106. data/lib/getch/void/finalize.rb +31 -0
  107. data/lib/getch/void/post_config.rb +19 -0
  108. data/lib/getch/void/pre_config.rb +18 -0
  109. data/lib/getch/void/services.rb +18 -0
  110. data/lib/getch/void/tarball.rb +89 -0
  111. data/lib/getch/void/terraform.rb +28 -0
  112. data/lib/getch/void/update.rb +33 -0
  113. data/lib/getch/void.rb +15 -0
  114. data/lib/getch.rb +104 -92
  115. data/lib/luks.rb +239 -0
  116. data/lib/lvm2.rb +112 -0
  117. data/lib/mkfs/zfs.rb +167 -0
  118. data/lib/mkfs.rb +140 -0
  119. data/lib/mountfs.rb +154 -0
  120. data/lib/nito.rb +131 -0
  121. data/lib/sgdisk.rb +160 -0
  122. data.tar.gz.sig +0 -0
  123. metadata +96 -45
  124. metadata.gz.sig +0 -0
  125. data/.gitignore +0 -2
  126. data/CHANGELOG.md +0 -90
  127. data/Rakefile +0 -21
  128. data/bin/setup.sh +0 -90
  129. data/getch.gemspec +0 -25
  130. data/lib/getch/filesystem/clean.rb +0 -51
  131. data/lib/getch/filesystem/device.rb +0 -61
  132. data/lib/getch/filesystem/ext4/config.rb +0 -58
  133. data/lib/getch/filesystem/ext4/deps.rb +0 -22
  134. data/lib/getch/filesystem/ext4/format.rb +0 -28
  135. data/lib/getch/filesystem/ext4/mount.rb +0 -23
  136. data/lib/getch/filesystem/ext4/partition.rb +0 -52
  137. data/lib/getch/filesystem/lvm/config.rb +0 -59
  138. data/lib/getch/filesystem/lvm/deps.rb +0 -42
  139. data/lib/getch/filesystem/lvm/device.rb +0 -43
  140. data/lib/getch/filesystem/lvm/encrypt/config.rb +0 -71
  141. data/lib/getch/filesystem/lvm/encrypt/deps.rb +0 -46
  142. data/lib/getch/filesystem/lvm/encrypt/device.rb +0 -46
  143. data/lib/getch/filesystem/lvm/encrypt/format.rb +0 -32
  144. data/lib/getch/filesystem/lvm/encrypt/mount.rb +0 -25
  145. data/lib/getch/filesystem/lvm/encrypt/partition.rb +0 -80
  146. data/lib/getch/filesystem/lvm/encrypt.rb +0 -15
  147. data/lib/getch/filesystem/lvm/format.rb +0 -29
  148. data/lib/getch/filesystem/lvm/mount.rb +0 -23
  149. data/lib/getch/filesystem/lvm/partition.rb +0 -69
  150. data/lib/getch/filesystem/mount.rb +0 -56
  151. data/lib/getch/filesystem/partition.rb +0 -77
  152. data/lib/getch/filesystem/zfs/config.rb +0 -57
  153. data/lib/getch/filesystem/zfs/deps.rb +0 -95
  154. data/lib/getch/filesystem/zfs/device.rb +0 -58
  155. data/lib/getch/filesystem/zfs/format.rb +0 -114
  156. data/lib/getch/filesystem/zfs/mount.rb +0 -48
  157. data/lib/getch/filesystem/zfs/partition.rb +0 -64
  158. data/lib/getch/gentoo/boot.rb +0 -109
  159. data/lib/getch/gentoo/chroot.rb +0 -77
  160. data/lib/getch/gentoo/config.rb +0 -129
  161. data/lib/getch/gentoo/stage.rb +0 -74
@@ -1,48 +0,0 @@
1
- require 'fileutils'
2
-
3
- module Getch
4
- module FileSystem
5
- module Zfs
6
- class Mount < Getch::FileSystem::Zfs::Device
7
- def initialize
8
- super
9
- @root_dir = MOUNTPOINT
10
- @mount = Getch::FileSystem::Mount.new
11
- @state = Getch::States.new
12
- @log = Getch::Log.new
13
- end
14
-
15
- def run
16
- return if STATES[:mount]
17
- exec("zpool export -a")
18
- exec("rm -rf #{MOUNTPOINT}/*")
19
- exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
20
- exec("zpool import -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
21
- @mount.swap(@dev_swap)
22
- mount_root
23
- mount_boot
24
- @mount.esp(@dev_esp)
25
- exec("zfs mount -a")
26
- @state.mount
27
- end
28
-
29
- private
30
-
31
- def mount_root
32
- Helpers::mkdir(@root_dir)
33
- exec("zfs mount #{@pool_name}/ROOT/gentoo")
34
- end
35
-
36
- def mount_boot
37
- return if ! @dev_boot
38
- exec("zfs mount #{@boot_pool_name}/BOOT/gentoo")
39
- end
40
-
41
- def exec(cmd)
42
- @log.info("==> #{cmd}")
43
- Helpers::sys(cmd)
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,64 +0,0 @@
1
- module Getch
2
- module FileSystem
3
- module Zfs
4
- class Partition < Getch::FileSystem::Zfs::Device
5
- def initialize
6
- super
7
- @clean = Getch::FileSystem::Clean
8
- @partition = Getch::FileSystem::Partition.new
9
- @state = Getch::States.new()
10
- @log = Getch::Log.new()
11
- run_partition
12
- end
13
-
14
- def run_partition
15
- return if STATES[:partition ]
16
- @clean.old_zpool
17
- @clean.struct(@disk, @cache_disk, @home_disk)
18
- @clean.hdd(@disk, @cache_disk, @home_disk)
19
- partition
20
- cache
21
- @state.partition
22
- end
23
-
24
- private
25
-
26
- def partition
27
- if @efi
28
- @partition.efi(@dev_esp)
29
- @partition.swap(@dev_swap)
30
- @partition.root(@dev_root, "BF00") if @root_part != 1
31
- else
32
- @partition.gpt(@dev_gpt)
33
- # Boot pool for GRUB2
34
- @partition.boot(@dev_boot)
35
- @partition.swap(@dev_swap)
36
- @partition.root(@dev_root, "BF00") if @root_part != 1
37
- end
38
- end
39
-
40
- def cache
41
- if @dev_log
42
- exec("sgdisk -n2:0:+4G -t2:BF07 #{cache_disk}")
43
- end
44
- if @dev_cache
45
- exec("sgdisk -n3:0:0 -t3:BF08 #{cache_disk}")
46
- end
47
- end
48
-
49
- # Partition_efi
50
- # /efi - EFI system partition - 260MB
51
- # / - Root
52
-
53
- # Partition_bios
54
- # None - Bios Boot Partition - 1MiB
55
- # /boot - Boot - 8300
56
- # / - Root
57
-
58
- def exec(cmd)
59
- Getch::Command.new(cmd).run!
60
- end
61
- end
62
- end
63
- end
64
- end
@@ -1,109 +0,0 @@
1
- require 'fileutils'
2
-
3
- module Getch
4
- module Gentoo
5
- class Boot
6
- def initialize(opts)
7
- @disk = opts.boot_disk ? opts.boot_disk : opts.disk
8
- @user = opts.username
9
- @config = Getch.class_fs::Config.new()
10
- end
11
-
12
- def start
13
- @config.fstab
14
- bootloader
15
- password
16
- permission
17
- the_end
18
- end
19
-
20
- def bootloader
21
- if Helpers::efi?
22
- bootctl
23
- else
24
- grub
25
- end
26
- end
27
-
28
- # bootctl is alrealy installed with the stage3-amd64-systemd
29
- def bootctl
30
- bootctl_dep
31
- puts "Configuring systemd-boot."
32
- # ref: https://forums.gentoo.org/viewtopic-p-8118822.html
33
- esp = '/efi'
34
- Getch::Chroot.new("bootctl --path #{esp} install").run!
35
- datas_loader = [
36
- 'default gentoo',
37
- 'timeout 3',
38
- 'editor 0'
39
- ]
40
- @config.systemd_boot
41
- File.write("#{MOUNTPOINT}/#{esp}/loader/loader.conf", datas_loader.join("\n"))
42
-
43
- FileUtils.cp("#{MOUNTPOINT}/usr/src/linux/arch/x86/boot/bzImage", "#{MOUNTPOINT}/#{esp}/vmlinuz", preserve: true)
44
-
45
- initramfs = Dir.glob("#{MOUNTPOINT}/boot/initramfs-*.img")
46
- FileUtils.cp("#{initramfs[0]}", "#{MOUNTPOINT}/#{esp}/initramfs", preserve: true) if initramfs != []
47
-
48
- Getch::Chroot.new("bootctl --path #{esp} update").run!
49
- end
50
-
51
- def bootctl_dep
52
- puts 'Installing systemd-boot...'
53
- Getch::Emerge.new("efivar").pkg!
54
- end
55
-
56
- def grub
57
- puts 'Installing GRUB...'
58
- Getch::Emerge.new("sys-boot/grub:2").pkg!
59
- @config.grub
60
- Getch::Chroot.new("grub-install /dev/#{@disk}").run!
61
- Getch::Chroot.new("grub-mkconfig -o /boot/grub/grub.cfg").run!
62
- end
63
-
64
- def password
65
- puts 'Password for root'
66
- cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile && passwd\""
67
- system(cmd)
68
- if @user
69
- puts "Creating user #{@user}"
70
- Getch::Chroot.new("useradd -m -G users,wheel,audio,video #{@user}").run!
71
- puts "Password for your user #{@user}"
72
- cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile && passwd #{@user}\""
73
- system(cmd)
74
- end
75
- end
76
-
77
- private
78
-
79
- def permission
80
- FileUtils.chmod_R 0755, "#{MOUNTPOINT}/etc/portage"
81
- if @user
82
- Getch::Chroot.new("chown -R #{@user}:#{@user} /home/#{@user}").run!
83
- end
84
- end
85
-
86
- def the_end
87
- #Helpers::exec_or_die("umount -l /mnt/gentoo/dev{/shm,/pts,}")
88
- #Helpers::exec_or_die("umount -R #{MOUNTPOINT}")
89
- puts
90
- puts "getch has finish, before reboot, you can:"
91
- puts " + Chroot on your system with: chroot #{MOUNTPOINT} /bin/bash"
92
- puts " + Install more packages like networkmanager or emacs"
93
- puts
94
- puts " + Add more modules for your kernel (graphic, wifi card) and recompile it with:"
95
- puts " genkernel --kernel-config=/usr/src/linux/.config all "
96
- puts
97
- puts "Reboot the system when you have done !"
98
- end
99
-
100
- def exec_chroot(cmd)
101
- script = "chroot #{MOUNTPOINT} /bin/bash -c \"
102
- source /etc/profile
103
- #{cmd}
104
- \""
105
- Getch::Command.new(script).run!
106
- end
107
- end
108
- end
109
- end
@@ -1,77 +0,0 @@
1
- module Getch
2
- module Gentoo
3
- class Chroot
4
- def initialize
5
- @state = Getch::States.new()
6
- @pkgs = []
7
- mount
8
- end
9
-
10
- def cpuflags
11
- Getch::Emerge.new("app-portage/cpuid2cpuflags").pkg!
12
- cpuflags = `chroot #{MOUNTPOINT} /bin/bash -c "source /etc/profile; cpuid2cpuflags"`.chomp
13
- File.write("#{MOUNTPOINT}/etc/portage/package.use/00cpuflags", "*/* #{cpuflags}")
14
- end
15
-
16
- def update
17
- return if STATES[:gentoo_update]
18
- puts "Downloading the last ebuilds for Gentoo..."
19
- Helpers::create_dir("#{MOUNTPOINT}/var/db/repos/gentoo")
20
- cmd = "emaint sync --auto"
21
- exec_chroot(cmd)
22
- end
23
-
24
- def world
25
- return if STATES[:gentoo_update]
26
- puts "Update Gentoo world"
27
- Getch::Emerge.new("emerge --update --deep --changed-use --newuse @world").run!
28
- @state.update
29
- end
30
-
31
- def systemd
32
- puts "Updating locale, keymap..."
33
- cmd = "locale-gen; emerge --config sys-libs/timezone-data"
34
- exec_chroot(cmd)
35
- end
36
-
37
- def kernel
38
- return if Dir.exist? "#{MOUNTPOINT}/usr/src/linux"
39
- license = "#{MOUNTPOINT}/etc/portage/package.license"
40
- File.write(license, "sys-kernel/linux-firmware linux-fw-redistributable no-source-code\n")
41
- @pkgs << "sys-kernel/gentoo-sources"
42
- @pkgs << "dev-util/dwarves"
43
- end
44
-
45
- def kernel_deps
46
- @pkgs << "sys-apps/kmod"
47
- end
48
-
49
- def install_pkgs
50
- @pkgs << "app-portage/gentoolkit"
51
- @pkgs << "app-admin/sudo"
52
- @pkgs << "app-editors/vim"
53
- @pkgs << "sys-kernel/linux-firmware"
54
- all_pkgs = @pkgs.join(" ")
55
- puts "Installing #{all_pkgs}..."
56
- Getch::Emerge.new(all_pkgs).pkg!
57
- end
58
-
59
- private
60
-
61
- def mount
62
- puts "Populate /proc, /sys and /dev."
63
- Helpers::exec_or_die("mount --types proc /proc \"#{MOUNTPOINT}/proc\"")
64
- Helpers::exec_or_die("mount --rbind /sys \"#{MOUNTPOINT}/sys\"")
65
- Helpers::exec_or_die("mount --make-rslave \"#{MOUNTPOINT}/sys\"")
66
- Helpers::exec_or_die("mount --rbind /dev \"#{MOUNTPOINT}/dev\"")
67
- Helpers::exec_or_die("mount --make-rslave \"#{MOUNTPOINT}/dev\"")
68
- # Maybe add /dev/shm like describe here:
69
- # https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base
70
- end
71
-
72
- def exec_chroot(cmd)
73
- Getch::Chroot.new(cmd).run!
74
- end
75
- end
76
- end
77
- end
@@ -1,129 +0,0 @@
1
- require 'fileutils'
2
- require 'tempfile'
3
- require 'securerandom'
4
-
5
- module Getch
6
- module Gentoo
7
- class Config
8
- def initialize
9
- @make = "#{MOUNTPOINT}/etc/portage/make.conf"
10
- @log = Getch::Log.new
11
- end
12
-
13
- def portage
14
- grub_pc = Helpers::efi? ? '' : 'GRUB_PLATFORMS="pc"'
15
- nproc = `nproc`.chomp()
16
-
17
- # Add cpu name
18
- cpu=`chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile ; gcc -c -Q -march=native --help=target | grep march\" | awk '{print $2}' | head -1`.chomp
19
- raise "Error, no cpu found" if ! cpu or cpu == ""
20
- @log.debug "CPU found ==> #{cpu}"
21
-
22
- tmp = Tempfile.new('make.conf')
23
-
24
- File.open(@make).each { |l|
25
- if l.match(/^COMMON_FLAGS/)
26
- File.write(tmp, "COMMON_FLAGS=\"-march=#{cpu} -O2 -pipe -fomit-frame-pointer\"\n", mode: 'a')
27
- else
28
- File.write(tmp, l, mode: 'a')
29
- end
30
- }
31
-
32
- FileUtils.copy_file(tmp, @make, preserve = true)
33
-
34
- # Add the rest
35
- data = [
36
- '',
37
- "MAKEOPTS=\"-j#{nproc}\"",
38
- 'ACCEPT_KEYWORDS="amd64"',
39
- 'INPUT_DEVICES="libinput"',
40
- grub_pc
41
- ]
42
- File.write(@make, data.join("\n"), mode: "a")
43
- end
44
-
45
- # Write a repos.conf/gentoo.conf with the gpg verification
46
- def repo
47
- src = "#{MOUNTPOINT}/usr/share/portage/config/repos.conf"
48
- dest = "#{MOUNTPOINT}/etc/portage/repos.conf"
49
- FileUtils.mkdir dest, mode: 0644 if ! Dir.exist?(dest)
50
- tmp = Tempfile.new('gentoo.conf')
51
- line_count = 0
52
-
53
- File.open(src).each { |l|
54
- File.write(tmp, "sync-allow-hardlinks = yes\n", mode: 'a') if line_count == 2
55
- if l.match(/^sync-type = rsync/)
56
- File.write(tmp, "sync-type = webrsync\n", mode: 'a')
57
- else
58
- File.write(tmp, l, mode: 'a')
59
- end
60
- line_count += 1
61
- }
62
-
63
- FileUtils.copy_file(tmp, "#{dest}/gentoo.conf", preserve = true)
64
- end
65
-
66
- def network
67
- src = '/etc/resolv.conf'
68
- dest = "#{MOUNTPOINT}/etc/resolv.conf"
69
- FileUtils.copy_file(src, dest, preserve = true)
70
- end
71
-
72
- def systemd(options)
73
- control_options(options)
74
- File.write("#{MOUNTPOINT}/etc/locale.gen", @utf8)
75
- File.write("#{MOUNTPOINT}/etc/locale.conf", "LANG=#{@lang}\n")
76
- File.write("#{MOUNTPOINT}/etc/locale.conf", 'LC_COLLATE=C', mode: 'a')
77
- File.write("#{MOUNTPOINT}/etc/timezone", "#{options.zoneinfo}")
78
- File.write("#{MOUNTPOINT}/etc/vconsole.conf", "KEYMAP=#{options.keymap}")
79
- end
80
-
81
- def hostname
82
- id = SecureRandom.hex(2)
83
- File.write("#{MOUNTPOINT}/etc/hostname", "gentoo-hatch-#{id}")
84
- end
85
-
86
- def portage_fs
87
- portage = "#{MOUNTPOINT}/etc/portage"
88
- Helpers::create_dir("#{portage}/package.use")
89
- Helpers::create_dir("#{portage}/package.accept_keywords")
90
- Helpers::create_dir("#{portage}/package.unmask")
91
-
92
- Helpers::add_file("#{portage}/package.use/zzz_via_autounmask")
93
- Helpers::add_file("#{portage}/package.accept_keywords/zzz_via_autounmask")
94
- Helpers::add_file("#{portage}/package.unmask/zzz_via_autounmask")
95
- end
96
-
97
- private
98
-
99
- def control_options(options)
100
- search_zone(options.zoneinfo)
101
- search_utf8(options.language)
102
- search_key(options.keymap)
103
- end
104
-
105
- def search_key(keys)
106
- @keymap = nil
107
- Dir.glob("#{MOUNTPOINT}/usr/share/keymaps/**/#{keys}.map.gz") { |f|
108
- @keymap = f
109
- }
110
- raise ArgumentError, "No keymap #{@keymap} found" if ! @keymap
111
- end
112
-
113
- def search_zone(zone)
114
- if !File.exist?("#{MOUNTPOINT}/usr/share/zoneinfo/#{zone}")
115
- raise ArgumentError, "Zoneinfo #{zone} doesn\'t exist."
116
- end
117
- end
118
-
119
- def search_utf8(lang)
120
- @utf8, @lang = nil, nil
121
- File.open("#{MOUNTPOINT}/usr/share/i18n/SUPPORTED").each { |l|
122
- @utf8 = $~[0] if l.match(/^#{lang}[. ]+[utf\-8 ]+/i)
123
- @lang = $~[0] if l.match(/^#{lang}[. ]+utf\-8/i)
124
- }
125
- raise ArgumentError, "Lang #{lang} no found" if ! @utf8
126
- end
127
- end
128
- end
129
- end
@@ -1,74 +0,0 @@
1
- require 'open-uri'
2
- require 'open3'
3
-
4
- module Getch
5
- module Gentoo
6
- class Stage
7
-
8
- def initialize
9
- @mirror = "https://mirrors.soeasyto.com/distfiles.gentoo.org"
10
- @release = release
11
- @stage_file="stage3-amd64-systemd-#{@release}.tar.xz"
12
- end
13
-
14
- def stage3
15
- @mirror + '/releases/amd64/autobuilds/latest-stage3-amd64-systemd.txt'
16
- end
17
-
18
- def release
19
- URI.open(stage3) do |file|
20
- file.read.match(/^[[:alnum:]]+/)
21
- end
22
- end
23
-
24
- def file
25
- "#{@release}/#{@stage_file}"
26
- end
27
-
28
- def get_stage3
29
- Dir.chdir(MOUNTPOINT)
30
- return if File.exist?(@stage_file)
31
- puts "Download the last #{@stage_file}, please wait..."
32
- Helpers::get_file_online(@mirror + "/releases/amd64/autobuilds/" + file, @stage_file)
33
- end
34
-
35
- def control_files
36
- puts "Download the DIGESTS"
37
- Helpers::get_file_online(@mirror + "/releases/amd64/autobuilds/" + file + ".DIGESTS", "#{@stage_file}.DIGESTS")
38
- puts "Download the DIGESTS.asc"
39
- Helpers::get_file_online(@mirror + "/releases/amd64/autobuilds/" + file + ".DIGESTS.asc", "#{@stage_file}.DIGESTS.asc")
40
- puts "Download the CONTENTS.gz"
41
- Helpers::get_file_online(@mirror + "/releases/amd64/autobuilds/" + file + ".CONTENTS.gz", "#{@stage_file}.CONTENTS.gz")
42
- end
43
-
44
- def checksum
45
- puts 'Check the SHA512 checksum.'
46
- command = "awk '/SHA512 HASH/{getline;print}' #{@stage_file}.DIGESTS.asc | sha512sum --check"
47
- _, stderr, status = Open3.capture3(command)
48
- if status.success? then
49
- puts "Checksum is ok"
50
- decompress
51
- cleaning
52
- else
53
- cleaning
54
- raise "Problem with the checksum, stderr\n#{stderr}"
55
- end
56
- end
57
-
58
- private
59
-
60
- # https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage
61
- def decompress
62
- puts "Decompressing archive #{@stage_file}..."
63
- cmd = "tar xpf #{@stage_file} --xattrs-include=\'*.*\' --numeric-owner"
64
- Getch::Command.new(cmd).run!
65
- end
66
-
67
- def cleaning
68
- Dir.glob("stage3-amd64-systemd*").each do |f|
69
- File.delete(f)
70
- end
71
- end
72
- end
73
- end
74
- end