Files
takana/scripts/lib/libs-compartidas-desde-store.sh
Sergio 476168bb07 takana etapa 5c: comentarios de scripts, MOTD, y un BUG que introdujo la etapa 4
250 líneas de comentario en 151 scripts. Control verificado: el diff no toca
NI UNA línea que no empiece por #, y la sintaxis de los 151 pasa.

El barrido saltea heredocs y cadenas triples, y el guardián DISPARÓ 3 veces:
las tres eran el MOTD que el script escribe DENTRO de la imagen construida —
texto del producto, no comentario del script. Se cambiaron aparte y a
propósito, que es rebranding, no limpieza.

Y el hallazgo caro:  casaba contra ,
que es el TARGET de tracing — o sea el module_path!, o sea el nombre del crate.
La etapa 4 lo movió a  y el script quedó casando NADA. No fallaba:
imprimía cero atribuciones, indistinguible de un log sin problemas. Comprobado
con el binario (RUST_LOG=info sobre zlib), no deducido. Ahora acepta las dos, y
tiene que seguir aceptándolas porque los logs viejos en disco dicen la vieja.

Además 14 rutas de módulo  en docs, que el barrido anterior no tocó
porque  no es frontera de palabra.
2026-09-09 19:28:48 +00:00

44 lines
2.6 KiB
Bash

# libs-compartidas-desde-store.sh — helper compartido por los scripts de imagen: poner en el rootfs
# fundido las librerías COMPARTIDAS que el cierre hidratado NO trae, tomándolas de su artefacto
# sellado (`<lib>-shared`).
#
# ── POR QUÉ EXISTE ──────────────────────────────────────────────────────────────────────────────
# La receta canónica de libffi/expat/bzip2 es `--disable-shared`: su artefacto publica sólo el `.a`.
# Pero libgobject, libgirepository, libwayland-{client,server}, libp11-kit y libgjs salen con
# `NEEDED`/símbolos `ffi_*`, y mesa entero (iris_dri, swrast_dri, kms_swrast_dri, libEGL, libgbm)
# con `XML_*`. En el HOST eso resuelve contra el sysroot Alpine DEL LAB, así que el artefacto sella,
# el perfil reporta 100% y nadie se entera. En la imagen no hay lab: el loader de musl aborta con
#
# Error relocating /usr/lib/libgobject-2.0.so.0: ffi_call: symbol not found
#
# y el escritorio muere con código 127 antes de pintar. Es el mismo punto ciego que documenta
# `scripts/vigia-sonames.py` («mesa y wayland pidiendo expat y libffi»), visto desde el lado de la
# imagen: el cierre de BUILD no es el cierre de RUNTIME.
#
# El artefacto se elige por `takana hash` sobre la receta —el de la receta de HOY—, no por el más
# reciente del store: con dos artefactos del mismo paquete conviviendo, la fecha no dice cuál rige.
# Mismo criterio que `pid1-desde-store.sh` y que los inyectores de arje-*-compat.
#
# ABORTA si falta un artefacto. Deliberado: seguir sin él produce una imagen que arranca hasta el
# escritorio y muere ahí, que es el modo de falla que este helper existe para cerrar.
#
# Uso: . scripts/lib/libs-compartidas-desde-store.sh ; inyectar_libs_compartidas "$MERGED"
# Var: LIBS_COMPARTIDAS="libffi-shared expat-shared bzip2-shared" (override de la lista)
inyectar_libs_compartidas() {
local merged="$1" recetas hash dir n
recetas="${LIBS_COMPARTIDAS:-libffi-shared expat-shared bzip2-shared}"
echo "==> libs compartidas del store (el cierre sólo trae los .a)"
for n in $recetas; do
hash=$(./target/release/takana --store store hash "recipes/$n.toml" 2>/dev/null | tail -1 | sed 's/^b3://')
dir="store/$hash-$n"
if [ -n "$hash" ] && [ -d "$dir" ]; then
cp -a --remove-destination "$dir"/usr/lib/*.so* "$merged"/usr/lib/ 2>/dev/null || true
echo " ✓ $n $(echo "$hash" | cut -c1-12)"
else
echo " ✗ falta $n sellado en store/ — el escritorio morirá con 'symbol not found'" >&2
return 1
fi
done
}