diff --git a/backend/services/maintenance.py b/backend/services/maintenance.py index 98f44d1..b00aed9 100644 --- a/backend/services/maintenance.py +++ b/backend/services/maintenance.py @@ -66,8 +66,10 @@ def _ram_gb() -> float: def _os_upgradable() -> int: try: + # LC_ALL=C erzwingt englische apt-Ausgabe ("[upgradable from: ...]") — sonst zählt + # grep auf einer deutschen Box ("[aktualisierbar von:]") nichts und meldet faelschlich 0. out = subprocess.run( - ["bash", "-c", "apt list --upgradable 2>/dev/null | grep -c upgradable || true"], + ["bash", "-c", "LC_ALL=C apt list --upgradable 2>/dev/null | grep -c upgradable || true"], capture_output=True, text=True, timeout=10) return int((out.stdout or "0").strip() or 0) except Exception: @@ -296,7 +298,9 @@ def os_update_details() -> dict: """Liste der aktualisierbaren apt-Pakete (Name, installiert → Kandidat).""" out_pkgs: list[dict] = [] try: - out = subprocess.run(["bash", "-c", "apt list --upgradable 2>/dev/null"], + # LC_ALL=C → englische Ausgabe, damit der Regex "[upgradable from: ...]" greift + # (deutsche Box meldet sonst "[aktualisierbar von:]" und die Liste bliebe leer). + out = subprocess.run(["bash", "-c", "LC_ALL=C apt list --upgradable 2>/dev/null"], capture_output=True, text=True, timeout=20) for line in (out.stdout or "").splitlines(): # Format: name/repo neue_version arch [upgradable from: alte_version]