You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
#!/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}
|
|
|