APmanageur Wi-Fi V1.0 : conteneur Debian + Apache
This commit is contained in:
1 parent
697d1d253c
commit
3b988d0f57
2 files changed
+46
-4
No files matched your search
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Déplace la carte Wi-Fi de l'hôte dans le conteneur ap-wifi.
|
||||||
|
# Usage : sudo ./attach-wifi.sh (carte détectée automatiquement)
|
||||||
|
# ou : sudo ./attach-wifi.sh wlan0 (pour en imposer une)
|
||||||
|
# À relancer après chaque (re)démarrage du conteneur : la carte revient
|
||||||
|
# automatiquement sur l'hôte quand le conteneur s'arrête.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
IFACE="${1:-${AP_INTERFACE:-}}"
|
||||||
|
CONTAINER="${CONTAINER:-ap-wifi}"
|
||||||
|
|
||||||
|
[[ $EUID -eq 0 ]] || { echo "Lancez en root : sudo $0 wlan0"; exit 1; }
|
||||||
|
# Sans argument, reprendre AP_INTERFACE écrit dans le compose (lu depuis le conteneur)
|
||||||
|
[[ -n "$IFACE" ]] || IFACE="$(docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' "$CONTAINER" 2>/dev/null | sed -n 's/^AP_INTERFACE=//p')"
|
||||||
|
|
||||||
|
if [[ -z "$IFACE" ]]; then
|
||||||
|
mapfile -t HOST_IFACES < <(iw dev 2>/dev/null | awk '$1=="Interface"{print $2}')
|
||||||
|
[[ ${#HOST_IFACES[@]} -gt 0 ]] || { echo "Aucune carte Wi-Fi détectée sur l'hôte (voir : iw dev)."; exit 1; }
|
||||||
|
IFACE="${HOST_IFACES[0]}"
|
||||||
|
for d in "${HOST_IFACES[@]}"; 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
|
||||||
|
echo "Carte détectée automatiquement : $IFACE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
PID="$(docker inspect -f '{{.State.Pid}}' "$CONTAINER" 2>/dev/null || echo 0)"
|
||||||
|
[[ "$PID" != "0" ]] || { echo "Le conteneur $CONTAINER n'est pas démarré."; exit 1; }
|
||||||
|
|
||||||
|
PHY="$(iw dev "$IFACE" info 2>/dev/null | awk '/wiphy/{print "phy"$2}')"
|
||||||
|
[[ -n "$PHY" ]] || { echo "Interface $IFACE introuvable sur l'hôte (voir : iw dev)."; exit 1; }
|
||||||
|
|
||||||
|
# L'hôte ne doit plus gérer la carte
|
||||||
|
nmcli device set "$IFACE" managed no 2>/dev/null || true
|
||||||
|
|
||||||
|
iw phy "$PHY" set netns "$PID"
|
||||||
|
echo "Carte $IFACE ($PHY) injectée dans $CONTAINER. Suivez le démarrage : docker logs -f $CONTAINER"
|
||||||
+9
-4
@@ -5,18 +5,23 @@ log() { echo "[ap-wifi] $*"; }
|
|||||||
|
|
||||||
# 1. Interface Wi-Fi --------------------------------------------------
|
# 1. Interface Wi-Fi --------------------------------------------------
|
||||||
IFACE="${AP_INTERFACE:-}"
|
IFACE="${AP_INTERFACE:-}"
|
||||||
log "Attente de la carte Wi-Fi ${IFACE}"
|
log "Attente de la carte Wi-Fi (à injecter avec : sudo ./attach-wifi.sh)…"
|
||||||
FOUND=()
|
FOUND=()
|
||||||
for _ in $(seq 1 180); do
|
for _ in $(seq 1 180); do
|
||||||
mapfile -t FOUND < <(iw dev 2>/dev/null | awk '$1=="Interface"{print $2}')
|
mapfile -t FOUND < <(iw dev 2>/dev/null | awk '$1=="Interface"{print $2}')
|
||||||
if [[ -n "$IFACE" ]]; then
|
if [[ -n "$IFACE" ]]; then
|
||||||
printf '%s\n' "${FOUND[@]:-}" | grep -qx "$IFACE" && break
|
printf '%s\n' "${FOUND[@]:-}" | grep -qx "$IFACE" && break
|
||||||
elif [[ ${#FOUND[@]} -eq 1 ]]; then
|
elif [[ ${#FOUND[@]} -ge 1 ]]; then
|
||||||
IFACE="${FOUND[0]}"; break
|
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
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
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; }
|
[[ -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"
|
export AP_INTERFACE="$IFACE"
|
||||||
log "Interface utilisée : $IFACE"
|
log "Interface utilisée : $IFACE"
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user