E5 medio live: ISO El Torito booteable con xorriso de hammer (primer corte)

scripts/iso-image.sh arma un ISO 9660/El Torito isohybrid usando el xorriso
construido por hammer (recipes/xorriso.toml, dogfooding): GRUB core El Torito
(grub-mkimage -O i386-pc-eltorito + iso9660) carga kernel + initramfs del ISO;
el rootfs del producto va como cpio.gz (live de RAM). scripts/iso-boot-test.sh
valida E2E in-VM: SeaBIOS->GRUB 2.14->Linux 6.16.12->/init (marcador
HAMMER-ISO-LIVE-OK)->arje-zero PID1->hammerd->netup(DHCP)->sshd escuchando.
El producto entero corre desde el medio live, sin tocar disco. ISO 113M.
SDD 13 E5 marcado primer corte.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-21 01:25:34 -04:00
co-authored by Claude Opus 4.8
parent a1b8b57676
commit 2976f3e5fd
3 changed files with 198 additions and 2 deletions
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
# iso-boot-test.sh — valida E5 (medio live): arma el ISO 9660 / El Torito con scripts/iso-image.sh y lo
# arranca en QEMU desde el CD (sin -kernel ni disco), comprobando que la cadena El Torito → GRUB →
# kernel → initramfs → /init → producto funciona ENTERA desde RAM. El xorriso que arma el ISO es el
# construido por hammer (recipes/xorriso.toml), así que el test dogfooda también esa receta.
#
# Asserts: (1) GRUB arrancó del El Torito; (2) el marcador del /init live; (3) arje-zero PID1 vivo;
# (4) sshd escuchando — i.e. el PRODUCTO llega a servicio corriendo enteramente desde el medio live.
#
# Uso: PRODUCT=<hash-o-prefijo> ./scripts/iso-boot-test.sh
# (default: el product-rootfs más reciente del store)
# Vars: KERNEL MEM (def 4096) KVM (def 1) DEADLINE (def 120)
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT"
KERNEL="${KERNEL:-$(ls store/*-linux/boot/bzImage 2>/dev/null | head -1)}"
MEM="${MEM:-4096}"; KVM="${KVM:-1}"; DEADLINE="${DEADLINE:-120}"
WORK="$ROOT/work/iso-boot"; ISO="$WORK/hammer-live.iso"; LOG="$WORK/console.log"
mkdir -p "$WORK"
# localizar el product-rootfs lean (lo idóneo para un medio live: sin toolchain)
if [ -n "${PRODUCT:-}" ]; then
PDIR=$(ls -d store/"${PRODUCT#b3:}"*-product-rootfs 2>/dev/null | head -1)
else
PDIR=$(ls -dt store/*-product-rootfs 2>/dev/null | head -1)
fi
[ -n "$PDIR" ] && [ -d "$PDIR" ] || { echo "no encuentro product-rootfs (corré 'hammer bootstrap product')"; exit 1; }
[ -n "$KERNEL" ] && [ -e "$KERNEL" ] || { echo "no encuentro kernel"; exit 1; }
echo "==> product-rootfs: $PDIR"
echo "==> armando ISO con scripts/iso-image.sh (xorriso de hammer)"
ROOTFS="$PDIR" ISO="$ISO" KERNEL="$KERNEL" ./scripts/iso-image.sh >/dev/null
echo "==> ISO: $(du -h "$ISO" | cut -f1)"
accel=()
if [ "$KVM" = 1 ] && [ -w /dev/kvm ]; then accel=(-enable-kvm -cpu host); fi
echo "==> arrancando desde el CD El Torito (deadline ${DEADLINE}s)"
timeout "$DEADLINE" qemu-system-x86_64 -m "$MEM" -no-reboot -nographic "${accel[@]}" \
-cdrom "$ISO" -boot d > "$LOG" 2>&1 || true
fail=0
check() { if grep -qiE "$1" "$LOG"; then echo "$2"; else echo "$2" >&2; fail=1; fi; }
echo "==> asserts sobre el log serie:"
check "GNU GRUB" "GRUB arrancó del El Torito"
check "Linux version 6\.16" "kernel hammer-built cargado del ISO"
check "HAMMER-ISO-LIVE-OK" "marcador /init del medio live"
check "arje-zero" "arje-zero PID1 vivo"
check "Server listening on .* port 22" "sshd escuchando (producto en servicio desde RAM)"
if [ "$fail" = 0 ]; then
echo; echo "✓✓ E5 ISO LIVE VERDE: medio El Torito bootea el producto entero desde RAM (GRUB→kernel→initramfs→arje→sshd)"
else
echo; echo "✗ E5 ISO boot test FALLÓ — ver $LOG" >&2; exit 1
fi