pass: quito wl-clipboard de runtime — metía wayland y un binario ROTO en cli
Error mío de ayer, encontrado con `vigia-sonames.py --imagen` y medido antes
de tocar nada.
Declaré `wl-clipboard` como dep de runtime porque `pass -c` llama a `wl-copy`,
que es cierto. Lo que no pensé es que **las deps de runtime se propagan al
cierre de IMAGEN**, y `pass` vive en `cli`:
wayland ← wl-clipboard ← pass
Resultado medido: 5 nodos y ~3 MB de más en `cli` y `servidor`
(wl-clipboard, wayland, wayland-protocols, libffi) y con ellos un enlace
COLGANTE — el `wayland-scanner` del artefacto de wayland pide `libexpat.so.1`,
que en esos perfiles no existe, así que viajaba un binario que no puede
cargar. Comprobado en los dos sentidos: el cierre de `cli` pasa de 175 nodos
con wayland a 171 sin él, y `pass` sigue dentro.
⚠ Y era incorrecto por el fondo, no sólo por el aviso del vigía: `cli` y
`servidor` NO tienen servidor gráfico, así que `wl-copy` no podría funcionar
ahí ni con la dep puesta. Estaba pagando 3 MB y un binario roto por una
función imposible en esa capa.
⇒ Quien tenga sesión Wayland declara `wl-clipboard` en su perfil
(escritorio-sway ya lo hace). Donde no esté, el resto de `pass` va perfecto y
`-c` muere con el mensaje de upstream, que es lo correcto.
La lección, que vale más que el arreglo: **una dep de runtime no es sólo «lo
que el programa invoca»; es lo que VIAJA en todas las imágenes que lo
declaren.** Antes de poner una, mirar qué arrastra en el perfil más chico que
la va a llevar.
Nota: el aviso que me puso sobre la pista lo daba el vigía SIN la bandera
`--imagen`, que mide el cierre de build y es más ruidoso; con `--imagen`
persistía, y eso fue lo que confirmó que era real y no ruido del instrumento.
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
2 archivos · +30 −1
- docs/state/targets.toml +7 −0
- recipes/pass.toml +23 −1
diff --git a/docs/state/targets.toml b/docs/state/targets.toml
index 5bf96277..170b6dad 100644
--- a/docs/state/targets.toml
+++ b/docs/state/targets.toml
@@ -383,6 +383,13 @@ paquetes = [
# ⚠ `pass -c` (copiar al portapapeles) necesita `wl-clipboard`, que hoy sólo declara
# `escritorio-sway`. En las otras imágenes el resto de `pass` funciona y `-c` muere con un
# mensaje claro, que es el comportamiento de upstream, no una avería nuestra.
+ #
+ # Y NO se declara como dep de runtime de `pass` a propósito — lo hice y hubo que deshacerlo el
+ # mismo día: las deps de runtime se propagan al cierre de IMAGEN, así que metía
+ # `wayland ← wl-clipboard ← pass` en esta capa, o sea 5 nodos y ~3 MB, **más un binario roto**
+ # (el `wayland-scanner` del artefacto de wayland pide `libexpat.so.1`, que acá no existe; lo
+ # denunció `vigia-sonames.py --imagen`). Y encima para nada: sin servidor gráfico `wl-copy` no
+ # puede funcionar en `cli` ni en `servidor`. ⇒ Lo declara quien tiene sesión Wayland.
"pass", "qrencode",
# ── LA DOCUMENTACIÓN DEL SISTEMA (2026-10-21) ────────────────────────────────────────────────
# `man-pages` son 18 MB y 3.153 páginas, y cierran un hueco que el censo describía MAL. No era
diff --git a/recipes/pass.toml b/recipes/pass.toml
index 7d69eb9e..34b8bbb6 100644
--- a/recipes/pass.toml
+++ b/recipes/pass.toml
@@ -127,4 +127,26 @@ build = ["make", "bash", "gnupg", "tree", "util-linux", "coreutils", "pinentry"]
# `bash` porque el shebang es bash y no sh; `pinentry` porque sin él gpg no puede pedir la frase de
# paso en un uso interactivo real.
runtime = ["bash", "gnupg", "pinentry", "tree", "util-linux", "coreutils", "git",
- "wl-clipboard", "qrencode"]
+ "qrencode"]
+# ⚠ **`wl-clipboard` NO está acá, y la razón es un error que cometí y medí el mismo día.**
+# Lo declaré como runtime porque `pass -c` llama a `wl-copy`, que es cierto. El problema es que las
+# deps de runtime se propagan al CIERRE DE IMAGEN, y `pass` vive en `cli`:
+#
+# wayland ← wl-clipboard ← pass
+#
+# ⇒ metía 5 nodos y ~3 MB en `cli` y `servidor` (`wl-clipboard`, `wayland`, `wayland-protocols`,
+# `libffi`), y con ellos un enlace COLGANTE que el vigía de sonames denunció: el `wayland-scanner`
+# del artefacto de wayland pide `libexpat.so.1`, que en esos perfiles no existe ⇒ binario roto
+# viajando en la imagen. Comprobado: sin `pass`, `cli` no tocaba nada de eso.
+#
+# Y es incorrecto por el fondo, no sólo por el aviso: **`cli` y `servidor` no tienen servidor
+# gráfico**, así que `wl-copy` no podría funcionar ahí ni con la dep puesta. Declararla era pagar
+# 3 MB y un binario roto por una función imposible en esa capa.
+#
+# ⇒ Quien tenga sesión Wayland declara `wl-clipboard` en SU perfil (`escritorio-sway` ya lo hace) y
+# ahí `pass -c` funciona. Donde no esté, el resto de `pass` va perfecto y `-c` muere con el mensaje
+# de upstream («Error: No X11 or Wayland display detected»), que es el comportamiento correcto.
+#
+# La lección general: **una dep de runtime no es sólo «lo que el programa invoca»; es lo que VIAJA
+# en todas las imágenes que lo declaren.** Antes de poner una, mirar qué arrastra en el perfil más
+# chico que la va a llevar.