From 7de2ebd0301a89db3ba5f0f9879eef874ef466d0 Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 28 Jul 2026 06:36:01 -0400 Subject: [PATCH] =?UTF-8?q?gnome=20onda=203:=20polkit=20SELLADO=20(b3:27d9?= =?UTF-8?q?3b4c)=20=E2=80=94=20s=C3=B3lo=20librer=C3=ADas,=20el=20demonio?= =?UTF-8?q?=20ya=20lo=20pone=20arje?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Primera de la cima. Da polkit-agent-1.pc (lo que gnome-shell enlaza en C) y los typelibs Polkit-1.0 + PolkitAgent-1.0 (lo que su JS importa: gi://Polkit aparece en polkitAgent.js, endSessionDialog.js, status/thunderbolt.js y environment.js — verificado, no supuesto). -Dlibs-only=true y acá la opción SÍ recorta, al revés que en colord: el bloque `if not libs_only` (:145-159) es justo el que pide expat, duktape y threads. Y no es un recorte a desgana — la Semilla de arje ya trae compat-polkit implementando el servicio D-Bus; construir polkitd sería competirle, no completarlo. -Dsession_tracking=ConsoleKit no es preferencia por ConsoleKit: es la ÚNICA de las tres que no exige una C-ABI de logind (logind→libsystemd, elogind→libelogind), y son LAS MISMAS funciones sd-login que traban a mutter (sd_uid_get_display, sd_pidfd_get_session). Con libs-only ese camino queda inerte. Cuando exista el shim, vuelve a `logind`. -Dauthfw=shadow (no hay linux-pam). Isla dinámica, como manda la regla del registro único de GType. Las 3 deps de tooling que faltaban salieron de precedentes ya escritos del frente: gettext-tiny (msgfmt), py3-setuptools (distutils de g-ir-scanner) y glib-introspected (Gio-2.0.gir para el scanner). Co-Authored-By: Claude Opus 5 (1M context) --- docs/state/build-state-gnome.json | 67 +++++++++++++++++++++--------- recipes/incoming-gnome/polkit.toml | 43 +++++++++++++++++++ 2 files changed, 91 insertions(+), 19 deletions(-) create mode 100644 recipes/incoming-gnome/polkit.toml diff --git a/docs/state/build-state-gnome.json b/docs/state/build-state-gnome.json index 4d819be5..16989aa3 100644 --- a/docs/state/build-state-gnome.json +++ b/docs/state/build-state-gnome.json @@ -1,14 +1,14 @@ { "schema": "hammer-build-state/1", "totals": { - "recipes": 807, - "nodes": 807, - "sealed": 797, + "recipes": 808, + "nodes": 808, + "sealed": 798, "never": 8, "debt": 2 }, "by_class": { - "c": 173, + "c": 174, "go": 362, "gui": 40, "kernel": 6, @@ -26,7 +26,7 @@ "debt": 2 }, "incoming-gnome": { - "sealed": 39, + "sealed": 40, "never": 6 } }, @@ -54,7 +54,7 @@ "debt": 2 } }, - "sin_perfil": 648, + "sin_perfil": 649, "orphan_deps": [], "topo_ok": true, "nodes": { @@ -2754,7 +2754,7 @@ "base", "cli" ], - "dependientes_total": 0 + "dependientes_total": 1 }, "ddh": { "iname": "ddh", @@ -4230,7 +4230,7 @@ "escritorio-gnome", "escritorio-kde" ], - "dependientes_total": 80 + "dependientes_total": 81 }, "gh": { "iname": "gh", @@ -4717,7 +4717,7 @@ "perfiles": [ "escritorio-gnome" ], - "dependientes_total": 23 + "dependientes_total": 24 }, "glib-introspected": { "iname": "glib-introspected", @@ -4745,7 +4745,7 @@ "perfiles": [ "escritorio-gnome" ], - "dependientes_total": 6 + "dependientes_total": 7 }, "glow": { "iname": "glow", @@ -5155,7 +5155,7 @@ "perfiles": [ "escritorio-gnome" ], - "dependientes_total": 11 + "dependientes_total": 12 }, "gobuster": { "iname": "gobuster", @@ -8241,7 +8241,7 @@ "escritorio-kde", "escritorio-mirada" ], - "dependientes_total": 72 + "dependientes_total": 73 }, "libgcrypt": { "iname": "libgcrypt", @@ -9435,7 +9435,7 @@ "escritorio-kde", "escritorio-mirada" ], - "dependientes_total": 85 + "dependientes_total": 86 }, "micro": { "iname": "micro", @@ -10732,7 +10732,7 @@ "escritorio-gnome", "escritorio-kde" ], - "dependientes_total": 58 + "dependientes_total": 59 }, "peco": { "iname": "peco", @@ -10915,7 +10915,7 @@ "escritorio-kde", "escritorio-mirada" ], - "dependientes_total": 300 + "dependientes_total": 301 }, "plow": { "iname": "plow", @@ -10983,6 +10983,35 @@ "perfiles": [], "dependientes_total": 0 }, + "polkit": { + "iname": "polkit", + "version": "127", + "link": "dynamic", + "compiler": "zig-cc", + "deps": [ + "meson", + "samurai", + "python3", + "pkgconf", + "gettext-tiny", + "py3-setuptools", + "gobject-introspection", + "glib", + "glib-introspected", + "dbus", + "libffi", + "pcre2", + "zlib" + ], + "cls": "c", + "queue": "incoming-gnome", + "hash": "b3:27d93b4c927b99c8afa6b06691ef01f879bb88cd64c95affeaeeb091f65e2050", + "state": "sealed", + "blocked_by": [], + "unblocks": 0, + "perfiles": [], + "dependientes_total": 0 + }, "pop": { "iname": "pop", "version": "0.2.1", @@ -11238,7 +11267,7 @@ "perfiles": [ "escritorio-gnome" ], - "dependientes_total": 8 + "dependientes_total": 9 }, "python3": { "iname": "python3", @@ -11262,7 +11291,7 @@ "escritorio-kde", "escritorio-mirada" ], - "dependientes_total": 243 + "dependientes_total": 244 }, "qrcp": { "iname": "qrcp", @@ -11808,7 +11837,7 @@ "escritorio-kde", "escritorio-mirada" ], - "dependientes_total": 217 + "dependientes_total": 218 }, "sassc": { "iname": "sassc", @@ -14565,7 +14594,7 @@ "escritorio-kde", "escritorio-mirada" ], - "dependientes_total": 96 + "dependientes_total": 97 }, "zlib-ng": { "iname": "zlib-ng", diff --git a/recipes/incoming-gnome/polkit.toml b/recipes/incoming-gnome/polkit.toml new file mode 100644 index 00000000..ed089e47 --- /dev/null +++ b/recipes/incoming-gnome/polkit.toml @@ -0,0 +1,43 @@ +# polkit 127 — elevación de privilegios. gnome-shell lo exige por `polkit-agent-1` (meson.build:86) +# y además lo usa DESDE JS: `gi://Polkit` aparece en js/ui/components/polkitAgent.js, +# endSessionDialog.js, status/thunderbolt.js y environment.js. +# +# SÓLO LAS LIBRERÍAS (-Dlibs-only=true -Dsession_tracking=ConsoleKit -Dauthfw=shadow), y acá la opción sí recorta de verdad (a diferencia de lo que +# pasó con colord): el bloque `if not libs_only` de meson.build:145-159 es exactamente el que pide +# expat, duktape (el motor JS de las reglas) y threads. Sin polkitd no hace falta ninguno. +# +# Y NO ES UN RECORTE A DESGANO: el demonio ya lo pone arje. La Semilla `session-gnome` tiene un +# `compat-polkit` (/usr/lib/arje/arje-polkit-compat) que implementa el servicio D-Bus; lo que falta +# del lado del corpus es la librería que las aplicaciones enlazan y el typelib que el shell importa. +# Meterse polkitd encima sería competirle a arje, no completarlo. +# +# -Dsession_tracking=ConsoleKit -Dauthfw=shadow NO es una preferencia por ConsoleKit: es la única de las tres +# opciones que NO exige una C-ABI de logind. `logind` pide libsystemd y `elogind` pide libelogind +# (meson.build:198-211), y son LAS MISMAS funciones sd-login que trabaN a mutter (sd_uid_get_display, +# sd_pidfd_get_session). Con libs-only ese camino queda inerte: el seguimiento de sesión lo hace +# polkitd, que no construimos. Cuando exista el shim de sd-login, esto puede volver a `logind`. +# +# ISLA DINÁMICA obligatoria: el typelib exige un .so real que gjs pueda dlopen(), y además cualquier +# cosa que produzca .so y use GObject tiene que enlazar la glib .so — si no, dos registros de GType +# (la lección que costó los SIGSEGV de colord). +name = "polkit" +version = "127" + +[source] +# El .orig.tar.gz inmutable del pool de Debian. El proyecto se mudó a github.com/polkit-org/polkit y +# sus `archive/refs/tags/*.tar.gz` son autogenerados ⇒ no deterministas (lección de cairo/iso-codes). +tarball = "http://deb.debian.org/debian/pool/main/p/policykit-1/policykit-1_127.orig.tar.gz" +sha256 = "9b7bc16f086479dcc626c575976568ba4a85d34297a750d8ab3d2e57f6d8b988" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +link = "dynamic" + +[build.phases] +configure = "PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Ddefault_library=shared -Dlibs-only=true -Dsession_tracking=ConsoleKit -Dauthfw=shadow -Dintrospection=true -Dexamples=false -Dtests=false -Dman=false -Dgtk_doc=false -Dgettext=false -Dc_args=-Wno-error=date-time" +compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output" +install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild" + +[deps] +build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "py3-setuptools", "gobject-introspection", "glib", "glib-introspected", "dbus", "libffi", "pcre2", "zlib"]