getch 0.0.3 → 0.0.4

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: 769727fcda94cc7d18928f9ae8dc107756073179877b2b47fcc75c03f5483dc2
4
- data.tar.gz: 471c26161637a5d94ebd8c77708a4ae93bdfbc8f443ff1f120b60b4986f1f637
3
+ metadata.gz: cee5eb8b60c64dd64bd0416ae0306f725b1fd58f58baec8288e6358c9ff79a8a
4
+ data.tar.gz: 315db3e29828388088d8cda3c38e5bd7ed5c57d3b9ecb324150c06e47ebd1eba
5
5
  SHA512:
6
- metadata.gz: dbe1bc854c99ae26e7a8dd4d62325224b9949909bcde2bb389830183bc91878847148b3995e8b8928e0481e3fc86233b359989b758bf7a915254a18f5a66940c
7
- data.tar.gz: 3335a022ab70eecbae37c21026c3739751718f9dd38d4410137a15de26c32f8c7d0d7d658b609c29f03976233f54a33130971c7c9cff5291249c8a525e21e7a8
6
+ metadata.gz: 622547ffd01a03d7a957f489014ae0c27255e868c9135326b4bd8a3e0671dca6319f9f593f3fc33f54f657089cfa5e65a8917a2e6c7201ade89682a5767a3e96
7
+ data.tar.gz: bed494285e0ec32397e37aaed1d3836fe700fe11b4c0661f1e7b68039393a2356b1ec6f16207c29988e7ff9656d573833cd5e74ecf91ee1f143639e798cea442
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -0,0 +1,19 @@
1
+ ## 0.0.3, release 2020-09-14
2
+ * Add commands in the chroot
3
+ * Kernel build by using https://github.com/szorfein/garden
4
+ * Add portage fs (like /etc/portage/package.use/zzz_via_autounmask)
5
+ * Download all the lastest ebuild
6
+ * Update gentoo via emerge -uDN @world
7
+
8
+ ## 0.0.2, release 2020-09-12
9
+ * Getch genere a file /tmp/install_gentoo to avoid to remake same task over and over
10
+ * Support for fs ext4
11
+ * Mount partition on /mnt/gentoo during the install
12
+ * Download, verify the checksum and decompress the last stage3-amd64-systemd
13
+
14
+ ## 0.0.1, release 2020-09-10
15
+ * Format disk with sgdisk (should be installed)
16
+ * Support for one disk with -d|--disk
17
+ * Add few options for the CLI
18
+ * Add bin/setup.sh to install ruby when boot on a ISO file
19
+ * Init project
data/README.md CHANGED
@@ -21,4 +21,4 @@ When you boot from an `iso`, you can install `ruby`, `getch` and correct your `P
21
21
  ## Examples
22
22
  For a french user:
23
23
 
24
- # getch --username ninja --zoneinfo Europe/Paris --language fr_FR --keyboard fr
24
+ # getch --username ninja --zoneinfo "Europe/Paris" --language fr_FR --keyboard fr
@@ -7,6 +7,11 @@ Gem::Specification.new do |s|
7
7
  s.authors = ["szorfein"]
8
8
  s.email = ["szorfein@protonmail.com"]
9
9
  s.homepage = 'https://github.com/szorfein/getch'
10
+ s.metadata = {
11
+ "changelog_uri" => "https://github.com/szorfein/getch/blob/master/CHANGELOG.md",
12
+ "bug_tracker_uri" => "https://github.com/szorfein/getch/issues",
13
+ "wiki_uri" => "https://github.com/szorfein/getch"
14
+ }
10
15
  s.license = "MIT"
11
16
  s.required_ruby_version = '>=2.5'
12
17
 
@@ -22,7 +22,8 @@ module Getch
22
22
  :mount => false,
23
23
  :gentoo_base => false,
24
24
  :gentoo_config => false,
25
- :gentoo_update => false
25
+ :gentoo_update => false,
26
+ :gentoo_kernel => false
26
27
  }
27
28
 
28
29
  MOUNTPOINT = "/mnt/gentoo".freeze
@@ -75,6 +76,8 @@ module Getch
75
76
  gentoo.stage3
76
77
  gentoo.config(options)
77
78
  gentoo.chroot
79
+ gentoo.kernel
80
+ gentoo.boot(options)
78
81
  end
79
82
 
80
83
  def self.main(argv)
@@ -3,6 +3,8 @@ require 'open3'
3
3
  require_relative 'gentoo/stage'
4
4
  require_relative 'gentoo/config'
5
5
  require_relative 'gentoo/chroot'
6
+ require_relative 'gentoo/sources'
7
+ require_relative 'gentoo/boot'
6
8
 
7
9
  module Getch
8
10
  module Gentoo
@@ -38,7 +40,25 @@ module Getch
38
40
  chroot.update
39
41
  chroot.world
40
42
  chroot.systemd
43
+ return if STATES[:gentoo_kernel]
41
44
  chroot.kernel
45
+ chroot.kernel_deps
46
+ chroot.install_tools
47
+ end
48
+
49
+ def kernel
50
+ return if STATES[:gentoo_kernel]
51
+ source = Getch::Gentoo::Sources.new()
52
+ new
53
+ source.build_kspp
54
+ source.build_others
55
+ source.make
56
+ @state.kernel
57
+ end
58
+
59
+ def boot(options)
60
+ boot = Getch::Gentoo::Boot.new(options)
61
+ boot.start
42
62
  end
43
63
  end
44
64
  end
@@ -0,0 +1,59 @@
1
+ module Getch
2
+ module Gentoo
3
+ class Boot
4
+ def initialize(opts)
5
+ @disk = opts.disk
6
+ @user = opts.username
7
+ end
8
+
9
+ def start
10
+ gen_fstab
11
+ grub
12
+ password
13
+ umount
14
+ end
15
+
16
+ def grub
17
+ return if Helpers::efi?
18
+ puts 'Installing GRUB...'
19
+ Helpers::emerge("sys-boot/grub:2", MOUNTPOINT)
20
+ exec_chroot("grub-install /dev/#{@disk}")
21
+ exec_chroot('grub-mkconfig -o /boot/grub/grub.cfg')
22
+ end
23
+
24
+ def password
25
+ puts 'Password for root'
26
+ cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile && passwd\""
27
+ system(cmd)
28
+ if @user != nil
29
+ puts "Creating user #{@user}"
30
+ exec_chroot("useradd -m -G users,wheel,audio,video #{@user}")
31
+ puts "Password for your user #{@user}"
32
+ cmd = "chroot #{MOUNTPOINT} /bin/bash -c \"source /etc/profile && passwd #{@user}\""
33
+ system(cmd)
34
+ end
35
+ end
36
+
37
+ def umount
38
+ Helpers::exec_or_die("umount -l /mnt/gentoo/dev{/shm,/pts,}")
39
+ Helpers::exec_or_die("umount -R #{MOUNTPONT}")
40
+ puts "Reboot when you have done"
41
+ end
42
+
43
+ private
44
+
45
+ def gen_fstab
46
+ mount = Getch::Mount.new(@disk, @user)
47
+ mount.gen_fstab
48
+ end
49
+
50
+ def exec_chroot(cmd)
51
+ script = "chroot #{MOUNTPOINT} /bin/bash -c \"
52
+ source /etc/profile
53
+ #{cmd}
54
+ \""
55
+ Helpers::exec_or_die(script)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -28,14 +28,42 @@ module Getch
28
28
  end
29
29
 
30
30
  def kernel
31
+ return if Dir.exist? "#{MOUNTPOINT}/usr/src/linux"
31
32
  puts "Installing kernel gentoo-sources..."
32
- cmd = "emerge sys-kernel/gentoo-sources sys-kernel/linux-firmware"
33
33
  license = "#{MOUNTPOINT}/etc/portage/package.license"
34
34
  File.write(license, "sys-kernel/linux-firmware linux-fw-redistributable no-source-code\n")
35
- exec_chroot(cmd)
35
+ Helpers::emerge("sys-kernel/gentoo-sources linux-firmware", MOUNTPOINT)
36
+ end
37
+
38
+ def kernel_deps
39
+ puts "Installing Garden..."
40
+ get_garden
41
+ garden_dep
42
+ end
43
+
44
+ def install_tools
45
+ Helpers::emerge("dhcpcd", MOUNTPOINT)
36
46
  end
37
47
 
38
48
  private
49
+
50
+ def get_garden
51
+ return if Dir.exist? "#{MOUNTPOINT}/root/garden-master"
52
+ url = 'https://github.com/szorfein/garden/archive/master.tar.gz'
53
+ file = 'garden-master.tar.gz'
54
+
55
+ Dir.chdir("#{MOUNTPOINT}/root")
56
+ Helpers::get_file_online(url, file)
57
+ Helpers::exec_or_die("tar xzf #{file}") if ! Dir.exist? 'garden-master'
58
+ end
59
+
60
+ def garden_dep
61
+ Helpers::emerge("gentoolkit", MOUNTPOINT)
62
+ cmd = "euse -p sys-apps/kmod -E lzma"
63
+ Helpers::emerge("kmod", MOUNTPOINT)
64
+ exec_chroot(cmd)
65
+ end
66
+
39
67
  def mount
40
68
  puts "Populate /proc, /sys and /dev."
41
69
  Helpers::exec_or_die("mount --types proc /proc \"#{MOUNTPOINT}/proc\"")
@@ -10,11 +10,13 @@ module Getch
10
10
 
11
11
  def portage
12
12
  nproc = `nproc`.chomp()
13
+ efi = Helpers::efi? ? 'GRUB_PLATFORMS="efi-64"' : ''
13
14
  data = [
14
15
  '',
15
16
  'ACCEPT_KEYWORD="amd64 ~amd64"',
16
17
  "MAKEOPTS=\"-j#{nproc} -l#{nproc}\"",
17
- 'INPUT_DEVICES="libinput"'
18
+ 'INPUT_DEVICES="libinput"',
19
+ efi
18
20
  ]
19
21
  File.write(@make, data.join("\n"), mode: "a")
20
22
  end
@@ -42,10 +44,10 @@ module Getch
42
44
  def systemd(options)
43
45
  control_options(options)
44
46
  File.write("#{MOUNTPOINT}/etc/locale.gen", @utf8)
45
- File.write("#{MOUNTPOINT}/etc/locale.conf", "LANG=#{@lang}")
47
+ File.write("#{MOUNTPOINT}/etc/locale.conf", "LANG=#{@lang}\n")
46
48
  File.write("#{MOUNTPOINT}/etc/locale.conf", 'LC_COLLATE=C', mode: 'a')
47
49
  File.write("#{MOUNTPOINT}/etc/timezone", "#{options.zoneinfo}")
48
- File.write("#{MOUNTPOINT}/etc/vconsole.conf", "KEYMAP=#{@keymap}")
50
+ File.write("#{MOUNTPOINT}/etc/vconsole.conf", "KEYMAP=#{options.keyboard}")
49
51
  end
50
52
 
51
53
  def portage_fs
@@ -72,12 +74,12 @@ module Getch
72
74
  Dir.glob("#{MOUNTPOINT}/usr/share/keymaps/**/#{keys}.map.gz") { |f|
73
75
  @keymap = f
74
76
  }
75
- raise "No keymap #{@keymap} found" if ! @keymap
77
+ raise ArgumentError, "No keymap #{@keymap} found" if ! @keymap
76
78
  end
77
79
 
78
80
  def search_zone(zone)
79
81
  if ! File.exist?("#{MOUNTPOINT}/usr/share/zoneinfo/#{zone}")
80
- raise "Zoneinfo #{zone} doesn\'t exist."
82
+ raise ArgumentError, "Zoneinfo #{zone} doesn\'t exist."
81
83
  end
82
84
  end
83
85
 
@@ -87,7 +89,7 @@ module Getch
87
89
  @utf8 = $~[0] if l.match(/^#{lang}[. ]+[utf\-8 ]+/i)
88
90
  @lang = $~[0] if l.match(/^#{lang}[. ]+utf\-8/i)
89
91
  }
90
- raise "Lang #{lang} no found" if ! @utf8
92
+ raise ArgumentError, "Lang #{lang} no found" if ! @utf8
91
93
  end
92
94
  end
93
95
  end
@@ -0,0 +1,66 @@
1
+ module Getch
2
+ module Gentoo
3
+ class Sources
4
+ def initialize
5
+ @lsmod = `lsmod`.chomp
6
+ @linux = '/usr/src/linux'
7
+ end
8
+
9
+ def build_others
10
+ install_wifi if ismatch?('iwlwifi')
11
+ install_zfs if ismatch?('zfs')
12
+ exec("./kernel.sh -b -a virtualbox-guest -k #{@linux}") if ismatch?('vmwgfx')
13
+ end
14
+
15
+ def build_kspp
16
+ puts "Adding KSPP to the kernel source"
17
+ exec("./kernel.sh -b -a systemd -k #{@linux}")
18
+ end
19
+
20
+ def make
21
+ puts "Compiling kernel sources"
22
+ only_make
23
+ cmd = "cd #{@linux} && make modules_install && make install"
24
+ exec_chroot(cmd)
25
+ end
26
+
27
+ def only_make
28
+ exec_chroot("cd #{@linux} && make -j$(nproc)")
29
+ end
30
+
31
+ private
32
+
33
+ def ismatch?(arg)
34
+ @lsmod.match?(/#{arg}/)
35
+ end
36
+
37
+ def exec(cmd)
38
+ script = "chroot #{MOUNTPOINT} /bin/bash -c \"
39
+ source /etc/profile
40
+ cd /root/garden-master
41
+ #{cmd}
42
+ \""
43
+ Helpers::exec_or_die(script)
44
+ end
45
+
46
+ def exec_chroot(cmd)
47
+ script = "chroot #{MOUNTPOINT} /bin/bash -c \"
48
+ source /etc/profile
49
+ #{cmd}
50
+ \""
51
+ Helpers::exec_or_die(script)
52
+ end
53
+
54
+ def install_wifi
55
+ exec("./kernel.sh -b -a wifi -k #{@linux}")
56
+ Helpers::emerge("net-wireless/iw wpa_supplicant", MOUNTPOINT)
57
+ end
58
+
59
+ def install_zfs
60
+ exec("./kernel.sh -b -a zfs -k #{@linux}")
61
+ only_make # a first make is necessary before emerge zfs
62
+ Helpers::emerge("zfs", MOUNTPOINT)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -29,4 +29,12 @@ module Helpers
29
29
  def self.add_file(path, content = '')
30
30
  File.write path, content if ! File.exist? path
31
31
  end
32
+
33
+ def self.emerge(pkgs, path)
34
+ cmd = "chroot #{path} /bin/bash -c \"
35
+ source /etc/profile
36
+ emerge --changed-use #{pkgs}
37
+ \""
38
+ exec_or_die(cmd)
39
+ end
32
40
  end
@@ -35,9 +35,39 @@ module Getch
35
35
  if @user != nil then
36
36
  FileUtils.mkdir_p @home, mode: 0700 if ! Dir.exist?(@home)
37
37
  system("mount /dev/#{@disk}4 #{@home}")
38
- FileUtils.chown @user, @user, @home
38
+ #FileUtils.chown @user, @user, @home
39
39
  end
40
40
  @state.mount
41
41
  end
42
+
43
+ def gen_fstab
44
+ gen_uuid
45
+ datas = gen_data
46
+ File.write("#{MOUNTPOINT}/etc/fstab", datas.join("\n"), mode: "a")
47
+ end
48
+
49
+ private
50
+
51
+ def gen_uuid
52
+ @hdd1_uuid = `lsblk -o "UUID" /dev/#{@disk}1 | tail -1`.chomp()
53
+ @hdd2_uuid = `lsblk -o "UUID" /dev/#{@disk}2 | tail -1`.chomp()
54
+ @hdd3_uuid = `lsblk -o "UUID" /dev/#{@disk}3 | tail -1`.chomp()
55
+ @hdd4_uuid = `lsblk -o "UUID" /dev/#{@disk}4 | tail -1`.chomp()
56
+ end
57
+
58
+ def gen_data
59
+ boot = Helpers::efi? ? "UUID=#{@hdd1_uuid} /boot/efi vfat noauto,defaults 0 2" : ''
60
+ swap = "UUID=#{@hdd2_uuid} none swap discard 0 0"
61
+ root = "UUID=#{@hdd3_uuid} / ext4 defaults 0 1"
62
+ home = @user != nil ? "UUID=#{@hdd4_uuid} /home/#{@user} ext4 defaults 0 2" : ''
63
+
64
+ datas = [
65
+ boot,
66
+ swap,
67
+ root,
68
+ home
69
+ ]
70
+ return datas
71
+ end
42
72
  end
