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 Definiciones

⎇ a709d76c23a1c8b5a8689a07cc4a145f070d6787 recipes/bluez.toml TOML · 74 líneas · 5.2 KB Historia crudo

receta: bluez estático de verdad — el audit del cron vuelve a verde 741a5d767 · Sergio ·

1# BlueZ 5.87 — la pila Bluetooth de Linux (`bluetoothd` + `bluetoothctl`). El otro pendiente del
2# punto 8 de PUBLICABLE, junto con `cups`.
3#
4# ── QUÉ ENTRA Y QUÉ NO, Y POR QUÉ ─────────────────────────────────────────────────────────────
5# Todas las perillas salen del `configure --help` del tarball PINEADO, no de un APKBUILD ajeno:
6#
7#   --disable-obex      obexd (transferencia de ficheros) pide `libical`, y libical existe SÓLO en
8#                       `incoming-gnome`. Una receta del corpus resuelve sibling-first y después el
9#                       catálogo PADRE, **nunca una cola hermana** ⇒ desde acá no se alcanza.
10#                       Encenderlo exigiría promover libical al corpus, que es otra unidad de
11#                       trabajo. Se apaga por declaración para que el configure no la busque y la
12#                       tome del sysroot del lab (el lab NO entra en `hash_inputs`).
13#   --disable-manpages  las man pages se generan con `rst2man` (docutils, Python). No es receta.
14#   --disable-systemd   el init es arje.
15#   --disable-udev      sólo afecta a `hid2hci` y a las reglas; `bluetoothd` no lo necesita.
16#   --disable-cups      el backend de impresión por Bluetooth. `cups` YA es receta del corpus, así
17#                       que esto se puede encender — pero acopla las dos recetas y la primera
18#                       versión de cada una conviene tenerla sellada por separado. Queda anotado
19#                       como lo próximo, no como olvido.
20#   --disable-shared    el lab exporta LDFLAGS=-static: un .so no cierra el enlace.
21#
22# ⚠ ESTO NO ENCIENDE EL BLUETOOTH DE NADIE. `bluetoothd` necesita el bus de sistema (dbus) vivo y
23# el perfil que lo habilite (SDD 30), y el kernel con BT compilado. La receta es la pieza, no la
24# capacidad — la distinción que este repo ya pagó con `foot` y con las fuentes.
25name    = "bluez"
26version = "5.87"
27license = "GPL-2.0-or-later AND LGPL-2.1-or-later"
28
29[source]
30tarball = "https://www.kernel.org/pub/linux/bluetooth/bluez-5.87.tar.xz"
31sha256  = "26bdcf2cebd7310c6f598850606b037ef0c515fe6608ebc54d22c50c4c32b35f"
32
33[build]
34compiler = "zig-cc"
35target   = "x86_64-linux-musl"
36link     = "static"
37
38[build.phases]
39configure = './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'
40# ⚠ `LDFLAGS=-all-static` EN COMPILE **Y** EN INSTALL. bluez enlaza con libtool, y libtool lee el
41# `-static` que exporta el lab como «preferí los .a de libtool», no como flag al linker ⇒ el primer
42# sello salió con los 11 ejecutables DINÁMICOS y `scripts/static-audit.sh` lo marcó. Lo de *install*
43# no es redundancia: **libtool RELINKEA al instalar** y sin el flag ahí devuelve el binario a
44# dinámico. Se puede hacer estático porque el artefacto NO trae ningún plugin `.so` —comprobado,
45# 0 ficheros— o sea que nadie hace `dlopen` (a diferencia de `cmus`, que por eso va dinámico).
46# ⚠ Y `LIBS=-lncursesw`, que es la segunda mitad y no se ve venir. Con `-all-static` el enlace de
47# `bluetoothctl` corta con `undefined symbol: tgoto ... in archive /usr/lib/libreadline.a`: readline
48# usa termcap y su `readline.pc` lo declara en **`Requires.private: ncurses`**, que sólo se expande
49# con `pkg-config --static`. El configure de bluez busca readline con `AC_CHECK_LIB`, no con
50# pkg-config ⇒ la transitiva nunca entra. En dinámico no se nota (la resuelve el loader); en
51# estático hay que nombrarla. Misma familia que las transitivas del `.pc` de glib en `[deps]`.
52compile   = 'make LDFLAGS=-all-static LIBS=-lncursesw'
53install   = 'make LDFLAGS=-all-static LIBS=-lncursesw DESTDIR=/out install'
54
55[[service]]
56label   = "bluetoothd"
57id      = "01HQAR53D4M2NBV8KZTYXFQA2A"
58exec    = "/usr/lib/bluetooth/bluetoothd --nodetach"
59scope   = "system"
60restart = { initial_ms = 500, max_ms = 20000 }
61
62# ⚠ `pcre2`/`libffi`/`zlib` NO son caprichos ni deps de bluez: son lo que pide el `.pc` de glib.
63# Con `glib` a secas el configure corta con «Package 'libpcre2-8', required by 'glib-2.0', not
64# found» — un enlace estático resuelve la cadena ENTERA en el punto de enlace, así que las
65# transitivas de pkg-config hay que materializarlas igual. Es el mismo juego de cuatro que declaran
66# cairo, appstream y adwaita-hello. `expat` entra por el `.pc` de dbus.
67[deps]
68build   = ["glib", "dbus", "readline", "ncurses", "pkgconf", "pcre2", "libffi", "zlib", "expat"]
69# (Hubo aquí un `runtime = ["readline-shared"]`, y se quitó el mismo día: hacía falta mientras
70# `bluetoothctl` salía DINÁMICO pidiendo `libreadline.so.8`. Con el enlace estático de arriba el
71# artefacto no pide ni un soname —los 11 ejecutables salen `statically linked`, comprobado— así que
72# esa dep pasó a ser una mentira en la otra dirección: declarar lo que no se usa. Queda la nota
73# porque el reparto era el peor posible y conviene recordarlo: `bluetoothd` salía con `libc.so` a
74# secas y habría arrancado, y la herramienta con la que se emparejan los dispositivos NO.)