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.
Semántico sayk'uy
Mana ima sutichaypas t'ikrakurqanchu: qillqalla, yachachiylla utaq willaylla t'ikrakurqan.
1 qillqakuna · +21 −0
- recipes/incoming/qdrant.toml +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"]