From 5fa8ca30ef23bda079e6512ebdae86899785b301 Mon Sep 17 00:00:00 2001 From: cyteen Date: Wed, 4 Mar 2026 15:10:49 +0000 Subject: [PATCH] Install script to allow starting zfs boot manager from grub menu. --- 020_grub_zbm_chainload.sh | 88 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 020_grub_zbm_chainload.sh diff --git a/020_grub_zbm_chainload.sh b/020_grub_zbm_chainload.sh new file mode 100644 index 0000000..ecdacac --- /dev/null +++ b/020_grub_zbm_chainload.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +set -x + +# Dependencies +sudo apt update && sudo apt install -y binutils wget binwalk # lastversion + +# --- CONFIGURATION --- +REPO="zbm-dev/zfsbootmenu" +ZBM_VERSION=$(lastversion --format tag "${REPO}") +ZBM_RELEASE="recovery" +KERNEL=$(uname -r | cut -d'.' -f1,2) +ARCH=$(uname -m) + +# Target directory for GRUB to find +FINAL_DEST=/boot/zfsbootmenu +sudo mkdir -p ${FINAL_DEST} + +ZBM_EFI="zfsbootmenu-${ZBM_RELEASE}-${ARCH}-${ZBM_VERSION}-linux${KERNEL}.EFI" +ZBM_URL="https://github.com/zbm-dev/zfsbootmenu/releases/download/${ZBM_VERSION}/${ZBM_EFI}" + +# --- TMPFS SETUP --- +WORK_DIR=$(mktemp -d -p /dev/shm zbm_extract.XXXXXX) +cleanup() { + echo "--- Cleaning up RAM storage ---" + rm -rf "$WORK_DIR" + rm -f "$ZBM_EFI" +} +trap cleanup EXIT + +echo "Downloading ZFSBootMenu ${ZBM_VERSION}..." +# lastversion -d \ +# --output "${ZBM_EFI}" \ +# zbm-dev/zfsbootmenu \ +# --filter "${ZBM_RELEASE}.*${ARCH}.*${ZBM_VERSION}.*${KERNEL}.*EFI" + +sudo curl -L "${ZBM_URL}" -o "${ZBM_EFI}" + +# Extraction paths +KERNEL_OUT="${WORK_DIR}/vmlinuz-zbm" +INITRD_OUT="${WORK_DIR}/initrd-zbm.img" + +echo "--- Extracting assets from $ZBM_EFI ---" + +# 1. Extract Kernel & Initrd +if objcopy --dump-section .linux="$KERNEL_OUT" "$ZBM_EFI" 2>/dev/null && + objcopy --dump-section .initrd="$INITRD_OUT" "$ZBM_EFI" 2>/dev/null; then + + echo "[✓] Extraction successful. Moving to $FINAL_DEST..." + sudo cp "$KERNEL_OUT" "$FINAL_DEST/" + sudo cp "$INITRD_OUT" "$FINAL_DEST/" +else + echo "[!] Extraction failed. Check if binutils is installed correctly." + exit 1 +fi + +# --- GRUB MENU GENERATION --- +conf_print_zbm_grub_menu() { + cat <