getch 0.0.3 → 0.0.4

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