#!/usr/bin/env bash set -e if [[ "$HOME" == "/" || -z "$HOME" ]] ; then HOME="/root/" fi HOME=${HOME:-"/root/"} PERSONALCONFIG="${1:-$HOME/.config/borg.conf}" BORGHOST="" USER="" REPO="" MAC="" BORG_PASSPHRASE="" BORG_EXCLUDE_FILE="" BORG_EXCLUDE_IF_PRESENT=".do_not_backup_this_directory" BORG_EXCLUDE_PATTERN=("/var/cache/*" "/var/tmp/*" ) BORG_BACKUP_DIRS=( "/etc" "/var" "/home" "/usr/local" ) APPENDONLY="YES" #unset if not used BORG_PRUNEARG=("--keep-daily=7" "--keep-weekly=4" "--keep-monthly=12") MYREPO=${USER}@${BORGHOST}:${REPO} BORG_ARGS=() if [[ -e "$PERSONALCONFIG" ]] ; then ls -l "$PERSONALCONFIG" #shellcheck disable=SC1090 source "$PERSONALCONFIG" else echo "$PERSONALCONFIG not found" fi MYREPO="${USER}@${BORGHOST}:${REPO}" export BORG_PASSPHRASE export HOME SNAPSHOT="${SNAPSHOT:-"$(hostname -f) $(date "+%Y-%m-%d %a %H:%M")"}" echo "using repo: $MYREPO snapshot: $SNAPSHOT" echo #### borg backup #### if [[ -n "${MAC}" ]] ; then if ! ping -c 1 "$BORGHOST" &> /dev/null ; then wakeonlan "$MAC" #wakup may take some time sleep 10 else echo "$BORGHOST is up" fi fi set +e #wordsplitting is needed for arguments #shellcheck disable=SC2046 nice ionice -c 3 borg create --stats \ --exclude-caches \ --one-file-system \ "${BORG_ARGS[@]}" \ $([[ -n "${BORG_EXCLUDE_PATTERN[*]}" ]] && printf " --exclude \"%s\" " "${BORG_EXCLUDE_PATTERN[@]}" ) \ $([[ -n "$BORG_EXCLUDE_FILE" ]] && printf " --exclude-from \"%s\" " "${BORG_EXCLUDE_FILE}" ) \ --exclude-if-present="$BORG_EXCLUDE_IF_PRESENT" \ --exclude-if-present=".nobackup" \ "${MYREPO}::${SNAPSHOT}" \ "${BORG_BACKUP_DIRS[@]}" RetVal=$? echo "RetVal = $RetVal" if [[ $RetVal != "0" && $RetVal != "1" ]] ; then exit "$RetVal" fi set -e if [[ "${APPENDONLY}" != "YES" ]] ; then time borg prune -v "$MYREPO" "${BORG_PRUNEARG[@]}" echo RetVal = $? time borg list -v $MYREPO echo RetVal = $? else echo ############# echo You should purge the repository from time to time fi echo ##### borg end ######