jaula: el envoltorio hacía arrancar a cargo, pero no a lo que cargo LANZA
cargo exporta `CARGO=<ruta del binario REAL>` —el del store, no el envoltorio— y
hay macros que lo ejecutan: `proc-macro-crate` corre `$CARGO locate-project` para
ubicar la raíz del workspace. Adentro de la jaula ese exec moría con «No such
file or directory», que acá miente: el fichero existe y es ejecutable, el que
falta es el INTÉRPRETE. `crate_name()` devolvía Err y el derive `Type` de
zvariant caía a su última rama, `::zvariant` en vez de `::zbus::zvariant`:
error[E0433]: cannot find `zvariant` in the crate root (atspi-proxies 0.13.0)
Eso se lee como un defecto del lock del repo ajeno y NO lo es. Con el cargador
puesto en /lib, `llimphi-ui` de tawasuyu —winit + accesskit + wgpu— compila
entero en 2m17s. La clase es más grande que el caso: cualquier herramienta que
re-ejecute `$CARGO` o `$RUSTC` por ruta absoluta se rompía igual, en un crate
ajeno y a diez capas del origen.
El envoltorio ya prefería el cargador de la caja (`[ -x /lib/ld-musl… ]`); lo que
faltaba era ponerlo cuando no está. En la caja, que es musl, el guion se aparta.
Y va con su control, porque los trece de antes NO lo veían: todos entran por el
envoltorio. Brazo de control corrido con un cargador falso — los trece en verde y
el nuevo en rojo, que es exactamente el hueco.
This commit is contained in:
@@ -63,6 +63,24 @@ fi
|
||||
[ -n "$LAB" ] || { echo "no encuentro el alpine del lab (probé /work/dev-fs/alpine y /work/$U/dev-fs/alpine)" >&2; exit 1; }
|
||||
echo "==> lab en $LAB"
|
||||
|
||||
# ── Y EL CARGADOR VA TAMBIÉN EN `/lib`, QUE NO ES REDUNDANTE (2026-09-21, medido) ───────────────
|
||||
# El envoltorio alcanza para que `cargo` ARRANQUE, pero no para lo que cargo lanza por su cuenta:
|
||||
# cargo exporta `CARGO=<ruta del binario REAL>` —el del store, no el envoltorio— y hay macros que
|
||||
# lo ejecutan. `proc-macro-crate` corre `$CARGO locate-project` para ubicar la raíz del workspace,
|
||||
# y adentro de la jaula ese exec moría con «No such file or directory» —que acá miente: el fichero
|
||||
# existe y es ejecutable, el que falta es el INTÉRPRETE—. `crate_name()` devolvía Err y el derive
|
||||
# `Type` de zvariant caía a su última rama (`::zvariant`) en vez de `::zbus::zvariant`:
|
||||
#
|
||||
# error[E0433]: cannot find `zvariant` in the crate root (atspi-proxies 0.13.0)
|
||||
#
|
||||
# Eso se lee como un defecto del lock del repo ajeno y NO lo es: con el cargador puesto,
|
||||
# `llimphi-ui` de tawasuyu —winit + accesskit + wgpu— compila entero en 2m17s. La clase es más
|
||||
# grande que este caso: CUALQUIER herramienta que re-ejecute `$CARGO` o `$RUSTC` por su ruta
|
||||
# absoluta se rompía igual, en un crate ajeno y a diez capas del origen.
|
||||
if [ ! -e /lib/ld-musl-x86_64.so.1 ] && ln -sfn "$LAB/lib/ld-musl-x86_64.so.1" /lib/ld-musl-x86_64.so.1 2>/dev/null; then
|
||||
echo " (puesto /lib/ld-musl-x86_64.so.1 -> $LAB — sin él, lo que cargo LANZA no arranca)"
|
||||
fi
|
||||
|
||||
# El zig del CORPUS, el mismo que usa cc-por-zig.sh en la caja. No se toma el de `/work/dev-fs/tools`
|
||||
# para que el `cc` de adentro y el de afuera sean el mismo binario.
|
||||
ZIG=$(find /store -maxdepth 3 -type f -perm -100 -name zig -path '*seed-zig*' 2>/dev/null | head -1)
|
||||
@@ -184,5 +202,19 @@ else
|
||||
printf " ✗ %-9s %s\n" "rustc" "$(grep -m1 error "$T/e3" 2>/dev/null || head -1 "$T/e3")"; fallos=$((fallos+1))
|
||||
fi
|
||||
|
||||
# ── CONTROL: y que arranquen SIN el envoltorio ─────────────────────────────────────────────────
|
||||
# Esto es lo que ve una proc-macro: `$CARGO` y `$RUSTC` apuntan al binario del STORE, no a `$BIN`.
|
||||
# Los tres controles de arriba pasan con este camino roto —todos entran por el envoltorio—, y el
|
||||
# error sale después, en un crate ajeno, diciendo otra cosa.
|
||||
R=$(ls -dt /store/*-rust 2>/dev/null | while read -r d; do n=${d##*/}; [ "${n#*-}" = "rust" ] && { echo "$d"; break; }; done)
|
||||
export LD_LIBRARY_PATH="$LAB/lib:$LAB/usr/lib:$R/usr/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
|
||||
mkdir -p "$T/src"; : > "$T/src/lib.rs" # sin un target, `locate-project` ni llega a mirar la ruta
|
||||
printf '[package]\nname = "x"\nversion = "0.0.0"\nedition = "2021"\n' > "$T/Cargo.toml"
|
||||
if out=$("$R/usr/bin/cargo" locate-project --workspace --message-format=plain --manifest-path="$T/Cargo.toml" 2>&1); then
|
||||
printf " ✓ %-9s el binario del store arranca sin envoltorio (\$CARGO)\n" "cargo"
|
||||
else
|
||||
printf " ✗ %-9s %s\n" "cargo" "$(printf '%s' "$out" | head -1 | cut -c1-60)"; fallos=$((fallos+1))
|
||||
fi
|
||||
|
||||
[ "$fallos" -eq 0 ] || { echo "==> $fallos comprobación(es) en rojo" >&2; exit 1; }
|
||||
echo "==> $BIN listo"
|
||||
|
||||
Reference in New Issue
Block a user