101 lines
2.3 KiB
Bash
Executable file
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 ######
|