atuq-nested: faltaba gcc-libs, y su ausencia hacía MENTIR a la prueba entera

`atuq` declara `NEEDED libstdc++.so.6` y `libgcc_s.so.1` —lo hereda de firefox,
que va con clang++ y la libstdc++ COMPARTIDA— y su clausura ya estaba bien:
`recipes/atuq.toml` declara `runtime = ["gcc-libs"]` desde 5b9777bd, yupana lee
`deps.runtime` desde 02facebe, y el vigía de sonames da CERO en los cinco
perfiles (rehecho hoy: 41/306/190/161/201 nodos, 0 sin proveedor).

Lo que estaba mal era el INSTRUMENTO. `atuq-nested.sh` no hidrataba `gcc-libs`, y
como la jaula monta `.dev-fs/alpine` como capa de abajo, cada «atuq corre» de
estos días resolvió libstdc++ contra el LAB. Corría, sí: en una máquina con
Alpine debajo, que es exactamente lo que la distro no es. El artefacto estaba
sano y la prueba era ciega — que es peor, porque una prueba ciega dice que sí.

Los dos ficheros ni se parecen, así que la duda se resuelve mirando:

    corpus  20.850.968 bytes
    lab      2.804.104 bytes

Con `gcc-libs` en las raíces, dentro de la jaula se ve el de 20 MB, y
`scripts/test-atuq-ruteo.py` vuelve a pasar entero — o sea que el ruteo por
contenedor está probado ahora contra la libstdc++ del corpus y no contra la del
lab. Queda una dependencia del lab que NO es de esta prueba y está por diseño: el
intérprete `/lib/ld-musl-x86_64.so.1`, que ningún artefacto provee y que las
imágenes copian del devfs (`scripts/mirada-usb.sh`).

De paso, un puntero muerto: las recetas dicen «lo vigila scripts/audit-needed.sh»
y ese script lo BORRÓ 02facebe al reemplazarlo por el vigía de sonames. Corregido
en atuq.toml. Quedan otras siete recetas apuntándole (firefox, waterfox,
gcc-libs, mesa-llvmpipe, librsvg, spidermonkey, firefox-instrumentado) y no se
tocan desde acá porque son de otro frente.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ
This commit is contained in:
Sergio
2026-09-07 00:28:52 +00:00
co-authored by Claude Opus 5
parent 7be49a2133
commit 7389d44569
2 changed files with 19 additions and 2 deletions
+9 -1
View File
@@ -149,7 +149,15 @@ grep -q '^Name=atuq' "$DST/application.ini" || { echo "atuq: application.ini no
# `atuq` bajo un sway headless, no leyendo el grafo.
# `runtime` NO entra en el ArtifactHash (igual que `license`), así que declararlo NO re-hashea:
# lo que cambia es la CLAUSURA, que es lo que se hidrata en la imagen. Lo vigila
# `scripts/audit-needed.sh`.
# `scripts/vigia-sonames.py`, que entró en el latido en `02facebe` — y NO `scripts/audit-needed.sh`,
# que ese mismo commit BORRÓ. Quedan otras siete recetas apuntando al script muerto; no se tocan
# desde acá porque son de otro frente.
#
# ⚠ Y hubo un segundo agujero, en el INSTRUMENTO y no en el artefacto (2026-09-07): la clausura
# declaraba bien `gcc-libs`, pero `scripts/atuq-nested.sh` no lo hidrataba, y como la jaula monta
# `.dev-fs/alpine` como capa de abajo, cada «atuq corre» de estos días resolvió `libstdc++.so.6`
# contra el LAB. Corregido allá. Los dos ficheros ni se parecen —20.850.968 bytes el del corpus,
# 2.804.104 el del lab—, así que ante la duda de cuál se cargó, se mira el tamaño.
runtime = ["gcc-libs"]
# `firefox` como dep de BUILD y no de runtime: su árbol se materializa en el sandbox, se copia
# dentro del artefacto de atuq y a partir de ahí atuq no lo necesita más. El precio es que el
+10 -1
View File
@@ -35,11 +35,20 @@ URL="${URL:-about:support}"
# de build— y meterlas engordaría el rootfs sin cambiar nada de lo que se ve.
# Las variantes `-shared` y NO las estáticas: en runtime una `.a` no sirve para nada, y son las que
# gtk3 declara NEEDED desde que se arregló el cuadro de las dos Pango.
RAICES="atuq gtk3 atk gdk-pixbuf-shared pango-shared cairo-shared libepoxy glib-shared pcre2-shared
RAICES="atuq gcc-libs gtk3 atk gdk-pixbuf-shared pango-shared cairo-shared libepoxy glib-shared pcre2-shared
libffi-shared zlib-shared harfbuzz-shared fribidi freetype-shared fontconfig-shared pixman libpng-shared
libjpeg-turbo-shared wayland libxkbcommon mesa libdrm dbus pipewire pulseaudio alsa-lib
libxml2-shared dejavu-fonts
xkeyboard-config grim"
# ⚠ `gcc-libs` FALTABA, y su ausencia hacía MENTIR a esta prueba entera (2026-09-07). `atuq` declara
# `NEEDED libstdc++.so.6` y `libgcc_s.so.1` —lo hereda de firefox, que va con clang++ y la libstdc++
# COMPARTIDA de Alpine—, y esas dos sólo existían en el lab. Como la jaula monta `.dev-fs/alpine`
# como capa de abajo, el navegador arrancaba resolviéndolas contra el LAB y todos decíamos «atuq
# corre». Corría, sí: en una máquina con Alpine debajo, que es exactamente lo que la distro no es.
# La clausura ya estaba bien —`recipes/atuq.toml` declara `runtime = ["gcc-libs"]` y el vigía de
# sonames da CERO—, lo que estaba mal era ESTA lista, o sea el instrumento y no el artefacto.
# Se nota a simple vista porque los dos ficheros no se parecen: el del corpus pesa 20.850.968 bytes
# y el del lab 2.804.104. Si algún día hay duda de cuál se cargó, se mira el tamaño.
# `grim` no lo necesita atuq: lo necesita QUIEN LO MIRA. Con `CAPTURA=<fichero.png>` este script
# saca la pantalla real desde dentro de la jaula, contra el mismo socket wayland. Es lo que separó
# «el proceso vive» de «la ventana muestra lo que queremos»: durante horas dije «mirá tu pantalla»