diff options
author | Silvio Rhatto <rhatto@riseup.net> | 2018-05-23 08:59:27 -0300 |
---|---|---|
committer | Silvio Rhatto <rhatto@riseup.net> | 2018-05-23 08:59:27 -0300 |
commit | da0ec3522804ae7148f7617314cffa36ab0499e1 (patch) | |
tree | 7a46f6f0b3c15b5f41d50dc5e1ad6f9a4e14b143 | |
parent | ac48b0fa468c47ff5ac878191f2de37a9b76a49e (diff) | |
download | scripts-da0ec3522804ae7148f7617314cffa36ab0499e1.tar.gz scripts-da0ec3522804ae7148f7617314cffa36ab0499e1.tar.bz2 |
Borger: borg script for home folder backups
-rwxr-xr-x | borger | 125 |
1 files changed, 125 insertions, 0 deletions
@@ -0,0 +1,125 @@ +#!/bin/bash +# +# Borg script for home folder backups. +# Adapted from https://borgbackup.readthedocs.io/en/stable/quickstart.html#automating-backups +# +# Stuff to put in your config: +# +# Backup destination +#export SSH_SERVER="user@host" +#export SSH_PORT="2202" +# Setting this, so you won't be asked for your repository passphrase: +#export BORG_PASSPHRASE='HACKME' +# or this to ask an external program to supply the passphrase: +#export BORG_PASSCOMMAND='pass show backup' +#export BORG_PASSCOMMAND='keyringer default decrypt pessoal/backups/borg 2> /dev/null' + +# Parameters +CONFIG="$HOME/.config/borger" +HOSTNAME=`cat /etc/hostname` + +if [ -z "$USER" ]; then + USER="`whoami`" +fi + +# In case your home folder is a symlink +if [ ! -z "`readlink $HOME`" ]; then + ORIG="`readlink $HOME`" +else + ORIG="$HOME" +fi + +# Default backup config +keepdaily="7" +keepweekly="4" +keepmonth="3" +encryption="keyfile" + +# Config +if [ -e "$CONFIG" ] ; then + source $CONFIG +fi + +# Setting this, so the repo does not need to be given on the commandline: +export BORG_REPO="ssh://$SSH_SERVER:$SSH_PORT//var/backups/users/$USER/borg" + +# Some helpers and error handling: +info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } +fatal() { info $*; exit 1; } +trap 'info $( date ) Backup interrupted >&2; exit 2' INT TERM + +# Check +if [ "$1" == "--check" ]; then + borg list + exit $? +fi + +# Initialize +if ! ssh $SSH_SERVER -p $SSH_PORT test -f /var/backups/users/$USER/borg/config; then + info "Initializing borg repository at ssh://$SSH_SERVER:$SSH_PORT//var/backups/users/$USER/borg..." + borg init --encryption=$encryption ssh://$SSH_SERVER:$SSH_PORT//var/backups/users/$USER/borg + + init_exit=$? + + if [ "$init_exit" != "0" ]; then + fatal "Error initializing repository" + fi +fi + +# Backup the most important directories into an archive named after +# the machine this script is currently running on: + +info "Starting backup..." + +borg create \ + --verbose \ + --filter AME \ + --list \ + --stats \ + --show-rc \ + --compression lz4 \ + --exclude-caches \ + ::'{now}' \ + $ORIG + + backup_exit=$? + +if [ "$backup_exit" != "0" ]; then + fatal "Error creating snapshot" +fi + +info "Pruning repository..." + +# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly +# archives of THIS machine. The '{hostname}-' prefix is very important to +# limit prune's operation to this machine's archives and not apply to +# other machines' archives also: + +borg prune \ + --list \ + --prefix '{hostname}-' \ + --show-rc \ + --keep-daily $keepdaily \ + --keep-weekly $keepweekly \ + --keep-monthly $keepmonthly \ + + prune_exit=$? + +if [ "$prune_exit" != "0" ]; then + fatal "Error pruning repository" +fi + +# use highest exit code as global 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} |