#!/usr/bin/env bash set -Eeuo pipefail BASE_DIR="/root/backup-config" BACKUP_DIR="$BASE_DIR/backup" BACKUP_SCRIPT="$BASE_DIR/backup-config.sh" LOGFILE="/var/log/backup-config-run.log" BRANCH="DockerDMZ_Configfiles" log() { printf '%s %s\n' "$(date '+%F %T')" "$1" | tee -a "$LOGFILE" } main() { if [[ ! -x "$BACKUP_SCRIPT" ]]; then echo "Backup-Skript nicht gefunden oder nicht ausführbar: $BACKUP_SCRIPT" >&2 exit 1 fi mkdir -p "$BACKUP_DIR" log "INFO: Starte Backup" "$BACKUP_SCRIPT" log "INFO: Backup beendet" cd "$BACKUP_DIR" if ! command -v git >/dev/null 2>&1; then log "ERROR: Git ist nicht installiert" exit 1 fi if [[ ! -d .git ]]; then log "INFO: Git-Repository wird initialisiert" git init fi # Branch aktivieren oder anlegen if git show-ref --verify --quiet "refs/heads/$BRANCH"; then git checkout "$BRANCH" >/dev/null 2>&1 log "INFO: Git-Branch aktiviert: $BRANCH" else if git rev-parse --verify HEAD >/dev/null 2>&1; then git checkout -b "$BRANCH" >/dev/null 2>&1 else git checkout --orphan "$BRANCH" >/dev/null 2>&1 fi log "INFO: Git-Branch erstellt: $BRANCH" fi git add -A if git diff --cached --quiet; then log "INFO: Keine neuen Dateiinhalte für Commit" else git commit -m "Config-Backup $(hostname) $(date '+%F %T')" log "INFO: Commit erstellt" fi if ! git remote get-url origin >/dev/null 2>&1; then log "WARN: Kein Remote 'origin' konfiguriert, Push übersprungen" exit 0 fi # Remote-Infos aktualisieren git fetch origin "$BRANCH" >/dev/null 2>&1 || true # Falls der Remote-Branch noch nicht existiert if ! git ls-remote --exit-code --heads origin "$BRANCH" >/dev/null 2>&1; then git push -u origin "$BRANCH" log "INFO: Initialer Push des Branches erfolgreich" exit 0 fi # Prüfen, ob lokale Commits noch nicht gepusht wurden AHEAD_COUNT="$(git rev-list --count "origin/$BRANCH..$BRANCH" 2>/dev/null || echo 0)" if [[ "$AHEAD_COUNT" -gt 0 ]]; then git push origin "$BRANCH" log "INFO: Push erfolgreich ($AHEAD_COUNT lokale Commits übertragen)" else log "INFO: Kein Push nötig, Remote ist aktuell" fi } main