From 0db85d51f842c54c68b28588a6bc89cfb1993f84 Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 21 Sep 2026 18:50:39 +0000 Subject: [PATCH] =?UTF-8?q?el=20busybox=20recortado=20ARRANCA:=20Stage=201?= =?UTF-8?q?=20en=20QEMU,=20contra=20una=20l=C3=ADnea=20base?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Se ensamblaron dos Stage 1 completos y se arrancaron los dos, para que cualquier diferencia se atribuya al recorte y no al azar: base b3:1a3823b4... 400 applets qemu rc=0 recortado b3:3aa8cd2d... 278 applets qemu rc=0 Los dos dan shell y se apagan limpio. El diff de las dos consolas son 35 líneas y ninguna es funcional: TSC, direcciones del RAMDISK, BogoMIPS, hora del RTC. La única diferencia real es el conteo de applets desde dentro de la imagen: 410 contra 288. Verificado en el recortado: arje-zero como PID 1, la seed card carga (la getty llegó a incarnar), getty -l /bin/sh da prompt y responde, y poweroff -f apaga de verdad -- uno de los cinco indultados, probado en vivo. Corrido en el worker con QEMU en TCG: el LXC no expone /dev/kvm. Hubo que instalar qemu-system-x86-core y reingerir la semilla de Stage 0, que no estaba en ese store y salió con el mismo hash que el manifiesto ya anotaba. Es Stage 1, no el producto: product-boot-test.sh sigue pendiente porque al store del worker le faltan netup, openssh, uutils, findutils-xargs, diffutils y ripgrep. Co-Authored-By: Claude Opus 5 (1M context) --- docs/plan-botar-busybox.md | 43 +++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/docs/plan-botar-busybox.md b/docs/plan-botar-busybox.md index 69a72cdd..327cfc59 100644 --- a/docs/plan-botar-busybox.md +++ b/docs/plan-botar-busybox.md @@ -410,10 +410,47 @@ libnftnl linux linux-firmware llama-cpp logrotate nftables opensmtpd popt protob sof-firmware valkey wireless-regdb zlib-ng`. **`linux` está en la lista**: el kernel se reconstruye. La granja lo hará en su propio ciclo; no se disparó a mano. -## Lo que queda del paso 1 +## El arranque — PROBADO en QEMU, contra una línea base -- **Arrancar una imagen.** Lo medido es que el artefacto sella y que el sandbox construye. Que el - producto **bootee** con 277 applets no se probó: falta `product-boot-test.sh`. +**2026-09-21.** Se ensamblaron **dos** Stage 1 completos y se arrancaron los dos en QEMU, para que +cualquier diferencia se pueda atribuir al recorte y no al azar: + +| | rootfs sellado | applets en `/bin /sbin /usr/bin /usr/sbin` | qemu | +|---|---|---|---| +| **base** (busybox sin recortar) | `b3:1a3823b4…` | 400 | `rc=0` | +| **recortado** | `b3:3aa8cd2d…` | **278** | `rc=0` | + +Los dos arrancan, los dos dan shell y los dos se apagan limpio. **Diff de las dos consolas: 35 +líneas, y ninguna es funcional** — frecuencia del TSC, direcciones del RAMDISK, BogoMIPS, hora del +RTC. La única diferencia real es la que se buscaba: + +``` +~ # ls /bin /sbin /usr/bin /usr/sbin | wc -l +410 ← base +288 ← recortado +``` + +Criterios del runbook `stage1-vm-boot.md` §6, verificados en el recortado: + +- **PID 1** — `arje-zero` incarna y corre. +- **Seed** — la card se carga: la prueba es que la `console-getty` llegó a incarnar. +- **getty → shell** — `/bin/busybox getty -n -l /bin/sh 115200 console` da prompt `~ #`, y + `echo MARCA-SHELL-VIVA` responde. **`getty` y `sh` sobrevivieron al recorte, que era el riesgo.** +- **`poweroff -f`** — `ACPI: PM: Preparing to enter system sleep state S5` / `reboot: Power down`. + Uno de los cinco indultados, probado **en vivo**: sin él la caja no se apaga. + +⚠ **Cómo se corrió, porque condiciona el resultado:** en `dev.gioser.net`, con **QEMU en TCG +(emulación pura)** — el LXC no expone `/dev/kvm`, aunque el CPU sí trae los flags. Por eso el guion +se le manda por consola serie con esperas generosas. Hubo que instalar `qemu-system-x86-core` (dnf) +e ingerir de nuevo la semilla de Stage 0, que no estaba en el store del worker; sí salió con el +mismo hash que el manifiesto ya anotaba (`3ce721ec…`). + +⚠ **Es Stage 1, no el producto.** Se eligió porque es donde vive busybox (`musl busybox hammerd +arje-zero`) y porque necesitaba 2 artefactos en vez de 8. `product-boot-test.sh` —que además levanta +sshd y netup— sigue sin correrse: le faltan `netup openssh uutils findutils-xargs diffutils +ripgrep` en el store del worker. + +## Lo que queda del paso 1 - **Las otras 21 dependientes**, cuando la granja llegue. - El siguiente corte natural son los `BORRAR` que no se tocaron por prudencia y los 272 que siguen: el número baja a 0 por el paso 2 (declarar la munición sellada) y el 5 (`grep`/`sed` POSIX).