|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
# the repo and it's passphrase
|
|
|
|
|
|
|
|
# This file should export the following (as a minimum)
|
|
|
|
# BORG_REPO
|
|
|
|
# BORG_PASSPHRASE
|
|
|
|
source "$(dirname "$(readlink -f "$0")")/borg.secret"
|
|
|
|
|
|
|
|
installed="/home/jonathan/pacman-installed"
|
|
|
|
|
|
|
|
# some helpers and error handling:
|
|
|
|
info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
|
|
|
|
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
|
|
|
|
|
|
|
|
info "Starting backup"
|
|
|
|
|
|
|
|
# get a list of all explicitly installed packages to include in the backup
|
|
|
|
if type -p yay > /dev/null; then
|
|
|
|
yay -Qe > "$installed"
|
|
|
|
else
|
|
|
|
pacman -Qe > "$installed"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# backup the directories
|
|
|
|
borg create \
|
|
|
|
--verbose --filter AME \
|
|
|
|
--list --stats --show-rc \
|
|
|
|
--compression zlib,5 \
|
|
|
|
--exclude '/home/*/.cache' \
|
|
|
|
--exclude '/home/*/.ccache' \
|
|
|
|
--exclude '/home/*/Downloads' \
|
|
|
|
--exclude '/home/*/.dotfiles' \
|
|
|
|
--exclude '/home/*/GitRepos' \
|
|
|
|
::'{hostname}-{now}' \
|
|
|
|
/home 2>&1
|
|
|
|
|
|
|
|
backup_exit=$?
|
|
|
|
|
|
|
|
rm "$installed"
|
|
|
|
|
|
|
|
info "Pruning repository"
|
|
|
|
|
|
|
|
# prune the repo
|
|
|
|
borg prune \
|
|
|
|
--list \
|
|
|
|
--prefix '{hostname}-' \
|
|
|
|
--show-rc \
|
|
|
|
--keep-daily 7 \
|
|
|
|
--keep-weekly 4 \
|
|
|
|
--keep-monthly 3 2>&1
|
|
|
|
|
|
|
|
prune_exit=$?
|
|
|
|
|
|
|
|
# use highest exit code as exit code
|
|
|
|
global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
|
|
|
|
|
|
|
|
if [ ${global_exit} -eq 1 ];
|
|
|
|
then
|
|
|
|
info "Backup and/or Prune finished with a warning"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ ${global_exit} -gt 1 ];
|
|
|
|
then
|
|
|
|
info "Backup and/or Prune finished with an error"
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit ${global_exit}
|