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.
62 lines
3.8 KiB
TOML
62 lines
3.8 KiB
TOML
# BlueZ 5.87 — la pila Bluetooth de Linux (`bluetoothd` + `bluetoothctl`). El otro pendiente del
|
|
# punto 8 de PUBLICABLE, junto con `cups`.
|
|
#
|
|
# ── QUÉ ENTRA Y QUÉ NO, Y POR QUÉ ─────────────────────────────────────────────────────────────
|
|
# Todas las perillas salen del `configure --help` del tarball PINEADO, no de un APKBUILD ajeno:
|
|
#
|
|
# --disable-obex obexd (transferencia de ficheros) pide `libical`, y libical existe SÓLO en
|
|
# `incoming-gnome`. Una receta del corpus resuelve sibling-first y después el
|
|
# catálogo PADRE, **nunca una cola hermana** ⇒ desde acá no se alcanza.
|
|
# Encenderlo exigiría promover libical al corpus, que es otra unidad de
|
|
# trabajo. Se apaga por declaración para que el configure no la busque y la
|
|
# tome del sysroot del lab (el lab NO entra en `hash_inputs`).
|
|
# --disable-manpages las man pages se generan con `rst2man` (docutils, Python). No es receta.
|
|
# --disable-systemd el init es arje.
|
|
# --disable-udev sólo afecta a `hid2hci` y a las reglas; `bluetoothd` no lo necesita.
|
|
# --disable-cups el backend de impresión por Bluetooth. `cups` YA es receta del corpus, así
|
|
# que esto se puede encender — pero acopla las dos recetas y la primera
|
|
# versión de cada una conviene tenerla sellada por separado. Queda anotado
|
|
# como lo próximo, no como olvido.
|
|
# --disable-shared el lab exporta LDFLAGS=-static: un .so no cierra el enlace.
|
|
#
|
|
# ⚠ ESTO NO ENCIENDE EL BLUETOOTH DE NADIE. `bluetoothd` necesita el bus de sistema (dbus) vivo y
|
|
# el perfil que lo habilite (SDD 30), y el kernel con BT compilado. La receta es la pieza, no la
|
|
# capacidad — la distinción que este repo ya pagó con `foot` y con las fuentes.
|
|
name = "bluez"
|
|
version = "5.87"
|
|
license = "GPL-2.0-or-later AND LGPL-2.1-or-later"
|
|
|
|
[source]
|
|
tarball = "https://www.kernel.org/pub/linux/bluetooth/bluez-5.87.tar.xz"
|
|
sha256 = "26bdcf2cebd7310c6f598850606b037ef0c515fe6608ebc54d22c50c4c32b35f"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
|
|
[build.phases]
|
|
configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib --disable-shared --enable-static --enable-library --enable-threads --disable-systemd --disable-obex --disable-manpages --disable-cups --disable-udev --with-dbusconfdir=/usr/share'
|
|
compile = 'make'
|
|
install = 'make DESTDIR=/out install'
|
|
|
|
[[service]]
|
|
label = "bluetoothd"
|
|
id = "01HQAR53D4M2NBV8KZTYXFQA2A"
|
|
exec = "/usr/lib/bluetooth/bluetoothd --nodetach"
|
|
scope = "system"
|
|
restart = { initial_ms = 500, max_ms = 20000 }
|
|
|
|
# ⚠ `pcre2`/`libffi`/`zlib` NO son caprichos ni deps de bluez: son lo que pide el `.pc` de glib.
|
|
# Con `glib` a secas el configure corta con «Package 'libpcre2-8', required by 'glib-2.0', not
|
|
# found» — un enlace estático resuelve la cadena ENTERA en el punto de enlace, así que las
|
|
# 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"]
|
|
# ⚠ `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"]
|