Files
pve-update/README.md
T
2026-09-03 12:37:45 +02:00

3.7 KiB
Raw Blame History

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=YES muss 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

  1. Prüft per apt-get update / apt-get -s dist-upgrade, ob Updates verfügbar sind.
  2. Falls ja: Erstellt vorher ZFS-Snapshots der konfigurierten Datasets, führt apt-get dist-upgrade -y und apt-get autoremove --purge -y aus und aktualisiert den Bootloader (proxmox-boot-tool refresh).
  3. 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
    
  4. Vergleicht den aktiv laufenden Kernel (uname -r) mit dem tatsächlich installierten Kernel (nur dpkg-Status ii, nicht installierte oder entfernte Pakete werden ignoriert).
  5. Ist ein neuerer Kernel installiert als aktiv geladen, wird ein Reboot als erforderlich markiert.
  6. Bei REBOOT=YES wird vor dem Neustart zusätzlich proxmox-boot-tool status geprüft. Nur wenn der Bootloader-Status OK ist, wird der Reboot per shutdown -r +1 ausgelöst. Schlägt die Prüfung fehl (oder ist proxmox-boot-tool z. 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-tool müssen vorhanden sein).
  • Skript muss als root ausgeführt werden.
  • Python 3 (ohne zusätzliche Abhängigkeiten, nur Standardbibliothek).