43
73
  end
@@ -37,6 +37,11 @@ module Getch
37
37
  save
38
38
  end
39
39
 
40
+ def kernel
41
+ STATES[:gentoo_kernel] = true
42
+ save
43
+ end
44
+
40
45
  private
41
46
 
42
47
  def save
@@ -1,3 +1,3 @@
1
1
  module Getch
2
- VERSION = '0.0.3'.freeze
2
+ VERSION = '0.0.4'.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.3
4
+ version: 0.0.4
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-14 00:00:00.000000000 Z
38
+ date: 2020-09-16 00:00:00.000000000 Z
39
39
  dependencies: []
40
40
  description:
41
41
  email:
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
+ - CHANGELOG.md
49
50
  - README.md
50
51
  - Rakefile
51
52
  - bin/getch
@@ -54,8 +55,10 @@ files:
54
55
  - lib/getch.rb
55
56
  - lib/getch/disk.rb
56
57
  - lib/getch/gentoo.rb
58
+ - lib/getch/gentoo/boot.rb
57
59
  - lib/getch/gentoo/chroot.rb
58
60
  - lib/getch/gentoo/config.rb
61
+ - lib/getch/gentoo/sources.rb
59
62
  - lib/getch/gentoo/stage.rb
60
63
  - lib/getch/helpers.rb
61
64
  - lib/getch/mount.rb
@@ -65,7 +68,10 @@ files:
65
68
  homepage: https://github.com/szorfein/getch
66
69
  licenses:
67
70
  - MIT
68
- metadata: {}
71
+ metadata:
72
+ changelog_uri: https://github.com/szorfein/getch/blob/master/CHANGELOG.md
73
+ bug_tracker_uri: https://github.com/szorfein/getch/issues
74
+ wiki_uri: https://github.com/szorfein/getch
69
75
  post_install_message:
70
76
  rdoc_options: []
71
77
  require_paths:
metadata.gz.sig CHANGED
Binary file