docs: Stage 1 bootea end-to-end en QEMU (bitácora + roadmap)

La corrida real cierra el lazo: con el build nativo crt-static (cargo rustc),
arje-zero y hammerd salen statically-linked (ET_EXEC, sin DT_NEEDED), el rootfs
se sella, y el boot en QEMU (-cpu Broadwell) levanta el sistema:

  arje-zero (PID 1) → carga+valida /ente/seed.card.json → bucle primordial →
  encarna hammerd (Pid 59) + console-getty (Pid 60) → shell en consola;
  hammerd levanta su watcher fanotify y el agent.sock.

Runbook §8: bitácora completa (todos los fixes: gcc/HOSTCC, GNU-ld, rust en el
lab, triple nativo, wrapper saneador, vendoring condicional, AVX→Broadwell,
dinámico→crt-static vía cargo rustc). Roadmap: Stage 1 ◑→.

Pendiente: demo del CRASHED real (kill hammerd → restart con backoff; la
supervisión Restart ya corre), bus único (B.2), atestación (A1/A2).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-06-11 11:39:28 +00:00
co-authored by Claude Opus 4.8
parent 879af17f5c
commit 186ae3e1c8
2 changed files with 43 additions and 9 deletions
+9 -9
View File
@@ -183,15 +183,15 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
- **Stage 0** ✅ — crate `hammer-bootstrap` + `hammer bootstrap stage0`: ingiere el toolchain
semilla pinned (`SeedSpec`, hash por identidad), verifica sha256 antes de sellar,
idempotente. Cubierto por 4 unit + 1 e2e de CLI (offline, `file://`).
- **Stage 1** — userland mínimo cross-compilado. Hecho: recetas pinned `musl` 1.2.5 +
`busybox` 1.36.1 (estáticas, zig cc) + `hammerd` (receta Cargo: repo pinned + deps
vendoreadas en el fetch para build `--offline`) + `arje-zero` (init PID 1, receta Cargo a
tawasuyu); `hammer bootstrap stage1` los construye con la semilla, ensambla el rootfs FHS
(hardlink) y lo sella con un `RootfsHash` de contenido. El init es **arje-zero como PID 1**
(`/sbin/init`arje-zero) con su seed card `/ente/seed.card.json` (hammerd + getty supervisados
⇒ el `CRASHED` real) — diseño en [SDD 12](12-init-real.md), seed verificada contra
`card_core::Card`. Falta: bus único (B.2) y atestación (A1/A2). El cross-compile y el boot
reales se validan en la VM; el manifiesto anota la línea de Stage 1.
- **Stage 1** — userland mínimo, **booteado end-to-end en QEMU**. Recetas pinned `musl` 1.2.5 +
`busybox` 1.36.1 (estáticas, zig cc) + `hammerd` + `arje-zero` (recetas Cargo: repo pinned +
deps vendoreadas en el fetch, build nativo crt-static vía `cargo rustc`); `hammer bootstrap
stage1` los construye con la semilla, ensambla el rootfs FHS y lo sella. El init es **arje-zero
como PID 1** (`/sbin/init`→arje-zero) con su seed card `/ente/seed.card.json`; al bootear,
arje-zero carga+valida la seed y **supervisa hammerd + getty** (el `agent.sock` y el watcher
fanotify de hammerd levantan). Diseño en [SDD 12](12-init-real.md); corrida y fixes en el
[runbook](runbooks/stage1-vm-boot.md). Pendiente: demo del `CRASHED` real (matar hammerd → restart),
bus único (B.2) y atestación (A1/A2).
- **Stage 2** ☐ — rebuild nativo dentro del rootfs y diff de hashes ⇒ auto-alojamiento
bit-reproducible.
- Reemplazar el init de Alpine por **tu init** (bus por pipes nativo) — habilita el `CRASHED`