# pinentry 1.3.3 — el diálogo de contraseña de GnuPG. Etapa G, hoja C. # # POR QUÉ ENTRA (medido 2026-09-22, paso 9 de `plan-que-sigue-tras-busybox.md`): sin pinentry, el # `gnupg` que ya viaja en los 7 perfiles VERIFICA bien pero no puede usar NINGUNA clave con # contraseña — `gpg: signing failed: No pinentry` —, y toda clave real tiene contraseña. O sea que # `git commit -S` (git está en los 7 perfiles) fallaba en la imagen con la única clase de clave que # un usuario trae de otra máquina. Es la misma forma del bit setuid del paso 2: 40 MiB sellados, # reproducibles y a medias inertes. gpg-agent busca su pinentry en `bindir/pinentry` — o sea # `/usr/bin/pinentry`, comprobado contra el binario sellado— y ese nombre lo publica esta receta. # # Sólo las dos frontends de terminal: # --enable-pinentry-curses → `pinentry-curses`, el que queda como `/usr/bin/pinentry` por el # `install-exec-local` de upstream (PINENTRY_DEFAULT, Makefile.am:128). # --enable-pinentry-tty → `pinentry-tty`, el que anda sin terminfo ni pantalla. # --enable-fallback-curses → sin frontend gráfica no cambia nada hoy, pero es lo que hace que una # futura GTK/Qt caiga a curses en vez de morir sin DISPLAY. # gtk2/gnome3/qt/qt4/qt5/tqt/fltk/efl/emacs van apagadas EXPLÍCITAMENTE, no por ausencia de deps: # `maybe` es el default de casi todas y auto-detectar es lo que mete una dep sin declararla. # `--disable-libsecret` por lo mismo: libsecret no está en el corpus y la caché de contraseñas en el # llavero es una decisión de producto, no un efecto secundario del configure. # # ⚠ libassuan del corpus es **API 3** (3.0.2) y pinentry pide API 2 — NO hace falta parche: su # `m4/libassuan.m4:194` acepta explícitamente `want=2 got=3`. Comprobado antes de autorar. # # ⚠ `SETCAP=true` en el install: el `install-exec-local` de upstream corre `$(SETCAP) cap_ipc_lock+p` # sobre cada binario y `SETCAP` no lo define NADIE (ni configure.ac ni el Makefile.in) ⇒ ejecuta # `cap_ipc_lock+p …`, que no existe, y se salva por el `|| true`. Con `SETCAP=true` es un no-op # limpio. La capability en sí no puede viajar en el artefacto —igual que el setuid del paso 2, la # pone el ensamblado— y sin ella pinentry avisa «insecure memory» pero funciona: deuda NOMBRADA, # no resuelta acá. name = "pinentry" version = "1.3.3" license = "GPL-2.0-or-later" [source] tarball = "https://gnupg.org/ftp/gcrypt/pinentry/pinentry-1.3.3.tar.bz2" sha256 = "c2970f16d6afb66ecddfca767d743936c86239bff936eed7fd7597a678414b63" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" # Split de la info de depuración (SDD 23 etapa 4, tanda de HOJAS). Entra en `hash_inputs`. strip_debug = true flags = [] [build.phases] configure = ''' ./configure \ --build=$CBUILD \ --host=$CHOST \ --prefix=/usr \ --sysconfdir=/etc \ --disable-nls \ --disable-doc \ --enable-pinentry-tty \ --enable-pinentry-curses \ --enable-fallback-curses \ --disable-pinentry-emacs \ --disable-inside-emacs \ --disable-pinentry-gtk2 \ --disable-pinentry-gnome3 \ --disable-pinentry-qt \ --disable-pinentry-qt4 \ --disable-pinentry-qt5 \ --disable-pinentry-tqt \ --disable-pinentry-fltk \ --disable-pinentry-efl \ --disable-libsecret \ --with-libgpg-error-prefix=/usr \ --with-libassuan-prefix=/usr ''' compile = 'make' install = 'make DESTDIR=/out SETCAP=true install' [deps] build = ["libassuan", "libgpg-error", "ncurses", "linux-headers", "pkgconf", "make"]