tawasuyu

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…

TOML 1182Shell 87Rust 63Markdown 541592 Sutichaykuna

⎇ 2f9253886ff843d9701ac61a9c3ff4f2cd43ef33 recipes/bzip2.toml TOML · 53 siq'ikuna · 2.8 KB Ñawpa willay ch'uya

bzip2: cuatro comandos rotos desde siempre — `/usr/bin/bzcmp -> /out/usr/bin/bzdiff` af20d9064 · Sergio ·

1# bzip2 1.0.8 → libbz2.a (C, Makefile custom sin configure). Lib base: compresión .bz2, cola C.
2# De-Alpinizada: compiler=zig-cc (migrado de gcc, matar-gcc 2026-07-16), make directo, install con PREFIX (el Makefile no usa DESTDIR).
3name    = "bzip2"
4version = "1.0.8"
5license = "bzip2-1.0.6"
6[source]
7tarball = "https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz"
8sha256  = "ab5a03176ee106d3f0fa90e381da478ddae405918153cca248e682cd0c4a2269"
9[build]
10compiler = "zig-cc"
11target   = "x86_64-linux-musl"
12link     = "static"
13
14# Split de la info de depuración (SDD 23 etapa 4, tanda de HOJAS). Entra en `hash_inputs`.
15strip_debug = true
16flags    = []
17[deps]
18build = ["binutils", "make"]
19
20[build.phases]
21# CC="$CC" explícito: el Makefile de bzip2 HARDCODEA `CC=gcc` en su cabecera, así que un `make` a
22# secas usa el gcc de Alpine aunque la receta declare compiler=zig-cc. Esta receta decía "migrado a
23# zig-cc (matar-gcc 2026-07-16)" y seguía pasando `CC=gcc`: la migración fue COSMÉTICA — cambió el
24# campo, no el build. El frente contaba `compiler = "gcc"` y no veía la fase (2026-07-17).
25# LDFLAGS explícito: el `-static` que takana exporta por `link = "static"` se pierde al no pasarlo
26# al make de un Makefile custom ⇒ el binario salía dinámico. Medido con scripts/static-audit.sh.
27# OJO: `-static`, NO `-all-static`. `-all-static` es un flag de LIBTOOL (el patrón de
28# jq/parted/shadow/procps-ng, que sí linkean con libtool); bzip2 usa Makefile crudo, así que el
29# flag llega tal cual al compilador → "error: Unknown Clang option: '-all-static'".
30compile = 'make CC="$CC" LDFLAGS="-static -no-pie"'
31# ⚠ **LOS CUATRO SYMLINKS SALEN ROTOS SI NO SE REHACEN, Y EL ARTEFACTO NO LO DICE.** El `install`
32# del Makefile de bzip2 los crea así:
33#
34#     cd $(PREFIX)/bin; ln -s -f $(PREFIX)/bin/bzdiff bzcmp
35#
36# — con `$(PREFIX)` DENTRO del destino. Como bzip2 **no soporta `DESTDIR`** (por eso acá va
37# `PREFIX=/out/usr`, el mismo truco que valkey), el destino que queda horneado es
38# `/out/usr/bin/bzdiff`: la ruta del SANDBOX. Al hidratar, `/usr/bin/bzcmp` apunta a un `/out` que no
39# existe en el sistema real ⇒ `bzcmp`, `bzegrep`, `bzfgrep` y `bzless` no funcionan.
40#
41# Nada lo delata: el artefacto tiene contenido, `bzip2` y `bzgrep` corren, el audit de enlace
42# estático pasa y la receta REPRODUCE. Se ve buscando en el store symlinks que no resuelven dentro de
43# su propio artefacto (2026-09-12; los únicos dos casos del corpus eran éste y uno legítimo de KDE,
44# que apunta a otro artefacto del MISMO perfil).
45#
46# Se rehacen RELATIVOS, que es lo correcto para un artefacto direccionado por hash: un enlace
47# relativo sigue valiendo esté el árbol montado donde esté.
48install = '''
49make install PREFIX=/out/usr CC="$CC"
50for par in bzcmp:bzdiff bzegrep:bzgrep bzfgrep:bzgrep bzless:bzmore; do
51  ln -sf "${par#*:}" "/out/usr/bin/${par%%:*}"
52done
53'''