From 1e786aaf4251916fcb47ef5b6b95d608f6b135b1 Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 5 Aug 2026 06:04:13 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=AA=20cosmic:=20el=20BACKEND=20del=20p?= =?UTF-8?q?ortal=20sella=20(b3:7ad0f124)=20=E2=80=94=20cadena=20completa?= =?UTF-8?q?=20en=20la=20imagen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 69 min. NEEDED: libgbm, libpipewire, libxkbcommon, libc. Instala el binario en /usr/libexec, el .service de D-Bus con @libexecdir@ sustituido, el cosmic.portal que declara las cinco interfaces (Access/FileChooser/Screenshot/Settings/ScreenCast) y sus iconos. clang18 se construyó en la granja y se cosechó al laptop (b3:62c6bfb5), pero el backend NO se pudo construir allá: el worker no tiene la cola COSMIC horneada —el snapshot golden es del 2026-07-15 y toda esta cola es posterior— así que intentó reconstruir pipewire y murió buscando glib. Es la regla de «rootfs laptop ≠ worker» pero con el STORE: lo que en el laptop es cache-hit, en el worker es un build entero con sus propias deps. Y destapó que la receta de pipewire NO lleva --wrap-mode=nodownload: ante una dep faltante intenta bajarse un subproyecto de internet y, sin red, el error que sale no es «te falta glib» sino «Unhandled python exception / This is a Meson bug». Queda anotado como deuda. --offline SIN --locked, y no es descuido: el sed del parche corre en la fase compile, o sea DESPUÉS del cargo vendor, así que cargo ve el Cargo.toml cambiado y con --locked se niega. Quitar una feature sólo puede ENCOGER el conjunto de crates, así que lo que haga falta ya está vendorizado; la hermeticidad la da --offline + el árbol vendorizado, no el --locked. Dos raíces en el perfil y en la hidratación, porque son DOS procesos que se encuentran por D-Bus en runtime y ningún [deps] los relaciona. Imagen en 83 recetas (eran 74). Co-Authored-By: Claude Opus 5 (1M context) --- docs/state/targets.toml | 5 +++++ recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml | 9 ++++++++- scripts/cosmic/hydrate-cosmic.sh | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/docs/state/targets.toml b/docs/state/targets.toml index 6aa856b3..36ce1a3c 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -128,6 +128,11 @@ paquetes = [ # NO FUNCIONA: todo su trabajo es `Screenshot::request()` contra `org.freedesktop.portal.Desktop`, # y en la imagen no hay portal. Se lista igual para que el hueco sea visible. "cosmic-screenshot", + # La CADENA DEL PORTAL, dos raíces porque son dos procesos que se encuentran por D-Bus en runtime: + # el frontend registra `org.freedesktop.portal.Desktop` y enruta al backend, que implementa + # Access/FileChooser/Screenshot/Settings/ScreenCast. Sin ellos no hay captura, ni selector de + # ficheros de portal, ni compartir pantalla. + "xdg-desktop-portal", "xdg-desktop-portal-cosmic", # Datos, no binarios: el tema de iconos (y el hicolor del que hereda), las tablas de xkb y una # tipografía. Ninguno es dep de build de nadie y sin ellos el escritorio arranca roto — sin puntero, # sin teclado o con tofu. diff --git a/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml b/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml index 5f9491f7..fad9bff9 100644 --- a/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml +++ b/recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml @@ -44,13 +44,20 @@ target = "x86_64-linux-musl" link = "dynamic" [build.phases] +# ⚠ `--offline` SIN `--locked`, y no es descuido. El `sed` corre en la fase COMPILE, o sea DESPUÉS de +# que el lab hizo el `cargo vendor` con el manifiesto original; cargo ve que el `Cargo.toml` cambió +# respecto de lo vendorizado y con `--locked` se niega: +# error: cannot update the lock file /src/Cargo.lock because --locked was passed to prevent this +# `--offline` deja re-resolver sin red, que es lo correcto acá: quitar una feature sólo puede +# ENCOGER el conjunto de crates, así que todo lo que necesite ya está en `vendor/`. La hermeticidad +# la sigue dando `--offline` + el árbol vendorizado, no el `--locked`. compile = ''' sed -i '/^ "gvfs",$/d' Cargo.toml printf '%s\n' '#!/bin/sh' 'for a do' 'case "$a" in --target=*) a=--target=x86_64-linux-musl ;; esac' 'set -- "$@" "$a"' 'shift' 'done' 'exec zig cc -mcpu=baseline "$@"' > "$PWD/.hammer-zig-cc" chmod +x "$PWD/.hammer-zig-cc" RF="-C linker=$PWD/.hammer-zig-cc -C target-feature=-crt-static" rustc -vV | grep -q 'host: .*-alpine-' || RF="$RF -C link-self-contained=no" -CC="$PWD/.hammer-zig-cc" LIBCLANG_PATH=/usr/lib RUSTFLAGS="$RF" cargo build --release --locked --offline -p xdg-desktop-portal-cosmic +CC="$PWD/.hammer-zig-cc" LIBCLANG_PATH=/usr/lib RUSTFLAGS="$RF" cargo build --release --offline -p xdg-desktop-portal-cosmic ''' # El `just install` traducido con `rootdir=/`. Los dos `.service` llevan `@libexecdir@` sustituido: # el de D-Bus es el que hace que el frontend pueda ACTIVAR el backend por demanda, así que la diff --git a/scripts/cosmic/hydrate-cosmic.sh b/scripts/cosmic/hydrate-cosmic.sh index 16939fb2..30b90616 100755 --- a/scripts/cosmic/hydrate-cosmic.sh +++ b/scripts/cosmic/hydrate-cosmic.sh @@ -73,6 +73,12 @@ else # …y la captura, la sexta. Se incluye SABIENDO que hoy falla: pide la captura al portal XDG, que # la imagen no tiene. Está acá para que el hueco sea visible y medible, no para que funcione. recipes/incoming-cosmic/cosmic-screenshot.toml + # ── LA CADENA DEL PORTAL, y son DOS raíces porque son DOS procesos ─────────────────────────── + # El frontend registra `org.freedesktop.portal.Desktop` (lo que los clientes buscan) y enruta al + # backend por `org.freedesktop.impl.portal.*`. Ninguno es dep de build del otro: se encuentran + # por D-Bus en runtime, así que el grafo no los ve — igual que los componentes de la sesión. + recipes/incoming-cosmic/xdg-desktop-portal.toml + recipes/incoming-cosmic/xdg-desktop-portal-cosmic.toml recipes/incoming-cosmic/cosmic-app-library.toml recipes/incoming-cosmic/cosmic-workspaces-epoch.toml # Ni binario ni librería: DATOS. El tema de iconos de COSMIC — sin él el escritorio no se ve