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

97 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## 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:
```python
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).