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 1572Shell 203Rust 109Markdown 993728 Definiciones

qdrant: CONSTRUYE y ARRANCA — pero el artefacto venía con 69 M de basura, y la causa es del lab

Selló en el worker con el arreglo del `compiler = "gcc"`. Verificado allá, corriéndolo y no por el
código de salida: binario estático de 70 M sin NEEDED, `qdrant --version` → `qdrant 1.19.1`, y
levantándolo de verdad:

    Qdrant HTTP listening on 6399
    Qdrant gRPC listening on 6334
    Access web UI at http://localhost:6399/dashboard

⚠ **Y al mirar el ÁRBOL del artefacto antes de promoverlo, pesaba 139 M — la mitad, basura.** 140
ficheros bajo `src/target/release/build/protobuf-src-*/out/install/include/google/protobuf/…`: las
cabeceras y libs del protobuf que `protobuf-src` compila para su uso interno.

**La causa no es de esta receta, y por eso vale escribirla.** El sandbox exporta **`DESTDIR=/out` de
forma GLOBAL** (`sandbox.rs`), para que el `make install` de las recetas autotools funcione.
`protobuf-src` hace su propio `make install` DENTRO de la fase compile, con
`--prefix=/src/target/release/build/…/out/install`, y ese install anidado **hereda el DESTDIR** ⇒ su
prefijo aterriza en `/out/src/target/…`. Nadie lo pidió, nada falla, y el artefacto sella con el
doble de tamaño y un `/src` en la raíz que al hidratar se proyectaría sobre el FHS de la imagen.

Le puede pasar a cualquier receta cuyo build ejecute un `make install` anidado — los crates `*-src`
son la familia entera. Se limpia en la receta y NO en el lab: quitar el `DESTDIR` global cambiaría el
comportamiento de todas las recetas autotools del corpus, que es una campaña con su propia
verificación. `/out/src` nunca es salida legítima — la raíz del artefacto es un FHS y `/src` es el
nombre del bind del lab.

Queda en `incoming/` hasta que el worker selle la versión limpia; promover a `recipes/` con el
artefacto sucio sería meter los 69 M al grafo.

733065b1c453dc70c6836621e051b29f5291c028 · por Sergio · (hace 1 mes) · padre 3064798fe · ver el árbol en este commit

Delta semántico

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

1 archivos · +21 −0

diff --git a/recipes/incoming/qdrant.toml b/recipes/incoming/qdrant.toml
index 66673b3b..0c699a9c 100644
--- a/recipes/incoming/qdrant.toml
+++ b/recipes/incoming/qdrant.toml
@@ -68,5 +68,26 @@ target   = "x86_64-linux-musl"
 link     = "static"
 flags    = ["--bin", "qdrant"]
 
+[build.phases]
+# ⚠ **HAY QUE LIMPIAR `/out/src`, Y LA CAUSA NO ESTÁ EN ESTA RECETA.** El primer artefacto sellado
+# pesaba 139 M y **la mitad —69 M— era basura**: 140 ficheros bajo
+# `src/target/release/build/protobuf-src-*/out/install/include/google/protobuf/…`, o sea las
+# cabeceras y libs del protobuf que `protobuf-src` compila para su uso interno.
+#
+# El mecanismo: el sandbox **exporta `DESTDIR=/out` de forma GLOBAL** (`sandbox.rs`, para que el
+# `make install` de las recetas autotools funcione). `protobuf-src` hace su propio `make install`
+# DENTRO de la fase compile, con `--prefix=/src/target/release/build/…/out/install` — y ese
+# `make install` anidado **hereda el `DESTDIR`**, así que su prefijo aterriza en
+# `/out/src/target/…`. Nadie lo pidió y nada falla: el artefacto sella con el doble de tamaño y con
+# un `/src` en la raíz, que al hidratar se proyectaría sobre el sistema de ficheros de la imagen.
+#
+# Le va a pasar a **cualquier** receta cuyo build ejecute un `make install` anidado —los crates
+# `*-src` son la familia entera—. Se limpia acá y no en el lab porque quitar el `DESTDIR` global
+# cambiaría el comportamiento de las recetas autotools del corpus entero.
+#
+# `/out/src` nunca es una salida legítima: la raíz del artefacto es un FHS, y `/src` es el nombre del
+# bind del lab. El resto de la fase es el default de Cargo, copiado tal cual.
+install = 'rm -rf /out/src && mkdir -p /out/usr/bin && find target/release -maxdepth 1 -type f -perm -100 -exec cp {} /out/usr/bin/ \;'
+
 [deps]
 build = ["binutils", "busybox", "make", "pkgconf", "protobuf"]