void

- enter the void 🪐
git clone git://git.acid.vegas/archlinux.git
Log | Files | Refs | Archive

commit 7805bc51996ea415aeca964892cee0af1bc1c216
parent bcfcb83737d3b42778cdd234ca76a47cd2794444
Author: acidvegas <acid.vegas@acid.vegas>
Date: Wed, 23 Oct 2024 01:42:44 -0400

Debugging entertheoid for the r730xd...

Diffstat:
Menterthezoid | 114+++++++++++++++++++++++++++++++++++++++++++++----------------------------------
Dlocal/bin/scripts/zbm | 148-------------------------------------------------------------------------------

2 files changed, 65 insertions(+), 197 deletions(-)

diff --git a/enterthezoid b/enterthezoid
@@ -1,13 +1,17 @@
 #!/bin/bash
-# enter the zoid (zfs on root with raidz) - developed by acidvegas (https://git.acid.vegas/void)
+# enter the zoid (zfs on root with zraid) - developed by acidvegas (https://git.acid.vegas/void)
+#      boot: https://github.com/leahneukirchen/hrmpf
+# reference: https://docs.zfsbootmenu.org/en/v2.3.x/guides/void-linux/uefi.html (do we need to make any updates?)
 
 set -xev
 
 # Configuration
-HOSTNAME=blackhole
-BOOT_DRIVE=/dev/sde # Use the internal USB drive for the boot partition
-POOL_DRIVES="/dev/sda /dev/sdb /dev/sdc /dev/sdd" # Drives used for the ZFS pool
-RAIDZ_PARITY="1" # Number of drives to use for the RAID-Z parity (must be 1 or greater otherwise why are you using ZFS?)
+export HOSTNAME=blackhole
+export BOOT_DRIVE=/dev/sde # Use the internal USB drive for the boot partition
+export BOOT_METHOD=direct # Use direct or refind
+export POOL_DRIVES="/dev/sda /dev/sdb /dev/sdc /dev/sdd" # Verify these with lsblk before running
+export RAIDZ_PARITY="1" # Number of drives to use for the RAID-Z parity (must be 1 or greater otherwise why are you using ZFS?)
+
 
 checks() {
 	# Check if the system is using UEFI or BIOS
@@ -24,41 +28,33 @@ checks() {
 		fi
 	done
 
+	# Check if the boot method is valid
+	if [ $BOOT_METHOD != "direct" ] && [ $BOOT_METHOD != "refind" ]; then
+        echo "Boot method must be direct or refind"
+        exit 1
+    fi
+
+	# Check if the RAID-Z parity is valid
 	if [ $RAIDZ_PARITY -lt 1 ]; then
 		echo "RAID-Z parity must be 1 or greater"
 		exit 1
 	fi
-
-	# Double check the drives are correct
-	echo "Current block devices:" && lsblk
-	echo "Selected boot drive: $BOOT_DRIVE"
-	echo "Selected drives for the ZFS pool: $POOL_DRIVES"
-	read -p "Are these drives correct? (y/n): " -r
-	if [ $REPLY != "y" ]; then
-		echo "Update the POOL_DRIVES configuration"
-		exit 1
-	fi
 }
 
 
 setup_zfs() {
-	# Validation
-	checks
-
-	# Install dependencies
-	xbps-install -y gptfdisk util-linux zfs
+    # Validation
+    check
 
-	# Generate the hostid
+    # Generate the hostid
 	source /etc/os-release
 	export ID
 	zgenhostid -f 0x00bab10c
 
-	echo "No turning back now...ZFS TIME!"
-
 	# Prepare the boot drive
 	wipefs -a $BOOT_DRIVE
 	sgdisk --zap-all $BOOT_DRIVE
-	sgdisk -n "1:1m:+1g" -t "1:ef00" "$BOOT_DRIVE"
+	sgdisk -n "1:1m:+1g" -t "1:ef00" $BOOT_DRIVE
 
 	# Prepare the ZFS pool drives
 	for d in $POOL_DRIVES; do
@@ -70,11 +66,9 @@ setup_zfs() {
 		fi
 	done
 
-	echo "Entering a quasar cluster..."
-
-	# Create the ZFS pool
+	# Create the ZFS pool (should we use noatime=on instead of relatime=on?)
 	ZFS_POOL_DRIVES=$(echo $(for dev in $POOL_DRIVES; do find /dev/disk/by-id/ -samefile $(readlink -f "$dev") ! -name "*-part*" -print -quit; done))
-	zpool create -f -o ashift=12 -O compression=lz4 -O acltype=posixacl -O xattr=sa -O noatime=on -o autotrim=on -o compatibility=openzfs-2.1-linux -m none zroot raidz${RAIDZ_PARITY} $ZFS_POOL_DRIVES
+	zpool create -f -o ashift=12 -O compression=lz4 -O acltype=posixacl -O xattr=sa -O relatime=on -o autotrim=on -o compatibility=openzfs-2.1-linux -m none zroot raidz $ZFS_POOL_DRIVES
 
 	# Create the ZFS datasets
 	zfs create -o mountpoint=none zroot/ROOT
@@ -91,8 +85,6 @@ setup_zfs() {
 	# Trigger udev
 	udevadm trigger
 
-	echo "Creating a black hole..."
-
 	# Install base system
 	XBPS_ARCH=x86_64 xbps-install -S -R https://mirrors.servercentral.com/voidlinux/current -r /mnt base-system
 
@@ -100,13 +92,13 @@ setup_zfs() {
 	cp /etc/hostid /mnt/etc
 
 	# Chroot into the new system
-	echo "Entering the void...make sure to run the following command to continue: ./enterthezoid chroot"
+	echo "entering the void..."
 	xchroot /mnt
 }
 
 
 setup_chroot() {
-	# Set the root password
+    # Set the root password
 	echo "root:root" | chpasswd
 
 	# Update the package manager
@@ -137,12 +129,12 @@ setup_chroot() {
 	# Set the dracut configuration
 	printf "nofsck=\"yes\"\nadd_dracutmodules+=\" zfs \"\nomit_dracutmodules+=\" btrfs \"\n" > /etc/dracut.conf.d/zol.conf
 
-
-	echo "Interstellar data de-spaghettification commencing..."
-
-	# Install the zfs package 
+	# Install the zfs package
 	xbps-install -y zfs
 
+	# Set the zfsbootmenu command line options
+	zfs set org.zfsbootmenu:commandline="quiet loglevel=4" zroot/ROOT
+
 	# Setup & mount the boot partition
 	mkfs.vfat -F32 ${BOOT_DRIVE}1
 	BOOT_UUID=$(blkid -s UUID -o value ${BOOT_DRIVE}1)
@@ -150,21 +142,45 @@ setup_chroot() {
 	mkdir -p /boot/efi
 	mount /boot/efi
 
-	echo "System is armed and dangerous"
-
-	# Install & configure gummiboot bootloader
-	xbps-install -y gummiboot-efistub
-	gummiboot install
-
-	# Create a bootloader entry
-	mkdir -p /boot/efi/loader/entries
-	printf "title   Void Linux\nlinux   /vmlinuz-linux\ninitrd  /initramfs-linux.img\noptions root=ZFS=zroot/ROOT/void rw quiet loglevel=0" > /boot/efi/loader/entries/void-linux.conf
-
-	# Reconfigure the bootloader
+	# Install and setup zfsbootmenu
+	xbps-install -S zfsbootmenu gummiboot-efistub yq
+	yq -iy '.Global.ManageImages=true | .Global.BootMountPoint="/boot/efi" | .Components.Enabled=false | .EFI.ImageDir="/boot/efi/EFI/zbm" | .EFI.Versions=false | .EFI.Enabled=true | .Kernel.CommandLine="quiet loglevel=0"' /etc/zfsbootmenu/config.yaml
+	generate-zbm
+
+	# Apply boot method
+	# Note      : Some systems can have issues with EFI boot entries, you might need to use a well-known EFI file name.
+	# Reference : https://docs.zfsbootmenu.org/en/v2.3.x/general/portable.html
+	if [ $BOOT_METHOD == "direct" ]; then
+	    xbps-install efibootmgr
+		efibootmgr -c -d "$BOOT_DRIVE" -p "1" -L "ZFSBootMenu (Backup)" -l '\EFI\ZBM\VMLINUZ-BACKUP.EFI'
+		efibootmgr -c -d "$BOOT_DRIVE" -p "1" -L "ZFSBootMenu" -l '\EFI\ZBM\VMLINUZ.EFI'
+	elif [ $BOOT_METHOD == "refind" ]; then
+    	xbps-install -y refind
+        refind-install
+    	rm /boot/refind_linux.conf
+    	printf "\"Boot default\"  \"quiet loglevel=0 zbm.skip\"\n\"Boot to menu\"  \"quiet loglevel=0 zbm.show\"\n" > /boot/efi/EFI/ZBM/refind_linux.conf
+    	# Everything below this line is a "hacky" solution to a problem I was having with the zfsbootmenu package
+    	# https://github.com/zbm-dev/zfsbootmenu/issues/293
+    	# The developers of zfsbootmenu are rude and unhelpful, so I had to figure this out on my own:
+    	#	12:39 -- Mode #zfsbootmenu [+b *!*@big.dick.acid.vegas] by zdykstra
+    	#	12:39 ◀▬▬ zdykstra has kicked acidvegas (acidvegas)
+    	#	12:39 -- #zfsbootmenu: Cannot join channel (+b) - you are banned
+    	mkdir -p /boot/efi/EFI/BOOT
+    	mvrefind /boot/efi/EFI/refind /boot/efi/EFI/BOOT
+    	temp=$(mktemp -d)
+    	wget -O $temp/latest.tar.gz https://get.zfsbootmenu.org/latest.tar.gz
+    	tar xvf $temp/latest.tar.gz -C $temp/
+    	rm $temp/latest.tar.gz
+    	mv $temp/zfs*/* /boot/efi/EFI/ZBM/
+    	rm /boot/efi/EFI/ZBM/vmlinuz.efi
+    	xbps-remove zfsbootmenu
+    fi
+
+	# Reconfigure the system
 	xbps-reconfigure -fa
 
-	# Exit the chroot
-	echo "Exiting the void...remember to run the following command to continue: ./enterthezoid final"
+	# Exit the chroot environment
+	echo "exiting the void..."
 	exit
 }
 
diff --git a/local/bin/scripts/zbm b/local/bin/scripts/zbm
@@ -1,148 +0,0 @@
-#!/bin/bash
-# enter the zoid (zfs on root with zraid) - developed by acidvegas (https://git.acid.vegas/void)
-#      boot: https://github.com/leahneukirchen/hrmpf
-# reference: https://docs.zfsbootmenu.org/en/v2.2.x/guides/void-linux/uefi.html
-#            https://docs.zfsbootmenu.org/en/v2.3.x/guides/void-linux/uefi.html (do we need to make any updates?)
-
-set -xev
-
-# Configuration
-HOSTNAME=blackhole
-BOOT_DRIVE=/dev/sde # Use the internal USB drive for the boot partition
-POOL_DRIVES="/dev/sda /dev/sdb /dev/sdc /dev/sdd" # Verify these with lsblk before running
-
-
-convert_pool_drives() {
-    local devices=$1
-    local by_id_drives=""
-
-    for dev in $devices; do
-        local device_by_id_path=""
-        for id in /dev/disk/by-id/*; do
-            if [ "$(readlink -f "$id")" = "$(readlink -f "$dev")" ] && ! [[ $id =~ .*-part[0-9]+ ]]; then
-                device_by_id_path="$id"
-                break
-            fi
-        done
-        by_id_drives+="${device_by_id_path} "
-    done
-
-    echo $by_id_drives
-}
-
-
-setup_zfs() {
-	source /etc/os-release
-	export ID
-	zgenhostid -f 0x00bab10c
-
-	wipefs -a $BOOT_DRIVE
-	sgdisk --zap-all $BOOT_DRIVE
-	sgdisk -n "1:1m:+1g" -t "1:ef00" "$BOOT_DRIVE"
-
-	for d in $POOL_DRIVES; do
-		wipefs -a $d
-		sgdisk --zap-all $d
-		sgdisk -n "1:0:-10m" -t "1:bf00" "$d"
-		if zdb -l "$d" &> /dev/null; then
-			zpool labelclear -f "$d"
-		fi
-	done
-
-	POOL_DRIVES=$(convert_pool_drives "$POOL_DRIVES")
-	zpool create -f -o ashift=12 -O compression=lz4 -O acltype=posixacl -O xattr=sa -O relatime=on -o autotrim=on -o compatibility=openzfs-2.1-linux -m none zroot raidz $POOL_DRIVES
-
-	zfs create -o mountpoint=none zroot/ROOT
-	zfs create -o mountpoint=/ -o canmount=noauto zroot/ROOT/$ID
-	zfs create -o mountpoint=/home zroot/home
-	zpool set bootfs=zroot/ROOT/$ID zroot
-
-	zpool export zroot
-	zpool import -N -R /mnt zroot
-	zfs mount zroot/ROOT/$ID
-	zfs mount zroot/home
-
-	udevadm trigger
-
-	XBPS_ARCH=x86_64 xbps-install -S -R https://mirrors.servercentral.com/voidlinux/current -r /mnt base-system
-	cp /etc/hostid /mnt/etc
-
-	xchroot /mnt
-}
-
-
-setup_chroot() {
-	passwd
-
-	xbps-install -Suy
-
-	xbps-install -y void-repo-nonfree
-	xbps-install -Suy
-	xbps-install -y intel-ucode
-	ln -sf /etc/sv/intel-ucode /etc/runit/runsvdir/default/
-
-	ln -sf /usr/share/zoneinfo/America/New_York /etc/localtime
-	ln -sf /etc/sv/dhcpcd /etc/runit/runsvdir/default/
-	hwclock --systohc
-	printf "$HOSTNAME\n" > /etc/hostname
-
-	printf "HOSTNAME=\"$HOSTNAME\"\nHARDWARECLOCK=\"UTC\"\nTIMEZONE=\"America/New_York\"\nKEYMAP=us\n" > /etc/rc.conf
-
-	printf "en_US.UTF-8 UTF-8\nen_US ISO-8859-1\n" > /etc/default/libc-locales
-	xbps-reconfigure -f glibc-locales
-
-	printf "nofsck=\"yes\"\nadd_dracutmodules+=\" zfs \"\nomit_dracutmodules+=\" btrfs \"\n" > /etc/dracut.conf.d/zol.conf
-
-	xbps-install -y zfs
-	zfs set org.zfsbootmenu:commandline="quiet loglevel=4" zroot/ROOT
-
-	mkfs.vfat -F32 ${BOOT_DRIVE}1
-	BOOT_UUID=$(blkid -s UUID -o value ${BOOT_DRIVE}1)
-	echo "UUID=$BOOT_UUID /boot/efi vfat defaults 0 0" > /etc/fstab
-	mkdir -p /boot/efi
-	mount /boot/efi
-
-	# Everything below this line is a "hacky" solution to a problem I was having with the zfsbootmenu package
-	# https://github.com/zbm-dev/zfsbootmenu/issues/293
-	# The developers of zfsbootmenu are rude and unhelpful, so I had to figure this out on my own:
-	#	12:39 -- Mode #zfsbootmenu [+b *!*@big.dick.acid.vegas] by zdykstra
-	#	12:39 ◀▬▬ zdykstra has kicked acidvegas (acidvegas)
-	#	12:39 -- #zfsbootmenu: Cannot join channel (+b) - you are banned
-
-	xbps-install -S zfsbootmenu gummiboot-efistub yq
-	yq -iy '.Global.ManageImages=true | .Global.BootMountPoint="/boot/efi" | .Components.Enabled=false | .EFI.ImageDir="/boot/efi/EFI/zbm" | .EFI.Versions=false | .EFI.Enabled=true | .Kernel.CommandLine="quiet loglevel=0"' /etc/zfsbootmenu/config.yaml
-	generate-zbm
-
-	xbps-install -y refind
-	refind-install
-	rm /boot/refind_linux.conf
-	printf "\"Boot default\"  \"quiet loglevel=0 zbm.skip\"\n\"Boot to menu\"  \"quiet loglevel=0 zbm.show\"\n" > /boot/efi/EFI/ZBM/refind_linux.conf
-
-	mkdir -p /boot/efi/EFI/BOOT
-	mvrefind /boot/efi/EFI/refind /boot/efi/EFI/BOOT
-	temp=$(mktemp -d)
-	wget -O $temp/latest.tar.gz https://get.zfsbootmenu.org/latest.tar.gz
-	tar xvf $temp/latest.tar.gz -C $temp/
-	rm $temp/latest.tar.gz
-	mv $temp/zfs*/* /boot/efi/EFI/ZBM/
-	rm /boot/efi/EFI/ZBM/vmlinuz.efi
-
-	xbps-remove zfsbootmenu
-	xbps-reconfigure -fa
-
-	exit
-}
-
-
-
-if [ "$#" -ne 1 ]; then
-	printf "usage: $0 [zfs|chroot|final]\n"
-	exit 1
-fi
-
-case "$1" in
-	zfs)    setup_zfs ;;
-	chroot) setup_chroot ;;
-	final)  umount -n -R /mnt; zpool export zroot; reboot ;;
-	*)      printf "usage: $0 [zfs|chroot|final]\n"; exit 1 ;;
-esac