📶 metal: el enlace WiFi se caía solo y cortaba la depuración remota a mitad

Depurando la OptiPlex por SSH sobre un hotspot, la máquina desaparecía de la red cada
pocos minutos. No es «la WiFi anda mal»: son dos causas que se suman y ninguna deja
rastro en dmesg.

  - `udhcpc -q` (el que usa wifi-up) pide la dirección UNA vez y termina. Nadie renueva
    el lease.
  - el AP olvida a los clientes ociosos y deja de contestar ARP. Desde fuera se ve «No
    route to host» mientras la máquina se cree perfectamente conectada.

El síntoma engaña justo en la dirección peor: la máquina no reporta nada, así que parece
que se colgó lo que estabas depurando.

`wifi-keep` hace ping al gateway cada 10s, que resuelve las dos a la vez — detecta la
caída para reasociar Y mantiene viva la entrada del cliente en la tabla del AP.

Sin esto cada sesión remota se interrumpe sola y hay que volver físicamente al teclado,
que es exactamente lo que la red venía a evitar.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-06 11:33:30 -04:00
co-authored by Claude Opus 5
parent e2017dcfdc
commit 213ebfbb03
+33
View File
@@ -293,6 +293,37 @@ echo "== desde el laptop: ssh -i ~/.ssh/hammer-metal root@<la IP de arriba> =="
WIFI WIFI
chmod 0755 "$MERGED/usr/bin/wifi-up" chmod 0755 "$MERGED/usr/bin/wifi-up"
# ── el enlace WiFi se caía solo y cortaba la depuración a mitad ─────────────────────────────────
# Medido el 2026-08-06 depurando la OptiPlex por SSH sobre un hotspot: la máquina desaparecía de la
# red cada pocos minutos. Dos causas que se suman, y ninguna es «la WiFi anda mal»:
# - `udhcpc -q` (el que usa wifi-up) pide la dirección UNA vez y termina: nadie renueva el lease.
# - el AP olvida a los clientes ociosos y deja de contestar ARP ⇒ «No route to host» desde fuera,
# mientras la máquina se cree perfectamente conectada. El síntoma engaña: no hay nada en dmesg.
# El ping periódico resuelve las dos a la vez — detecta la caída Y mantiene viva la entrada en el AP.
# Sin esto, cada sesión de depuración remota se interrumpe sola y hay que volver físicamente al
# teclado, que es justo lo que la red venía a evitar.
cat > "$MERGED/usr/bin/wifi-keep" <<'KEEP'
#!/bin/sh
# wifi-keep <gateway> <SSID> <clave> — mantiene el enlace vivo y reasocia si se cae.
export PATH=/usr/bin:/bin:/usr/sbin:/sbin
GW="$1"; SSID="$2"; PSK="$3"
[ -n "$PSK" ] || { echo "uso: wifi-keep <gateway> <SSID> <clave>"; exit 1; }
L=/var/log/wifi-keep.log
echo "$(date): vigilante arriba (gw=$GW ssid=$SSID)" >> $L
while :; do
if ping -c1 -W3 "$GW" >/dev/null 2>&1; then
sleep 10
else
echo "$(date): sin respuesta del gateway — reasociando" >> $L
pkill wpa_supplicant 2>/dev/null
sleep 2
wifi-up "$SSID" "$PSK" >> $L 2>&1
sleep 10
fi
done
KEEP
chmod 0755 "$MERGED/usr/bin/wifi-keep"
# ── getty en tty1: el prompt TIENE que salir por la PANTALLA ──────────────────────────────────── # ── getty en tty1: el prompt TIENE que salir por la PANTALLA ────────────────────────────────────
# Lección del 1er viaje físico de KDE, que costó un USB quemado: el CMDLINE horneado es # Lección del 1er viaje físico de KDE, que costó un USB quemado: el CMDLINE horneado es
# `console=tty0 console=ttyS0,115200 …` y el kernel hace /dev/console = la ÚLTIMA `console=` ⇒ ttyS0. # `console=tty0 console=ttyS0,115200 …` y el kernel hace /dev/console = la ÚLTIMA `console=` ⇒ ttyS0.
@@ -382,6 +413,8 @@ cat > "$MERGED/etc/motd" <<'MOTD'
GPU detectada: ls /dev/dri ; dmesg | grep -iE 'i915|drm' GPU detectada: ls /dev/dri ; dmesg | grep -iE 'i915|drm'
Logs (en DISCO, sobreviven al apagón): /var/log/cosmic/ Logs (en DISCO, sobreviven al apagón): /var/log/cosmic/
Red y SSH: netup-wait ; ip addr (root por clave, sin password) Red y SSH: netup-wait ; ip addr (root por clave, sin password)
WiFi: wifi-up <SSID> <clave>
WiFi que no se cae: wifi-keep <gateway> <SSID> <clave> & (reasocia sola)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
MOTD MOTD