parent
8a49e623ff
commit
f7c59be6ca
1 changed files with 70 additions and 0 deletions
@ -0,0 +1,70 @@ |
||||
#!/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/lost+found' \ |
||||
--exclude '*.img' \ |
||||
--exclude '*.iso' \ |
||||
::'{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} |
Loading…
Reference in new issue