getch 0.1.3 → 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 +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