87 lines
2.2 KiB
Bash
Executable File
87 lines
2.2 KiB
Bash
Executable File
#!/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
|