#!/usr/bin/env bash set -euo pipefail log() { echo "[ap-wifi] $*"; } # 1. Interface Wi-Fi -------------------------------------------------- IFACE="${AP_INTERFACE:-}" log "Attente de la carte Wi-Fi (à injecter avec : sudo ./attach-wifi.sh)…" FOUND=() for _ in $(seq 1 180); do mapfile -t FOUND < <(iw dev 2>/dev/null | awk '$1=="Interface"{print $2}') if [[ -n "$IFACE" ]]; then printf '%s\n' "${FOUND[@]:-}" | grep -qx "$IFACE" && break elif [[ ${#FOUND[@]} -ge 1 ]]; then IFACE="${FOUND[0]}" for d in "${FOUND[@]}"; do p="$(iw dev "$d" info 2>/dev/null | awk '/wiphy/{print "phy"$2}')" if [[ -n "$p" ]] && iw "$p" info 2>/dev/null | grep -qE '^\s+\* AP$'; then IFACE="$d"; break; fi done break fi sleep 1 done [[ -n "$IFACE" ]] && iw dev "$IFACE" info >/dev/null 2>&1 || { log "ERREUR : interface '${IFACE:-?}' absente après 3 min (détectées : ${FOUND[*]:-aucune}). Lancez attach-wifi.sh"; exit 1; } export AP_INTERFACE="$IFACE" log "Interface utilisée : $IFACE" # 2. NetworkManager : ne gère que l'interface choisie --------------------------- mkdir -p /etc/NetworkManager/conf.d /run/dbus /run/NetworkManager /var/run/apache2 /var/lock/apache2 /data cat > /etc/NetworkManager/conf.d/10-ap.conf </dev/null 2>&1 && break sleep 1 done nmcli -t general status >/dev/null 2>&1 || { log "ERREUR : NetworkManager ne répond pas"; exit 1; } rfkill unblock wifi 2>/dev/null || true nmcli radio wifi on 2>/dev/null || true nmcli device set "$IFACE" managed yes 2>/dev/null || true log "NetworkManager prêt" # 3. API Python (port 8080) + Apache (port 80) ------------------------------------ python3 /app/ap.py & API_PID=$! apache2ctl -D FOREGROUND & WEB_PID=$! trap 'log "Arrêt"; kill "$WEB_PID" "$API_PID" "$NM_PID" 2>/dev/null || true; exit 0' TERM INT log "Interface web : http://:1001/ (API directe : port 8080)" wait -n log "Un service s'est arrêté, fermeture du conteneur" kill "$WEB_PID" "$API_PID" "$NM_PID" 2>/dev/null || true exit 1