selfhost-verify: herramientas de toolchain extra desde fuente — patch, m4, pkgconf

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 <noreply@anthropic.com>
This commit is contained in:
2026-06-14 05:40:53 -04:00
co-authored by Claude Opus 4.8
parent a774552ead
commit 6c8a307997
4 changed files with 71 additions and 2 deletions
+9 -2
View File
@@ -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}`
+21
View File
@@ -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"]
+20
View File
@@ -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"]
+21
View File
@@ -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"