51 lines
2.0 KiB
Bash
51 lines
2.0 KiB
Bash
#!/bin/sh
|
|
# Der Prozess 1 des Tunnel-Containers.
|
|
#
|
|
# Er zieht wg0 hoch und tut danach nichts mehr. Genau das ist die Aufgabe: der
|
|
# Netz-Namensraum dieses Containers ist das, worin wg0, der Provisionierungs-
|
|
# Arbeiter, die Terminal-Bruecke, der interne DNS und das interne Gateway
|
|
# zusammen leben. Er darf nur enden, wenn Docker ihn beendet.
|
|
#
|
|
# Vorher stand hier — im Container des Arbeiters — `exec php artisan queue:work`.
|
|
# Damit hing der Namensraum am Leben eines PHP-Prozesses: ein Zeitueberlauf, ein
|
|
# fataler Fehler, ein Speicherlimit, und jede WireGuard-Sitzung riss ab.
|
|
set -u
|
|
|
|
CONF=/etc/wireguard/wg0.conf
|
|
|
|
# Ohne Konfiguration kein Tunnel — aber sehr wohl ein laufender Container. Sonst
|
|
# koennte eine Installation, in der der Betreiber den Tunnel noch gar nicht
|
|
# eingerichtet hat, den halben Stapel nicht starten: vier Dienste haengen an
|
|
# diesem Namensraum und kommen ohne ihn nicht hoch.
|
|
if [ -f "$CONF" ]; then
|
|
# `|| true`: liegt das Interface aus einem frueheren Leben noch da, ist das
|
|
# kein Grund, den Container sterben zu lassen. Die Zeile darunter sagt in
|
|
# jedem Fall, was Sache ist.
|
|
wg-quick up wg0 || true
|
|
|
|
if wg show wg0 >/dev/null 2>&1; then
|
|
echo "[vpn-hub] wg0 steht — $(wg show wg0 peers | grep -c .) Zugaenge geladen"
|
|
else
|
|
echo "[vpn-hub] WARNUNG: wg0 kam nicht hoch. $CONF pruefen." >&2
|
|
fi
|
|
else
|
|
echo "[vpn-hub] Kein $CONF — der Tunnel ist auf diesem Server noch nicht eingerichtet."
|
|
fi
|
|
|
|
# Sauber abbauen, wenn Docker den Container beendet. Ohne das laeuft `docker
|
|
# compose stop` in seine Zeitueberschreitung und schlaegt mit SIGKILL zu.
|
|
stop() {
|
|
echo "[vpn-hub] Beende — wg0 wird abgebaut."
|
|
wg-quick down wg0 2>/dev/null || true
|
|
exit 0
|
|
}
|
|
trap stop TERM INT
|
|
|
|
# Warten, bis jemand kommt. `sleep` im Hintergrund plus `wait`, nicht `sleep`
|
|
# im Vordergrund: ein Signal erreicht die Shell nur, wenn sie gerade auf `wait`
|
|
# steht — sonst kaeme das `trap` oben erst nach Ablauf des Schlafs zum Zug.
|
|
while true; do
|
|
sleep 86400 &
|
|
wait $!
|
|
done
|