gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1389Shell 137Markdown 80Rust 802602 Definiciones

⎇ main scripts/lib/libs-compartidas-desde-store.sh Shell · 43 líneas · 2.6 KB Historia crudo

takana etapa 5c: comentarios de scripts, MOTD, y un BUG que introdujo la etapa 4 476168bb0 · Sergio ·

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