#!/bin/sh BOOT_EFI_DIST="/boot/zfsbootmenu-recovery-x86_64-v3.1.0-linux6.18.EFI" ROOT_DATASET="zpool1/ROOT" BOOT_KERNEL="vmlinuz-linux-custom" BOOT_CMDLINE="rw delayacct audit=0 init_on_alloc=0 init_on_free=0 kvm-intel.nested=1 page_alloc.shuffle=1 intel_iommu=igfx_off iommu=pt msr.allow_writes=on retbleed=stuff" # rd.debug rd.log=all printk.devkmsg=on # crashkernel=512M # efibootmgr -c -b 0000 -d /dev/nvme0n1 -p 1 -L "ZBM" -l '\EFI\BOOT\BOOTX64.EFI' # efibootmgr -c -b 0001 -d /dev/nvme0n1 -p 1 -L "ZBM Backup" -l '\EFI\BOOT\BOOT2X64.EFI' # efibootmgr -o 0000,0001,0003 # https://docs.zfsbootmenu.org/en/v3.1.x/general/uefi-booting.html # https://github.com/rhboot/efibootmgr #### Nothing to change below here ESP_MOUNT="/boot/efi" BOOT_EFI="$ESP_MOUNT/EFI/BOOT/BOOTX64.EFI" BOOT2_EFI="$ESP_MOUNT/EFI/BOOT/BOOT2X64.EFI" # Mount ESP if ! mountpoint -q "$ESP_MOUNT"; then echo "*** Mounting ESP" mount "$ESP_MOUNT" || exit 1 if ! mountpoint -q "$ESP_MOUNT"; then echo "ESP problem, not a mountpoint" exit 1 fi else echo "Warning: ESP already mounted" fi # Check that all necessary files exist for file in "$BOOT_EFI" "$BOOT_EFI_DIST" /etc/hostid /proc/uptime; do if [ ! -f "$file" ]; then echo "File $BOOT_EFI missing." >&2 exit 1 fi done # EFI bundle backup if [ ! -e "$BOOT2_EFI" ]; then echo "*** Initial backup BOOT2X64.EFI" cp -avf "$BOOT_EFI" "$BOOT2_EFI" else current_time=$(date +%s) uptime_seconds=$(awk '{print int($1)}' /proc/uptime) boot_time=$((current_time - uptime_seconds)) file_mtime=$(stat -c %Y "$BOOT2_EFI") if [ "$file_mtime" -lt "$boot_time" ]; then echo "*** Backup BOOT2X64.EFI" cp -v "$BOOT_EFI" "$BOOT2_EFI" else echo "*** Backup BOOT2X64.EFI skipped, too recent" fi fi echo "*** Boot dataset settings" zfs set org.zfsbootmenu:commandline="$BOOT_CMDLINE" "$ROOT_DATASET" zfs set org.zfsbootmenu:kernel="$BOOT_KERNEL" "$ROOT_DATASET" zfs get all -s local "$ROOT_DATASET" | grep zfsbootmenu | awk '{ $1=$1; print }' echo "*** Writing BOOTX64.EFI" HOSTID=$(od -An -tx4 /etc/hostid | tr -d " ") /boot/zbm-kcl -r zbm.timeout -a zbm.timeout=5 -a spl.spl_hostid=0x"$HOSTID" -o "$BOOT_EFI" "$BOOT_EFI_DIST" /boot/zbm-kcl "$BOOT_EFI" echo "*** Unmounting ESP" umount "$ESP_MOUNT" exit 0