#!/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 <