en la caja /etc/profile.d no lo leía nadie: /etc/profile no existía
El guion dejaba las RUSTFLAGS en /etc/profile.d/rust-enlazador.sh y ninguna shell de login las recogía, porque en esta caja /etc/profile NO EXISTE. O sea que el fichero habría sido exactamente la avería que este repo persigue: presente, con contenido, y sin ningún efecto. Lo descubrió el control nuevo, que pregunta por la VARIABLE en una shell de login en vez de por el fichero. Se crea /etc/profile con el bucle estándar sobre profile.d —de paso revive el bash_completion.sh que ya estaba ahí, igual de mudo— y no se toca el PATH, que lo fija el init. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -45,6 +45,7 @@ done
|
|||||||
# directo. Las tres banderas son necesarias —y `link-self-contained=no` lo es porque este toolchain
|
# directo. Las tres banderas son necesarias —y `link-self-contained=no` lo es porque este toolchain
|
||||||
# no trae `rust-lld` (incompatible con el llvm-config externo); la variante fina `=-linker` es
|
# no trae `rust-lld` (incompatible con el llvm-config externo); la variante fina `=-linker` es
|
||||||
# INESTABLE en este triple y exige `-Z`.
|
# INESTABLE en este triple y exige `-Z`.
|
||||||
|
mkdir -p /etc/profile.d
|
||||||
cat > /etc/profile.d/rust-enlazador.sh <<'EOF'
|
cat > /etc/profile.d/rust-enlazador.sh <<'EOF'
|
||||||
# El enlace de rust pasa por el driver de C (ver /usr/bin/cc). Sin esto no enlaza ninguna dylib,
|
# El enlace de rust pasa por el driver de C (ver /usr/bin/cc). Sin esto no enlaza ninguna dylib,
|
||||||
# o sea ninguna proc-macro. SDD 28 §6.52.
|
# o sea ninguna proc-macro. SDD 28 §6.52.
|
||||||
@@ -52,6 +53,25 @@ export RUSTFLAGS="${RUSTFLAGS:-} -C linker=cc -C linker-flavor=gcc -C link-self-
|
|||||||
EOF
|
EOF
|
||||||
chmod 644 /etc/profile.d/rust-enlazador.sh
|
chmod 644 /etc/profile.d/rust-enlazador.sh
|
||||||
|
|
||||||
|
# ⚠ …Y RESULTA QUE EN ESTA CAJA `/etc/profile.d` NO LO LEÍA NADIE: `/etc/profile` **no existía**.
|
||||||
|
# O sea que dejar ahí el fichero habría sido exactamente la avería que este repo persigue —presente,
|
||||||
|
# con contenido, y sin efecto—. Se descubrió con el control de abajo, que pregunta por la VARIABLE en
|
||||||
|
# una shell de login y no por el fichero. De paso revive el `bash_completion.sh` que ya estaba ahí,
|
||||||
|
# igual de mudo. No se toca el PATH: el de la caja lo fija el init y pisarlo desde acá sería cambiar
|
||||||
|
# algo que nadie pidió.
|
||||||
|
if [ ! -f /etc/profile ]; then
|
||||||
|
cat > /etc/profile <<'EOF'
|
||||||
|
# /etc/profile — lo lee toda shell de LOGIN. Existe para que `/etc/profile.d/*.sh` sirva de algo:
|
||||||
|
# el directorio estaba y nadie lo leía (2026-09-18).
|
||||||
|
for _f in /etc/profile.d/*.sh; do
|
||||||
|
[ -r "$_f" ] && . "$_f"
|
||||||
|
done
|
||||||
|
unset _f
|
||||||
|
EOF
|
||||||
|
chmod 644 /etc/profile
|
||||||
|
echo " (creado /etc/profile: el directorio profile.d existía y no lo leía nadie)"
|
||||||
|
fi
|
||||||
|
|
||||||
# ── CONTROLES: lo que importa es que COMPILE, no que el fichero exista ───────────────────────────
|
# ── CONTROLES: lo que importa es que COMPILE, no que el fichero exista ───────────────────────────
|
||||||
T=$(mktemp -d); trap 'rm -rf "$T"' EXIT
|
T=$(mktemp -d); trap 'rm -rf "$T"' EXIT
|
||||||
printf '#include <stdio.h>\nint main(void){ puts("C en takana"); return 0; }\n' > "$T/h.c"
|
printf '#include <stdio.h>\nint main(void){ puts("C en takana"); return 0; }\n' > "$T/h.c"
|
||||||
@@ -81,4 +101,11 @@ if [ -n "$R" ] && [ -x "$R/usr/bin/rustc" ]; then
|
|||||||
else
|
else
|
||||||
echo " (no hay rust en el store: me salto sus controles)"
|
echo " (no hay rust en el store: me salto sus controles)"
|
||||||
fi
|
fi
|
||||||
|
# ── CONTROL DEL ENTORNO: la variable, no el fichero ─────────────────────────────────────────────
|
||||||
|
# Que el `.sh` exista no dice nada; lo que importa es que una shell de LOGIN lo traiga puesto.
|
||||||
|
rf=$(sh -lc 'printf "%s" "$RUSTFLAGS"' 2>/dev/null || true)
|
||||||
|
case "$rf" in
|
||||||
|
*"linker-flavor=gcc"*) echo " ✓ entorno: una shell de login trae RUSTFLAGS puesto" ;;
|
||||||
|
*) echo "✗ /etc/profile.d/rust-enlazador.sh existe pero una shell de login NO lo recoge (RUSTFLAGS='$rf')" >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
echo "la caja tiene driver de C"
|
echo "la caja tiene driver de C"
|
||||||
|
|||||||
Reference in New Issue
Block a user