diff --git a/apps/tesm-license/pyproject.toml b/apps/tesm-license/pyproject.toml index 7300639..021b3a2 100644 --- a/apps/tesm-license/pyproject.toml +++ b/apps/tesm-license/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-license" -version = "2.8.19" +version = "2.8.20" description = "TESM-Lizenzserver -- Kunden, Tickets, Lizenzen, Aktivierung" 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 diff --git a/packages/tesm-licensing-server/pyproject.toml b/packages/tesm-licensing-server/pyproject.toml index faf34e0..2ca67d1 100644 --- a/packages/tesm-licensing-server/pyproject.toml +++ b/packages/tesm-licensing-server/pyproject.toml @@ -4,10 +4,16 @@ build-backend = "setuptools.build_meta" [project] name = "tesm-licensing-server" -version = "2.7.7" +version = "2.7.8" description = "Serverhaelfte des TESM-Lizenzprotokolls: ausstellen, erneuern, antworten" requires-python = ">=3.11" -dependencies = ["tesm-licensing==2.7.7", "cryptography>=41"] +# ``==`` war eine Falle: die Serverhaelfte war damit an genau eine Fassung des +# Protokolls genagelt. Sobald tesm-licensing eine neue Nummer bekam, konnte pip +# beides nicht mehr zugleich aufloesen -- und der Lizenzserver blieb still auf +# dem alten Stand stehen, waehrend der Lauf "Fertig" meldete. Untergrenze statt +# Nagel: beide Haelften liegen ohnehin im selben Paket und werden zusammen +# ausgeliefert. +dependencies = ["tesm-licensing>=2.7.7", "cryptography>=41"] [tool.setuptools.packages.find] where = ["src"]