selfhost-verify: pieza 2 (busybox swap) — SWAP_BUSYBOX=1, validada en host
Variante (b) pieza 2: el sh+coreutils que el build usa del /toolchain. El /toolchain de Alpine es mixto — busybox para sh/sed/grep/awk/tar/find (symlinks → /bin/busybox), GNU coreutils para cp/mkdir/install. El swap monta el busybox estático de hammer sobre /toolchain/bin/busybox: los applets busybox-backed pasan a usarlo, coreutils GNU queda intacto. Sin código nuevo — el mecanismo --swap ya soporta rel_path (--swap busybox=<hash>:bin/busybox). Validado en host (sin VM): con make+busybox de hammer swapeados, los 4/4 componentes construyen — incl. busybox compilándose a sí mismo con hammer-busybox de shell — y el of_tree del rootfs ensamblado da 9adefb82 (el baseline determinista). Las piezas 1 y 2 son reproducibilidad-neutrales: el toolchain es intercambiable sin perturbar el byte-output. selfhost-verify.sh: SWAP_BUSYBOX=1 (paralelo a SWAP_MAKE). Docs 10/11 actualizadas. Pendiente: verify in-VM con los swaps para el ✓ REPRODUCIBLE end-to-end. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+16
-3
@@ -213,9 +213,22 @@ recetas, la **semilla** (`zig`, ya un artefacto sellado), `make`+autotools, `car
|
||||
auditable para el log de transparencia. CLI: `hammer bootstrap builder --swap make=<hash>[:rel]`
|
||||
(repetible; `rel_path` por defecto `usr/bin/<name>`). En el host: pura `b3:8a370f5d…` vs swapped
|
||||
`b3:e7e2282c…`, y `/toolchain/usr/bin/make` queda hardlinkeado al artefacto `fbad44ac…`. El
|
||||
`selfhost-verify.sh` lo expone opt-in con `SWAP_MAKE=1` (construye make y lo swapea). **Pendiente:**
|
||||
correr Stage 2 in-VM con el swap y confirmar que `of_tree(stage1')` **no** cambia (el make hammer
|
||||
compila los 4/4 idéntico al de Alpine ⇒ el toolchain es intercambiable sin perturbar el byte-output).
|
||||
`selfhost-verify.sh` lo expone opt-in con `SWAP_MAKE=1` (construye make y lo swapea). **Validado en
|
||||
host:** con make de hammer los 4/4 reproducen `of_tree=9adefb82…` (idéntico al baseline determinista).
|
||||
- **Pieza 2 — busybox `1.36.1`** (ya es componente de Stage 1, `recipes/busybox.toml`): provee el
|
||||
`sh`+coreutils que el build usa del `/toolchain`. El `/toolchain` de Alpine es **mixto** — busybox
|
||||
para `sh/sed/grep/awk/tar/find` (symlinks → `/bin/busybox`) y GNU coreutils para `cp/mkdir/install`.
|
||||
El swap monta el busybox estático de hammer sobre `/toolchain/bin/busybox` (`--swap
|
||||
busybox=<hash>:bin/busybox`; sin código nuevo — el mecanismo `--swap` ya soporta `rel_path`): los
|
||||
applets busybox-backed pasan a usar hammer-busybox, coreutils GNU intacto. `SWAP_BUSYBOX=1` en el
|
||||
verify. **Validado en host:** con make+busybox de hammer los 4/4 (incl. busybox compilándose a sí
|
||||
mismo con hammer-busybox de shell) reproducen `of_tree=9adefb82…`.
|
||||
- **Determinismo (transversal):** `codegen-units=1` NO bastaba — el backend paralelo de rustc/LLVM
|
||||
(ThinLTO) divergía ~62 KB en `arje-zero` a >1 CPU. Fix: `CARGO_BUILD_JOBS=1` en el sandbox
|
||||
serializa el jobserver ⇒ reproducible e independiente del nº de CPUs (SDD 09 §2). El baseline
|
||||
reproducible verdadero es `of_tree=9adefb82…` (el viejo `0039b2b9…` era un build paralelo no-fiable).
|
||||
**Pendiente:** correr Stage 2 in-VM con los swaps para el `✓ REPRODUCIBLE` end-to-end; luego
|
||||
linux-headers → bwrap → el gran tramo rust/llvm.
|
||||
|
||||
### 7.3 Enganche con lo ya hecho
|
||||
|
||||
|
||||
Reference in New Issue
Block a user