[[Moni's Elektro Base|← Zurück zur Homepage]]
---
tags:
- proxmox
- automation
- bash
- homeassistant
- linux
created: 2026-05-19
---
# pve-update.sh – Proxmox Update Script
## Übersicht
| Eigenschaft | Wert |
| ----------- | ------------------------------------ |
| Pfad | `/usr/local/sbin/pve-update.sh` |
| Aufruf | `bash /usr/local/sbin/pve-update.sh` |
| Log-Datei | `/var/log/pve-update.log` |
| E-Mail | `
[email protected]` |
| HA VM-ID | `100` |
## Beschreibung
Vollständiges Update-Script für Proxmox Host, LXC Container und Home Assistant.
Wird als Cron-Job oder manuell ausgeführt und sendet nach Abschluss einen
E-Mail-Report.
## Ablauf
### 1. Proxmox Host
- Führt `apt-get update` aus
- Führt `apt-get dist-upgrade -y` aus
- Meldet Anzahl der aktualisierten Pakete
### 2. LXC Container (nur laufende)
- Iteriert über alle laufenden Container via `pct list`
- Führt in jedem Container `apt-get update && apt-get upgrade -y` aus
### 3. Home Assistant (VM 100)
- Prüft ob die VM läuft
- Aktualisiert die Komponenten `core`, `os` und `supervisor`
- Verwendet `qm guest exec` + `ha <component> update`
### 4. Report & E-Mail
- Erstellt Zusammenfassung mit Start-/Endzeit und Fehleranzahl
- Speichert Report nach `/tmp/pve-update-report.txt`
- Sendet Report per E-Mail (benötigt `mailutils`)
## Source Code
```bash
#!/bin/bash
# /usr/local/sbin/pve-update.sh
# Proxmox + LXC + Home Assistant vollstaendiges Update-Skript
# Aufruf: bash /usr/local/sbin/pve-update.sh
LOG_FILE="/var/log/pve-update.log"
EMAIL="
[email protected]"
HA_VM_ID=100
START_TIME=$(date '+%Y-%m-%d %H:%M:%S')
SUMMARY=()
ERRORS=0
exec > >(tee -a "$LOG_FILE") 2>&1
line() { printf '%.0s-' {1..60}; echo; }
section() { echo; line; echo " $1"; line; }
log() { echo "[$(date '+%H:%M:%S')] $*"; }
ok() { log "OK $*"; SUMMARY+=("OK $*"); }
fail() { log "ERR $*"; SUMMARY+=("ERR $*"); ((ERRORS++)) || true; }
echo ""
echo "======================================================"
printf " PVE-Update %s\n" "$(date '+%Y-%m-%d %H:%M')"
echo "======================================================"
# 1. Proxmox Host
section "1. Proxmox Host (apt dist-upgrade)"
log "apt-get update..."
if apt-get update -qq; then
UPGRADABLE=$(apt list --upgradable 2>/dev/null | grep -vc "^Listing" || true)
log "apt-get dist-upgrade ($UPGRADABLE Pakete)..."
if apt-get dist-upgrade -y; then
ok "Proxmox Host: $UPGRADABLE Pakete aktualisiert"
else
fail "Proxmox Host: dist-upgrade fehlgeschlagen"
fi
else
fail "Proxmox Host: apt-get update fehlgeschlagen"
fi
# 2. LXC Container
section "2. LXC Container (laufend)"
while read -r CTID CTSTATUS CTNAME; do
[ "$CTSTATUS" != "running" ] && continue
log "Container $CTID ($CTNAME): update..."
if pct exec "$CTID" -- bash -c "apt-get update -qq && apt-get upgrade -y" 2>&1; then
ok "LXC $CTID ($CTNAME): aktualisiert"
else
fail "LXC $CTID ($CTNAME): Fehler beim Update"
fi
done < <(pct list | awk 'NR>1 {print $1, $2, $3}')
# 3. Home Assistant
section "3. Home Assistant (VM $HA_VM_ID)"
VM_STATUS=$(qm status "$HA_VM_ID" 2>/dev/null | awk '{print $2}')
if [ "$VM_STATUS" != "running" ]; then
fail "VM $HA_VM_ID laeuft nicht (Status: ${VM_STATUS:-unbekannt})"
else
for COMPONENT in core os supervisor; do
log "HA $COMPONENT: Update-Check..."
INFO=$(qm guest exec "$HA_VM_ID" -- ha "$COMPONENT" info 2>/dev/null)
if echo "$INFO" | grep -q 'update_available: true'; then
log "HA $COMPONENT: Update gefunden, starte Update..."
if qm guest exec "$HA_VM_ID" -- ha "$COMPONENT" update 2>&1; then
ok "HA $COMPONENT: aktualisiert"
else
fail "HA $COMPONENT: Update fehlgeschlagen"
fi
else
ok "HA $COMPONENT: bereits aktuell"
fi
done
fi
# 4. Report
section "4. Zusammenfassung"
END_TIME=$(date '+%Y-%m-%d %H:%M:%S')
{
printf "PVE-Update Report – %s\n" "$(hostname)"
printf "Gestartet : %s\n" "$START_TIME"
printf "Beendet : %s\n" "$END_TIME"
printf "Fehler : %d\n\n" "$ERRORS"
printf -- "---\n"
for ENTRY in "${SUMMARY[@]}"; do printf "%s\n" "$ENTRY"; done
printf "\nLog: %s\n" "$LOG_FILE"
} | tee /tmp/pve-update-report.txt
SUBJECT="[PVE] Update $([ "$ERRORS" -eq 0 ] && echo 'OK' || echo 'FEHLER') – $(date '+%Y-%m-%d')"
if command -v mail &>/dev/null; then
mail -s "$SUBJECT" "$EMAIL" < /tmp/pve-update-report.txt \
&& log "E-Mail gesendet an $EMAIL" \
|| log "WARNUNG: E-Mail fehlgeschlagen"
else
log "WARNUNG: 'mail' nicht installiert – kein E-Mail-Versand (apt install mailutils)"
fi
echo ""
[ "$ERRORS" -eq 0 ] \
&& echo ">>> Update erfolgreich abgeschlossen." \
|| echo ">>> Update mit $ERRORS Fehler(n) abgeschlossen – Log: $LOG_FILE"
echo ""
```
---
## Letzter Lauf
| | |
|---|---|
| Datum | 2026-05-19 |
| Start | 10:13:22 |
| Ende | 10:15:01 |
| Fehler | 0 |
| Host-Pakete | 9 aktualisiert |
| LXC 104 (tor-snowflake) | aktualisiert |
| HA core / os / supervisor | bereits aktuell |
## Abhängigkeiten
- `apt` (Debian/Proxmox)
- `pct` (Proxmox LXC CLI)
- `qm` (Proxmox QEMU CLI)
- `mailutils` (für E-Mail-Versand)
---
[[Anleitungen/Impressum|Impressum]] | [[Anleitungen/Datenschutzerklärung|Datenschutz]]