From 42774d44a6f3a9394cfaddb91f4ef7cd04fb526e Mon Sep 17 00:00:00 2001 From: Michael Chus Date: Sun, 3 May 2026 21:49:54 +0300 Subject: [PATCH] Restore post-build GRUB and isolinux sync --- iso/builder/build.sh | 187 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) diff --git a/iso/builder/build.sh b/iso/builder/build.sh index 39ef84d..dcd23dc 100755 --- a/iso/builder/build.sh +++ b/iso/builder/build.sh @@ -674,6 +674,185 @@ label memtest EOF } +extract_live_grub_entry() { + cfg="$1" + live_linux="$(awk '/^[[:space:]]*linux[[:space:]]+\/live\// { print; exit }' "$cfg")" + live_initrd="$(awk '/^[[:space:]]*initrd[[:space:]]+\/live\// { print; exit }' "$cfg")" + [ -n "$live_linux" ] || return 1 + [ -n "$live_initrd" ] || return 1 + + grub_kernel="$(printf '%s\n' "$live_linux" | awk '{print $2}')" + grub_append="$(printf '%s\n' "$live_linux" | cut -d' ' -f3-)" + grub_initrd="$(printf '%s\n' "$live_initrd" | awk '{print $2}')" + [ -n "$grub_kernel" ] || return 1 + [ -n "$grub_append" ] || return 1 + [ -n "$grub_initrd" ] || return 1 + return 0 +} + +load_live_build_append() { + lb_dir="$1" + binary_cfg="$lb_dir/config/binary" + [ -f "$binary_cfg" ] || return 1 + + # config/binary is generated by live-build and contains shell variable + # assignments such as LB_BOOTAPPEND_LIVE="boot=live ...". + # shellcheck disable=SC1090 + . "$binary_cfg" + + [ -n "${LB_BOOTAPPEND_LIVE:-}" ] || return 1 + live_build_append="$LB_BOOTAPPEND_LIVE" + return 0 +} + +extract_live_isolinux_entry() { + cfg="$1" + isolinux_linux="$(awk '/^[[:space:]]*linux[[:space:]]+\/live\// { print; exit }' "$cfg")" + isolinux_initrd="$(awk '/^[[:space:]]*initrd[[:space:]]+\/live\// { print; exit }' "$cfg")" + isolinux_append="$(awk '/^[[:space:]]*append[[:space:]]+/ { sub(/^[[:space:]]*append[[:space:]]+/, ""); print; exit }' "$cfg")" + [ -n "$isolinux_linux" ] || return 1 + [ -n "$isolinux_initrd" ] || return 1 + [ -n "$isolinux_append" ] || return 1 + + isolinux_kernel="$(printf '%s\n' "$isolinux_linux" | awk '{print $2}')" + isolinux_initrd_path="$(printf '%s\n' "$isolinux_initrd" | awk '{print $2}')" + [ -n "$isolinux_kernel" ] || return 1 + [ -n "$isolinux_initrd_path" ] || return 1 + return 0 +} + +write_canonical_grub_cfg() { + cfg="$1" + kernel="$2" + append_live="$3" + initrd="$4" + + cat > "$cfg" < "$cfg" <&2 + live_build_append="" + fi + + if [ -f "$grub_cfg" ]; then + if extract_live_grub_entry "$grub_cfg"; then + mkdir -p "$grub_dir/live-theme" + cp "${BUILDER_DIR}/config/bootloaders/grub-efi/config.cfg" "$grub_dir/config.cfg" + cp "${BUILDER_DIR}/config/bootloaders/grub-efi/theme.cfg" "$grub_dir/theme.cfg" + cp -R "${BUILDER_DIR}/config/bootloaders/grub-efi/live-theme/." "$grub_dir/live-theme/" + write_canonical_grub_cfg "$grub_cfg" "$grub_kernel" "${live_build_append:-$grub_append}" "$grub_initrd" + echo "bootloader sync: rewrote binary/boot/grub/grub.cfg with canonical EASY-BEE menu" + else + echo "bootloader sync: WARNING: could not extract live entry from $grub_cfg" >&2 + fi + fi + + if [ -f "$isolinux_cfg" ]; then + if extract_live_isolinux_entry "$isolinux_cfg"; then + write_canonical_isolinux_cfg "$isolinux_cfg" "$isolinux_kernel" "$isolinux_initrd_path" "${live_build_append:-$isolinux_append}" + echo "bootloader sync: rewrote binary/isolinux/live.cfg with canonical EASY-BEE menu" + else + echo "bootloader sync: WARNING: could not extract live entry from $isolinux_cfg" >&2 + fi + fi +} + copy_memtest_from_deb() { deb="$1" dst_boot="$2" @@ -1439,6 +1618,14 @@ run_step_sh "live-build clean" "80-lb-clean" "lb clean --all 2>&1 | tail -3" run_step_sh "live-build config" "81-lb-config" "lb config 2>&1 | tail -5" dump_memtest_debug "pre-build" "${LB_DIR}" run_step_sh "live-build build" "90-lb-build" "lb build 2>&1" +echo "=== enforcing canonical bootloader assets ===" +enforce_live_build_bootloader_assets "${LB_DIR}" +reset_live_build_stage "${LB_DIR}" "binary_checksums" +reset_live_build_stage "${LB_DIR}" "binary_iso" +reset_live_build_stage "${LB_DIR}" "binary_zsync" +run_step_sh "rebuild live-build checksums after bootloader sync" "91b-lb-checksums" "lb binary_checksums 2>&1" +run_step_sh "rebuild ISO after bootloader sync" "91c-lb-binary-iso" "lb binary_iso 2>&1" +run_step_sh "rebuild zsync after bootloader sync" "91d-lb-zsync" "lb binary_zsync 2>&1" # --- persist deb package cache back to shared location --- # This allows the second variant to reuse all downloaded packages.