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 1411Shell 141Markdown 85Rust 842918 Definiciones

static: pkgconf arreglada + CORRIJO el alcance del hallazgo de 756928a

756928a generalizó de más. El alcance real, medido dentro del sandbox con readelf sobre un
`int main(){return 0;}` trivial:

    zig 0.13.0:  -static                           → NEEDED=1  (dinámico)  ← el bug
    zig 0.13.0:  -target x86_64-linux-musl -static → NEEDED=0  (estático)
    zig 0.16.0:  -static                           → NEEDED=0  (estático)  ← default, sano

O sea: el -static roto es de ZIG 0.13.0, NO del framework. Con el zig default el -static que el
lab exporta por link="static" funciona ⇒ CC sin -target (sandbox.rs:415) está BIEN y NO hay que
re-hashear los 841 sellados, al revés de lo que decía 756928a. samurai lo sufría por caer en la
intersección de dos rarezas: pinea zig 0.13.0 Y no usa libtool (nada absorbía el -static).

Las otras 4 recetas con zig 0.13.0 + link=static (mtools/openssh/openssl/xorriso): auditadas,
0 mienten — usan libtool, que absorbe el -static por su cuenta.

pkgconf: el diagnóstico ORIGINAL (libtool se come el -static) era el correcto. Usaba el BuildSys
automático ⇒ fases explícitas sólo para meter -all-static en compile Y en install. Estático de
verdad (NEEDED=0).

Van 2 de 11: samurai, pkgconf.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

87e0fc331d5972ff418d1503c24a523482861902 · por sergio · (hace 3 meses) · padre 756928aa8 · ver el árbol en este commit

Delta semántico

Ninguna definición cambió: el cambio es de texto, documentación o datos.

2 archivos · +30 −11

diff --git a/recipes/pkgconf.toml b/recipes/pkgconf.toml
index e84b8ba9..c9135c3a 100644
--- a/recipes/pkgconf.toml
+++ b/recipes/pkgconf.toml
@@ -19,3 +19,14 @@ sha256  = "ab89d59810d9cad5dfcd508f25efab8ea0b1c8e7bad91c2b6351f13e6a5940d8"
 compiler = "zig-cc"
 target   = "x86_64-linux-musl"
 link     = "static"
+
+# Fases explícitas SÓLO para el `-all-static` (patrón jq/parted/shadow/procps-ng/expat). Con el
+# BuildSys automático el `LDFLAGS=-static` que el lab exporta por `link = "static"` pasa por LIBTOOL,
+# que lo lee como "preferí mis .a", NO como flag al linker ⇒ el binario salía DINÁMICO (NEEDED:
+# libc.so) jurando ser estático. El único flag de libtool para un binario 100% estático es
+# `-all-static`, y va en `make` Y en `make install` (libtool RELINKEA al instalar; sólo en compile no
+# basta). Nunca en configure: ahí rompe los tests de link de autotools.
+[build.phases]
+configure = './configure --build=$CBUILD --host=$CHOST --prefix=/usr --disable-shared --enable-static'
+compile   = 'make LDFLAGS="-all-static -no-pie" -j"$(nproc)"'
+install   = 'make DESTDIR=/out install LDFLAGS="-all-static -no-pie"'
diff --git a/recipes/samurai.toml b/recipes/samurai.toml
index 1114a681..085a70f8 100644
--- a/recipes/samurai.toml
+++ b/recipes/samurai.toml
@@ -19,17 +19,25 @@ zig_version = "0.13.0"
 build = ["make"]
 
 [build.phases]
-# `-target x86_64-linux-musl` en LDFLAGS: samurai NO usa libtool (Makefile pelado), así que el
-# `-all-static` de jq/parted/shadow no aplica — sería un flag desconocido para zig-cc. La causa era
-# otra y NO es de samurai: el lab exporta `CC="zig cc -mcpu=baseline"` SIN `-target` (sandbox.rs),
-# así que zig compila NATIVO, detecta la musl de Alpine del rootfs (/usr/lib/libc.a existe) y enlaza
-# contra ella IGNORANDO el `-static` que el lab exporta por `link = "static"`. Medido dentro del
-# sandbox sobre un `int main(){return 0;}` trivial, con readelf:
-#     zig cc -mcpu=baseline -static                          → NEEDED=1  (dinámico)
-#     zig cc -mcpu=baseline -target x86_64-linux-musl -static → NEEDED=0  (estático)
-# El `-target` fuerza la musl BUNDLEADA de zig ⇒ el `-static` se respeta. La receta ya declaraba
-# `target = "x86_64-linux-musl"`, pero ese campo no llega al CC: hasta que eso se arregle en el
-# framework (re-hashea los 841 sellados), va por receta.
+# `-target x86_64-linux-musl` en LDFLAGS. Samurai cae en la INTERSECCIÓN de dos rarezas, y por eso es
+# la única receta que necesita esto:
+#
+#   1. NO usa libtool (Makefile pelado) ⇒ el `-all-static` de jq/parted/shadow/expat no aplica acá:
+#      sería un flag desconocido para zig-cc. El `-static` llega crudo al driver.
+#   2. Pinea `zig_version = "0.13.0"` (ver arriba: el zig default miscompila el musl acá) — y el
+#      `-static` de zig 0.13 está ROTO para el target NATIVO dentro del sandbox: compila nativo,
+#      detecta la musl de Alpine del rootfs (/usr/lib/libc.a existe) y enlaza contra ella IGNORANDO
+#      el -static. `-target` fuerza la musl BUNDLEADA de zig ⇒ el -static se respeta.
+#
+# Medido DENTRO del sandbox con readelf, sobre un `int main(){return 0;}` trivial:
+#     zig 0.13.0:  -static                           → NEEDED=1  (dinámico)  ← el bug
+#     zig 0.13.0:  -target x86_64-linux-musl -static → NEEDED=0  (estático)
+#     zig 0.16.0:  -static                           → NEEDED=0  (estático)  ← default, sano
+#
+# NO es un agujero de framework: con el zig default el -static del lab funciona, así que `CC` sin
+# `-target` (sandbox.rs) está bien y NO hay que re-hashear el store. Las otras 4 recetas que pinean
+# 0.13.0 con link=static (mtools/openssh/openssl/xorriso) están sanas: usan libtool, que absorbe el
+# -static por su cuenta. Auditadas, 0 mienten.
 compile = 'make CFLAGS="-O2" LDFLAGS="-target x86_64-linux-musl -static"'
 install = '''
 set -e