zsh: dejar de pedir install.info — fallaba siempre y sellaba un /usr/share/info VACÍO

`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.
This commit is contained in:
Sergio
2026-09-18 16:27:01 +00:00
parent c7c2337559
commit 3b36e9df0a
+11 -1
View File
@@ -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.