Install script to allow starting zfs boot manager from grub menu.
This commit is contained in:
parent
b2391795af
commit
5fa8ca30ef
|
|
@ -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 <<EOF
|
||||
#!/bin/sh
|
||||
exec tail -n +3 \$0
|
||||
# This file provides an easy way to add custom menu entries.
|
||||
menuentry "ZFSBootMenu (Extracted)" --class zfs --class gnu-linux {
|
||||
insmod part_gpt
|
||||
insmod zfs
|
||||
insmod gzio
|
||||
|
||||
# Use UUID instead of file search
|
||||
search --no-floppy --fs-uuid --set=root f383eb9e238f6712
|
||||
|
||||
echo "Loading ZFSBootMenu Kernel..."
|
||||
linux /zfsbootmenu/vmlinuz-zbm zbm.import_policy=hostid zbm.prefer=rpool loglevel=4
|
||||
|
||||
echo "Loading ZFSBootMenu Initrd..."
|
||||
initrd /zfsbootmenu/initrd-zbm.img
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
echo "Generating GRUB configuration..."
|
||||
conf_print_zbm_grub_menu | sudo tee /etc/grub.d/40_zbm
|
||||
sudo chmod +x /etc/grub.d/40_zbm
|
||||
|
||||
echo "Updating GRUB..."
|
||||
sudo update-grub
|
||||
|
||||
echo "---------------------------------------"
|
||||
echo "Done! Files are located in $FINAL_DEST"
|
||||
grep -A 10 "menuentry \"ZFSBootMenu" /boot/grub/grub.cfg
|
||||
Loading…
Reference in New Issue