# bzip2 1.0.8 → libbz2.a (C, Makefile custom sin configure). Lib base: compresión .bz2, cola C. # De-Alpinizada: compiler=zig-cc (migrado de gcc, matar-gcc 2026-07-16), make directo, install con PREFIX (el Makefile no usa DESTDIR). name = "bzip2" version = "1.0.8" license = "bzip2-1.0.6" [source] tarball = "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz" sha256 = "ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269" [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 = [] [deps] build = ["binutils", "make"] [build.phases] # CC="$CC" explícito: el Makefile de bzip2 HARDCODEA `CC=gcc` en su cabecera, así que un `make` a # secas usa el gcc de Alpine aunque la receta declare compiler=zig-cc. Esta receta decía "migrado a # zig-cc (matar-gcc 2026-07-16)" y seguía pasando `CC=gcc`: la migración fue COSMÉTICA — cambió el # campo, no el build. El frente contaba `compiler = "gcc"` y no veía la fase (2026-07-17). # LDFLAGS explícito: el `-static` que takana exporta por `link = "static"` se pierde al no pasarlo # al make de un Makefile custom ⇒ el binario salía dinámico. Medido con scripts/static-audit.sh. # OJO: `-static`, NO `-all-static`. `-all-static` es un flag de LIBTOOL (el patrón de # jq/parted/shadow/procps-ng, que sí linkean con libtool); bzip2 usa Makefile crudo, así que el # flag llega tal cual al compilador → "error: Unknown Clang option: '-all-static'". compile = 'make CC="$CC" LDFLAGS="-static -no-pie"' # ⚠ **LOS CUATRO SYMLINKS SALEN ROTOS SI NO SE REHACEN, Y EL ARTEFACTO NO LO DICE.** El `install` # del Makefile de bzip2 los crea así: # # cd $(PREFIX)/bin; ln -s -f $(PREFIX)/bin/bzdiff bzcmp # # — con `$(PREFIX)` DENTRO del destino. Como bzip2 **no soporta `DESTDIR`** (por eso acá va # `PREFIX=/out/usr`, el mismo truco que valkey), el destino que queda horneado es # `/out/usr/bin/bzdiff`: la ruta del SANDBOX. Al hidratar, `/usr/bin/bzcmp` apunta a un `/out` que no # existe en el sistema real ⇒ `bzcmp`, `bzegrep`, `bzfgrep` y `bzless` no funcionan. # # Nada lo delata: el artefacto tiene contenido, `bzip2` y `bzgrep` corren, el audit de enlace # estático pasa y la receta REPRODUCE. Se ve buscando en el store symlinks que no resuelven dentro de # su propio artefacto (2026-09-12; los únicos dos casos del corpus eran éste y uno legítimo de KDE, # que apunta a otro artefacto del MISMO perfil). # # Se rehacen RELATIVOS, que es lo correcto para un artefacto direccionado por hash: un enlace # relativo sigue valiendo esté el árbol montado donde esté. install = ''' make install PREFIX=/out/usr CC="$CC" for par in bzcmp:bzdiff bzegrep:bzgrep bzfgrep:bzgrep bzless:bzmore; do ln -sf "${par#*:}" "/out/usr/bin/${par%%:*}" done '''