diff --git a/borgsynology.sh b/borgsynology.sh new file mode 100644 index 0000000..8f7e1cb --- /dev/null +++ b/borgsynology.sh @@ -0,0 +1,310 @@ +#!/bin/bash +# +# Borg-Backup taeglich, hier aber auf lokal im Netz vorhandene Ressource +# +# +# 2025-05-14, misc +# 2025-05-30, misc, aus borgbackup.sh herausgelöst, um Borg-Backup lokal zu nutzen + +# !!!!!!!!!!!!!!!!!!!!--------------------!!!!!!!!!!!!!!!!!!!!! +# !!! Unbedingt anpassen in .env-synology (wird beim ersten Start erzeugt)!!! +# Anschliessend die include-Datei auf nicht vorhandene Verzeichnisse untersuchen +# !!! und anpassen. Die exclude-Datei ist in der Regel ok. +# !!!!!!!!!!!!!!!!!!!!--------------------!!!!!!!!!!!!!!!!!!!!! + + +# Wenn nicht vorhanden werden include und exclude geschrieben. Ab da nur noch dort aendern. +# --------------------------------------------------------------------- +# Ab hier normalerweise nichts anpassen +HOST="$(hostname)" +export BORG_REPO="ssh://ds220/volume1/NetBackup/borg/$HOST" +LOGTIME=`date +%m-%d` +BORG="/usr/bin/borg --remote-path=/usr/local/bin/borg " +BORG_PATH=/root/sc +BORG_INCLUDEFILE="$BORG_PATH/include-synology.lst" +BORG_EXCLUDEFILE="$BORG_PATH/exclude-synology.lst" +BORG_MOUNTPOINT=$BORG_PATH/mountpoint +BORG_COMPRESSION=lz4 +BORG_ENCRYPTION=repokey +LOG="$BORG_PATH/workdir/borgsynology-$LOGTIME.log" +ENVFILE=".env-synology" + +include_list() { + + cat <&2 ; exit 1; } + +## neues Backup erzeugen +borg_create() { + echo "###### Starting $0 $* on $(date) ######" + $BORG create -v \ + --warning \ + --filter AME \ + --list \ + --stats \ + --show-rc \ + --compression $BORG_COMPRESSION \ + --exclude-caches \ + --exclude-if-present ".nobackup" \ + --keep-exclude-tags \ + --exclude-from $BORG_EXCLUDEFILE \ + $BORG_REPO::'{now:%Y-%m-%d_%H:%M}' \ + $(cat ${BORG_INCLUDEFILE}) + if [ $? -eq 0 ]; then + echo Calling Success_URL + curl -o /dev/null -s $SUCCESS_URL + else + echo Calling Error_URL + curl -o /dev/null -s $ERROR_URL + fi + echo "###### Finished backup on $(date) ######" +} + +# Hilfe zur Nutzung des Skripts +usage() { +cat < >(tee -i ${LOG}) +exec 2>&1 + +# Include/Exclude +[ -f $BORG_INCLUDEFILE ] || include_list >$BORG_INCLUDEFILE +[ -f $BORG_EXCLUDEFILE ] || exclude_list >$BORG_EXCLUDEFILE + +# beim ersten Aufruf .env anlegen +[ -f $BORG_PATH/$ENVFILE ] || borg_env >$BORG_PATH/$ENVFILE +# Variablen aus .env einlesen +source "$BORG_PATH/$ENVFILE" + +case "$1" in + +check | init) + # überprüfen, ob borg-Repository bereits initialisiert wurde + # und führen borg init aus, falls nötig + borg_check + ;; + +run | create) + borg_umount #eventuell eingebundene Backups entfernen + borg_check || die "$BORG_REPO kann nicht angelegt werden" + borg_create + borg_prune + #send_log + ;; + +info) + #zeige ausführliche Informationen zum Repo + borg_info + ;; + +list) + #zeige vorhanden Sicherungen + borg_list + ;; + +prune) + #bereinige das Backup-Repo + borg_prune + ;; + +mount) + #stelle Backups als Verzeichnisbaum zur Verfügung + borg_mount + ;; + +umount) + #entferne das Backup-Repo aus dem Dateisystem + borg_umount + ;; + +keyexport) + #exportiert Repokey in lokale Datei + borg_keyexport + ;; + +*) + #Hilfe anzeigen + usage + ;; +esac +