# zstd-cli 1.5.7 — la HERRAMIENTA `zstd`, que la receta canónica no produce. # # ── POR QUÉ EXISTE ────────────────────────────────────────────────────────────────────────────── # `recipes/zstd.toml` construye **sólo `lib/`** («build de lib/ (no CLI)», dice su cabecera) porque # lo que necesitan sus 13 consumidores —mesa, libadwaita, appstream, rsync, los `zstd-sys` de Rust— # es `libzstd.a`. El binario nunca se construyó, y eso dejó un agujero que sólo se ve al instalar la # distro en una máquina de verdad: # # $ tar --zstd -tf lab-image.tar.zst # tar: unrecognized option: zstd ← el tar del rootfs es el de busybox # $ zstd --version # sh: zstd: not found # # **Un takana recién instalado no puede desempacar su propio laboratorio.** La distro comprime todo # con zstd (la imagen del lab, el respaldo al Storage Box, el `dd` remoto de una instalación) y no # traía con qué descomprimirlo: había que extraer por tubería desde otro hub. Un hub que se instala # solo no puede depender de que otro hub le descomprima las cosas (SDD 28 §6.6). # # Y hay un segundo consumidor: `scripts/respaldo-storagebox.sh` usa `--compress-choice=zstd` —el # doble de rendimiento efectivo, medido— que rsync sólo ofrece si lo encuentra al construirse. # # ── POR QUÉ UNA VARIANTE Y NO AMPLIAR LA CANÓNICA ─────────────────────────────────────────────── # `zstd` es dep de **13 recetas**, y `mesa` está entre ellas. Ampliar la canónica re-hashea la lib y # arrastra en cascada toda esa torre por un binario de 700 K que ninguna de ellas usa. Mismo criterio # que las variantes `*-shared` (23 en el corpus): la canónica no se mueve, el nombre es distinto, y # cada consumidor toma la que necesita. Acá el eje no es estático/dinámico sino **librería/herramienta**. # # Radio: cero. Nadie depende de `zstd-cli`; sólo la declara `perfil.base` como raíz. name = "zstd-cli" version = "1.5.7" license = "BSD-3-Clause OR GPL-2.0-only" [source] tarball = "https://github.com/facebook/zstd/releases/download/v1.5.7/zstd-1.5.7.tar.gz" sha256 = "eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3" [build] compiler = "zig-cc" target = "x86_64-linux-musl" link = "static" # Split de la info de depuración (SDD 23 etapa 4). Entra en `hash_inputs`. strip_debug = true flags = [] [deps] build = ["make"] [build.phases] # `programs/` construye el ejecutable y enlaza la lib del propio árbol; no hace falta la canónica. # HAVE_ZLIB/LZMA/LZ4=0: sin esas deps el Makefile de zstd las detectaría del sysroot del LAB y el # binario saldría pidiendo sonames que el artefacto no publica — la fuga de [[needed-colgante]]. compile = 'make -C programs zstd HAVE_ZLIB=0 HAVE_LZMA=0 HAVE_LZ4=0 CFLAGS="-O3"' install = 'mkdir -p /out/usr/bin && cp programs/zstd /out/usr/bin/zstd'