Decisión del usuario: «tawasuyu está en MIT». Es la misma licencia que hammer (LICENSE en la raíz + Cargo.toml), así que todo lo nuestro queda coherente bajo un solo término. Las 20 recetas con fuente en git.tawasuyu.net: arje-* (el init y sus compat), mirada-* (el compositor, el greeter y mirada-ctl), netup, agora-cli, cosmos-cli, dominium-cli, tinkuy-sim, llimphi-counter y libelogind. ⚠ ANOTADO EN LA TABLA porque es una trampa que casi pisé: `libelogind` NO es el elogind de upstream (que sería LGPL-2.1+). Por el nombre lo parece; su cabecera dice que es una reimplementación PROPIA de la C-ABI sd-login dentro de arje-compat. Declararla LGPL «porque se llama así» habría sido exactamente el error que este fichero prohíbe — el tercero del mismo tipo hoy, después de `knighttime` (parecía Go y es KDE) y de la familia `kube*` (parecen KDE y son Go). El nombre nunca es evidencia; la fuente sí. Hashes verificados sobre las 20: idénticos. Quedan 124 sin declarar, ya todas de terceros. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
86 lines
5.0 KiB
TOML
86 lines
5.0 KiB
TOML
# arje-polkit-compat — el shim de `org.freedesktop.PolicyKit1.Authority` del fractal.
|
|
#
|
|
# POR QUÉ HACE FALTA, y es un diagnóstico que su propio autor ya había escrito: el comentario del
|
|
# crate dice literalmente «apps que usan polkit bloquean en `CheckAuthorization` si no responde
|
|
# nadie». Eso es exactamente lo que pasaba al arrancar la sesión GNOME:
|
|
#
|
|
# !! bus: org.freedesktop.Accounts NO apareció en 10s
|
|
# !! bus: org.freedesktop.UPower NO apareció en 10s
|
|
# nombres en el bus: org.freedesktop.DBus, org.freedesktop.login1, :1.0, :1.1, :1.2
|
|
#
|
|
# Los dos daemons estaban CONECTADOS al bus (`:1.x`) pero sin adquirir su nombre: se quedaban en
|
|
# `polkit_authority_get_sync()` esperando a un `org.freedesktop.PolicyKit1` que no existía. Y como no
|
|
# adquirían el nombre, gnome-shell esperaba 25 s a cada uno.
|
|
#
|
|
# **Ese dato no se sacó del log del daemon sino de la LISTA DE NOMBRES DEL BUS**: una conexión anónima
|
|
# sin nombre bien conocido dice «arrancó y no llegó a pedirlo», que es distinto de «no arrancó» y de
|
|
# «lo pidió y se lo negaron». Vale para cualquier servicio D-Bus que parezca colgado.
|
|
#
|
|
# POR QUÉ ESTE SHIM Y NO EL polkitd DE VERDAD: nuestra receta `polkit` va con `-Dlibs-only=true` —el
|
|
# bloque `if not libs_only` es justo el que pide expat y duktape— y la decisión estaba tomada desde
|
|
# entonces: **el demonio lo pone arje**. La autorización real del fractal no es polkit sino SO_PEERCRED
|
|
# + capability grants sobre el bus interno; polkit es sólo la interfaz que el escritorio espera
|
|
# encontrar.
|
|
#
|
|
# ⚠ POSTURA DE SEGURIDAD, explícita porque no es un detalle: este shim responde
|
|
# `is_authorized = true` a TODO, y deja traza en el log de qué se pidió. Es la decisión que arje ya
|
|
# había tomado —el fractal es un sistema confiado y la puerta está en otro lado—, no algo que esta
|
|
# receta introduzca. Su propio comentario marca el camino de producción: que `CheckAuthorization` pida
|
|
# un token al grafo y devuelva el resultado. Mientras eso no exista, **cualquier cliente de polkit en
|
|
# esta distro está autorizado**, y quien lea esta receta tiene que saberlo.
|
|
#
|
|
# HUB-ONLY, como toda receta con fuente tawasuyu: el clone va a `gitea@git.tawasuyu.net` por el puerto
|
|
# 22 y la gitea escucha en :2345; el worker efímero es secretless por diseño y recibe
|
|
# `Connection refused`. Se muele en el hub. Ver [[rootfs-laptop-worker-divergen]].
|
|
name = "arje-polkit-compat"
|
|
version = "0.0.1"
|
|
license = "MIT"
|
|
|
|
[source]
|
|
# Mismo commit y misma rama que arje-logind-compat: `selfhost/arje-zero-attest-lockfile` es la única
|
|
# que versiona el `Cargo.lock` de la raíz, sin el cual el vendoreo `--locked` no es reproducible.
|
|
repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
|
|
commit = "98db584fd28d9ff2bf34c9cf7d7db2e1de0b3fd0"
|
|
# El monorepo commitea su propio `vendor/` (la copia parcheada de smithay que mirada necesita) y el
|
|
# `cargo vendor` de hammer lo pisaría. Ver [[hammer-cargo-vendor-clobbers-project-vendor]].
|
|
cargo_vendor_dir = ".hammer-cargo-vendor"
|
|
|
|
[build]
|
|
compiler = "zig-cc"
|
|
target = "x86_64-linux-musl"
|
|
link = "static"
|
|
flags = ["-p", "arje-compat", "--bin", "arje-polkit-compat"]
|
|
|
|
# ── La POLÍTICA D-Bus viaja con el artefacto ───────────────────────────────────────────────────
|
|
# Misma razón que en arje-logind-compat: un servicio que no puede adueñarse de su nombre no es un
|
|
# servicio, así que su política es parte de lo que el paquete promete. Hasta hoy la escribía el script
|
|
# de la imagen de GNOME, con lo cual el shim existía para las otras imágenes y no servía en ellas.
|
|
#
|
|
# ⚠ EL NOMBRE `zz-` NO ES DECORATIVO. A diferencia de login1, acá el nombre YA TIENE política: la trae
|
|
# el artefacto de `polkit`, y permite `own` sólo al usuario **polkitd** — este shim corre como root, así
|
|
# que con ella sola se lo niegan. dbus lee `system.d` en ORDEN ALFABÉTICO y las reglas posteriores
|
|
# ganan, de modo que un fichero que ordene después AÑADE el permiso sin descartar el resto de la
|
|
# política de upstream (que además trae las reglas de `AuthenticationAgent`). Reescribir la de polkit
|
|
# habría sido pisar un artefacto sellado.
|
|
[build.phases]
|
|
install = '''
|
|
set -e
|
|
mkdir -p /out/usr/bin /out/usr/share/dbus-1/system.d
|
|
find target/release -maxdepth 1 -type f -perm -100 -exec cp {} /out/usr/bin/ \;
|
|
cat > /out/usr/share/dbus-1/system.d/zz-arje-polkit-compat.conf <<'XML'
|
|
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
|
|
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
|
<!-- Añade a la política de polkit el permiso que el shim del fractal necesita: la de upstream sólo
|
|
deja adueñarse del nombre al usuario `polkitd`, y arje-polkit-compat corre como root. -->
|
|
<busconfig>
|
|
<policy user="root">
|
|
<allow own="org.freedesktop.PolicyKit1"/>
|
|
</policy>
|
|
<policy context="default">
|
|
<allow send_destination="org.freedesktop.PolicyKit1"/>
|
|
<allow receive_sender="org.freedesktop.PolicyKit1"/>
|
|
</policy>
|
|
</busconfig>
|
|
XML
|
|
'''
|