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>
81 lines
4.8 KiB
TOML
81 lines
4.8 KiB
TOML
# arje-logind-compat — el daemon shim D-Bus que se hace pasar por `org.freedesktop.login1`
|
|
# (systemd-logind) para GNOME/KDE. NO es un stub: implementa el subset del `Manager` que los
|
|
# escritorios consultan al arranque — ListSessions/ListSeats/ListUsers/GetSession(ByPID),
|
|
# Inhibit/ListInhibitors, CanPowerOff/Reboot/Suspend/Hibernate + PowerOff/Reboot/Suspend/Hibernate,
|
|
# propiedades IdleHint/BlockInhibited — y traduce cada llamada al bus interno del fractal arje.
|
|
# Corre FUERA de PID 1 (un parser D-Bus en el Init es superficie de CVE), supervisado por el Ente #0.
|
|
# Toma el DRM master vía el idioma TakeDevice (major 226) para que mutter/kwin sean master.
|
|
#
|
|
# ESTO ES lo que yo creía que faltaba: NO hace falta empaquetar elogind ni delegar nada a tawasuyu.
|
|
# arje-compat ya provee login1. seatd sigue dando SÓLO asiento (DRM/input); login1 = sesiones, y es
|
|
# esto. El frente GNOME (y KDE) enlazan/consultan login1 EN RUNTIME por D-Bus, no linkean libelogind:
|
|
# no hace falta la C-ABI sd-login ni un módulo PAM, porque la sesión se registra por el bus interno
|
|
# de arje (mirada-greeter → fractal), no por pam_systemd. Ver [[frente-gnome]] / [[frente-harkaq-jaula]].
|
|
#
|
|
# Receta Cargo (patrón arje-zero): fuente = monorepo tawasuyu a un commit PINEADO que carga el
|
|
# `Cargo.lock` del workspace en raíz (el monorepo lo gitignora) ⇒ fetch vendorea `--locked` y el
|
|
# build es `--offline` hermético y bit-reproducible. El commit es la rama
|
|
# `selfhost/arje-zero-attest-lockfile` (06184e43): más nueva que la de arje-zero (9967b02c) porque
|
|
# incluye el reorg `arje-compat` — el crate único con un binario por servicio que reemplaza los 15
|
|
# crates dispersos de `compat/`. `-p arje-compat --bin arje-logind-compat` compila SÓLO este daemon.
|
|
# Estático zig-cc (zbus sobre socket unix + tokio + nix; sin loader del host, como todo arje).
|
|
#
|
|
# HUB-ONLY: fuente `gitea@git.tawasuyu.net` puerto 22 ⇒ el worker secretless recibe Connection
|
|
# refused (la gitea escucha en :2345). Se muele en el hub, no en un worker efímero. Ver
|
|
# [[rootfs-laptop-worker-divergen]] y el gotcha de recetas tawasuyu en [[frente-gnome]].
|
|
name = "arje-logind-compat"
|
|
version = "0.0.1"
|
|
license = "MIT"
|
|
|
|
[source]
|
|
# El `commit` es el identificador inmutable (la URL es sólo locator, no entra al hash).
|
|
repo = "gitea@git.tawasuyu.net:tawasuyu/tawasuyu.git"
|
|
commit = "2445fa31c1b3d8b7da037d2434ace976e2444df4"
|
|
# El monorepo COMMITEA su propio `vendor/` — `[patch.crates-io] smithay = { path = "vendor/smithay" }`,
|
|
# una copia parcheada de smithay que mirada necesita para el tearing. `cargo vendor` de hammer escribe
|
|
# en `vendor/` por defecto y lo pisaba: el build moría con
|
|
# `failed to read /src/vendor/smithay/.cargo-checksum.json` al resolver la dep git de taffy. Se
|
|
# vendorea a un subdir aparte. 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-logind-compat"]
|
|
|
|
# ── La POLÍTICA D-Bus viaja con el artefacto, no con la imagen ──────────────────────────────────
|
|
# El `system.conf` de dbus trae `<deny own="*"/>` por defecto: cada servicio de sistema aporta su
|
|
# propio fichero de política, y el de login1 normalmente lo instala systemd. Acá no hay systemd, así
|
|
# que hasta hoy lo escribía `scripts/gnome/qemu-desktop-image.sh` — con un TODO al lado diciendo que
|
|
# ése no era su lugar. Y no lo era: **un servicio que no puede adueñarse de su nombre no es un
|
|
# servicio**, así que la política es parte de lo que este paquete PROMETE, igual que el binario.
|
|
# Dejarla en el script de una imagen significaba que cualquier otra imagen —metal, KDE, mirada— tenía
|
|
# el daemon y no podía usarlo.
|
|
#
|
|
# `allow own` sólo a root (es quien lo lanza) y `send_destination` a cualquiera, porque mutter y el
|
|
# resto consultan login1 sin ser root.
|
|
#
|
|
# La fase `install` REPLICA el default del lab para Cargo (copiar los ejecutables de target/release a
|
|
# /usr/bin) y le agrega el fichero. Sobrescribir la fase es la única forma: el default no tiene un
|
|
# gancho para material extra.
|
|
[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/org.freedesktop.login1.conf <<'XML'
|
|
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
|
|
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
|
|
<busconfig>
|
|
<policy user="root">
|
|
<allow own="org.freedesktop.login1"/>
|
|
</policy>
|
|
<policy context="default">
|
|
<allow send_destination="org.freedesktop.login1"/>
|
|
<allow receive_sender="org.freedesktop.login1"/>
|
|
</policy>
|
|
</busconfig>
|
|
XML
|
|
'''
|