Files
2026-10-05 02:54:13 +02:00

79 lines
2.5 KiB
Bash

#!/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 <<EOF
[main]
plugins=keyfile
no-auto-default=*
[keyfile]
unmanaged-devices=*,except:interface-name:${IFACE}
[device]
wifi.scan-rand-mac-address=no
EOF
rm -f /run/dbus/pid /run/NetworkManager/*.pid
dbus-daemon --system --fork
NetworkManager --no-daemon &
NM_PID=$!
for _ in $(seq 1 30); do
nmcli -t general status >/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://<ip-de-la-machine>:${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