2025-08-23 11:52:26 +02:00

130 lines
6.0 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.

# PBS Backup Client Script
Dieses Bash-Script erstellt hostbasierte Datei-Backups (pxar) zu einem Proxmox Backup Server (PBS) und benachrichtigt dich bei Erfolg oder Fehler optional per E-Mail sowie via Ntfy. Es ist für den automatisierten Betrieb (z. B. Cron) ausgelegt und nutzt eine ausgelagerte Konfigurationsdatei.
## Features
- pxar-Backups definierter Verzeichnisse zu PBS
- Ausgelagerte Konfiguration (`pbs-backup.v2.conf`) Script bleibt unverändert
- Benachrichtigungen: E-Mail (z. B. via msmtp/mailx) und Ntfy (mit optionalem Bearer-Token)
- Konsolen- und Datei-Logging mit Timestamps
- Locking via `flock`, saubere Exit-Codes, robustes Fehlerhandling, `--dry-run`
- Healthcheck-OK-Datei für externes Monitoring (z. B. PRTG)
- TLS-Fingerprint nur bei selbstsigniertem PBS-Zertifikat notwendig (optional)
## Konfiguration
Alle Einstellungen liegen **ausschließlich** in der Konfigurationsdatei. Standard: `pbs-backup.v2.conf` im selben Verzeichnis wie das Script; alternativ den Pfad per Umgebungsvariable im Script setzen:
`CONFIG_FILE=/pfad/zur/pbs-backup.v2.conf`.
**PBS-Variablen:**
- `PBS_REPOSITORY` (Pflicht): Repository-String im Format
ohne Port, wenn PBS unter dem Standard-Port erreichbar ist:
`root@pam!<apiuser>@<pbs-host>:<datastore>`
mit Port (z. B. öffentlich via HTTPS):
`root@pam!<apiuser>@<pbs-host>:<port>:<datastore>`
Beispiel:
`root@pam!vps-backup@pbs.domain.com:443:backup2`
Hinweis: Wenn der PBS aus dem Internet über einen anderen Port als den `8007` erreichbar ist, **muss** der Port angegeben werden.
- `PBS_FINGERPRINT` (optional): Nur erforderlich bei selbstsigniertem Zertifikat; sonst **leer lassen**.
- `PBS_API` (Pflicht für Auth): API-Key für die Authentifizierung. Das Script setzt ihn intern nur im Subshell als `PBS_PASSWORD`, damit er nicht ins globale Environment oder in Logs gelangt.
**Weitere Optionen (Auszug):**
- `INCLUDE_DIRS`: Array der zu sichernden Verzeichnisse.
- `LOGFILE`, `LOCKFILE`: Pfade für Log- und Lock-Datei.
- Mail: `MAIL_ENABLED`, `MAIL_CMD`, `MAIL_RECIPIENTS`, `MAIL_NOTIFY_ON_SUCCESS`, `MAIL_SUBJECT_SUCCESS`, `MAIL_SUBJECT_FAILURE`.
- Ntfy: `NTFY_ENABLED`, `NTFY_TOPIC_URL`, `NTFY_AUTH_TOKEN`, `NTFY_NOTIFY_ON_SUCCESS`, `NTFY_TITLE_SUCCESS`, `NTFY_TITLE_FAILURE`, `NTFY_PRIORITY_SUCCESS`, `NTFY_PRIORITY_FAILURE`, `NTFY_TAIL_LINES`.
- Monitoring: `HEALTHCHECK_OK_FILE` (wird bei Erfolg geschrieben, bei Fehler entfernt).
> Abhängigkeiten: `proxmox-backup-client`, für Ntfy `curl`, für E-Mail z. B. `mail` (msmtp/mailx).
> Eine Anleitung zur Installation von `msmtp` gibt es hier:
> https://www.cleveradmin.de/blog/2024/12/linux-einfach-emails-versenden-mit-msmtp
## Ausführung
Das Script liest automatisch `pbs-backup.v2.conf` aus dem Script-Verzeichnis. Einen anderen Pfad setzt du mit `CONFIG_FILE`.
**Parameter:**
- `--dry-run` zeigt an, was ausgeführt würde, ohne Backup zu übertragen
- `--no-mail` E-Mail-Benachrichtigung nur für diesen Lauf deaktivieren
- `--no-ntfy` Ntfy-Benachrichtigung nur für diesen Lauf deaktivieren
- `-q` / `--quiet` reduzierte Ausgabe (nur WARN/ERROR)
- `-h` / `--help` Hilfe anzeigen
**Beispiele:**
- Standardlauf mit Konfiguration im Script-Verzeichnis:
`./pbs-backup.v2.sh`
- Anderer Config-Pfad:
`CONFIG_FILE=/etc/pbs-backup.v2.conf`
- Testlauf ohne Upload:
`./pbs-backup.v2.sh --dry-run`
- Ruhige Ausgabe und ohne Ntfy:
`./pbs-backup.v2.sh -q --no-ntfy`
---
## Abhängigkeiten & Installation (x86_64, Ubuntu 22.04/24.04)
### Repository hinzufügen und installieren
PBS Backup Client Repository auf der zu sichernden Maschine aufnehmen:
~~~bash
sudo nano /etc/apt/sources.list.d/pbs-client.list
~~~
Folgendes einfügen (Debian Bookworm Repo):
~~~text
deb http://download.proxmox.com/debian/pbs-client bookworm main
~~~
Schlüssel hinzufügen (gilt für Debian 12-basierte Systeme):
~~~bash
sudo wget https://enterprise.proxmox.com/debian/proxmox-release-bookworm.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg
~~~
Danach Update und Installation:
~~~bash
sudo apt update
sudo apt install proxmox-backup-client
~~~
### Fix für Ubuntu 22.04/24.04 (libzstd1)
Auf Ubuntu 22.04 (und ggf. 24.04) kann `libzstd1 (>= 1.5.2)` benötigt werden, während ggf. nur `1.4.8+dfsg-3build1` vorhanden ist. Installiere daher eine passende Version:
~~~bash
wget https://dl.techniverse.net/downloads/linux/deb/x86_64/libzstd1_1.5.6_dfsg-1_amd64.deb
sudo dpkg -i libzstd1_1.5.6_dfsg-1_amd64.deb
~~~
> Hinweis: Prüfe nach der Installation mit `apt -f install`, ob alle Abhängigkeiten sauber erfüllt sind.
---
## Installation auf ARM (aarch64)
Für ARM-Server (arm64) das Paket manuell installieren:
~~~bash
wget https://dl.techniverse.net/downloads/linux/deb/arm64/proxmox-backup-client_3.3.0-2_arm64.deb
sudo apt install ./proxmox-backup-client_3.3.0-2_arm64.deb
~~~
---
## Rechte & API-Key im PBS
Wie man Berechtigungen setzt und einen API-Key im PBS erzeugt, ist in der offiziellen PBS-Dokumentation beschrieben:
https://pbs.proxmox.com/docs/user-management.html
---
## 💬 Support & Community
Du hast Fragen, brauchst Unterstützung bei der Einrichtung oder möchtest dich einfach mit anderen austauschen, die ähnliche Projekte betreiben? Dann schau gerne in unserer Techniverse Community vorbei:
👉 **Matrix-Raum:** [#community:techniverse.net](https://matrix.to/#/#community:techniverse.net)
Wir freuen uns auf deinen Besuch und helfen dir gerne weiter!
<p align="center">
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
</p>
<p align="center">
<img src="https://assets.techniverse.net/f1/logos/small/license.png" alt="License" width="15" height="15"> <a href="./pbs-backup-client-script/src/branch/main/LICENSE">License</a> | <img src="https://assets.techniverse.net/f1/logos/small/matrix2.svg" alt="Matrix" width="15" height="15"> <a href="https://matrix.to/#/#community:techniverse.net">Matrix</a> | <img src="https://assets.techniverse.net/f1/logos/small/mastodon2.svg" alt="Matrix" width="15" height="15"> <a href="https://social.techniverse.net/@donnerwolke">Mastodon</a>
</p>