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 815Rust 56Shell 37Markdown 291229 Definitions

⎇ 534014c3ec69daea789a1d0523e1d00a69c6ed65 scripts/vigia-ensamblado.sh Shell · 75 lines · 4.0 KB History raw

paso 4: el ensamblado de imagen toma sus herramientas del STORE — y estaba roto en las 3 máquinas e30ffbbf0 · Sergio ·

1#!/bin/sh
2# vigia-ensamblado.sh — ¿de dónde sale cada herramienta que ARMA una imagen: del store o del host?
3#
4# ══ EL PUNTO CIEGO QUE CUBRE (medido el 2026-09-22) ═════════════════════════════════════════════
5# Los tres scripts de imagen tomaban sus herramientas del `PATH`, y en las TRES máquinas que tenemos
6# —este hub, su anfitrión y el worker `dev.gioser.net`— no existe ninguna de
7# `grub-mkimage grub-bios-setup cpio mformat xorriso`. O sea: **el pipeline de imagen estaba roto en
8# todas partes y sólo se veía al intentar correrlo**, con un `falta cpio` que se lee como un descuido
9# de la máquina y no como lo que era: la imagen dependiendo de software que nadie declaró.
10#
11# Lo absurdo del caso es que SEIS de las siete son nuestras y están selladas: `util-linux` (sfdisk),
12# `e2fsprogs` (mke2fs), `libarchive` (bsdcpio), `gzip`, `mtools`, `xorriso`. Todas estáticas musl, y
13# corren tal cual en el host — comprobado ejecutándolas, no supuesto.
14#
15# ⚠ **La séptima es el gestor de arranque, y no se puede resolver retirando la rama BIOS.** Hetzner
16# Cloud **arranca por BIOS** (medido en gioser: no existe `/sys/firmware/efi`, SDD 28 §3.1), así que
17# la imagen del servidor de producción es justamente la que necesita GRUB. Para objetivos UEFI la
18# rama soberana ya existe y no lleva gestor: el bzImage ES el binario EFI (ADR 0018).
19#
20#   uso:  scripts/vigia-ensamblado.sh [--fail]
21#         --fail  → exit 1 si alguna herramienta no sale del store (para CI)
22set -eu
23cd "$(dirname "$0")/.."
24. scripts/lib/herramientas-desde-store.sh
25
26FALLAR=0; [ "${1:-}" = "--fail" ] && FALLAR=1
27sellados=0; host=0; faltan=0
28
29mirar() {  # mirar <receta> <ruta-rel> <nombre-host> <para qué>
30    if p=$(herramienta "$1" "$2" "$3" 2>/dev/null); then
31        case "$p" in
32            /store/*|store/*|*/store/*) printf '  ✓ %-12s %-22s %s\n' "${2##*/}" "$1" "sellado"; sellados=$((sellados+1)) ;;
33            *)                          printf '  ⚠ %-12s %-22s %s\n' "${2##*/}" "$1" "DEL HOST ($p) — sin hash"; host=$((host+1)) ;;
34        esac
35    else
36        printf '  ✗ %-12s %-22s %s\n' "${2##*/}" "$1" "NO ESTÁ: ni sellado ni en el host"; faltan=$((faltan+1))
37    fi
38}
39
40echo "== herramientas del ensamblado de imágenes (store: $(_herr_store))"
41mirar util-linux sbin/sfdisk      sfdisk   "particionar"
42mirar e2fsprogs  sbin/mke2fs      mke2fs   "las ext4 con -d, sin root"
43mirar libarchive usr/bin/bsdcpio  cpio     "el initramfs newc"
44mirar gzip       bin/gzip         gzip     "comprimir el initramfs"
45mirar mtools     usr/bin/mformat  mformat  "poblar la ESP FAT sin montar"
46mirar mtools     usr/bin/mcopy    mcopy    "idem"
47mirar xorriso    usr/bin/xorriso  xorriso  "el ISO"
48mirar dosfstools sbin/mkfs.vfat   mkfs.vfat "vfat, cuando hace falta"
49
50echo
51echo "== el gestor de arranque, que es el hueco de verdad"
52if [ -f recipes/grub.toml ]; then
53    echo "  (hay recipes/grub.toml: actualizá este vigía)"
54else
55    printf '  ✗ %-12s %-22s %s\n' "grub" "(no hay receta)" "sólo del host"
56    for t in grub-mkimage grub-bios-setup; do
57        if command -v "$t" >/dev/null 2>&1; then
58            printf '    ⚠ %-18s %s DEL HOST, sin hash\n' "$t" "$(command -v "$t")"; host=$((host+1))
59        else
60            printf '    ✗ %-18s AUSENTE ⇒ la rama BIOS (install-image.sh, iso-image.sh) NO puede correr acá\n' "$t"
61            faltan=$((faltan+1))
62        fi
63    done
64    echo "    Hetzner Cloud arranca por BIOS (medido, SDD 28 §3.1) ⇒ la rama no se puede retirar."
65    echo "    Las dos salidas, ninguna gratis: receta de \`grub\`, o receta de \`limine\` (cubre BIOS"
66    echo "    y UEFI de una). Para un objetivo UEFI la rama soberana ya está: install-image-efi.sh."
67fi
68
69echo
70echo "== resumen: $sellados sellada(s) · $host del host (sin hash) · $faltan ausente(s)"
71[ "$faltan" -gt 0 ] && echo "   Una imagen que necesita algo ausente NO se puede armar en esta máquina."
72if [ "$FALLAR" = 1 ] && { [ "$faltan" -gt 0 ] || [ "$host" -gt 0 ]; }; then
73    exit 1
74fi
75exit 0