🚪 cosmic: el BACKEND del portal sella (b3:7ad0f124) — cadena completa en la imagen
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) <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user