Compare commits

...

6 Commits

Author SHA1 Message Date
d3417b0431 Merge pull request 'release-2' (#2) from release-2 into main
Reviewed-on: #2
2025-08-23 10:01:21 +00:00
scriptos
b3e0a9fc68 Cron hinzugefuegt 2025-08-23 11:59:33 +02:00
scriptos
05287cce70 Dokumentation optimiert 2025-08-23 11:52:26 +02:00
scriptos
9b508ec1c5 header angepasst 2025-08-23 11:46:26 +02:00
761a455ec5 Merge pull request 'Dokumentation gemacht.' (#1) from release-1 into main
Reviewed-on: #1
2025-08-22 23:27:29 +00:00
scriptos
cb1bb90ca9 Dokumentation gemacht. 2025-08-23 01:26:06 +02:00
3 changed files with 166 additions and 8 deletions

View File

@@ -1,10 +1,10 @@
#!/bin/bash
# Script Name: pbs-backup.v1.sh
# Beschreibung: Erstellt Backups auf einem PBS
# Aufruf: ./pbs-backup-script.v1_msmtp.sh
# Aufruf: ./pbs-backup-script.v1.sh
# Autor: Patrick Asmus
# Web: https://www.techniverse.net
# Git-Reposit.: ssh://git@git.techniverse.net:10022/internal-infrastructure/pbs-backup-scripts.git
# Git-Reposit.: https://git.techniverse.net/scriptos/pbs-backup-client-script.git
# Version: 1.1
# Datum: 13.09.2024
# Modifikation: added email support

160
README.md
View File

@@ -1,5 +1,163 @@
### Doku folgt.
# 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`
## Cronjob
Das Script besitzt eigenes Locking (`flock`) und ist damit für periodische Ausführung per Cron geeignet. Für Backups von Pfaden wie `/root` oder `/var/lib/docker/volumes/` sollte der Cronjob als **root** laufen.
### Variante A: `/etc/crontab` (empfohlen)
~~~cron
# /etc/crontab
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
# Täglich um 02:30 Uhr ausführen
30 2 * * * root CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh >> /var/log/pbs-backup.cron.log 2>&1
# Optional schonender (CPU/IO) und mit reduzierter Ausgabe:
#30 2 * * * root ionice -c2 -n7 nice -n 10 CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh -q >> /var/log/pbs-backup.cron.log 2>&1
~~~
### Variante B: Benutzer-Crontab (nur wenn alle Pfade lesbar sind)
~~~bash
crontab -e
~~~
~~~cron
# Täglich um 02:30 Uhr (User-Crontab)
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=""
30 2 * * * CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh >> /var/log/pbs-backup.cron.log 2>&1
~~~
**Hinweise**
- Verwende **absolute Pfade** zum Script und zur Config.
- Die Script-Ausgabe landet zusätzlich im in der Config definierten `LOGFILE`. Der Cron-Redirect (`>> /var/log/pbs-backup.cron.log 2>&1`) ist optional als zusätzlicher Laufverlauf.
- Erst mit `--dry-run` testen:
~~~bash
CONFIG_FILE=/etc/pbs-backup.v2.conf /usr/local/sbin/pbs-backup.v2.sh --dry-run
~~~
---
## 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">

View File

@@ -7,11 +7,11 @@
# Git-Reposit.: https://git.techniverse.net/scriptos/pbs-backup-client-script.git
# Version: 2.0
# Datum: 22.08.2025
# Modifikation: - Ntfy-Support mit Auth
# - Logging zu Datei & Terminal (mit Timestamps)
# - Locking, Exit-Codes, externe Config, Dry-Run, robuste Fehlerbehandlung
# - Konfiguration ausgelagertin pbs-backup.v2.conf
# - Backup-OK-Datei für externes Monitoring
# Modifikation: - Ntfy-Support mit Auth implementiert
# - Logging und Ausgabe erweitert
# - Locking, Exit-Codes, externe Config, Dry-Run, robuste Fehlerbehandlung hinzugefügt
# - Konfiguration ausgelagertin eigene Konfigurationsdatei
# - Backup-OK-Datei für externes Monitoring implementiert
set -Eeuo pipefail
umask 077