778d4436c3db0b40e327506c25a345b1bf0bc263
Proxmox Update Script
Automatisiertes Update-Skript für Proxmox VE mit Kernel-Erkennung, ZFS-Snapshots vor jedem Update, automatischer Bereinigung alter Kernel-Reste und optionalem Reboot.
Installation
nano /root/scripte/pve-update.py
chmod +x /root/scripte/pve-update.py
Testlauf
sudo /root/scripte/pve-update.py
Automatisiert mit Reboot-Option (per cron oder systemd-timer)
REBOOT=YES /root/scripte/pve-update.py
Wichtig:
REBOOT=YESmuss als Umgebungsvariable gesetzt werden, nicht als Kommandozeilenargument. In einer Cron-Zeile wird das automatisch korrekt übernommen (siehe Beispiel unten). Bei manuellem Aufruf in der Shell z. B. mit:sudo REBOOT=YES /root/scripte/pve-update.py
Funktionsweise
- Prüft per
apt-get update/apt-get -s dist-upgrade, ob Updates verfügbar sind. - Falls ja: Erstellt vorher ZFS-Snapshots der konfigurierten Datasets, führt
apt-get dist-upgrade -yundapt-get autoremove --purge -yaus und aktualisiert den Bootloader (proxmox-boot-tool refresh). - Entfernt anschließend (bzw. auch wenn keine Updates verfügbar waren) übrig gebliebene Konfigurationsreste alter, bereits deinstallierter Kernel-Pakete (dpkg-Status
rc) einzeln nacheinander – mit Fortschrittsanzeige im Log, z. B.:(3/13) Loesche Reste von: proxmox-kernel-7.0.2-4-pve-signed (3/13) Erledigt: proxmox-kernel-7.0.2-4-pve-signed - Vergleicht den aktiv laufenden Kernel (
uname -r) mit dem tatsächlich installierten Kernel (nurdpkg-Statusii, nicht installierte oder entfernte Pakete werden ignoriert). - Ist ein neuerer Kernel installiert als aktiv geladen, wird ein Reboot als erforderlich markiert.
- Bei
REBOOT=YESwird vor dem Neustart zusätzlichproxmox-boot-tool statusgeprüft. Nur wenn der Bootloader-Status OK ist, wird der Reboot pershutdown -r +1ausgelöst. Schlägt die Prüfung fehl (oder istproxmox-boot-toolz. B. wegen eines PATH-Problems nicht auffindbar), wird der Neustart abgebrochen und ein Fehler geloggt.
Konfiguration
Am Anfang des Skripts anpassbar:
ZFS_DATASETS = [
"rpool/ROOT/pve-1",
"rpool/pveconf"
]
SNAPSHOT_TAG = "pve-update-via-cron"
MAX_SNAPSHOTS = 5
LOGFILE = "/var/log/proxmox_update.log"
ZFS_DATASETS: Liste der Datasets, von denen vor jedem Update ein Snapshot erstellt wird.MAX_SNAPSHOTS: Anzahl der Snapshots pro Dataset, die aufbewahrt werden (ältere werden automatisch gelöscht).LOGFILE: Pfad zur Logdatei, in die zusätzlich zur Konsolenausgabe alles protokolliert wird.
Exit-Codes
| Code | Bedeutung |
|---|---|
| 0 | Erfolg (keine oder erfolgreiche Updates, kein Reboot nötig) |
| 1 | Neuer Kernel installiert → Reboot empfohlen/erforderlich |
| 2 | Fehler (Skript nicht als root ausgeführt) |
Cronjob (z. B. täglich 4 Uhr, mit automatischem Reboot bei neuem Kernel)
0 4 * * * REBOOT=YES /root/scripte/pve-update.py >/dev/null 2>&1
Nur prüfen/updaten, ohne automatischen Reboot:
0 4 * * * /root/scripte/pve-update.py >/dev/null 2>&1
Snapshots
Vor jedem Update werden automatisch ZFS-Snapshots der konfigurierten Datasets erstellt, z. B.:
rpool/ROOT/pve-1@pve-update-via-cron-2025-08-15_05-00-00
rpool/pveconf@pve-update-via-cron-2025-08-15_05-00-00
Es werden jeweils maximal MAX_SNAPSHOTS Snapshots pro Dataset aufbewahrt, ältere werden automatisch entfernt.
Voraussetzungen
- Proxmox VE mit ZFS-Root (
zfs,proxmox-boot-toolmüssen vorhanden sein). - Skript muss als
rootausgeführt werden. - Python 3 (ohne zusätzliche Abhängigkeiten, nur Standardbibliothek).
Languages
Python
100%