#!/usr/bin/env bash set -euo pipefail log() { echo "[ap-wifi] $*"; } # Port d'écoute d'Apache (défini dans docker-compose.yml) AP_WEB_PORT="${AP_WEB_PORT:-1001}" if ! [[ "$AP_WEB_PORT" =~ ^[0-9]+$ ]] || (( AP_WEB_PORT < 1 || AP_WEB_PORT > 65535 )); then log "ERREUR : AP_WEB_PORT invalide ('$AP_WEB_PORT'), attendu un nombre entre 1 et 65535" exit 1 fi export AP_WEB_PORT # 1. Interface Wi-Fi -------------------------------------------------- IFACE="${AP_INTERFACE:-}" log "Recherche de la carte Wi-Fi…" 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})"; 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 (socket Unix, aucun port) + Apache (port 1001) ------------------------------------ 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://:${AP_WEB_PORT}/" 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