From 6c8a3079973f20c725b54f8933b934cd4a492c24 Mon Sep 17 00:00:00 2001 From: sergio Date: Sun, 14 Jun 2026 05:40:53 -0400 Subject: [PATCH] =?UTF-8?q?selfhost-verify:=20herramientas=20de=20toolchai?= =?UTF-8?q?n=20extra=20desde=20fuente=20=E2=80=94=20patch,=20m4,=20pkgconf?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Más de-Alpinización del builder (variante b, SDD 11 §7.2b): recetas para construir desde fuente tres build-tools del toolchain que hoy vienen de Alpine. - recipes/patch.toml (GNU patch 2.8): lo invoca apply_patches (hammer-build/fetch.rs) cuando una receta trae source.patches, p.ej. el overlay de linux-headers. - recipes/m4.toml (GNU m4 1.4.20): base de la cadena autotools. - recipes/pkgconf.toml (pkgconf 2.5.1): lee los .pc que materialize_build_deps deja en el sandbox. Las 3 estáticas musl con zig cc (AutoconfReady), validadas: corren, versión correcta y funcionales (patch aplica, m4 expande, pkgconf resuelve). El 4/4 mínimo no las invoca ⇒ sin flag SWAP_* dedicado (swapeables con el escape SWAPS="name=hash:rel"); avanzan "builder reconstruible al completo". Co-Authored-By: Claude Opus 4.8 --- docs/10-roadmap.md | 11 +++++++++-- recipes/m4.toml | 21 +++++++++++++++++++++ recipes/patch.toml | 20 ++++++++++++++++++++ recipes/pkgconf.toml | 21 +++++++++++++++++++++ 4 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 recipes/m4.toml create mode 100644 recipes/patch.toml create mode 100644 recipes/pkgconf.toml diff --git a/docs/10-roadmap.md b/docs/10-roadmap.md index bddd1e83..b5a08d15 100644 --- a/docs/10-roadmap.md +++ b/docs/10-roadmap.md @@ -290,9 +290,16 @@ Diseño completo en [SDD 11 — Bootstrap from-scratch](11-bootstrap.md). Resume igual layout que Alpine: un `/bin/coreutils` + ~100 symlinks), así **un solo swap del binario** rutea todos los applets. Tool, no input ⇒ build vainilla sin patches. Bisección host fuerte: **musl Y busybox rebuildearon byte-idéntico** (`57b66a2e`, `56664d70`) con hammer-coreutils pisando el de Alpine. - Expuesto con `SWAP_COREUTILS=1`. **Pendiente:** correr in-VM acumulando los swaps + Expuesto con `SWAP_COREUTILS=1`. Falta correrla in-VM. + **Herramientas de toolchain extra desde fuente (provenance, no en el camino del 4/4 mínimo):** + `recipes/{patch,m4,pkgconf}.toml` — GNU patch 2.8 (lo usa `apply_patches`), GNU m4 1.4.20 (base + autotools) y pkgconf 2.5.1 (lee los `.pc` que materializa el lab). Construidas estáticas con zig cc + y validadas (corren, versión correcta, funcionales). El 4/4 mínimo (musl/busybox/hammerd/arje-zero) + no las invoca, así que no llevan flag `SWAP_*` dedicado: son swapeables con el escape `SWAPS="name=hash:rel"`. + Avanzan el "builder reconstruible al completo, no todo-Alpine" aunque el verify no las ejercite hoy. + **Pendiente:** correr in-VM acumulando los swaps de sandbox (`KVM=1 MEM=24576 SWAP_MAKE=1 SWAP_BUSYBOX=1 SWAP_LINUX_HEADERS=1 SWAP_BWRAP=1 SWAP_COREUTILS=1 ./scripts/selfhost-verify.sh`) - para el `✓ REPRODUCIBLE`, y seguir con la última pieza: rust/llvm (la grande — ya hay infra de deps). + para el `✓ REPRODUCIBLE`, y la última pieza grande: rust/llvm (ya hay infra de deps; falta python/cmake/ninja en el toolchain). - ✅ **B.2 — `CRASHED` real a la capa de IA (cableado end-to-end):** el `Event::Crashed` del bus de agente ya tiene fuente real. **Fuente (arje):** `arje-bus` ganó `BusRequest::Subscribe` + `BusPayload::Event(BusEvent)`; arje-zero difunde en `on_death` `EnteCrashed{id,label,status}` diff --git a/recipes/m4.toml b/recipes/m4.toml new file mode 100644 index 00000000..645be825 --- /dev/null +++ b/recipes/m4.toml @@ -0,0 +1,21 @@ +# GNU m4 1.4.20 — herramienta del toolchain hammer-from-source (variante b, SDD 11 §7.2b). +# +# Procesador de macros base de la cadena autotools (autoconf/automake/bison lo invocan). Hoy ninguna +# receta corre `autoreconf` (todas son AutoconfReady: traen `configure` generado), así que m4 no está +# en el camino del 4/4 actual — pero es pieza del toolchain Alpine y la reemplazamos desde fuente para +# que el builder sea reconstruible al completo (no "todo Alpine"). Tool, no input: build vainilla. +# +# Tarball release GNU (configure ya generado ⇒ AutoconfReady). Estático musl, zig cc. + +name = "m4" +version = "1.4.20" + +[source] +tarball = "https://ftp.gnu.org/gnu/m4/m4-1.4.20.tar.gz" +sha256 = "6ac4fc31ce440debe63987c2ebbf9d7b6634e67a7c3279257dc7361de8bdb3ef" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["--disable-nls"] diff --git a/recipes/patch.toml b/recipes/patch.toml new file mode 100644 index 00000000..7730bce7 --- /dev/null +++ b/recipes/patch.toml @@ -0,0 +1,20 @@ +# GNU patch 2.8 — herramienta del toolchain hammer-from-source (variante b, SDD 11 §7.2b). +# +# El lab la invoca en `apply_patches` (hammer-build/src/fetch.rs: `patch -p1`) cuando una receta trae +# `source.patches` — p.ej. el overlay de compatibilidad de `linux-headers`. Reemplaza el `patch` del +# paquete homónimo de Alpine. Tool, no input del 4/4: build vainilla, sin patches. +# +# Tarball release GNU (configure ya generado ⇒ AutoconfReady, como grep/make). Estático musl, zig cc. + +name = "patch" +version = "2.8" + +[source] +tarball = "https://ftp.gnu.org/gnu/patch/patch-2.8.tar.gz" +sha256 = "308a4983ff324521b9b21310bfc2398ca861798f02307c79eb99bb0e0d2bf980" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" +flags = ["--disable-nls"] diff --git a/recipes/pkgconf.toml b/recipes/pkgconf.toml new file mode 100644 index 00000000..e84b8ba9 --- /dev/null +++ b/recipes/pkgconf.toml @@ -0,0 +1,21 @@ +# pkgconf 2.5.1 — herramienta del toolchain hammer-from-source (variante b, SDD 11 §7.2b). +# +# Provee `pkgconf` (+ el symlink `pkg-config`): resuelve flags de compilación/enlace de libs vía sus +# `.pc`. Es la pieza que LEE los `usr/lib/pkgconfig/*.pc` que la materialización de build-deps deja en +# el sandbox (ver hammer-build materialize_build_deps); cualquier receta que dependa de una lib y use +# `pkgconf --cflags/--libs` lo necesita. Reemplaza el `pkgconf` de Alpine. Tool, no input: build vainilla. +# +# Tarball release de distfiles.ariadne.space (configure ya generado ⇒ AutoconfReady, NO el archive de +# github que pediría autogen). Estático musl, zig cc. + +name = "pkgconf" +version = "2.5.1" + +[source] +tarball = "https://distfiles.ariadne.space/pkgconf/pkgconf-2.5.1.tar.gz" +sha256 = "ab89d59810d9cad5dfcd508f25efab8ea0b1c8e7bad91c2b6351f13e6a5940d8" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static"