getch 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGELOG.md +9 -0
  5. data/README.md +18 -4
  6. data/lib/getch.rb +14 -7
  7. data/lib/getch/command.rb +18 -4
  8. data/lib/getch/filesystem.rb +5 -0
  9. data/lib/getch/filesystem/clean.rb +51 -0
  10. data/lib/getch/filesystem/device.rb +55 -0
  11. data/lib/getch/filesystem/ext4/config.rb +8 -9
  12. data/lib/getch/filesystem/ext4/device.rb +2 -7
  13. data/lib/getch/filesystem/ext4/encrypt/config.rb +9 -9
  14. data/lib/getch/filesystem/ext4/encrypt/deps.rb +1 -1
  15. data/lib/getch/filesystem/ext4/encrypt/device.rb +3 -8
  16. data/lib/getch/filesystem/ext4/encrypt/format.rb +3 -5
  17. data/lib/getch/filesystem/ext4/encrypt/mount.rb +6 -43
  18. data/lib/getch/filesystem/ext4/encrypt/partition.rb +19 -38
  19. data/lib/getch/filesystem/ext4/format.rb +3 -5
  20. data/lib/getch/filesystem/ext4/mount.rb +7 -46
  21. data/lib/getch/filesystem/ext4/partition.rb +16 -39
  22. data/lib/getch/filesystem/lvm/config.rb +5 -5
  23. data/lib/getch/filesystem/lvm/deps.rb +3 -2
  24. data/lib/getch/filesystem/lvm/device.rb +23 -7
  25. data/lib/getch/filesystem/lvm/encrypt/config.rb +3 -3
  26. data/lib/getch/filesystem/lvm/encrypt/deps.rb +1 -1
  27. data/lib/getch/filesystem/lvm/encrypt/device.rb +23 -7
  28. data/lib/getch/filesystem/lvm/encrypt/format.rb +3 -3
  29. data/lib/getch/filesystem/lvm/encrypt/mount.rb +7 -46
  30. data/lib/getch/filesystem/lvm/encrypt/partition.rb +19 -31
  31. data/lib/getch/filesystem/lvm/format.rb +11 -7
  32. data/lib/getch/filesystem/lvm/mount.rb +7 -46
  33. data/lib/getch/filesystem/lvm/partition.rb +19 -31
  34. data/lib/getch/filesystem/mount.rb +56 -0
  35. data/lib/getch/filesystem/partition.rb +77 -0
  36. data/lib/getch/filesystem/zfs/config.rb +4 -5
  37. data/lib/getch/filesystem/zfs/deps.rb +3 -6
  38. data/lib/getch/filesystem/zfs/device.rb +30 -9
  39. data/lib/getch/filesystem/zfs/encrypt/config.rb +7 -7
  40. data/lib/getch/filesystem/zfs/encrypt/deps.rb +2 -6
  41. data/lib/getch/filesystem/zfs/encrypt/device.rb +30 -9
  42. data/lib/getch/filesystem/zfs/encrypt/format.rb +84 -1
  43. data/lib/getch/filesystem/zfs/encrypt/mount.rb +4 -20
  44. data/lib/getch/filesystem/zfs/encrypt/partition.rb +15 -111
  45. data/lib/getch/filesystem/zfs/format.rb +84 -2
  46. data/lib/getch/filesystem/zfs/mount.rb +5 -24
  47. data/lib/getch/filesystem/zfs/partition.rb +15 -108
  48. data/lib/getch/gentoo.rb +2 -1
  49. data/lib/getch/gentoo/boot.rb +2 -2
  50. data/lib/getch/gentoo/chroot.rb +10 -24
  51. data/lib/getch/gentoo/config.rb +22 -2
  52. data/lib/getch/gentoo/sources.rb +11 -11
  53. data/lib/getch/helpers.rb +13 -0
  54. data/lib/getch/options.rb +20 -5
  55. data/lib/getch/version.rb +1 -1
  56. metadata +6 -2
  57. metadata.gz.sig +0 -0
@@ -17,7 +17,7 @@ module Getch
17
17
 
18
18
  def systemd_boot
19
19
  return if ! Helpers::efi?
