From 749ea9e7972faaf48337db8d3abc7806e719eac1 Mon Sep 17 00:00:00 2001 From: sergio Date: Fri, 12 Jun 2026 14:55:30 -0400 Subject: [PATCH] =?UTF-8?q?recipes:=20GNU=20make=204.4.1=20=E2=80=94=20pie?= =?UTF-8?q?za=201=20del=20toolchain=20hammer-from-source=20(variante=20b)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Arranca el auto-alojamiento *puro* (SDD 11 §7.2b): reemplazar una a una las piezas que el builder toma de Alpine (/toolchain) por recetas hammer desde fuente, con Stage 2 reverificando cada paso. make es la pieza base de toda receta autotools. Build estático musl con zig cc (mismo camino que grep: tarball release con configure → AutoconfReady), sellado b3:fbad44ac… y reproducible bit-a-bit (dos builds en stores distintos ⇒ árbol idéntico). Pendiente: swap al /toolchain del builder + Stage 2. Co-Authored-By: Claude Opus 4.8 --- docs/10-roadmap.md | 12 ++++++++---- docs/11-bootstrap.md | 8 +++++++- recipes/make.toml | 23 +++++++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 recipes/make.toml diff --git a/docs/10-roadmap.md b/docs/10-roadmap.md index b3ed5e00..5eff29a3 100644 --- a/docs/10-roadmap.md +++ b/docs/10-roadmap.md @@ -229,10 +229,14 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume Stage 0 → Stage 1 (booteado en QEMU, arje-zero como PID 1, `CRASHED` real) → **Stage 2 auto-alojamiento bit-a-bit confirmado** (`✓ REPRODUCIBLE`, host↔VM). Baseline reproducible 4/4: `of_tree(stage1)=b3:0039b2b9…` (cu=1). -- ⏭️ **Siguiente:** (1) auto-alojamiento *puro* — que hammer construya el toolchain semilla - desde fuente (no el zip de zig + Alpine como sustrato del builder), camino (b) de - [SDD 11 §7](11-bootstrap.md); (2) ítems Stage 1 pendientes: bus único (B.2: exponer el - `CRASHED` a la capa de IA) y atestación arje (A1/A2). +- 🚧 **En curso — auto-alojamiento *puro* (variante b, [SDD 11 §7.2b](11-bootstrap.md)):** que + hammer construya el toolchain del builder desde fuente (no Alpine), reemplazando piezas una a una + con Stage 2 verificando cada paso. **Pieza 1 hecha:** GNU make `4.4.1` (`recipes/make.toml`) se + compila desde fuente con el lab — estática musl, sellada `b3:fbad44ac…`, reproducible bit-a-bit. + Pendiente: swap al `/toolchain` del builder + Stage 2 reverificando, y luego make/autotools → + linux-headers → bwrap → el gran tramo rust/llvm. +- ⏭️ **También pendiente (Stage 1):** bus único (B.2: exponer el `CRASHED` a la capa de IA) y + atestación arje (A1/A2). ## Notas de entorno - Desarrollo principal: laptop del autor. diff --git a/docs/11-bootstrap.md b/docs/11-bootstrap.md index 6917b688..9ee706e2 100644 --- a/docs/11-bootstrap.md +++ b/docs/11-bootstrap.md @@ -203,6 +203,11 @@ recetas, la **semilla** (`zig`, ya un artefacto sellado), `make`+autotools, `car make/autotools, y el gran tramo: rust/llvm o un rustc bootstrappeado). Es el end-state; el más caro (construir rust desde cero). Se llega **incrementalmente**, reemplazando una a una las piezas Alpine por componentes hammer, con Stage 2 verificando cada paso. + - **Pieza 1 — GNU make `4.4.1`** (`recipes/make.toml`): arranque de (b). Build estático musl con + `zig cc` (mismo camino que `grep`: tarball release con `configure` → AutoconfReady), sellado en + `b3:fbad44ac…` y **reproducible bit-a-bit** (dos builds en stores distintos ⇒ árbol idéntico). + Es la herramienta base de toda receta autotools. Pendiente: swap al `/toolchain` del builder en + lugar del `make` de Alpine, con Stage 2 reverificando `of_tree(stage1')`. ### 7.3 Enganche con lo ya hecho @@ -237,7 +242,8 @@ manifiesto (línea stage 2). Validado contra el store real (Stage 1 `73d7a9be… no-interactivo; in-VM reconstruyó los 4/4 (arje-zero cu=1 en ~27 min) y `of_tree(stage1') = b3:0039b2b9…` igualó la referencia ⇒ `✓ REPRODUCIBLE: stage1' == stage1`. Lo que queda es la variante (b), el auto-alojamiento *puro* (toolchain construido por hammer desde fuente, §7.2). -Ver [runbook §8](runbooks/stage1-vm-boot.md). +**Arrancada:** la pieza 1, GNU make `4.4.1` (`recipes/make.toml`), ya se construye desde fuente +con el lab — estática, reproducible bit-a-bit (§7.2b). Ver [runbook §8](runbooks/stage1-vm-boot.md). ## 8. Hecho cuando diff --git a/recipes/make.toml b/recipes/make.toml new file mode 100644 index 00000000..91dfc891 --- /dev/null +++ b/recipes/make.toml @@ -0,0 +1,23 @@ +# GNU make 4.4.1 — primera pieza del toolchain hammer-from-source (SDD 11 §7.2b). +# +# Arranca el reemplazo, una a una, de las herramientas que hoy el builder toma de Alpine +# (`/toolchain`) por recetas hammer construidas desde fuente. `make` es la pieza base: todas las +# demás recetas autotools (musl, busybox, el propio grep) la invocan en su fase de compile/install. +# +# Build estático con `zig cc` cross al target, mismo camino ya probado con `grep` 3.12: el tarball +# release trae `configure` generado (AutoconfReady → ./configure && make && make install), así que no +# hay `./bootstrap` ni gnulib por red. `--disable-nls` evita gettext; sin guile (opcional, ausente). +# El sha256 del tarball es identificador inmutable, pinned igual de fuerte que un commit (ADR 0006). + +name = "make" +version = "4.4.1" + +[source] +tarball = "https://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz" +sha256 = "dd16fb1d67bfab79a72f5e8390735c49e3e8e70b4945a15ab1f81ddb78658fb3" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["--disable-nls"]