From 5b9777bdbddacb6e29bcf8700c3ebd1f87595e28 Mon Sep 17 00:00:00 2001 From: Sergio Date: Sun, 6 Sep 2026 20:09:10 +0000 Subject: [PATCH] =?UTF-8?q?declarar=20gcc-libs=20como=20dep=20de=20EJECUCI?= =?UTF-8?q?=C3=93N=20en=20las=20seis=20=E2=80=94=20y=20el=20navegador=20ar?= =?UTF-8?q?ranca?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Las seis recetas que el audit daba por colgantes declaran ahora `runtime = ["gcc-libs"]`. `deps.runtime` NO entra en el ArtifactHash —medido: firefox sigue en b3:8116bdec, atuq en b3:f2960991, waterfox en b3:88b5a762— así que esto NO reconstruye nada. Lo que cambia es la CLAUSURA, que es lo que se hidrata en la imagen. EVIDENCIA DE QUE ARREGLA EL FALLO REAL, no de que compila: `atuq` bajo sway headless, sin GPU, renderizando about:buildconfig con sus tablas y la barra de contenedores de la v0.5. Antes moría con decenas de «Error relocating: _ZNKSt5ctypeIcE13_M_widen_initEv: symbol not found». docs/evidencia/atuq-arranca-con-gcc-libs-2026-09-06.png Y el audit se corrige, porque SUB-REPORTABA en dos formas: · Miraba sólo ejecutables y `head -12` por artefacto. El siguiente NEEDED que faltaba estaba en una LIBRERÍA (libmozsandbox.so pedía libnspr4.so), así que daba «6 recetas» cuando el artefacto de firefox declara 30 sonames. Ahora recorre TODOS los ELF. · No contaba lo que el propio artefacto TRAE. Firefox bundlea su nspr/nss y las encuentra por el LD_LIBRARY_PATH que fija su lanzador; contarlas como colgantes era un falso positivo. Con las dos correcciones y gcc-libs en el store, el corpus baja de 25 artefactos colgantes a TRES, y son otra cosa: sqlite-shared libreadline.so.8 python3 libreadline.so.8 naabu libdl.so.2 libpthread.so.0 libc.so.6 Los dos primeros piden una receta que falta (readline). El tercero pide sonames de GLIBC, que en una distro musl es un síntoma distinto y merece su propia mirada. Quedan anotados, no arreglados. --- .../atuq-arranca-con-gcc-libs-2026-09-06.png | Bin 0 -> 36543 bytes recipes/atuq.toml | 9 +++++++++ recipes/firefox.toml | 9 +++++++++ recipes/incoming-gnome/librsvg.toml | 9 +++++++++ recipes/incoming-gnome/spidermonkey.toml | 9 +++++++++ recipes/mesa-llvmpipe.toml | 9 +++++++++ recipes/waterfox.toml | 9 +++++++++ scripts/audit-needed.sh | 12 +++++++++++- 8 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 docs/evidencia/atuq-arranca-con-gcc-libs-2026-09-06.png diff --git a/docs/evidencia/atuq-arranca-con-gcc-libs-2026-09-06.png b/docs/evidencia/atuq-arranca-con-gcc-libs-2026-09-06.png new file mode 100644 index 0000000000000000000000000000000000000000..522177c016199e567fa17399ad9597d8acafbfa2 GIT binary patch literal 36543 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

nCz3t!F}Qb9ZUEwf}qDq2g2ePaETcDi}iEhtwU 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/dev/null echo "== sonames provistos por el store: $(wc -l < "$tmp/provisto")" # 2. Qué pide cada artefacto. +# +# ⚠ DOS CORRECCIONES SOBRE LA PRIMERA VERSIÓN, las dos por sub-reportar (2026-09-06): +# · Miraba sólo ejecutables y `head -12` por artefacto. El `NEEDED` que faltaba de verdad estaba +# en una LIBRERÍA (`libmozsandbox.so` pedía `libnspr4.so`), así que el audit daba «6 recetas» +# cuando el artefacto de firefox solo declara 30 sonames. Ahora mira TODOS los ELF. +# · No contaba lo que el propio artefacto TRAE. Firefox bundlea su nspr/nss y las encuentra por el +# `LD_LIBRARY_PATH` que fija su lanzador; contarlas como colgantes sería un falso positivo. colgantes=0 for d in "$STORE"/*/; do d=${d%/}; nombre=$(basename "$d"); receta=${nombre#*-} + # lo que este artefacto se provee a sí mismo + find "$d" \( -name '*.so' -o -name '*.so.*' \) 2>/dev/null | sed 's|.*/||' | sort -u > "$tmp/propio" falta="" while IFS= read -r f; do n=$(readelf -d "$f" 2>/dev/null | sed -n 's/.*Shared library: \[\(.*\)\]/\1/p') for so in $n; do grep -qxF "$so" "$tmp/provisto" && continue + grep -qxF "$so" "$tmp/propio" && continue case "$so" in libc.so|ld-musl*) continue ;; esac # la libc la pone el sistema base case " $falta " in *" $so "*) ;; *) falta="$falta $so" ;; esac done - done < <(find "$d" -maxdepth 4 -type f -perm -u+x 2>/dev/null | head -12) + done < <(find "$d" -type f \( -name '*.so' -o -name '*.so.*' -o -perm -u+x \) 2>/dev/null) [ -n "$falta" ] && { printf ' ✗ %-24s pide y nadie provee:%s\n' "$receta" "$falta"; colgantes=$((colgantes+1)); } done