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