#!/usr/bin/env bash # efi-disk-boot-test.sh — valida el DISCO INSTALADO EFI-STUB soberano (ADR 0010 paso 5) en OVMF. # # Arma la imagen con install-image-efi.sh y la arranca por UEFI (OVMF pflash, SIN -kernel: la firmware # lanza \EFI\BOOT\BOOTX64.EFI). Asevera la cadena soberana completa por marcadores serie deterministas: # 1. EFI-stub cargó el kernel+initrd horneados (sin GRUB ni systemd-boot) # 2. el initramfs de pivote resolvió hammer-root por LABEL y montó las ext4 # 3. switch_root: arje-zero re-montó / (re-mounted) = tomó PID1 # # Nota: el cmdline horneado termina en console=tty0 ⇒ el stdout de userspace va a la pantalla. Los # marcadores kernel-side (printk a TODAS las consolas) más el tee a /dev/ttyS0 del /init dan la prueba # en el serial headless. # # Uso: ./scripts/efi-disk-boot-test.sh # Vars: ROOTFS KERNEL MEM (def 4096) KVM (def 1) DEADLINE (def 180) OVMF_CODE OVMF_VARS set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT" MEM="${MEM:-4096}"; KVM="${KVM:-1}"; DEADLINE="${DEADLINE:-180}" WORK="$ROOT/work/efi-disk-boot-test"; mkdir -p "$WORK" IMG="$WORK/hammer-efi-disk.img"; LOG="$WORK/boot.log" echo "==> armando la imagen EFI-stub con install-image-efi.sh" IMG="$IMG" ROOTFS="${ROOTFS:-}" KERNEL="${KERNEL:-}" ./scripts/install-image-efi.sh >"$WORK/build.log" 2>&1 \ || { echo "✗ build falló — ver $WORK/build.log" >&2; tail -20 "$WORK/build.log" >&2; exit 1; } echo " imagen: $(du -h "$IMG" | cut -f1)" echo "==> arranque UEFI (OVMF, sin -kernel) — deadline ${DEADLINE}s" BOOT=1 KVM="$KVM" MEM="$MEM" DEADLINE="$DEADLINE" IMG="$IMG" \ ./scripts/install-image-efi.sh >"$LOG" 2>&1 || true # marcadores (limpiamos escapes ANSI que mete OVMF) clean() { sed 's/\x1b\[[0-9;]*[a-zA-Z]//g; s/\r//g' "$LOG"; } fail=0 # Los dos primeros bytes serie del handoff firmware→kernel se pierden a veces (EFI-stub/Linux-version): # son INFORMATIVOS. El veredicto se apoya en los marcadores AGUAS ABAJO — prueba concluyente de que # EFI-stub cargó el kernel+initrd (nada más podría montar hammer-root ni re-montar / sin esta cadena). info() { if clean | grep -aqiE "$1"; then echo " · $2"; else echo " · ($2 — bytes serie tempranos perdidos, no bloqueante)"; fi; } check() { if clean | grep -aqiE "$1"; then echo " ✓ $2"; else echo " ✗ $2 (falta /$1/)"; fail=1; fi; } info 'EFI stub: Loaded initrd' 'EFI-stub cargó kernel+initrd (sin GRUB/systemd-boot)' info 'Linux version 6\.16' 'kernel arrancó' check 'HAMMER-EFI-DISK-PIVOT-OK|EXT4-fs \(vda2\): mounted' 'initramfs pivote montó hammer-root (⇒ EFI-stub cargó kernel+initrd)' check 'EXT4-fs \(vda3\): mounted' '/store montado por LABEL' check 'EXT4-fs \(vda2\): re-mounted' 'switch_root → arje-zero re-montó / (PID1)' echo if [ "$fail" = 0 ]; then echo "✓✓ EFI-DISK VERDE: disco instalado bootea EFI-stub SOBERANO en OVMF (firmware → BOOTX64.EFI → pivote → arje-zero)" else echo "✗ efi-disk-boot-test FALLÓ — log: $LOG" >&2; exit 1 fi