tawasuyu

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 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

vigia-sonames: dos falsos positivos menos — los cinco perfiles en CERO

NO hacía falta una receta de perl. `libperl.so` está en el artefacto, son 9,6 MB
en usr/lib/perl5/5.40.2/x86_64-linux/CORE/, y el binario la encuentra por su
RUNPATH, que apunta justo ahí. El vigía no la veía porque perl la construye con
-Duseshrplib y NO le pone SONAME: el código sólo registraba el nombre del fichero
`if son:`. Un ELF compartido sin SONAME se resuelve POR NOMBRE DE FICHERO, y eso
es exactamente lo que había que indexar.

El otro falso positivo era el último «hueco» del informe:
usr/lib/go/src/debug/elf/testdata/libtiffxx.so_ — un ELF de MUESTRA que Go
shipea para los tests de su propio paquete debug/elf, pidiendo libc.so.6 (glibc)
en una distro musl. Un binario que nadie ejecuta. `testdata/` no es cierre.

Importa arreglar un falso positivo aunque «sólo» sea ruido: un vigía que grita
en falso enseña a ignorarlo, y así es como libstdc++.so.6 —que SÍ rompía el
navegador en los cuatro escritorios— estuvo en esta misma salida sin que nadie
la mirara.

    escritorio-mirada    41 nodos ·  231 sonames ·  0 sin proveedor
    escritorio-kde      306 nodos · 2083 sonames ·  0 sin proveedor
    escritorio-gnome    190 nodos ·  657 sonames ·  0 sin proveedor
    escritorio-cosmic   161 nodos ·  498 sonames ·  0 sin proveedor
    escritorio-sway     201 nodos ·  509 sonames ·  0 sin proveedor

PROBADO CON UNA ROTURA A PROPÓSITO, porque un vigía todo-verde se ve igual que
uno roto. Quitando `runtime = ["gcc-libs"]` de firefox SOLO no pasa nada —atuq
lo declara también y es raíz de los mismos perfiles, así que la librería entra
igual; el primer control estaba mal montado—. Quitándolo de las DOS, kde y
cosmic vuelven a reportar libstdc++.so.6 y libgcc_s.so.1 exactamente. Restaurado
después.

44b6032522903dbf8e99a5856f62253f5d2b8de5 · ruwaq Sergio · (1 killa ñawpaq) · tayta 841abef25 · kay commitpi sach'ata qhaway

Semántico sayk'uy · 1

scripts/vigia-sonames.py

2 qillqakuna · +30 −11

diff --git a/docs/state/sonames.txt b/docs/state/sonames.txt
index e864ee9e..f88ffc9d 100644
--- a/docs/state/sonames.txt
+++ b/docs/state/sonames.txt
@@ -1,11 +1,5 @@
-== escritorio-mirada     41 nodos ·  136 sonames provistos ·  1 sin proveedor
-   FALTA libperl.so               ← lo piden: perl
-== escritorio-kde       306 nodos · 1387 sonames provistos ·  1 sin proveedor
-   FALTA libperl.so               ← lo piden: perl
-== escritorio-gnome     190 nodos ·  517 sonames provistos ·  1 sin proveedor
-   FALTA libperl.so               ← lo piden: perl
-== escritorio-cosmic    161 nodos ·  390 sonames provistos ·  1 sin proveedor
-   FALTA libperl.so               ← lo piden: perl
-== escritorio-sway      201 nodos ·  402 sonames provistos ·  2 sin proveedor
-   FALTA libc.so.6                ← lo piden: go
-   FALTA libperl.so               ← lo piden: perl
+== escritorio-mirada     41 nodos ·  231 sonames provistos ·  0 sin proveedor
+== escritorio-kde       306 nodos · 2083 sonames provistos ·  0 sin proveedor
+== escritorio-gnome     190 nodos ·  657 sonames provistos ·  0 sin proveedor
+== escritorio-cosmic    161 nodos ·  498 sonames provistos ·  0 sin proveedor
+== escritorio-sway      201 nodos ·  509 sonames provistos ·  0 sin proveedor
diff --git a/scripts/vigia-sonames.py b/scripts/vigia-sonames.py
index d2c4e11f..5a9cb0fc 100755
--- a/scripts/vigia-sonames.py
+++ b/scripts/vigia-sonames.py
@@ -84,6 +84,15 @@ def escanear(nodos):
         for raiz, _, ficheros in os.walk(d):
             for fn in ficheros:
                 p = os.path.join(raiz, fn)
+                # ⚠ `testdata/` NO ES CIERRE (2026-09-06). Go shipea su árbol de fuentes entero, y
+                # `usr/lib/go/src/debug/elf/testdata/` trae ELF de MUESTRA para los tests de su
+                # propio paquete `debug/elf`. Uno de ellos pide `libc.so.6` —glibc— y el vigía lo
+                # contaba como dep de ejecución del perfil sway: un binario que nadie ejecuta,
+                # pidiendo una libc que esta distro no usa. Era el último «hueco» del informe y era
+                # falso. Mismo criterio que el `libperl.so` de abajo: el ruido de un vigía es lo que
+                # enseña a ignorarlo.
+                if "/testdata/" in p:
+                    continue
                 if os.path.islink(p):
                     # un symlink `libfoo.so.1 -> libfoo.so.1.2.3` TAMBIÉN provee ese nombre
                     if ".so" in fn:
@@ -98,6 +107,22 @@ def escanear(nodos):
                 provee.update(son)
                 if son:
                     provee.add(fn)
+                elif ".so" in fn:
+                    # ⚠ ELF COMPARTIDO **SIN SONAME**: provee por NOMBRE DE FICHERO (2026-09-06).
+                    # Sin esta rama el vigía daba un hueco FALSO en los cinco perfiles:
+                    #
+                    #     FALTA libperl.so   ← lo piden: perl
+                    #
+                    # y `libperl.so` estaba ahí, 9,6 MB, en
+                    # `usr/lib/perl5/5.40.2/x86_64-linux/CORE/`. Perl la construye con
+                    # `-Duseshrplib` y NO le pone SONAME: el binario la encuentra por su
+                    # `RUNPATH`, que apunta a ese CORE. O sea que el enlace resuelve por NOMBRE
+                    # DE FICHERO, y eso es exactamente lo que hay que indexar.
+                    #
+                    # Importa arreglarlo aunque «sólo» sea un falso positivo: un vigía que grita
+                    # en falso enseña a ignorarlo, y así es como `libstdc++.so.6` —que sí rompía
+                    # el navegador— estuvo en esta misma salida sin que nadie lo mirara.
+                    provee.add(fn)
                 for n in need:
                     pide.setdefault(n, set()).add(nombre)
     return provee, pide