80 lines
1.9 KiB
Bash
Executable file
80 lines
1.9 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
backup_key="${HOME}/.ssh/borg/backup"
|
|
prune_key="${HOME}/.ssh/borg/prune"
|
|
backup_host="luca@server155.tralios.de"
|
|
# shellcheck disable=SC2088
|
|
repo="~/backup/dijkstra"
|
|
# shellcheck disable=SC2155
|
|
export BORG_PASSPHRASE="<#borg_passphrase#>"
|
|
export BORG_REPO="ssh://${backup_host}:22/${repo}"
|
|
export BORG_RSH="ssh -i ${backup_key}"
|
|
|
|
echo >"${XDG_DATA_HOME}/backup.log"
|
|
exec >>"${XDG_DATA_HOME}/backup.log" 2>&1
|
|
|
|
max() {
|
|
printf "%s\n" "$@" | sort -nr | head -n1
|
|
}
|
|
|
|
info() {
|
|
[ "$1" = "-e" ] && {
|
|
shift
|
|
notify-send -u critical Backupper "$*"
|
|
}
|
|
printf "\n%s %s\n\n" "$(date)" "$*"
|
|
}
|
|
trap 'echo $(date) Backup interrupted >&2; exit 2' INT TERM
|
|
|
|
info "Starting backup"
|
|
|
|
borg create \
|
|
--verbose \
|
|
--filter AME \
|
|
--list \
|
|
--stats \
|
|
--show-rc \
|
|
--compression lz4 \
|
|
--exclude-caches \
|
|
--upload-ratelimit 2000 \
|
|
--exclude "${XDG_CACHE_HOME}/*" \
|
|
--exclude "${XDG_STATE_HOME}/*" \
|
|
--exclude "${XDG_CONFIG_HOME}/borg/*" \
|
|
--exclude "${XDG_CONFIG_HOME}/chromium/*" \
|
|
--exclude "${XDG_CONFIG_HOME}/Element/*" \
|
|
--exclude "${XDG_DATA_HOME}/Trash/*" \
|
|
--exclude "${XDG_DATA_HOME}/backup.log" \
|
|
--exclude "${HOME}/.floorp" \
|
|
--exclude "${HOME}/.mozilla/firefox/*" \
|
|
--exclude "${HOME}/.thunderbird/*" \
|
|
::'{hostname}-{now}' \
|
|
"${HOME}"
|
|
|
|
backup_exit=$?
|
|
|
|
info "Pruning repository"
|
|
|
|
# shellcheck disable=SC2029
|
|
echo "${BORG_PASSPHRASE}" | ssh \
|
|
-o "IdentitiesOnly=yes" \
|
|
-i "${prune_key}" \
|
|
"${backup_host}" \
|
|
false # This command is ignored but must be set
|
|
|
|
prune_exit=$?
|
|
|
|
info "Compacting repository"
|
|
|
|
borg compact
|
|
|
|
compact_exit=$?
|
|
|
|
global_exit=$(max $backup_exit $prune_exit $compact_exit)
|
|
|
|
case ${global_exit} in
|
|
0) info "Backup, Prune, and Compact finished successfully" ;;
|
|
1) info -e "Backup, Prune, and/or Compact finished with warnings" ;;
|
|
*) info -e "Backup, Prune, and/or Compact finished with errors" ;;
|
|
esac
|
|
|
|
exit "${global_exit}"
|