diff --git a/scripts/cosmic/metal-desktop-image.sh b/scripts/cosmic/metal-desktop-image.sh index b21515c5..7a5a20f1 100755 --- a/scripts/cosmic/metal-desktop-image.sh +++ b/scripts/cosmic/metal-desktop-image.sh @@ -254,7 +254,17 @@ echo "interfaz: $IF" ip link set "$IF" up printf 'network={\n\tssid="%s"\n\tpsk="%s"\n}\n' "$SSID" "$PSK" > /tmp/wpa.conf wpa_supplicant -B -i "$IF" -c /tmp/wpa.conf -Dnl80211 || { echo "wpa_supplicant falló"; exit 1; } -sleep 6 +# Esperar a la ASOCIACIÓN, no al reloj. Con `sleep 6` fijo, udhcpc salía a preguntar antes de que +# hubiera enlace y devolvía «sin IPv4», que se lee como «clave equivocada» cuando la clave está bien. +# Un 802.11ac tarda más: escaneo de dos bandas + 4-way handshake. +i=0 +while [ $i -lt 40 ]; do + ST=$(wpa_cli -i "$IF" status 2>/dev/null | sed -n 's/^wpa_state=//p') + [ "$ST" = COMPLETED ] && { echo "asociado a $SSID (${i}s)"; break; } + [ $((i % 5)) -eq 0 ] && echo " esperando asociación… wpa_state=${ST:-?} (${i}s)" + i=$((i + 1)); sleep 1 +done +[ "$ST" = COMPLETED ] || echo " ⚠ no asoció (wpa_state=${ST:-?}). 4WAY_HANDSHAKE=clave; SCANNING=no ve la red" cat > /tmp/udhcpc.script <<'US' #!/bin/sh case "$1" in @@ -267,8 +277,13 @@ esac exit 0 US chmod +x /tmp/udhcpc.script -udhcpc -i "$IF" -n -q -s /tmp/udhcpc.script -ip -4 addr show "$IF" | grep -w inet || echo "sin IPv4 — ¿clave correcta? wpa_cli status" +# Tres intentos: el AP a veces no contesta el primer DISCOVER justo tras asociar. +for t in 1 2 3; do + udhcpc -i "$IF" -n -q -s /tmp/udhcpc.script && break + echo " DHCP intento $t sin respuesta, reintento…"; sleep 3 +done +ip -4 addr show "$IF" | grep -w inet \ + || echo "sin IPv4. Mirá 'wpa_cli -i $IF status': si wpa_state=COMPLETED el problema es DHCP, no la clave" echo "== desde el laptop: ssh -i ~/.ssh/hammer-metal root@ ==" WIFI chmod 0755 "$MERGED/usr/bin/wifi-up"