helper/borgthismachine.sh

86 lines
2 KiB
Bash
Executable file

#!/usr/bin/env bash
if [[ "$HOME" == "/" || -z "$HOME" ]] ; then
HOME="/root/"
fi
HOME=${HOME:-"/root/"}
PERSONALCONFIG="$HOME/.config/borg.conf"
BORGHOST=""
USER=""
REPO=""
MAC=""
BORG_PASSPHRASE=""
BORG_EXCLUDE_FILE=""
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
echo using repo: $MYREPO
SNAPSHOT="$(date +%Y-%m-%d-%a)"
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
#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}" ) \
"${MYREPO}::${SNAPSHOT}" \
"${BORG_BACKUP_DIRS[@]}"
echo RetVal = $?
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 ######