86 lines
2 KiB
Bash
Executable file
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 ######
|