recetas: cmus y bluez piden un .so que la imagen no llevaba — declarado en runtime
Se descubrió CORRIENDO los binarios, no auditando las recetas, y el hash NO se mueve (las deps de runtime no entran en hash_inputs): los artefactos sellados siguen valiendo. cmus/cmus NEEDED libncursesw.so.6 ⇒ runtime = ["ncurses-shared"] bluez/bluetoothctl NEEDED libreadline.so.8 ⇒ runtime = ["readline-shared"] Las canónicas `ncurses` y `readline` del corpus son `--without-shared`/sólo `.a`, así que sin declarar la variante `-shared` esos `.so` no viajan en la imagen y el binario muere en el loader. Es la MISMA fuga que el perfil de sway ya pagó con zlib/expat/libffi, y no la ve ningún auditor de recetas: sólo `readelf -d` sobre el artefacto, o ejecutarlo. El reparto de bluez era el peor posible: `bluetoothd` sale con `libc.so` a secas y habría arrancado, y la herramienta con la que se emparejan los dispositivos habría sido la que no. Comprobado con scripts/provee.py: los dos sonames SÍ los publica el corpus (corpus/ncurses-shared, corpus/readline-shared) ⇒ no hay NEEDED colgante, faltaba la declaración.
This commit is contained in:
+6
-1
@@ -53,4 +53,9 @@ restart = { initial_ms = 500, max_ms = 20000 }
|
||||
# transitivas de pkg-config hay que materializarlas igual. Es el mismo juego de cuatro que declaran
|
||||
# cairo, appstream y adwaita-hello. `expat` entra por el `.pc` de dbus.
|
||||
[deps]
|
||||
build = ["glib", "dbus", "readline", "ncurses", "pkgconf", "pcre2", "libffi", "zlib", "expat"]
|
||||
build = ["glib", "dbus", "readline", "ncurses", "pkgconf", "pcre2", "libffi", "zlib", "expat"]
|
||||
# ⚠ `readline-shared` EN RUNTIME, descubierto corriendo el binario y no auditando la receta:
|
||||
# `bluetoothctl` sale `NEEDED libreadline.so.8` y la `readline` canónica del corpus es sólo `.a`.
|
||||
# `bluetoothd` no lo pide (sale con `libc.so` a secas), así que el demonio arrancaría y la
|
||||
# herramienta con la que se emparejan los dispositivos NO — el peor reparto posible.
|
||||
runtime = ["readline-shared"]
|
||||
|
||||
+7
-1
@@ -31,5 +31,11 @@ configure = './configure prefix=/usr CONFIG_ALSA=y CONFIG_PULSE=n CONFIG_JACK=n
|
||||
compile = 'make'
|
||||
install = 'make DESTDIR=/out install'
|
||||
|
||||
# ⚠ `ncurses-shared` EN RUNTIME, Y SE DESCUBRIÓ CORRIENDO EL BINARIO. El artefacto sale
|
||||
# `NEEDED libncursesw.so.6` (el resto —ffmpeg, alsa— sí entra estático, son `.a`), y la `ncurses`
|
||||
# canónica del corpus es `--without-shared`: sin declarar la variante `-shared`, la imagen no lleva
|
||||
# ese `.so` y cmus muere en el loader. Es exactamente la fuga que el perfil de sway ya pagó con
|
||||
# zlib/expat/libffi, y no la ve ningún auditor de recetas — sólo `readelf -d` sobre el artefacto.
|
||||
[deps]
|
||||
build = ["ncurses", "ffmpeg", "alsa-lib", "pkgconf"]
|
||||
build = ["ncurses", "ffmpeg", "alsa-lib", "pkgconf"]
|
||||
runtime = ["ncurses-shared"]
|
||||
|
||||
Reference in New Issue
Block a user