#!/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