#!/bin/sh # Copy memtest86+ binaries from chroot /boot into the ISO boot directory # so GRUB can chainload them directly (they must be on the ISO filesystem, # not inside the squashfs). # # Primary: copy from chroot/boot/ (populated by package postinst). # Naming fallbacks: # Debian Bookworm: /boot/memtest86+ — EFI PE64 (no extension) # /boot/memtest86+.bin — legacy binary # Upstream/Ubuntu: /boot/memtest86+x64.efi, /boot/memtest86+x64.bin, etc. # Last resort: extract directly from the cached .deb if postinst didn't place # the files (happens in chroot environments without grub triggers). set -e MEMTEST_FILES="memtest86+x64.bin memtest86+x64.efi memtest86+ia32.bin memtest86+ia32.efi" # Ensure destination directory exists (absence caused silent copy failures). mkdir -p binary/boot echo "memtest: scanning chroot/boot/ for memtest files:" ls chroot/boot/memtest* 2>/dev/null || echo "memtest: WARNING: no memtest files in chroot/boot/" # Primary path: copy upstream-named files from chroot/boot/ for f in ${MEMTEST_FILES}; do src="chroot/boot/${f}" if [ -f "${src}" ]; then cp "${src}" "binary/boot/${f}" echo "memtest: copied ${f} from chroot/boot/" fi done # Debian Bookworm naming fallback: /boot/memtest86+ (no extension) is the EFI binary. if [ ! -f "binary/boot/memtest86+x64.efi" ] && [ -f "chroot/boot/memtest86+" ]; then cp "chroot/boot/memtest86+" "binary/boot/memtest86+x64.efi" echo "memtest: copied /boot/memtest86+ as memtest86+x64.efi (Debian naming)" fi if [ ! -f "binary/boot/memtest86+x64.bin" ] && [ -f "chroot/boot/memtest86+.bin" ]; then cp "chroot/boot/memtest86+.bin" "binary/boot/memtest86+x64.bin" echo "memtest: copied /boot/memtest86+.bin as memtest86+x64.bin (Debian naming)" fi # Last resort: if EFI binary still missing, extract from cached .deb if [ ! -f "binary/boot/memtest86+x64.efi" ]; then echo "memtest: EFI binary missing — attempting extraction from .deb cache" deb=$(find chroot/var/cache/apt/archives/ chroot/var/lib/apt/lists/ \ -name 'memtest86+_*.deb' -o -name 'memtest86+*.deb' 2>/dev/null \ | head -1) if [ -z "$deb" ]; then deb=$(find cache/ -name 'memtest86+_*.deb' -o -name 'memtest86+*.deb' 2>/dev/null | head -1) fi if [ -n "$deb" ]; then echo "memtest: extracting from ${deb}" EXTRACT_DIR="$(mktemp -d)" dpkg-deb -x "${deb}" "${EXTRACT_DIR}" echo "memtest: files found in .deb:" find "${EXTRACT_DIR}/boot" -type f 2>/dev/null || echo " (none in /boot)" for f in ${MEMTEST_FILES}; do src="${EXTRACT_DIR}/boot/${f}" if [ -f "${src}" ]; then cp "${src}" "binary/boot/${f}" echo "memtest: extracted ${f} from .deb" fi done # Debian naming fallback inside .deb as well if [ ! -f "binary/boot/memtest86+x64.efi" ] && [ -f "${EXTRACT_DIR}/boot/memtest86+" ]; then cp "${EXTRACT_DIR}/boot/memtest86+" "binary/boot/memtest86+x64.efi" echo "memtest: extracted /boot/memtest86+ as memtest86+x64.efi from .deb" fi rm -rf "${EXTRACT_DIR}" else echo "memtest: WARNING: no memtest86+ .deb found in cache — memtest will not be available" fi fi echo "memtest: binary/boot/ contents:" ls binary/boot/memtest* 2>/dev/null || echo " (none)"