bootstrap: hammerd como receta Cargo en Stage 1 (Lote 7)

Cierra el userland mínimo salvo el init definitivo. hammerd entra como tercer
componente de stage1, construido por el lab vía BuildSys::Cargo + vendoring:

- recipes/hammerd.toml: source git del repo hammer a commit fijado (ADR 0006),
  flags=["-p","hammerd"] para construir sólo ese binario del workspace, estático
  con zig cc; las deps se vendorean en el fetch (Lote 6) ⇒ build --offline
- STAGE1_COMPONENTS += hammerd; el inittab provisional lo arranca como servicio
  respawn (/usr/bin/hammerd) tras montar los pseudo-FS
- el test de recetas del repo ahora valida también hammerd.toml (parse + hash)

Falta sólo sustituir el init provisional de busybox por arje (ADR 0007) para el
CRASHED real. El cross-compile se valida en la VM.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sergio
2026-06-11 01:06:40 +00:00
co-authored by Claude Opus 4.8
parent e9b0551213
commit 02827f62c9
4 changed files with 46 additions and 19 deletions
+6 -5
View File
@@ -184,11 +184,12 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume
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), `hammer bootstrap stage1` que las construye con la
semilla, ensambla el rootfs FHS (hardlink) y lo sella con un `RootfsHash` de contenido +
init provisional (busybox/inittab). Falta: `hammerd` (receta Cargo, sourcing del plan M2) y
sustituir el init por `arje`. El cross-compile real se valida en la VM (los e2e se saltan
sin `.dev-fs`); el manifiesto anota la línea de Stage 1.
`busybox` 1.36.1 (estáticas, zig cc) + `hammerd` (receta Cargo: repo pinned + deps
vendoreadas en el fetch para build `--offline`); `hammer bootstrap stage1` las construye con
la semilla, ensambla el rootfs FHS (hardlink) y lo sella con un `RootfsHash` de contenido +
init provisional (busybox/inittab que arranca `hammerd`). Falta sólo sustituir el init por
`arje`. El cross-compile real se valida en la VM (los e2e se saltan sin `.dev-fs`); el
manifiesto anota la línea de Stage 1.
- **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`