sergio/takana
> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…
udisks SELLADO: enchufar un USB ya hace algo, y gvfs trae su monitor de volúmenes
1# gvfs 1.58.5 — el sistema de ficheros virtual de GIO: la papelera, los archivos comprimidos como
2# carpeta, el `dav://` y el `sftp://`. Es la MITAD QUE NADIE VE del gestor de ficheros: sin esto,
3# nautilus abre y navega, pero la papelera que dibuja no existe y «conectar a un servidor» no lleva
4# a ningún lado. Un gestor de ficheros que enseña una papelera que no funciona miente más que no
5# traerla — por eso `targets.toml` las declara PEGADAS.
6#
7# ── EL CENSO DE FRONTERA DECÍA 11 RECETAS NUEVAS. SON CERO, Y ESTÁ MEDIDO ───────────────────────
8# `docs/state/seed-gnome.json` lista `avahi fuse libbluray libcdio libcdio-paranoia libgphoto2
9# libimobiledevice libmtp libnfs samba udisks` como frontera de gvfs. Leído así, gvfs es una
10# campaña. Leído el `meson.build`, **todas menos una son backends OPCIONALES con su propia perilla**
11# (`meson_options.txt` líneas 5-31), y el núcleo —trash, archive, computer, admin, dav, sftp— sólo
12# pide `glib`, `gsettings-desktop-schemas` y `dbus-1`, que están sellados desde hace meses.
13# `fuse` aparecía como frontera y es `fuse3`, que YA está en el corpus. Es el seed avisando de lo
14# que avisa en su propia cabecera: sobreestima 5-10×.
15#
16# ── LO QUE SÍ FALTA, Y SE LLAMA `udisks` ────────────────────────────────────────────────────────
17# `-Dudisks2=true`. Ese backend es el monitor de volúmenes: **enchufar un USB y que aparezca**.
18# Pide `udisks2 >= 1.97` (`meson.build:344`) y el demonio `udisksd` del otro lado, que arrastra
19# `libblockdev` + `libatasmart` detrás. Es su propia unidad de trabajo, no una línea de esta receta.
20# ⇒ **Esta imagen monta lo que el `fstab` diga y lo que el usuario monte a mano; el montaje
21# automático de medios extraíbles NO existe todavía.** Escrito acá, en la receta, porque un hueco
22# escrito se ve y uno omitido se descubre con el pendrive en la mano.
23#
24# ── LOS BACKENDS, UNO POR UNO — todos DECLARADOS a propósito ────────────────────────────────────
25# ⚠ Los defaults de este proyecto son `true`: no declarar un backend NO es «apagado», es «encendido
26# si encuentra la lib». Se nombran los 18 para que el artefacto no dependa de qué haya en el
27# sysroot el día que se construya.
28#
29# ENCENDIDOS (todo su cierre está sellado)
30# admin → abrir un fichero como root desde el gestor. libcap + polkit-gobject-1 (:306-307).
31# archive → un `.tar.gz` se navega como carpeta. libarchive.
32# http → `dav://` y `davs://`. libsoup-3.0 + libxml2 (:315, con `assert(have_libxml)`).
33# sftp → `sftp://`. **CERO deps de build**: habla con el binario `ssh`, que `base` ya trae.
34# El backend de red más barato que existe, y el que de verdad se usa.
35# fuse → `gvfsd-fuse`: expone los montajes a las apps que NO hablan GIO (todo lo que no es
36# GTK). Sin esto, un `dav://` montado es invisible para `cat`. fuse3 >= 3.0.
37# gudev, gcr, gcrypt, keyring, logind → device, certificados, cifrado, contraseñas, sesión.
38#
39# APAGADOS POR FALTA DE RECETA (cada uno = una frontera con nombre)
40# dnssd(avahi) · smb(samba) · mtp(libmtp) · gphoto2 · afc(libimobiledevice) · nfs(libnfs) ·
41# cdda(libcdio-paranoia) · bluray(libbluray) · goa+google+onedrive(gnome-online-accounts,
42# libgdata, msgraph) · udisks2 — ver arriba.
43#
44# APAGADOS POR DECISIÓN, con la lib disponible
45# libusb → sólo sirve para interrumpir operaciones de `mtp`/`gphoto2`, que están apagados.
46# wsdd → descubrimiento de equipos Windows; es el compañero de `smb`, que no está.
47# afp → protocolo de Apple anterior a 2013, reemplazado por SMB hasta en macOS. No cuesta
48# deps; se apaga porque nadie lo va a hablar y cada backend es superficie de red.
49# burn → ya viene `false` de fábrica.
50#
51# ── `systemduserunitdir=no` / `tmpfilesdir=no` ──────────────────────────────────────────────────
52# No hay systemd (ADR 0007). Sin esto, meson busca el `.pc` de systemd para decidir dónde instalar
53# unidades que nadie va a leer. Los demonios de gvfs los levanta D-Bus por activación de sesión
54# —por eso esta receta NO declara `[[service]]`—; el fichero `.service` de D-Bus sí se instala.
55#
56# ⚠ EL `sed` DEL `ar`: `po/ar.po` de este tarball trae 1 `msgstr[5]`, y con uno alcanza para que el
57# `msgfmt` de gettext-tiny muera con SIGILL dejando un `.mo` de 0 bytes
58# ([[gettext-tiny-msgfmt-plural-arabe]]). Cuesta la traducción al árabe de gvfs.
59name = "gvfs"
60version = "1.58.5"
61license = "LGPL-2.0-or-later"
62
63[source]
64tarball = "https://download.gnome.org/sources/gvfs/1.58/gvfs-1.58.5.tar.xz"
65sha256 = "be175df39c3ed48de7dce88c7ed72af7524dedc7119b1ff6bb2ac1566b912ce4"
66
67[build]
68compiler = "zig-cc"
69target = "x86_64-linux-musl"
70link = "dynamic"
71
72[build.phases]
73configure = "sed -i '/^ar$/d' po/LINGUAS && PKG_CONFIG_PATH=/usr/lib/pkgconfig PYTHONPATH=/usr/lib/python3.12/site-packages meson setup output --prefix=/usr --buildtype=release --wrap-mode=nodownload -Dsystemduserunitdir=no -Dtmpfilesdir=no -Dadmin=true -Darchive=true -Dhttp=true -Dsftp=true -Dfuse=true -Dgudev=true -Dgcr=true -Dgcrypt=true -Dkeyring=true -Dlogind=true -Dafc=false -Dafp=false -Dburn=false -Dcdda=false -Ddnssd=false -Dgoa=false -Dgoogle=false -Dgphoto2=false -Dmtp=false -Dnfs=false -Donedrive=false -Dsmb=false -Dudisks2=true -Dwsdd=false -Dbluray=false -Dlibusb=false -Ddeprecated_apis=false -Ddevel_utils=false -Dinstalled_tests=false -Dman=false -Dunit_tests=false -Dc_args=-Wno-error=date-time"
74compile = "PYTHONPATH=/usr/lib/python3.12/site-packages ninja -C output"
75install = "PYTHONPATH=/usr/lib/python3.12/site-packages DESTDIR=/out meson install -C output --no-rebuild"
76
77[deps]
78# `dbus` (la estática) entra por el `.pc`, no por el link: gvfs le pregunta
79# `session_bus_services_dir` (:253) para saber dónde dejar sus ficheros de activación.
80# `libarchive-shared` y no la canónica: gvfs instala `libgvfscommon.so` y la canónica no es PIC.
81# `libelogind` es la que responde al `dependency('libsystemd')` fallido de :350-352.
82# `libudev-zero` NO es decorativo y la primera corrida murió por su ausencia: `gudev-1.0.pc` declara
83# `Requires: libudev`, y pkg-config aborta el configure entero si ese `.pc` no está —aunque nada
84# enlace libudev directamente—. `udev-pc` (que sí estaba) publica `udev.pc`, que es OTRO fichero:
85# udev-pc → /usr/share/pkgconfig/udev.pc
86# libudev-zero → /usr/lib/pkgconfig/libudev.pc ← el que falta sin esta línea
87# El error no nombra a gvfs ni a la receta: dice `Package 'libudev', required by 'gudev-1.0', not
88# found` y se lee como un problema de libgudev.
89build = ["meson", "samurai", "python3", "pkgconf", "gettext-tiny", "glib", "gsettings-desktop-schemas", "dbus", "libxml2-shared", "libsoup", "libpsl", "nghttp2", "libarchive-shared", "fuse3", "libgudev", "gcr", "p11-kit", "polkit", "libcap", "libsecret", "libgcrypt-shared", "libgpg-error-shared", "libelogind", "udev-pc", "libudev-zero", "udisks", "libblockdev", "sqlite-shared", "icu4c", "zlib-shared", "libffi", "pcre2"]