install.sh: laufende Web-Oberflaeche vor der Aktualisierung anhalten
Bisher warnte der Installer "Auf Port 8823 lauscht bereits etwas" - dabei war das der eigene, laufende Dienst. Der Hinweis war also falsch und verdeckte zugleich einen echten Fall: wenn wirklich etwas Fremdes den Port haelt. Jetzt wird unterschieden. Laeuft pvesnap-web, wird das als Normalfall einer Aktualisierung behandelt und der Dienst angehalten, bevor der Code unter ihm ausgetauscht wird - beim Stoppen bekommt er sein SIGTERM und haengt offene Snapshots sauber aus. Am Ende faehrt er wieder hoch. Haelt dagegen ein anderer Prozess den Port, steht die Warnung weiterhin da, jetzt mit der Angabe, wer es ist (ss -ltnp). Bewusst kein "pvesnap-explorer --cleanup" an der Stelle: das wuerde auch die Einbindungen einer Sitzung loesen, die jemand gerade in einem anderen Terminal offen hat. Geprueft: Installation ueber den laufenden Dienst hinweg (anhalten, ersetzen, wieder starten, HTTP 401 = Anmeldemaske), und mit einem fremden Prozess auf dem Port (Warnung samt PID, Dienste nicht gestartet). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f2de07ecfd
commit
a1076c6641
+29
-3
@@ -40,6 +40,7 @@ SRC="$(cd "$(dirname "$0")" && pwd)"
|
||||
START=1
|
||||
FORCE=0
|
||||
DEPS=1
|
||||
WEB_RUNNING=0
|
||||
WEB=0
|
||||
WEB_PORT=""
|
||||
WEB_BIND="0.0.0.0"
|
||||
@@ -80,9 +81,15 @@ if [ "$WEB" -eq 1 ]; then
|
||||
if [ "$WEB_PORT" -eq 8006 ]; then
|
||||
fail "Port 8006 gehoert dem Proxmox-Webinterface - bitte einen anderen waehlen."
|
||||
fi
|
||||
if ss -ltn 2>/dev/null | grep -qE "[:.]${WEB_PORT}[[:space:]]"; then
|
||||
warn "Auf Port ${WEB_PORT} lauscht bereits etwas - der Dienst wird sich "
|
||||
warn "moeglicherweise nicht starten lassen."
|
||||
# Laeuft unsere eigene Web-Oberflaeche schon, gehoert ihr der Port auch -
|
||||
# das ist kein Konflikt, sondern der Normalfall bei einer Aktualisierung.
|
||||
# Sie wird weiter unten gestoppt, bevor der Code ausgetauscht wird.
|
||||
if systemctl is-active --quiet pvesnap-web.service 2>/dev/null; then
|
||||
WEB_RUNNING=1
|
||||
elif ss -ltn 2>/dev/null | grep -qE "[:.]${WEB_PORT}[[:space:]]"; then
|
||||
warn "Auf Port ${WEB_PORT} lauscht bereits etwas anderes - der Dienst"
|
||||
warn "wird sich moeglicherweise nicht starten lassen."
|
||||
ss -ltnp 2>/dev/null | grep -E "[:.]${WEB_PORT}[[:space:]]" | sed 's/^/ /' >&2 || true
|
||||
fi
|
||||
[ -n "$WEB_BIND" ] || fail "--bind erwartet eine Adresse"
|
||||
elif [ -n "$WEB_PORT" ]; then
|
||||
@@ -147,6 +154,25 @@ if [ "$DEPS" -eq 1 ]; then
|
||||
|
||||
fi
|
||||
|
||||
# --- Laufendes anhalten -----------------------------------------------
|
||||
# Der Code wird gleich ersetzt. Die Web-Oberflaeche kann dabei noch Snapshots
|
||||
# eingebunden haben - sie bekommt beim Stoppen ihr SIGTERM und haengt sauber
|
||||
# aus. Wuerde sie einfach weiterlaufen, blieben rbd-Zuordnungen und
|
||||
# Mountpunkte einer Fassung stehen, die es nicht mehr gibt.
|
||||
if [ "$WEB_RUNNING" -eq 1 ]; then
|
||||
info "Web-Oberflaeche laeuft - halte sie fuer die Aktualisierung an"
|
||||
if systemctl stop pvesnap-web.service; then
|
||||
info " angehalten, Port ${WEB_PORT} ist frei"
|
||||
else
|
||||
warn " liess sich nicht anhalten - bitte pruefen:"
|
||||
warn " systemctl status pvesnap-web"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Bewusst kein "pvesnap-explorer --cleanup" an dieser Stelle: das wuerde auch
|
||||
# die Einbindungen einer Sitzung loesen, die jemand gerade in einem anderen
|
||||
# Terminal offen hat. Wer nach einem Absturz aufraeumen will, ruft es selbst.
|
||||
|
||||
# --- Programm ---------------------------------------------------------
|
||||
info "Installiere Programm nach ${LIB_DIR}"
|
||||
rm -rf "${LIB_DIR}/pvesnap"
|
||||
|
||||
Reference in New Issue
Block a user