gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 604Rust 56Shell 36Markdown 281227 Definitions

⎇ ae6f0b45d94eb275e2464d898b35ee9a64595f43 scripts/efi-disk-boot-test.sh Shell · 53 lines · 3.4 KB History raw

takana etapa 5c: comentarios de scripts, MOTD, y un BUG que introdujo la etapa 4 476168bb0 · Sergio ·

1#!/usr/bin/env bash
2# efi-disk-boot-test.sh — valida el DISCO INSTALADO EFI-STUB soberano (ADR 0010 paso 5) en OVMF.
3#
4# Arma la imagen con install-image-efi.sh y la arranca por UEFI (OVMF pflash, SIN -kernel: la firmware
5# lanza \EFI\BOOT\BOOTX64.EFI). Asevera la cadena soberana completa por marcadores serie deterministas:
6#   1. EFI-stub cargó el kernel+initrd horneados            (sin GRUB ni systemd-boot)
7#   2. el initramfs de pivote resolvió takana-root por LABEL y montó las ext4
8#   3. switch_root: arje-zero re-montó / (re-mounted) = tomó PID1
9#
10# Nota: el cmdline horneado termina en console=tty0 ⇒ el stdout de userspace va a la pantalla. Los
11# marcadores kernel-side (printk a TODAS las consolas) más el tee a /dev/ttyS0 del /init dan la prueba
12# en el serial headless.
13#
14# Uso:  ./scripts/efi-disk-boot-test.sh
15# Vars: ROOTFS KERNEL MEM (def 4096) KVM (def 1) DEADLINE (def 180) OVMF_CODE OVMF_VARS
16set -euo pipefail
17ROOT="$(cd "$(dirname "$0")/.." && pwd)"; cd "$ROOT"
18MEM="${MEM:-4096}"; KVM="${KVM:-1}"; DEADLINE="${DEADLINE:-180}"
19WORK="$ROOT/work/efi-disk-boot-test"; mkdir -p "$WORK"
20IMG="$WORK/hammer-efi-disk.img"; LOG="$WORK/boot.log"
21
22echo "==> armando la imagen EFI-stub con install-image-efi.sh"
23IMG="$IMG" ROOTFS="${ROOTFS:-}" KERNEL="${KERNEL:-}" ./scripts/install-image-efi.sh >"$WORK/build.log" 2>&1 \
24    || { echo "✗ build falló — ver $WORK/build.log" >&2; tail -20 "$WORK/build.log" >&2; exit 1; }
25echo "    imagen: $(du -h "$IMG" | cut -f1)"
26
27echo "==> arranque UEFI (OVMF, sin -kernel) — deadline ${DEADLINE}s"
28BOOT=1 KVM="$KVM" MEM="$MEM" DEADLINE="$DEADLINE" IMG="$IMG" \
29    ./scripts/install-image-efi.sh >"$LOG" 2>&1 || true
30
31# marcadores (limpiamos escapes ANSI que mete OVMF)
32clean() { sed 's/\x1b\[[0-9;]*[a-zA-Z]//g; s/\r//g' "$LOG"; }
33fail=0
34# El kernel metal cero-parpadeo arranca con `quiet` ⇒ los marcadores kernel-side (EFI-stub, Linux
35# version, montaje/re-mount EXT4) NO llegan al serial. El veredicto se apoya en los marcadores USERSPACE
36# tee'ados a /dev/ttyS0 por el /init de pivote y el /sbin/init real — que escriben al PUERTO serie
37# directo, sorteando el printk ⇒ sobreviven `quiet`. Los kernel-side quedan como informativos.
38info()  { if clean | grep -aqiE "$1"; then echo "  · $2"; else echo "  · ($2 — suprimido por quiet o byte serie perdido, no bloqueante)"; fi; }
39check() { if clean | grep -aqiE "$1"; then echo "  ✓ $2"; else echo "  ✗ $2 (falta /$1/)"; fail=1; fi; }
40info  'EFI stub: Loaded initrd'                        'EFI-stub cargó kernel+initrd (sin GRUB/systemd-boot)'
41info  'EXT4-fs \(vda2\): mounted'                      'kernel montó hammer-root (kernel-side)'
42check 'HAMMER-EFI-DISK-PIVOT-OK'                       'initramfs pivote resolvió hammer-root y va a switch_root'
43check 'HAMMER-EFI-INIT-OK'                             'switch_root → arje-zero PID1 (init real corriendo)'
44check 'hammer boot menu: grafo en'                     'menú de arranque por grafo corrió (ADR 0010: emite boot-graph.json)'
45reject_panic() { if clean | grep -aqiE 'HAMMER-EFI-FALLO|Kernel panic'; then echo "  ✗ hubo FALLO/panic de pivote"; fail=1; else echo "  ✓ sin FALLO ni panic"; fi; }
46reject_panic
47
48echo
49if [ "$fail" = 0 ]; then
50    echo "✓✓ EFI-DISK VERDE: disco instalado bootea EFI-stub SOBERANO en OVMF (firmware → BOOTX64.EFI → pivote → arje-zero)"
51else
52    echo "✗ efi-disk-boot-test FALLÓ — log: $LOG" >&2; exit 1
53fi