From 41b21755b478009de2c5951956ac79f3dd995862 Mon Sep 17 00:00:00 2001 From: Sergio Date: Fri, 18 Sep 2026 13:13:45 +0000 Subject: [PATCH] =?UTF-8?q?en=20la=20caja=20`/etc/profile.d`=20no=20lo=20l?= =?UTF-8?q?e=C3=ADa=20nadie:=20`/etc/profile`=20no=20exist=C3=ADa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- scripts/servidor/cc-por-zig.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/scripts/servidor/cc-por-zig.sh b/scripts/servidor/cc-por-zig.sh index 3b87d793..b3baa398 100755 --- a/scripts/servidor/cc-por-zig.sh +++ b/scripts/servidor/cc-por-zig.sh @@ -45,6 +45,7 @@ done # 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 # INESTABLE en este triple y exige `-Z`. +mkdir -p /etc/profile.d 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, # 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 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 ─────────────────────────── T=$(mktemp -d); trap 'rm -rf "$T"' EXIT printf '#include \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 echo " (no hay rust en el store: me salto sus controles)" 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"