From 63eab86ef783340a00a9acab73aab4d91ccb84c7 Mon Sep 17 00:00:00 2001 From: Sergio Date: Sat, 12 Sep 2026 19:28:46 +0000 Subject: [PATCH] =?UTF-8?q?receta:=20cups=20=E2=80=94=20el=20servidor=20de?= =?UTF-8?q?=20impresi=C3=B3n,=20sellado=20(punto=208=20de=20PUBLICABLE)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cups b3:528b38b20d3cecf7e06fbc51f271603e3c71fbec6ef8047c86ad421edb7a1a45 No es una app más: es uno de los NUEVE pendientes de PUBLICABLE (docs/20, punto 8). Una distro de escritorio que no imprime no es una distro de escritorio, y ese hueco no se ve contando recetas — es de CAPACIDAD, la familia de foot y las fuentes. El muro real fue el PIE, y el diagnóstico vale más que el arreglo: el configure detecta que el compilador acepta -fPIE y mete «-fPIE -pie» en ALL_LDFLAGS *y sólo ahí* — los objetos de libcups.a se compilan sin PIC — así que lld corta con «relocation R_X86_64_64 cannot be used against local symbol». No se puede apagar con una flag: @PIEFLAGS@ se sustituye DENTRO de Makedefs, no es una variable de make que «make PIEFLAGS=» pueda pisar. Y un ejecutable PIE con -static exigiría -static-pie, que no es lo que esta distro construye ⇒ el sed que lo quita es lo correcto acá, no un atajo. Todas las perillas salen del «configure --help» del TARBALL PINEADO, no de un APKBUILD ajeno. --with-dnssd=no y --disable-acl se apagan POR DECLARACIÓN aunque no haya avahi ni acl en el catálogo: si el configure los busca y los encuentra en el sysroot del lab, el lab NO entra en hash_inputs y el artefacto deja de reproducir sin que nadie toque la receta. ⚠ Queda escrito en la receta un segundo tramo que ESTA receta no paga: gtk3 del corpus está sellada con -Dprint_backends=file, así que una app GTK3 seguirá viendo un solo destino hasta que gtk3 se re-selle. La pieza está, el sistema la ignora, y ninguna métrica lo dice. Declara [[service]] cupsd (SDD 30). Declararlo NO lo enciende: falta que el perfil lo habilite. --- recipes/cups.toml | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 recipes/cups.toml diff --git a/recipes/cups.toml b/recipes/cups.toml new file mode 100644 index 00000000..fee7954e --- /dev/null +++ b/recipes/cups.toml @@ -0,0 +1,65 @@ +# CUPS 2.4.19 — el servidor de impresión. Es uno de los NUEVE pendientes de PUBLICABLE +# (`docs/20-catalogo-publicable-y-completa.md`, punto 8: «cups y bluez»), no una app más. +# +# ── POR QUÉ ESTABA EN LA LISTA DE LANZAMIENTO Y NO EN LA DE APPS ────────────────────────────── +# Una distro de escritorio que no imprime no es una distro de escritorio. No es un hueco de +# catálogo (que se ve contando recetas) sino de CAPACIDAD (que sólo se ve usándola), que es la +# familia de la que salieron `foot` y las fuentes: el perfil cerraba N/N y era inusable. +# +# ⚠ Y HAY UN SEGUNDO TRAMO QUE ESTA RECETA NO PAGA. `gtk3` del corpus está sellada con +# `-Dprint_backends=file`: con cups instalado, una app GTK3 seguirá viendo un solo destino —«a +# fichero»— hasta que gtk3 se re-selle con el backend de cups. Queda escrito acá porque es +# exactamente el modo de fallo de esta distro: la pieza está, el sistema la ignora, y ninguna +# métrica lo dice. Re-sellar gtk3 es su propia unidad de trabajo (arrastra firefox). +# +# ── TARBALL DE RELEASE, NO GIT ──────────────────────────────────────────────────────────────── +# `cups-2.4.19-source.tar.gz` es un asset publicado por OpenPrinting y trae `configure`; el árbol +# de git sólo tiene `configure.ac`. Y al no ser un `/archive/` generado al vuelo por la forge, su +# sha256 no se mueve cuando GitHub actualice git/gzip (la trampa que documenta `foot`). +# +# ── LAS PERILLAS, TODAS LEÍDAS DEL `configure --help` DEL TARBALL PINEADO ───────────────────── +# --with-dnssd=no no hay `avahi` en el catálogo. Sin esto el configure lo busca y lo toma del +# sysroot del lab si lo encuentra — la fuga de siempre (el lab NO entra en +# hash_inputs). Se apaga por declaración, no por ausencia. +# --with-ondemand=no ni launchd ni systemd: el init es arje. +# --disable-shared el lab exporta LDFLAGS=-static; construir un .so con eso no cierra. +# --disable-acl `acl` está en el lab pero NO es receta del corpus. Misma razón que dnssd. +# --with-tls=openssl la receta `openssl` del corpus; gnutls no está. +# --enable-libusb impresoras USB. `libusb` SÍ es receta del corpus. +name = "cups" +version = "2.4.19" +license = "Apache-2.0" + +[source] +tarball = "https://github.com/OpenPrinting/cups/releases/download/v2.4.19/cups-2.4.19-source.tar.gz" +sha256 = "820984b12a67f98705785aae2dd1347fe0ac097828001d4583ff64574aed6389" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "static" + +[build.phases] +# ⚠ EL `sed` NO ES UN REMIENDO, ES LA CONSECUENCIA DE `link = "static"`. El configure de cups +# detecta que el compilador acepta `-fPIE` y mete `-fPIE -pie` en `ALL_LDFLAGS` —y SÓLO ahí: los +# objetos de `libcups.a` se compilan sin PIC—, así que lld corta con +# `relocation R_X86_64_64 cannot be used against local symbol; recompile with -fPIC`. No se puede +# apagar por flag (`@PIEFLAGS@` se sustituye dentro de Makedefs, no es una variable de make que +# `make PIEFLAGS=` pueda pisar). Y un ejecutable PIE + `-static` exigiría `-static-pie`, que no es +# lo que esta distro construye: o sea que quitarlo es lo CORRECTO acá, no un atajo. +configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-rundir=/run/cups --with-tls=openssl --with-dnssd=no --with-ondemand=no --disable-shared --enable-static --disable-acl --enable-libusb --enable-pam --with-cups-user=lp --with-cups-group=lp && sed -i "s/-fPIE -pie//" Makedefs' +compile = 'make' +install = 'make BUILDROOT=/out install' + +# `cupsd` es un demonio de sistema: se declara como servicio (SDD 30) para que el PERFIL pueda +# habilitarlo. Ojo con la lección del frente de servicios: que la receta lo declare NO lo enciende +# — sin que el perfil lo habilite, el producto sale con cups instalado y sin nadie escuchando. +[[service]] +label = "cupsd" +id = "01HQAR53D4M2NBV8KZTYXFQA29" +exec = "/usr/sbin/cupsd -f" +scope = "system" +restart = { initial_ms = 500, max_ms = 20000 } + +[deps] +build = ["zlib", "openssl", "linux-pam", "libusb", "pkgconf"]