gioser

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…

⎇ main recipes/pinentry.toml TOML · 78 lines · 3.5 KB History raw

paso 9: a gnupg no le sobraba nada, le FALTABA pinentry — y `git commit -S` no andaba en ninguna imagen e52abccc2 · Sergio ·

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"]