From d69d17799537f2d3921ca4ee4d88bfb16a72a85c Mon Sep 17 00:00:00 2001 From: Tim Eertmoed Date: Thu, 17 Sep 2026 09:39:01 +0200 Subject: [PATCH] Version 2.8.39: gescheitertes pip bricht ab, keine ==-Bindung mehr --- apps/tesm/pyproject.toml | 2 +- deploy/tesm-venv | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/tesm/pyproject.toml b/apps/tesm/pyproject.toml index 9e662b4..ac6466a 100644 --- a/apps/tesm/pyproject.toml +++ b/apps/tesm/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm" -version = "2.8.38" +version = "2.8.39" description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen" requires-python = ">=3.11" dependencies = [ diff --git a/deploy/tesm-venv b/deploy/tesm-venv index f7c513d..7f4c8c6 100644 --- a/deploy/tesm-venv +++ b/deploy/tesm-venv @@ -95,7 +95,19 @@ traegt() { } bestuecken() { - "$PY" -m pip install --quiet --upgrade pip setuptools wheel + # **Jeder pip-Lauf wird einzeln geprueft.** + # + # "set -e" hilft hier nicht: diese Funktion wird in einer Bedingung + # aufgerufen ("if ! bestuecken"), und darin ist errexit fuer den **ganzen** + # Rumpf abgeschaltet. Ein gescheitertes pip lief deshalb einfach weiter bis + # zum "return 0" -- der Lauf meldete "Fertig", und im venv lagen weiter die + # alten Pakete. + # + # Real passiert: der Lizenzserver blieb ueber drei Auslieferungen hinweg auf + # 2.8.16 stehen, weil eine Abhaengigkeit nicht aufloesbar war. Gesehen hat es + # niemand, denn die Fehlerzeile von pip ging im Lauf unter und der + # Ausstiegscode war 0. + "$PY" -m pip install --quiet --upgrade pip setuptools wheel || return 1 local pakete=("$ROOT/packages/tesm-licensing" "$ROOT/packages/tesm-core") if [[ "$APP" == "tesm-license" ]]; then [[ -d "$ROOT/packages/tesm-licensing-server" ]] || { @@ -104,9 +116,11 @@ bestuecken() { } pakete+=("$ROOT/packages/tesm-licensing-server") fi - "$PY" -m pip install --quiet "${pakete[@]}" "$ROOT/apps/$APP" gunicorn + "$PY" -m pip install --quiet "${pakete[@]}" "$ROOT/apps/$APP" gunicorn || return 1 # Die WebSocket-Bruecke braucht nur TESM (Terminal und Bildschirm). - [[ "$APP" == "tesm" ]] && "$PY" -m pip install --quiet flask-sock + if [[ "$APP" == "tesm" ]]; then + "$PY" -m pip install --quiet flask-sock || return 1 + fi return 0 } @@ -147,6 +161,13 @@ fi # und in einer Sekunde durch. chmod -R a+rX "$VENV" 2>/dev/null || true +# Vertrauen ist gut: nach dem Einspielen muss die Anwendung auch importierbar +# sein. Ohne diese Probe hiesse "Fertig" nur, dass pip nicht geschimpft hat. +if ! "$PY" -c "import $MODUL" >/dev/null 2>&1; then + melden "FEHLER" "Die Pakete fuer $NAME wurden eingespielt, aber '$MODUL' laesst sich nicht importieren." + exit 1 +fi + [[ "$MODUS" == "immer" ]] || melden "INFO" "Python-Umgebung von $NAME ist wieder vollstaendig." rm -f "$MERKER" 2>/dev/null || true exit 0