helper/borgthismachine.sh
2022-09-19 07:32:52 +02:00

101 lines
2.3 KiB
Bash
Executable file

#!/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 ######