Files
takana/recipes/cmus.toml
T
Sergio 4fe5886447 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.
2026-09-12 20:45:58 +00:00

42 lines
2.3 KiB
TOML

# cmus 2.12.0 — reproductor de música en terminal. C, con un `configure` PROPIO (no autotools).
#
# ── POR QUÉ ENTRA ──────────────────────────────────────────────────────────────────────────────
# El catálogo cerró el vídeo con `mpv` y no tenía nada para escuchar música: ni reproductor ni
# gestor de biblioteca. cmus lo cubre en las cuatro imágenes sin tocar ninguna decisión de
# escritorio — es una TUI, no depende del compositor.
#
# ── EL `configure` NO ES AUTOTOOLS, Y ESO CAMBIA LA SINTAXIS ──────────────────────────────────
# Toma asignaciones `clave=valor`, no `--flags`: `prefix=/usr`, `CONFIG_ALSA=y`. Pasarle
# `--prefix=/usr` no da un error, lo IGNORA — y el paquete acabaría en /usr/local sin que nada
# falle. Es el modo de fallo silencioso de siempre, así que va anotado.
#
# `CONFIG_PULSE=n`: el corpus tiene `pipewire` (promovida el 2026-09-03) y su capa ALSA
# (`-Dpipewire-alsa=enabled`), así que la salida ALSA desemboca en PipeWire igual que hace `mpv`.
# `libpulse` del corpus es la variante con la glib ESTÁTICA adentro y no se quiere en un cliente.
name = "cmus"
version = "2.12.0"
license = "GPL-2.0-only"
[source]
repo = "https://github.com/cmus/cmus"
commit = "58d34cf9db5c29e01a985a48a9b6947855cb6cc9"
[build]
compiler = "zig-cc"
target = "x86_64-linux-musl"
link = "static"
[build.phases]
configure = './configure prefix=/usr CONFIG_ALSA=y CONFIG_PULSE=n CONFIG_JACK=n CONFIG_AO=n CONFIG_SNDIO=n CONFIG_ROAR=n CONFIG_FFMPEG=y CONFIG_CDIO=n CONFIG_MPRIS=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"]
runtime = ["ncurses-shared"]