From 7389d44569c1033768da68d03cf9f337075251ed Mon Sep 17 00:00:00 2001 From: Sergio Date: Mon, 7 Sep 2026 00:28:52 +0000 Subject: [PATCH] =?UTF-8?q?atuq-nested:=20faltaba=20gcc-libs,=20y=20su=20a?= =?UTF-8?q?usencia=20hac=C3=ADa=20MENTIR=20a=20la=20prueba=20entera?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `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) Claude-Session: https://claude.ai/code/session_01UgNtJEFetMYbXax5dVUjZZ --- recipes/atuq.toml | 10 +++++++++- scripts/atuq-nested.sh | 11 ++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/recipes/atuq.toml b/recipes/atuq.toml index 2c3aa36e..08d1d721 100644 --- a/recipes/atuq.toml +++ b/recipes/atuq.toml @@ -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 diff --git a/scripts/atuq-nested.sh b/scripts/atuq-nested.sh index af4deb8f..89e8dc5a 100755 --- a/scripts/atuq-nested.sh +++ b/scripts/atuq-nested.sh @@ -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=` 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»