From 5e5369f7758c8cba42ec150f8b7d07ca1748d830 Mon Sep 17 00:00:00 2001 From: Sergio Date: Sun, 13 Sep 2026 20:13:16 +0000 Subject: [PATCH] =?UTF-8?q?libffi-shared=20en=20`base`:=20python3=20volv?= =?UTF-8?q?=C3=ADa=20a=20ser=20INERTE=20en=20servidor,=20cli=20y=20base=20?= =?UTF-8?q?=E2=80=94=20y=20el=20vig=C3=ADa=20no=20miraba=20ah=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `vigia-sonames.py` corría por defecto SÓLO sobre los cinco perfiles de escritorio (`p.startswith("escritorio")`). O sea que `base`, `cli` y `servidor` —el objetivo de la mudanza— **nunca se miraron**. Apuntándolo a ellos a mano: == servidor 147 nodos · 183 sonames provistos · 1 sin proveedor FALTA libffi.so.8 ← lo piden: python3 `python3` no arrancaba en las tres imágenes, por el mecanismo EXACTO que `musl-shared` y `zlib-shared` arreglaron dos días antes: la receta canónica de libffi es `--disable-shared`, ningún artefacto del cierre publica ese soname, y dentro del lab el agujero lo tapa el rootfs de Alpine — así que el build pasa y la imagen sale rota. `libffi-shared` ya existía en el corpus y ya estaba declarada en otros dos perfiles; sólo faltaba en `base`. servidor 148 nodos · 186 sonames · **0 sin proveedor** (base y cli, igual) ## Y el vigía pasa a mirar TODOS los perfiles ⚠ **Es la tercera vez en dos días que un guardián de este repo mide menos de lo que su resumen afirma**: `static-audit.sh` sólo globeaba `recipes/` y no las 5 colas (3 mentiras ocultas); el bloque de raíces sucias sólo corría al hidratar un perfil y no veía las 649 recetas fuera de toda imagen (qdrant con 69 M de basura); y éste dejaba fuera medio sistema. **Un «0 huecos» sobre la mitad del sistema se imprime igual que uno sobre todo él.** ⇒ Al leer un guardián, leer su SCOPE antes que su veredicto: el glob, el bucle, de dónde saca la lista. Los ocho perfiles dan 0 sin proveedor, así que ampliar el alcance no mete ruido — sólo deja de esconder. --- docs/state/build-state.json | 23 +++++++++++++---------- docs/state/targets.toml | 14 ++++++++++++++ scripts/vigia-sonames.py | 10 +++++++++- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/docs/state/build-state.json b/docs/state/build-state.json index 413fa664..72afe71d 100644 --- a/docs/state/build-state.json +++ b/docs/state/build-state.json @@ -28,14 +28,14 @@ }, "by_profile": { "base": { - "raices": 31, - "clausura": 65, - "sealed": 65 + "raices": 32, + "clausura": 66, + "sealed": 66 }, "cli": { - "raices": 83, - "clausura": 131, - "sealed": 131 + "raices": 84, + "clausura": 132, + "sealed": 132 }, "escritorio-mirada": { "raices": 17, @@ -43,9 +43,9 @@ "sealed": 41 }, "servidor": { - "raices": 95, - "clausura": 147, - "sealed": 147 + "raices": 96, + "clausura": 148, + "sealed": 148 } }, "sin_perfil": 620, @@ -9894,11 +9894,14 @@ "blocked_by": [], "unblocks": 0, "perfiles": [ + "base", + "cli", "escritorio-cosmic", "escritorio-gnome", "escritorio-kde", "escritorio-mirada", - "escritorio-sway" + "escritorio-sway", + "servidor" ], "dependientes_total": 10 }, diff --git a/docs/state/targets.toml b/docs/state/targets.toml index f351a2d0..af33cc81 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -46,6 +46,20 @@ paquetes = [ # `--disable-shared` y ningún artefacto publicaba ese soname — otra vez el rootfs del lab tapando # el agujero. La variante ya existía en el corpus; sólo faltaba declararla. "zlib-shared", + # `libffi-shared` (2026-09-13): el TERCER hueco de la misma familia, y lo encontró ampliar el + # alcance de un vigía, no una imagen rota. `vigia-sonames.py` corría por defecto SÓLO sobre los + # cinco perfiles de escritorio (`p.startswith("escritorio")`), así que `base`, `cli` y `servidor` + # —el objetivo de la mudanza— nunca se miraron. Apuntándolo a ellos: + # + # == servidor 147 nodos · 183 sonames provistos · 1 sin proveedor + # FALTA libffi.so.8 ← lo piden: python3 + # + # O sea que `python3` volvía a ser INERTE en las tres imágenes, por el mismo mecanismo exacto que + # `musl-shared` y `zlib-shared` arreglaron dos días antes: la receta canónica de libffi es + # `--disable-shared`, ningún artefacto del cierre publica ese soname, y en el lab el agujero lo + # tapa el rootfs de Alpine. La variante `libffi-shared` YA existía y ya estaba declarada en + # `escritorio-mirada` y en otro perfil — sólo faltaba acá. + "libffi-shared", # `zstd-cli` (2026-09-11): la distro comprime TODO con zstd —la imagen del lab # (`lab-image.tar.zst`), el respaldo al Storage Box, el `dd` remoto de una instalación— y la imagen # no traía con qué descomprimirlo: **un takana recién instalado no puede desempacar su propio diff --git a/scripts/vigia-sonames.py b/scripts/vigia-sonames.py index 35db14ba..9145ccbf 100755 --- a/scripts/vigia-sonames.py +++ b/scripts/vigia-sonames.py @@ -133,7 +133,15 @@ def main(): colas = yupana.cargar_colas() perfiles = targets_mod.load() memb = yupana.membresia(colas, perfiles) - quiero = args or [p for p in perfiles if p.startswith("escritorio")] + # ⚠ **POR DEFECTO, TODOS LOS PERFILES.** Antes era `p.startswith("escritorio")`, y ese filtro + # dejaba fuera a `base`, `cli` y `servidor` — o sea al objetivo de la mudanza. El coste se midió + # el 2026-09-13 apuntándolo a mano: los tres tenían `FALTA libffi.so.8 ← lo piden: python3`, con + # `python3` INERTE en las tres imágenes por el mismo mecanismo que `musl-shared` y `zlib-shared` + # habían arreglado dos días antes. El vigía existía, el hueco estaba, y nadie lo miraba. + # Es la tercera vez en dos días que un guardián de este repo mide menos de lo que su resumen + # afirma (antes: `static-audit.sh` sin las colas, y el bloque de raíces sucias sólo sobre + # perfiles). Un «0 huecos» sobre la mitad del sistema se imprime igual que uno sobre todo él. + quiero = args or sorted(perfiles) huecos = 0 for perfil in quiero: nodos = {n for n, ps in memb.items() if perfil in ps and n[0] != "wanted"}