From b51f90ffeaa9e2b4f9f9b160614cdd5c6d824507 Mon Sep 17 00:00:00 2001 From: sergio Date: Tue, 4 Aug 2026 22:42:53 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=9B=8D=20cosmic:=20cosmic-store=20?= =?UTF-8?q?=E2=80=94=20sella=20(b3:a06437f7),=20y=20BoringSSL=20cruza=20a?= =?UTF-8?q?=20musl=20sin=20cmake?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La quinta aplicación, y la primera de la suite que choca con que hammer es OTRA distro: una tienda es la cara de un gestor de paquetes y el de abajo no es el suyo. De los cuatro backends de `src/backend/`: flatpak pide libflatpak (GObject) ⇒ la cadena glib COMPARTIDA más ostree/libsoup/gpgme: la torre de C que esta campaña no tiene packagekit Rust puro (packagekit-zbus) pero necesita el DEMONIO en el bus rpm-ostree irrelevante pkgar el único que arranca: ni demonio ni enlace, lee el AppStream del sistema — o sea los .metainfo.xml que instalan las recetas ALCANCE HONESTO: con pkgar NAVEGA, no INSTALA. Ninguna operación está cableada al .swm de hammer (Etapa F). El camino para arreglarlo quedó identificado y no cuesta un solo .so de C: servir `org.freedesktop.PackageKit` sobre .swm, mismo patrón que arje-logind-compat. HALLAZGO REUTILIZABLE: `aws-lc-sys` (BoringSSL, C + ensamblador) compiló bajo zig-cc/musl SIN cmake y SIN perl — ninguno de los dos está en los 182 binarios de work/builder-rootfs/usr/bin. Tomó el camino de bindings pregenerados (`cargo:rustc-cfg=universal`) y compiló los 21 MB de libaws_lc_crypto.a con el crate `cc`. El `Compiling cmake v0.1.58` del log es el crate ayudante, que se compila aunque el binario no se invoque. Esto destraba cualquier receta futura que entre con rustls por defecto, que hoy es casi todo lo que use reqwest. NEEDED: libxkbcommon.so.0 y libc.so, igual que cosmic-edit. Co-Authored-By: Claude Opus 5 (1M context) --- docs/state/targets.toml | 4 ++ recipes/incoming-cosmic/cosmic-store.toml | 81 +++++++++++++++++++++++ scripts/cosmic/hydrate-cosmic.sh | 3 + 3 files changed, 88 insertions(+) create mode 100644 recipes/incoming-cosmic/cosmic-store.toml diff --git a/docs/state/targets.toml b/docs/state/targets.toml index 49fd0653..49eafb19 100644 --- a/docs/state/targets.toml +++ b/docs/state/targets.toml @@ -120,6 +120,10 @@ paquetes = [ # `cosmic-files` como crate, igual que la terminal). Su binario enlaza SÓLO `libxkbcommon` y # `libc.so`: dos NEEDED, el mínimo de todos los clientes de la suite. "cosmic-edit", + # La quinta: la tienda. Con el backend `pkgar` —el único de los cuatro que no pide ni una torre de + # C (flatpak) ni un demonio ausente (packagekit)— NAVEGA el catálogo instalado leyendo el AppStream + # del sistema, pero NO instala: nada está cableado al `.swm` de hammer. + "cosmic-store", # 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/cosmic-store.toml b/recipes/incoming-cosmic/cosmic-store.toml new file mode 100644 index 00000000..a637de82 --- /dev/null +++ b/recipes/incoming-cosmic/cosmic-store.toml @@ -0,0 +1,81 @@ +# cosmic-store — la tienda de aplicaciones. Quinta aplicación con ventana, y **la primera de la +# suite que choca de frente con que hammer es OTRA distro**: una tienda es una CARA de un gestor de +# paquetes, y el de abajo no es el suyo. +# +# ── LOS CUATRO BACKENDS, Y POR QUÉ SÓLO UNO SIRVE ACÁ ─────────────────────────────────────────── +# `src/backend/` tiene cuatro, todos detrás de features (`mod.rs` los registra con `#[cfg(feature)]`): +# +# · `flatpak` — el de upstream. Pide `libflatpak` (GObject), o sea la cadena glib COMPARTIDA +# más ostree/libsoup/gpgme: la torre de C que esta campaña justamente no tiene. +# Se apaga, y con ella se van `gettext-sys` y los tres `*-sys` de glib del lock. +# · `packagekit` — es Rust puro (`packagekit-zbus`), pero necesita el DEMONIO PackageKit sirviendo +# `org.freedesktop.PackageKit` en el bus, que la imagen no tiene. Queda anotado +# como el camino natural el día que se quiera enchufar `.swm` de verdad: es el +# mismo patrón que `arje-logind-compat` —un shim de D-Bus— y no cuesta un solo +# `.so` de C. +# · `rpm-ostree` — irrelevante. +# · `pkgar` — **el único que arranca acá**, y no por casualidad: no habla con ningún demonio +# ni enlaza nada. `Pkgar::new()` construye un `AppstreamCache::system(…)` y lee +# el AppStream del sistema, o sea los `.metainfo.xml` que las propias recetas +# instalan en `/usr/share/metainfo`. +# +# ⚠ **ALCANCE HONESTO: esto NAVEGA, no INSTALA.** Con `pkgar` la tienda lista y describe lo que la +# imagen ya tiene —las entradas salen de los `.metainfo.xml` de cosmic-term/files/settings/edit— pero +# ninguna de sus operaciones está cableada al `.swm` de hammer (Etapa F). Es una vitrina del catálogo +# instalado, no un instalador. Enchufarlo de verdad es un frente propio, y el atajo es `packagekit`. +# +# ── `wgpu` APAGADA, como en todos los clientes ────────────────────────────────────────────────── +# Viene en `default`. Fuera: el árbol wgpu+naga+ash+glow+spirv a `codegen-units=1` desbordó el +# filesystem dos veces, y la imagen pinta con llvmpipe por software igual. +name = "cosmic-store" +version = "1.5.0" + +[source] +tarball = "https://github.com/pop-os/cosmic-store/archive/epoch-1.5.0/cosmic-store-epoch-1.5.0.tar.gz" +sha256 = "5a1ed7f9e241b498592437f1d4bc125d39a6c743de15629148a2d27f4402610c" + +[build] +compiler = "zig-cc" +target = "x86_64-linux-musl" +# Dinámico como todo cliente de la suite: `wayland-client` entra con la feature `dlopen` y un musl +# estático no la honra. +link = "dynamic" + +[build.phases] +# `-p cosmic-store` y no `--workspace`: el otro miembro es `flathub-stats`, una herramienta de +# upstream para regenerar estadísticas de Flathub que no tiene sentido en esta imagen. +# +# La lista es la `default` MENOS `flatpak` y `wgpu`, MÁS `pkgar`. `xdg-portal` se deja aunque +# `flatpak` la encendía: es `libcosmic/xdg-portal`, zbus puro, y es lo que da el diálogo de ficheros. +compile = ''' +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" +export INSTALL_DIR=/usr/share APPID=com.system76.CosmicStore +CC="$PWD/.hammer-zig-cc" RUSTFLAGS="$RF" cargo build --release --locked --offline \ + -p cosmic-store --no-default-features \ + --features dbus-config,desktop-systemd-scope,logind,notify,pkgar,single-instance,wayland,xdg-portal +''' +install = ''' +mkdir -p /out/usr/bin /out/usr/share/applications /out/usr/share/metainfo +cp target/release/cosmic-store /out/usr/bin/cosmic-store +chmod 755 /out/usr/bin/cosmic-store +cp target/xdgen/com.system76.CosmicStore.desktop /out/usr/share/applications/ 2>/dev/null || true +cp target/xdgen/com.system76.CosmicStore.metainfo.xml /out/usr/share/metainfo/ 2>/dev/null || true +for size in res/icons/hicolor/*; do + [ -d "$size" ] || continue + s=$(basename "$size") + if [ -f "$size/apps/com.system76.CosmicStore.svg" ]; then + mkdir -p "/out/usr/share/icons/hicolor/$s/apps" + cp "$size/apps/com.system76.CosmicStore.svg" "/out/usr/share/icons/hicolor/$s/apps/" + fi +done +''' + +[deps] +# El juego fijo de todo cliente. `reqwest` entra con rustls; si el proveedor de cripto resuelve a +# `aws-lc-rs` habrá que sumar `cmake` y `perl` —`aws-lc-sys` es BoringSSL, C y ensamblador— pero eso +# es justamente lo que el lock NO permite decidir a priori: lista `aws-lc-sys` como POSIBLE. Se +# arranca sin declararlos y que el build diga. +build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"] diff --git a/scripts/cosmic/hydrate-cosmic.sh b/scripts/cosmic/hydrate-cosmic.sh index bd6f9b64..488f45d8 100755 --- a/scripts/cosmic/hydrate-cosmic.sh +++ b/scripts/cosmic/hydrate-cosmic.sh @@ -67,6 +67,9 @@ else # …y el editor de texto, la cuarta. Su `.desktop` declara `MimeType=text/plain`, así que además # de aparecer en la biblioteca es a quien el gestor de ficheros abre un `.txt`. recipes/incoming-cosmic/cosmic-edit.toml + # …y la tienda, la quinta. Con el backend `pkgar` NAVEGA pero no INSTALA: lee el AppStream del + # sistema, o sea los `.metainfo.xml` que instalan las recetas de acá arriba. + recipes/incoming-cosmic/cosmic-store.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