20
- esp = '/boot/efi'
20
+ esp = '/efi'
21
21
  dir = "#{@root_dir}/#{esp}/loader/entries/"
22
22
  datas_gentoo = [
23
23
  'title Gentoo Linux',
@@ -42,15 +42,14 @@ module Getch
42
42
 
43
43
  def gen_uuid
44
44
  @uuid_swap = `lsblk -o "UUID" #{@dev_swap} | tail -1`.chomp()
45
- @uuid_boot = `lsblk -o "UUID" #{@dev_boot} | tail -1`.chomp() if @dev_boot
46
- @uuid_boot_efi = `lsblk -o "UUID" #{@dev_boot_efi} | tail -1`.chomp() if @dev_boot_efi
45
+ @uuid_esp = `lsblk -o "UUID" #{@dev_esp} | tail -1`.chomp() if @dev_esp
47
46
  end
48
47
 
49
48
  def data_fstab
50
- boot_efi = @dev_boot_efi ? "UUID=#{@uuid_boot_efi} /boot/efi vfat noauto,noatime 1 2" : ''
49
+ efi = @dev_esp ? "UUID=#{@uuid_esp} /efi vfat noauto,noatime 1 2" : ''
51
50
  swap = @dev_swap ? "UUID=#{@uuid_swap} none swap discard 0 0" : ''
52
51
 
53
- [ boot_efi, swap ]
52
+ [ efi, swap ]
54
53
  end
55
54
  end
56
55
  end
@@ -2,24 +2,21 @@ module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
4
  class Deps < Getch::FileSystem::Zfs::Device
5
- def initialize
6
- super
5
+ def make
7
6
  install_deps
8
7
  zfs_mountpoint
9
8
  auto_module_rebuild
10
- end
11
-
12
- def make
13
9
  hostid
14
10
  options_make
15
11
  Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
16
12
  end
17
13
 
18
14
  private
15
+
19
16
  def install_deps
20
17
  exec("euse -E libzfs") if ! Helpers::grep?("#{MOUNTPOINT}/etc/portage/make.conf", /libzfs/)
21
18
  exec("euse -E rootfs") if ! Helpers::grep?("#{MOUNTPOINT}/etc/portage/make.conf", /rootfs/)
22
- Getch::Garden.new('-a zfs').run!
19
+ Getch::Bask.new('-a zfs').run!
23
20
  Getch::Make.new("make modules_prepare").run!
24
21
  Getch::Make.new("make -j$(nproc)").run!
25
22
  Getch::Emerge.new('genkernel sys-fs/zfs').pkg!
@@ -1,18 +1,39 @@
1
1
  module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
- class Device
4
+ class Device < Getch::FileSystem::Device
5
5
  def initialize
6
- @disk = DEFAULT_OPTIONS[:disk]
7
- @user = DEFAULT_OPTIONS[:username]
8
- @dev_boot_efi = Helpers::efi? ? "/dev/#{@disk}1" : nil
9
- @dev_boot = Helpers::efi? ? nil : "/dev/#{@disk}2"
10
- @dev_swap = Helpers::efi? ? "/dev/#{@disk}2" : "/dev/#{@disk}3"
11
- @dev_root = Helpers::efi? ? "/dev/#{@disk}3" : "/dev/#{@disk}4"
12
- @boot_pool_name = 'bpool'
13
- @pool_name = 'zpool'
6
+ super
7
+ @id = Helpers::pool_id(@dev_root)
8
+ @boot_pool_name = "bpool-#{@id}"
9
+ @pool_name = "rpool-#{@id}"
14
10
  @zfs_home = @user ? true : false
15
11
  end
12
+
13
+ private
14
+
15
+ def search_boot
16
+ if @boot_disk
17
+ @dev_gpt = @efi ? nil : "/dev/#{@boot_disk}1"
18
+ @dev_boot = @efi ? nil : "/dev/#{@boot_disk}2"
19
+ @dev_esp = @efi ? "/dev/#{@boot_disk}1" : nil
20
+ else
21
+ @dev_gpt = @efi ? nil : "/dev/#{@disk}#{@root_part}"
22
+ @dev_esp = @efi ? "/dev/#{@disk}#{@root_part}" : nil
23
+ @boot_disk = @disk # used by grub
24
+ @root_part += 1
25
+ @dev_boot = @efi ? nil : "/dev/#{@disk}#{@root_part}"
26
+ @root_part += 1 if ! @efi
27
+ end
28
+ end
29
+
30
+ def search_root
31
+ if @root_part == 1
32
+ @dev_root = "/dev/#{@disk}"
33
+ else
34
+ @dev_root = "/dev/#{@disk}#{@root_part}"
35
+ end
36
+ end
16
37
  end
17
38
  end
18
39
  end
@@ -18,8 +18,8 @@ module Getch
18
18
  end
19
19
 
20
20
  def systemd_boot
21
- return if ! Helpers::efi?
22
- esp = '/boot/efi'
21
+ return if ! @efi
22
+ esp = '/efi'
23
23
  dir = "#{@root_dir}/#{esp}/loader/entries/"
24
24
  datas_gentoo = [
25
25
  'title Gentoo Linux',
@@ -32,14 +32,14 @@ module Getch
32
32
 
33
33
  def crypttab
34
34
  datas = [
35
- "cryptswap UUID=#{@uuid_swap} /dev/urandom swap,cipher=aes-xts-plain64:sha256,size=256"
35
+ "cryptswap PARTUUID=#{@partuuid_swap} /dev/urandom swap,cipher=aes-xts-plain64:sha256,size=256"
36
36
  ]
37
37
  File.write("#{@root_dir}/etc/crypttab", datas.join("\n"))
38
38
  end
39
39
 
40
40
  # See https://wiki.gentoo.org/wiki/ZFS#ZFS_root
41
41
  def grub
42
- return if Helpers::efi?
42
+ return if @efi
43
43
  file = "#{@root_dir}/etc/default/grub"
44
44
  cmdline = [
45
45
  "GRUB_CMDLINE_LINUX=\"root=ZFS=#{@pool_name}/ROOT/gentoo init=#{@init} dozfs keymap=#{DEFAULT_OPTIONS[:keymap]}\""
@@ -50,12 +50,12 @@ module Getch
50
50
  private
51
51
 
52
52
  def gen_uuid
53
- @uuid_swap = `lsblk -o "UUID" #{@dev_swap} | tail -1`.chomp()
54
- @uuid_boot_efi = `lsblk -o "UUID" #{@dev_boot_efi} | tail -1`.chomp() if @dev_boot_efi
53
+ @partuuid_swap = Helpers::partuuid(@dev_swap)
54
+ @uuid_esp = `lsblk -o "UUID" #{@dev_esp} | tail -1`.chomp() if @dev_esp
55
55
  end
56
56
 
57
57
  def data_fstab
58
- boot_efi = @dev_boot_efi ? "UUID=#{@uuid_boot_efi} /boot/efi vfat noauto,noatime 1 2" : ''
58
+ boot_efi = @dev_esp ? "UUID=#{@uuid_esp} /efi vfat noauto,noatime 1 2" : ''
59
59
  swap = @dev_swap ? "/dev/mapper/cryptswap none swap discard 0 0" : ''
60
60
 
61
61
  [ boot_efi, swap ]
@@ -3,14 +3,10 @@ module Getch
3
3
  module Zfs
4
4
  module Encrypt
5
5
  class Deps < Getch::FileSystem::Zfs::Encrypt::Device
6
- def initialize
7
- super
6
+ def make
8
7
  install_deps
9
8
  zfs_mountpoint
10
9
  auto_module_rebuild
11
- end
12
-
13
- def make
14
10
  hostid
15
11
  options_make
16
12
  Getch::Make.new("genkernel --kernel-config=/usr/src/linux/.config all").run!
@@ -21,7 +17,7 @@ module Getch
21
17
  exec("euse -E libzfs") if ! Helpers::grep?("#{MOUNTPOINT}/etc/portage/make.conf", /libzfs/)
22
18
  exec("euse -E rootfs") if ! Helpers::grep?("#{MOUNTPOINT}/etc/portage/make.conf", /rootfs/)
23
19
  exec("euse -E cryptsetup") if ! Helpers::grep?("#{MOUNTPOINT}/etc/portage/make.conf", /cryptsetup/)
24
- Getch::Garden.new('-a zfs').run!
20
+ Getch::Bask.new('-a zfs').run!
25
21
  Getch::Make.new("make modules_prepare").run!
26
22
  Getch::Make.new("make -j$(nproc)").run!
27
23
  Getch::Emerge.new('genkernel sys-fs/zfs sys-apps/systemd sys-fs/cryptsetup').pkg!
@@ -2,18 +2,39 @@ module Getch
2
2
  module FileSystem
3
3
  module Zfs
4
4
  module Encrypt
5
- class Device
5
+ class Device < Getch::FileSystem::Device
6
6
  def initialize
7
- @disk = DEFAULT_OPTIONS[:disk]
8
- @user = DEFAULT_OPTIONS[:username]
9
- @dev_boot_efi = Helpers::efi? ? "/dev/#{@disk}1" : nil
10
- @dev_boot = Helpers::efi? ? nil : "/dev/#{@disk}2"
11
- @dev_swap = Helpers::efi? ? "/dev/#{@disk}2" : "/dev/#{@disk}3"
12
- @dev_root = Helpers::efi? ? "/dev/#{@disk}3" : "/dev/#{@disk}4"
13
- @boot_pool_name = 'bpool'
14
- @pool_name = 'zpool'
7
+ super
8
+ @id = Helpers::pool_id(@dev_root)
9
+ @boot_pool_name = "bpool-#{@id}"
10
+ @pool_name = "rpool-#{@id}"
15
11
  @zfs_home = @user ? true : false
16
12
  end
13
+
14
+ private
15
+
16
+ def search_boot
17
+ if @boot_disk
18
+ @dev_gpt = @efi ? nil : "/dev/#{@boot_disk}1"
19
+ @dev_boot = @efi ? nil : "/dev/#{@boot_disk}2"
20
+ @dev_esp = @efi ? "/dev/#{@boot_disk}1" : nil
21
+ else
22
+ @dev_gpt = @efi ? nil : "/dev/#{@disk}#{@root_part}"
23
+ @dev_esp = @efi ? "/dev/#{@disk}#{@root_part}" : nil
24
+ @boot_disk = @disk # used by grub
25
+ @root_part += 1
26
+ @dev_boot = @efi ? nil : "/dev/#{@disk}#{@root_part}"
27
+ @root_part += 1 if ! @efi
28
+ end
29
+ end
30
+
31
+ def search_root
32
+ if @root_part == 1
33
+ @dev_root = "/dev/#{@disk}"
34
+ else
35
+ @dev_root = "/dev/#{@disk}#{@root_part}"
36
+ end
37
+ end
17
38
  end
18
39
  end
19
40
  end
@@ -5,16 +5,99 @@ module Getch
5
5
  class Format < Getch::FileSystem::Zfs::Encrypt::Device
6
6
  def initialize
7
7
  super
8
+ @log = Getch::Log.new()
8
9
  @state = Getch::States.new()
10
+ if ! @id
11
+ @log.info "Research pool id for #{@dev_root}..."
12
+ sleep 2 until Helpers::pool_id(@dev_root)
13
+ @id = Helpers::pool_id(@dev_root)
14
+ @boot_pool_name = "bpool-#{@id}"
15
+ @pool_name = "rpool-#{@id}"
16
+ end
9
17
  format
10
18
  end
11
19
 
20
+ private
21
+
12
22
  def format
13
23
  return if STATES[:format]
14
- system("mkfs.fat -F32 #{@dev_boot_efi}") if @dev_boot_efi
24
+ raise "Error, no id found for #{@dev_root}." if ! @id
25
+ system("mkfs.fat -F32 #{@dev_esp}") if @dev_esp
15
26
  system("mkswap -f #{@dev_swap}")
27
+ zfs
28
+ datasets
16
29
  @state.format
17
30
  end
31
+
32
+ def zfs
33
+ bloc=`blockdev --getbsz #{@dev_root}`.chomp
34
+ ashift = case bloc
35
+ when 8096
36
+ 13
37
+ when 4096
38
+ 12
39
+ else # 512
40
+ 9
41
+ end
42
+
43
+ Helpers::mkdir(MOUNTPOINT)
44
+
45
+ @log.debug("ashift found for #{bloc} - #{ashift}")
46
+ if @dev_boot
47
+ # https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html
48
+ @log.info("Creating boot pool on #{@pool_name}")
49
+ exec("zpool create -f \\
50
+ -o ashift=#{ashift} -d \\
51
+ -o feature@async_destroy=enabled \\
52
+ -o feature@bookmarks=enabled \\
53
+ -o feature@embedded_data=enabled \\
54
+ -o feature@empty_bpobj=enabled \\
55
+ -o feature@enabled_txg=enabled \\
56
+ -o feature@extensible_dataset=enabled \\
57
+ -o feature@filesystem_limits=enabled \\
58
+ -o feature@hole_birth=enabled \\
59
+ -o feature@large_blocks=enabled \\
60
+ -o feature@lz4_compress=enabled \\
61
+ -o feature@spacemap_histogram=enabled \\
62
+ -O acltype=posixacl -O canmount=off -O compression=lz4 \\
63
+ -O devices=off -O normalization=formD -O atime=off -O xattr=sa \\
64
+ -O mountpoint=/boot -R #{MOUNTPOINT} \\
65
+ #{@boot_pool_name} #{@dev_boot}
66
+ ")
67
+ end
68
+
69
+ exec("zpool create -f -o ashift=#{ashift} \\
70
+ -O encryption=aes-256-gcm \\
71
+ -O keylocation=prompt -O keyformat=passphrase \\
72
+ -O acltype=posixacl -O canmount=off -O compression=lz4 \\
73
+ -O dnodesize=auto -O normalization=formD -O atime=off \\
74
+ -O xattr=sa -O mountpoint=/ -R #{MOUNTPOINT} \\
75
+ #{@pool_name} #{@dev_root}
76
+ ")
77
+ end
78
+
79
+ def datasets
80
+ exec("zfs create -o canmount=off -o mountpoint=none #{@pool_name}/ROOT")
81
+ exec("zfs create -o canmount=off -o mountpoint=none #{@boot_pool_name}/BOOT") if @dev_boot
82
+
83
+ exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/gentoo")
84
+ exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/gentoo") if @dev_boot
85
+
86
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/usr")
87
+ exec("zfs create #{@pool_name}/ROOT/gentoo/usr/src")
88
+ exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/var")
89
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/log")
90
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/db")
91
+ exec("zfs create #{@pool_name}/ROOT/gentoo/var/tmp")
92
+
93
+ exec("zfs create -o canmount=off -o mountpoint=/ #{@pool_name}/USERDATA")
94
+ exec("zfs create -o canmount=on -o mountpoint=/root #{@pool_name}/USERDATA/root")
95
+ exec("zfs create -o canmount=on -o mountpoint=/home/#{@user} #{@pool_name}/USERDATA/#{@user}") if @user
96
+ end
97
+
98
+ def exec(cmd)
99
+ Helpers::sys(cmd)
100
+ end
18
101
  end
19
102
  end
20
103
  end
@@ -8,9 +8,8 @@ module Getch
8
8
  def initialize
9
9
  super
10
10
  @root_dir = MOUNTPOINT
11
- @boot_dir = "#{@root_dir}/boot"
12
- @boot_efi_dir = "#{@root_dir}/boot/efi"
13
- @state = Getch::States.new()
11
+ @mount = Getch::FileSystem::Mount.new
12
+ @state = Getch::States.new
14
13
  @log = Getch::Log.new
15
14
  end
16
15
 
@@ -21,38 +20,23 @@ module Getch
21
20
  exec("zpool import -N -R #{MOUNTPOINT} #{@pool_name}")
22
21
  exec("zpool import -N -R #{MOUNTPOINT} #{@boot_pool_name}") if @dev_boot
23
22
  exec("zfs load-key -a")
24
- mount_swap
23
+ @mount.swap(@dev_swap)
25
24
  mount_root
26
25
  mount_boot
27
- mount_boot_efi
26
+ @mount.esp(@dev_esp)
28
27
  exec("zfs mount -a")
29
28
  @state.mount
30
29
  end
31
30
 
32
31
  private
33
32
 
34
- def mount_swap
35
- if Helpers::grep?('/proc/swaps', /^\/dev/)
36
- exec("swapoff #{@dev_swap}")
37
- end
38
-
39
- exec("swapon #{@dev_swap}")
40
- end
41
-
42
33
  def mount_root
43
34
  Helpers::mkdir(@root_dir)
44
35
  exec("zfs mount #{@pool_name}/ROOT/gentoo")
45
36
  end
46
37
 
47
- def mount_boot_efi
48
- return if ! @dev_boot_efi
49
- Helpers::mkdir(@boot_efi_dir)
50
- exec("mount #{@dev_boot_efi} #{@boot_efi_dir}")
51
- end
52
-
53
38
  def mount_boot
54
39
  return if ! @dev_boot
55
- Helpers::mkdir(@boot_dir)
56
40
  exec("zfs mount #{@boot_pool_name}/BOOT/gentoo")
57
41
  end
58
42
 
@@ -6,134 +6,38 @@ module Getch
6
6
  def initialize
7
7
  super
8
8
  @state = Getch::States.new()
9
+ @clean = Getch::FileSystem::Clean
10
+ @partition = Getch::FileSystem::Partition.new
9
11
  @log = Getch::Log.new()
10
- run_partition
12
+ run
11
13
  end
12
14
 
13
- def run_partition
15
+ def run
14
16
  return if STATES[:partition ]
15
- clear_struct
16
- cleaning
17
+ @clean.old_zpool
18
+ @clean.struct(@disk, @cache_disk, @home_disk)
19
+ @clean.hdd(@disk, @cache_disk, @home_disk)
17
20
  partition
18
- zfs
19
21
  @state.partition
20
22
  end
21
23
 
22
24
  private
23
25
 
24
- def clear_struct
25
- oldvg = `vgdisplay | grep #{@vg}`.chomp
26
- oldzpool = `zpool status | grep pool:`.gsub(/pool: /, '').delete(' ').split("\n")
27
- if oldzpool[0] != "" and $?.success?
28
- oldzpool.each { |p| exec("zpool destroy #{p}") if p }
29
- end
30
- exec("vgremove -f #{@vg}") if oldvg != '' # remove older volume group
31
- exec("pvremove -f #{@dev_root}") if oldvg != '' and File.exist? @dev_root # remove older volume group
32
-
33
- exec("sgdisk -Z /dev/#{@disk}")
34
- exec("wipefs -a /dev/#{@disk}")
35
- end
36
-
37
- # See https://wiki.archlinux.org/index.php/Solid_state_drive/Memory_cell_clearing
38
- # for SSD
39
- def cleaning
40
- @bloc=`blockdev --getbsz /dev/#{@disk}`.chomp
41
- puts
42
- print "Cleaning data on #{@disk}, can be long, avoid this on Flash Memory (SSD,USB,...) ? (n,y) "
43
- case gets.chomp
44
- when /^y|^Y/
45
- exec("dd if=/dev/urandom of=/dev/#{@disk} bs=#{@bloc} status=progress")
46
- else
47
- return
48
- end
49
- end
50
-
51
26
  def partition
52
- mem=`awk '/MemTotal/ {print $2}' /proc/meminfo`.chomp + 'K'
53
27
  if Helpers::efi?
54
- exec("sgdisk -n1:1M:+260M -t1:EF00 /dev/#{@disk}")
55
- exec("sgdisk -n2:0:+#{mem} -t2:8200 /dev/#{@disk}")
56
- exec("sgdisk -n3:0:+0 -t3:BF00 /dev/#{@disk}")
28
+ @partition.efi(@dev_esp)
29
+ @partition.swap(@dev_swap)
30
+ @partition.root(@dev_root, "BF00") if @root_part != 1
57
31
  else
58
- exec("sgdisk -n1:1MiB:+1MiB -t1:EF02 /dev/#{@disk}")
59
- exec("sgdisk -n2:0:+2G -t2:BE00 /dev/#{@disk}") # boot pool GRUB
60
- exec("sgdisk -n3:0:+#{mem} -t3:8200 /dev/#{@disk}")
61
- exec("sgdisk -n4:0:+0 -t4:BF00 /dev/#{@disk}")
62
- end
63
- end
64
-
65
- def zfs
66
- ashift = case @bloc
67
- when 8096
68
- 13
69
- when 4096
70
- 12
71
- else # 512
72
- 9
73
- end
74
-
75
- Helpers::mkdir(MOUNTPOINT)
76
-
77
- @log.debug("ashift found for #{@bloc} - #{ashift}")
78
- if ! Helpers::efi?
79
- # https://openzfs.github.io/openzfs-docs/Getting%20Started/Ubuntu/Ubuntu%2020.04%20Root%20on%20ZFS.html
80
- @log.info("Creating boot pool on #{@pool_name}")
81
- exec("zpool create -f \\
82
- -o ashift=#{ashift} -d \\
83
- -o feature@async_destroy=enabled \\
84
- -o feature@bookmarks=enabled \\
85
- -o feature@embedded_data=enabled \\
86
- -o feature@empty_bpobj=enabled \\
87
- -o feature@enabled_txg=enabled \\
88
- -o feature@extensible_dataset=enabled \\
89
- -o feature@filesystem_limits=enabled \\
90
- -o feature@hole_birth=enabled \\
91
- -o feature@large_blocks=enabled \\
92
- -o feature@lz4_compress=enabled \\
93
- -o feature@spacemap_histogram=enabled \\
94
- -O acltype=posixacl -O canmount=off -O compression=lz4 \\
95
- -O devices=off -O normalization=formD -O atime=off -O xattr=sa \\
96
- -O mountpoint=/boot -R #{MOUNTPOINT} \\
97
- #{@boot_pool_name} #{@dev_boot}
98
- ")
32
+ @partition.gpt(@dev_gpt)
33
+ @partition.boot(@dev_boot)
34
+ @partition.swap(@dev_swap)
35
+ @partition.root(@dev_root, "BF00") if @root_part != 1
99
36
  end
100
-
101
- exec("zpool create -f -o ashift=#{ashift} \\
102
- -O encryption=aes-256-gcm \\
103
- -O keylocation=prompt -O keyformat=passphrase \\
104
- -O acltype=posixacl -O canmount=off -O compression=lz4 \\
105
- -O dnodesize=auto -O normalization=formD -O atime=off \\
106
- -O xattr=sa -O mountpoint=/ -R #{MOUNTPOINT} \\
107
- #{@pool_name} #{@dev_root}
108
- ")
109
-
110
- add_datasets
111
- end
112
-
113
- def add_datasets
114
- exec("zfs create -o canmount=off -o mountpoint=none #{@pool_name}/ROOT")
115
- exec("zfs create -o canmount=off -o mountpoint=none #{@boot_pool_name}/BOOT") if @dev_boot
116
-
117
- exec("zfs create -o canmount=noauto -o mountpoint=/ #{@pool_name}/ROOT/gentoo")
118
- # set bootfs
119
- #exec("zpool set bootfs=#{@pool_name}/ROOT/gentoo #{@pool_name}")
120
- exec("zfs create -o canmount=noauto -o mountpoint=/boot #{@boot_pool_name}/BOOT/gentoo") if @dev_boot
121
-
122
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/usr")
123
- exec("zfs create #{@pool_name}/ROOT/gentoo/usr/src")
124
- exec("zfs create -o canmount=off #{@pool_name}/ROOT/gentoo/var")
125
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/log")
126
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/db")
127
- exec("zfs create #{@pool_name}/ROOT/gentoo/var/tmp")
128
-
129
- exec("zfs create -o canmount=off -o mountpoint=/ #{@pool_name}/USERDATA")
130
- exec("zfs create -o canmount=on -o mountpoint=/root #{@pool_name}/USERDATA/root")
131
- exec("zfs create -o canmount=on -o mountpoint=/home/#{@user} #{@pool_name}/USERDATA/#{@user}") if @user
132
37
  end
133
38
 
134
- # Follow https://wiki.archlinux.org/index.php/Partitioning
135
39
  # Partition_efi
136
- # /boot/efi - EFI system partition - 260MB
40
+ # /efi - EFI system partition - 260MB
137
41
  # / - Root
138
42
 
139
43
  # Partition_bios