From 3b36e9df0a83e314afb408241a0ffcaacc27f48c Mon Sep 17 00:00:00 2001 From: Sergio Date: Fri, 18 Sep 2026 16:26:46 +0000 Subject: [PATCH] =?UTF-8?q?zsh:=20dejar=20de=20pedir=20`install.info`=20?= =?UTF-8?q?=E2=80=94=20fallaba=20siempre=20y=20sellaba=20un=20`/usr/share/?= =?UTF-8?q?info`=20VAC=C3=8DO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `makeinfo` no está en el lab, así que `make … install install.info` moría con `/bin/sh: makeinfo: not found` ⇒ `Error 2` en TODOS los builds. Y el artefacto sellaba igual: las fases corren con `/bin/sh -c` sin `-e` (`takana-build/src/sandbox.rs:332,491`), o sea que un fallo a mitad de fase no aborta — sólo cuenta el estado del ÚLTIMO comando, que acá era el bucle de guardianes y daba 0. Lo que llegaba al store era un zsh por lo demás correcto (estático, con sus módulos, con `=~`) pero con un `/usr/share/info` vacío adentro. Es la regla 3 de CLAUDE.md a escala de fase en vez de artefacto: un ausente falla ruidosamente, un vacío llega hasta el final diciendo que todo fue bien. Lo que salvó al artefacto no fue el estado de salida sino los dos guardianes que la receta ya traía escritos a mano. Una receta sin guardianes propios no tiene esa red — eso es el hallazgo general, y va aparte. --- recipes/zsh.toml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/recipes/zsh.toml b/recipes/zsh.toml index b1b866e5..7b4f8c7b 100644 --- a/recipes/zsh.toml +++ b/recipes/zsh.toml @@ -148,8 +148,18 @@ _abuild_phase # de package() de Alpine (traducido $pkgdir→/out). Sin locales: el corpus no los hidrata y pesan. install = ''' _abuild_phase() { - make LOCAL_LDFLAGS= DESTDIR="/out" install install.info + make LOCAL_LDFLAGS= DESTDIR="/out" install rm -rf "/out"/usr/share/locale + # `install.info` NO se pide, y no es una poda de tamaño como la de arriba: MEDIDO el + # 2026-09-18, `makeinfo` no está en el lab, así que fallaba SIEMPRE + # (`/bin/sh: makeinfo: not found` ⇒ `make: *** [Makefile:255: install.info] Error 2`). + # Y el build SELLABA IGUAL, dejando un `/usr/share/info` vacío adentro: las fases corren + # con `/bin/sh -c` SIN `-e` (`takana-build/src/sandbox.rs:332,491`), así que un fallo a + # mitad de fase no aborta nada — sólo cuenta el estado del ÚLTIMO comando. Un directorio + # vacío en el artefacto es la regla 3 de CLAUDE.md en pequeño: llega hasta el final + # diciendo que todo fue bien. Pedir algo que no puede funcionar y tolerar su fallo es + # peor que no pedirlo. + rm -rf "/out"/usr/share/info # `/etc/shells` no se escribe acá: es estado del sistema instalado, no del artefacto. # GUARDIÁN: un zsh dinámico sella, reproduce y NO ARRANCA dentro de una imagen (pide # libncursesw.so.6, que nadie provee). Se comprueba el hecho en el ELF, no la intención.