diff --git a/srv/tesm/app.py b/srv/tesm/app.py index 57243ff..6a3ddc6 100644 --- a/srv/tesm/app.py +++ b/srv/tesm/app.py @@ -509,6 +509,30 @@ def inject_current_year(): return {"current_year": datetime.now().year} +def _read_tesm_version(): + """Liest die Versionsnummer aus VERSION (im Repo neben app.py, wird von + install.sh 1:1 nach /srv/tesm mitkopiert). Fehlt die Datei (z.B. lokale + Entwicklung ohne vollständigen Checkout), lieber "unbekannt" anzeigen + als die App deswegen abstürzen zu lassen.""" + try: + with open(os.path.join(BASE_DIR, "VERSION"), "r", encoding="utf-8") as f: + return f.read().strip() or "unbekannt" + except OSError: + return "unbekannt" + + +TESM_VERSION = _read_tesm_version() + + +@app.context_processor +def inject_tesm_version(): + """Für die Versionsanzeige im Sidebar-Footer (siehe base.html) — beim + Modulimport einmalig gelesen (Neustart des Dienstes nach einem Update + erforderlich, damit eine neue Versionsnummer sichtbar wird — geschieht + ohnehin bei jedem install.sh/update.sh-Lauf).""" + return {"tesm_version": TESM_VERSION} + + @app.context_processor def inject_nav(): if not current_user.is_authenticated: @@ -6089,11 +6113,24 @@ def _apt_upgrade_command(): DEBIAN_FRONTEND=noninteractive plus --force-confdef/--force-confold verhindern, dass ein Paket-Postinst-Skript auf eine Konfig-Datei- Rückfrage wartet, die nie kommt (das Kommando würde sonst ohne PTY - unbeaufsichtigt hängen bleiben, bis der Timeout zuschlägt).""" + unbeaufsichtigt hängen bleiben, bis der Timeout zuschlägt). + + MODULES=most (initramfs-tools) wird nur für diesen einen Aufruf per + Umgebungsvariable gesetzt, nicht dauerhaft in /etc/initramfs-tools/ + initramfs.conf geändert -- falls das Update einen neuen Kernel mitbringt + und dabei ein initramfs neu gebaut wird, landen so vorsorglich ALLE + verfügbaren Treiber darin (statt nur die per "dep" erkannten), damit das + Gerät nach einem Kernel-Wechsel zuverlässig bootet, auch wenn sich z.B. + Storage-/Netzwerk-Hardware nicht sauber per Abhängigkeitserkennung + ermitteln lässt. Am Ende noch "apt-get autoremove"/"apt-get clean", damit + nicht mehr benötigte Kernel/Pakete sowie der heruntergeladene .deb-Cache + nicht auf jedem Client unbegrenzt Platz belegen.""" inner = ( - "env DEBIAN_FRONTEND=noninteractive apt-get update && " - 'env DEBIAN_FRONTEND=noninteractive apt-get -y ' - '-o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade' + "env DEBIAN_FRONTEND=noninteractive MODULES=most apt-get update && " + 'env DEBIAN_FRONTEND=noninteractive MODULES=most apt-get -y ' + '-o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade && ' + "env DEBIAN_FRONTEND=noninteractive apt-get -y autoremove && " + "apt-get clean" ) return f"sudo -S -p '' bash -c {shlex.quote(inner)}"