From f8f679d0380e47ef213dbcb44d3928e0f94d2890 Mon Sep 17 00:00:00 2001 From: Sergio Date: Wed, 26 Aug 2026 18:42:11 +0000 Subject: [PATCH] corpus: expat-shared y libffi-shared cierran la fuga al Alpine del lab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sway es `link = "dynamic"` A PROPÓSITO —un compositor dlopea los drivers DRI de mesa en runtime— y sale con doce NEEDED. Nueve los cubría la clausura (pixman, drm, evdev, input, udev, wayland-server, wlroots, xkbcommon, libc), porque esas recetas ya son dinámicas. Los otros tres —libz.so.1, libexpat.so.1, libffi.so.8— venían de recetas `--disable-shared`, así que NINGÚN artefacto sellado producía ese `.so` y el rootfs los resolvía contra el sysroot Alpine DEL LAB. POR QUÉ ERA PEOR QUE UNA DEP FALTANTE. Una dep ausente falla ruidosamente. Ésta no: el lab NO entra en `hash_inputs`, así que el store daba el artefacto por bueno mientras el binario sólo arrancaba en una máquina que tuviera Alpine debajo. La fuga era invisible para todo el sistema de medición. `zlib-shared` ya existía en el corpus y sólo faltaba declararla. `expat-shared` y `libffi-shared` son nuevas, calcadas del patrón: autotools con --enable-shared, sin el truco de --whole-archive que zlib-shared necesita porque SU configure aborta bajo zig cc. SONAMEs verificados contra lo que pide el ELF: libexpat.so.1, libffi.so.8, libz.so.1. Exactos. NO se tocó `link` en las canónicas: entra en `hash_inputs` y habría re-hasheado expat, libffi y todo lo que los lista en deps —fontconfig, dbus, mesa, glib, python3, los crates `-sys`— cientos de recetas selladas por libs que ya están bien. El nombre `*-shared` es distinto del canónico, así que conviven. Verificado antes de construir: recalculadas las 794 recetas, **0 hashes cambiados**, sólo las 2 nuevas. Van al CORPUS y no a incoming-wlr/ porque la resolución de deps es hermano→padre: una receta del corpus no ve una cola. Es donde ya viven zlib-shared, fontconfig-shared, freetype-shared… VERIFICADO CON PÍXELES, no con el log. Rootfs rehidratado desde cero (126/126), CERO ficheros de `.dev-fs/alpine`. Cero «Error relocating». La captura tiene el MISMO sha256 que la de las libs de Alpine: 177fea396caa9dca, 1280x720, 383 colores. Tercera vez que la evidencia sale bit a bit igual al cambiar la procedencia — la soberanía no costó ni un píxel. Perfil: escritorio-sway 126/128. Faltan strace (linux-headers del lab) y rsync (404 de upstream). QUEDA UN RESTO: el loader `/lib/ld-musl-x86_64.so.1` todavía se toma del host. `recipes/musl.toml` existe en el corpus pero está EN DEUDA y fuera de todo perfil — mismo agujero de declaración, un nivel más abajo. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_016v9ozVm44p6DB7EMXeZK4o --- .../sway-headless-soberano-2026-08-26.png | Bin 0 -> 20391 bytes docs/state/build-state-wlr.json | 65 ++++++++++++++---- docs/state/targets.toml | 11 +++ recipes/expat-shared.toml | 51 ++++++++++++++ recipes/libffi-shared.toml | 39 +++++++++++ 5 files changed, 154 insertions(+), 12 deletions(-) create mode 100644 docs/evidencia/sway-headless-soberano-2026-08-26.png create mode 100644 recipes/expat-shared.toml create mode 100644 recipes/libffi-shared.toml diff --git a/docs/evidencia/sway-headless-soberano-2026-08-26.png b/docs/evidencia/sway-headless-soberano-2026-08-26.png new file mode 100644 index 0000000000000000000000000000000000000000..1fbab3c9afcdc025b77a0db02f3201125c5f73c8 GIT binary patch literal 20391 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 literal 0 HcmV?d00001 diff --git a/docs/state/build-state-wlr.json b/docs/state/build-state-wlr.json index b4c315f4..20c0099c 100644 --- a/docs/state/build-state-wlr.json +++ b/docs/state/build-state-wlr.json @@ -1,14 +1,14 @@ { "schema": "hammer-build-state/1", "totals": { - "recipes": 794, - "nodes": 794, - "sealed": 440, + "recipes": 796, + "nodes": 796, + "sealed": 442, "debt": 352, "never": 2 }, "by_class": { - "c": 166, + "c": 168, "go": 362, "gui": 32, "kernel": 6, @@ -23,7 +23,7 @@ }, "by_queue": { "corpus": { - "sealed": 425, + "sealed": 427, "debt": 352, "never": 2 }, @@ -51,13 +51,13 @@ "debt": 3 }, "escritorio-sway": { - "raices": 58, - "clausura": 125, - "sealed": 123, + "raices": 61, + "clausura": 128, + "sealed": 126, "debt": 2 } }, - "sin_perfil": 654, + "sin_perfil": 653, "orphan_deps": [], "topo_ok": true, "nodes": { @@ -826,7 +826,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 37 + "dependientes_total": 38 }, "biome": { "iname": "biome", @@ -3495,6 +3495,26 @@ ], "dependientes_total": 70 }, + "expat-shared": { + "iname": "expat-shared", + "version": "2.8.1", + "link": "dynamic", + "compiler": "zig-cc", + "deps": [ + "binutils", + "make" + ], + "cls": "c", + "queue": "corpus", + "hash": "b3:f0f0391200508c52df612dcc85ece1bc0fbddccc16990f61bedb4ee8dd012d20", + "state": "sealed", + "blocked_by": [], + "unblocks": 0, + "perfiles": [ + "escritorio-sway" + ], + "dependientes_total": 0 + }, "eza": { "iname": "eza", "version": "0.23.4", @@ -7884,6 +7904,25 @@ ], "dependientes_total": 115 }, + "libffi-shared": { + "iname": "libffi-shared", + "version": "3.5.2", + "link": "dynamic", + "compiler": "zig-cc", + "deps": [ + "make" + ], + "cls": "c", + "queue": "corpus", + "hash": "b3:2e5ce246a17d19b1d45629a9a485d556db5be40068ae3f618f16fe0ccdc58620", + "state": "sealed", + "blocked_by": [], + "unblocks": 0, + "perfiles": [ + "escritorio-sway" + ], + "dependientes_total": 0 + }, "libgcrypt": { "iname": "libgcrypt", "version": "1.12.2", @@ -8722,7 +8761,7 @@ "escritorio-mirada", "escritorio-sway" ], - "dependientes_total": 111 + "dependientes_total": 113 }, "mako": { "iname": "mako", @@ -14410,7 +14449,9 @@ "state": "sealed", "blocked_by": [], "unblocks": 0, - "perfiles": [], + "perfiles": [ + "escritorio-sway" + ], "dependientes_total": 4 }, "zola": { diff --git a/docs/state/targets.toml b/docs/state/targets.toml index 9efc8656..5dcdec91 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -185,6 +185,17 @@ paquetes = [ "dejavu-fonts", # sin UNA fuente, foot muere con «monospace::size=8: failed to match font» "xkeyboard-config", # sin datos XKB: «xkbcommon: ERROR: failed to add default include path # /usr/share/X11/xkb», y sway no completa el seat + # ── LAS TRES `.so` QUE sway PIDE Y EL CORPUS SÓLO PRODUCE COMO `.a` ───────────────────────── + # `sway` es `link = "dynamic"` a propósito (dlopea los drivers DRI de mesa) y sale con + # `NEEDED libz.so.1 / libexpat.so.1 / libffi.so.8`. Las canónicas son `--disable-shared`, así que + # ningún artefacto sellado producía esos `.so` y el rootfs hidratado los resolvía contra el + # sysroot Alpine DEL LAB. Peor que una dep faltante: el lab NO entra en `hash_inputs`, así que la + # fuga era invisible para el store — el artefacto se daba por bueno y sólo arrancaba en una + # máquina con Alpine debajo. Los otros nueve NEEDED de sway (pixman, drm, evdev, input, udev, + # wayland-server, wlroots, xkbcommon, libc) sí los cubre la clausura, porque esas recetas ya son + # `link = dynamic`. Como las tres son data de runtime y nadie las declara como dep de BUILD, van + # de raíces por la misma razón que las fuentes y el XKB de arriba. + "zlib-shared", "expat-shared", "libffi-shared", "swaybg", # fondo de escritorio "swaylock", # bloqueo de pantalla (con PAM: linux-pam SÍ está en el corpus) "swayidle", # apagado por inactividad diff --git a/recipes/expat-shared.toml b/recipes/expat-shared.toml new file mode 100644 index 00000000..44fbff94 --- /dev/null +++ b/recipes/expat-shared.toml @@ -0,0 +1,51 @@ +# expat-shared 2.8.1 — variante DINÁMICA de expat. +# +# ── POR QUÉ EXISTE ───────────────────────────────────────────────────────────────────────────── +# El expat canónico (recipes/expat.toml) es `--disable-shared`: sólo `libexpat.a`, que es lo que +# quiere el enlace estático del corpus. Pero `sway` es `link = "dynamic"` A PROPÓSITO —un compositor +# dlopea los drivers DRI de mesa en runtime, así que estático no sirve— y sale con +# `NEEDED libexpat.so.1`. Ese `.so` no lo producía NINGÚN artefacto sellado ⇒ el rootfs hidratado +# caía al `libexpat.so.1` del sysroot Alpine del lab. Es la misma fuga de soberanía que documenta +# `zlib-shared`, y con el agravante de [[lab-fuera-de-hash-inputs]]: el lab NO entra en `hash_inputs`, +# así que la dependencia era invisible para el store — el artefacto se daba por bueno y sólo +# arrancaba en una máquina que tuviera Alpine debajo. +# +# ── POR QUÉ UNA VARIANTE Y NO `link = "dynamic"` EN LA CANÓNICA ──────────────────────────────── +# `link` entra en `hash_inputs`. Tocar `recipes/expat.toml` re-hashearía expat y, en cascada, todo +# lo que lo lista en deps — fontconfig, dbus, mesa, los crates `-sys`… cientos de recetas selladas +# a reconstruir por una lib que ya está bien. El patrón `*-shared` deja intacta la canónica: el +# nombre es DISTINTO (`expat-shared` no pisa a `expat`), así que conviven en el mismo store y cada +# consumidor toma la que necesita. Mismo criterio que zlib-shared / freetype-shared / libpng-shared. +# +# ── EN EL CORPUS, NO EN UNA COLA ─────────────────────────────────────────────────────────────── +# La resolución de deps es hermano→padre: una receta del corpus NO ve las de `incoming-*`. Las +# variantes compartidas genéricas (zlib-shared, fontconfig-shared, freetype-shared, libpng-shared…) +# ya viven acá por esa razón. Ponerla en `incoming-wlr/` la haría invisible para todo lo demás y +# obligaría a una cuarta copia en cuanto otro escritorio la necesite. +# +# ── EL BUILD ES EL DE AUTOTOOLS, SIN EL TRUCO DE zlib ────────────────────────────────────────── +# zlib-shared fabrica su `.so` a mano con `--whole-archive` porque el configure de zlib aborta bajo +# zig cc. Acá no hace falta: el configure de expat acepta `--enable-shared` y libtool emite el +# `libexpat.so.1` con su SONAME correcto. Se cae el `-all-static -no-pie` de la canónica, que es +# justamente lo que impide producir una compartida. + +name = "expat-shared" +version = "2.8.1" +license = "MIT" + +[source] +tarball = "https://github.com/libexpat/libexpat/releases/download/R_2_8_1/expat-2.8.1.tar.xz" +sha256 = "10b195ee78160a908388180a8fe3603d4e9a12f4755fbf5f3816b23a9d750da0" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" + +[deps] +build = ["binutils", "make"] + +[build.phases] +configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --with-pic --without-docbook' +compile = 'make -j"$(nproc)"' +install = 'make DESTDIR=/out install' diff --git a/recipes/libffi-shared.toml b/recipes/libffi-shared.toml new file mode 100644 index 00000000..1c029c93 --- /dev/null +++ b/recipes/libffi-shared.toml @@ -0,0 +1,39 @@ +# libffi-shared 3.5.2 — variante DINÁMICA de libffi. +# +# Misma razón que `expat-shared` y `zlib-shared`, y el mismo trío: `sway` es `link = "dynamic"` por +# diseño y sale con `NEEDED libffi.so.8`, que ningún artefacto sellado producía. El canónico +# (recipes/libffi.toml) es `--disable-shared` porque su consumidor principal es el enlace estático +# (python3, los crates `-sys`). Sin esta variante el rootfs hidratado resolvía `libffi.so.8` contra +# el sysroot Alpine del lab — fuga de soberanía invisible para el store, porque el lab no entra en +# `hash_inputs`. +# +# NO se toca `link` en la canónica: entra en `hash_inputs` y re-hashearía libffi y todo lo que lo +# lista en deps (glib, python3, mesa, wayland…). El nombre `libffi-shared` es distinto del canónico +# ⇒ conviven en el store sin pisarse. Va al CORPUS, no a `incoming-wlr/`, porque la resolución de +# deps es hermano→padre y una receta del corpus no vería una cola. +# +# `--disable-exec-static-tramp` se conserva de la canónica: los trampolines estáticos ejecutables de +# libffi 3.5 asumen un layout de memoria que musl no garantiza. Se cae `--disable-shared` y con él el +# motivo por el que no había `.so`; el resto del configure es idéntico, a propósito, para que las dos +# variantes sigan siendo comparables de un vistazo. + +name = "libffi-shared" +version = "3.5.2" +license = "MIT" + +[source] +tarball = "https://github.com/libffi/libffi/releases/download/v3.5.2/libffi-3.5.2.tar.gz" +sha256 = "f3a3082a23b37c293a4fcd1053147b371f2ff91fa7ea1b2a52e335676bac82dc" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" + +[deps] +build = ["make"] + +[build.phases] +configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --enable-shared --disable-static --with-pic --disable-exec-static-tramp' +compile = 'make -j"$(nproc)"' +install = 'make DESTDIR=/out install'