diff options
author | Silvio Rhatto <rhatto@riseup.net> | 2018-05-23 12:03:38 -0300 |
---|---|---|
committer | Silvio Rhatto <rhatto@riseup.net> | 2018-05-23 12:03:38 -0300 |
commit | 55351da8d6fcd3a53473bcc0c2212183244baa61 (patch) | |
tree | 6cee47206aa1504cad0539ab1cd6c3dac05ea421 | |
parent | d3d8a9da90091ec1d53cfc975f1a1fe5134ce54b (diff) | |
download | scripts-55351da8d6fcd3a53473bcc0c2212183244baa61.tar.gz scripts-55351da8d6fcd3a53473bcc0c2212183244baa61.tar.bz2 |
Borger: split code into functions and add more options
-rwxr-xr-x | borger | 232 |
1 files changed, 123 insertions, 109 deletions
@@ -21,136 +21,150 @@ # # Backup config # keepdaily="7" # keepweekly="4" -# keepmonth="3" +# keepmonth="6" # encryption="keyfile" +# placeholder="{user}" # Parameters BASENAME="`basename $0`" DESTINATION="$1" +OPTION="$2" BASE_CONFIG="$HOME/.config/borger" CONFIG="$BASE_CONFIG/$DESTINATION" -HOSTNAME=`cat /etc/hostname` - -# Some helpers and error handling: -info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; } -fatal() { info $*; exit 1; } - -# Ensure we have our base config folder -mkdir -p $BASE_CONFIG - -# List available targets -if [ -z "$DESTINATION" ]; then - echo "usage: $BASENAME <destination> [--check]" - echo -n "available destinations from $BASE_CONFIG: " - ls $BASE_CONFIG - exit 1 -fi - -# Ensure we have an username -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" + +# Print info +function info { + printf "[$BASENAME] [%s] %s\n" "$(date)" "$*" >&2; +} + +# Fata error +function fatal { + info [fatal] $* + exit 1; +} + +function borger_usage { + # Ensure we have our base config folder + mkdir -p $BASE_CONFIG + + # List available targets + if [ -z "$DESTINATION" ]; then + echo "usage: $BASENAME <destination> [--check]" + echo -n "available destinations from $BASE_CONFIG: " + ls $BASE_CONFIG + exit 1 + fi +} # Config -if [ -e "$CONFIG" ] ; then - source $CONFIG -else - fatal "No such config $CONFIG" -fi - -# Setting this, so the repo does not need to be given on the commandline: -if [ -z "$BORG_REPO" ]; then - export BORG_REPO_DIR="/var/backups/users/$USER/borg" - export BORG_REPO="ssh://$SSH_SERVER:$SSH_PORT/$BORG_REPO_DIR" -fi +function borger_config { + # Ensure we have an username + 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="6" + encryption="keyfile" + placeholder="{user}" + + if [ -e "$CONFIG" ] ; then + source $CONFIG + else + fatal "No such config $CONFIG" + fi + + # Setting this, so the repo does not need to be given on the commandline: + if [ -z "$BORG_REPO" ]; then + export BORG_REPO_DIR="/var/backups/users/$USER/borg" + export BORG_REPO="ssh://$SSH_SERVER:$SSH_PORT/$BORG_REPO_DIR" + fi +} # Check -if [ "$2" == "--check" ]; then - borg list - exit $? -fi +function borger_check { + if [ "$OPTION" == "--check" ]; then + borg list + exit $? + fi +} # Our trap -trap 'info $( date ) Backup interrupted >&2; exit 2' INT TERM +function borger_trap { + trap 'info Backup interrupted >&2; exit 2' INT TERM +} # Initialize -if ! ssh $SSH_SERVER -p $SSH_PORT test -f $BORG_REPO_DIR/config; then - info "Initializing borg repository at $BORG_REPO..." - borg init --encryption=$encryption $BORG_REPO +function borger_init { + if ! ssh $SSH_SERVER -p $SSH_PORT test -f $BORG_REPO_DIR/config; then + info "Initializing borg repository at $BORG_REPO..." + borg init --encryption=$encryption $BORG_REPO - init_exit=$? + init_exit=$? - if [ "$init_exit" != "0" ]; then - fatal "Error initializing repository" + if [ "$init_exit" != "0" ]; then + fatal "Error initializing repository" + fi 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 +function borger_create { + info "Starting backup..." + + borg create \ + --verbose \ + --filter AME \ + --list \ + --stats \ + --show-rc \ + --compression lz4 \ + --exclude-caches \ + ::"${placeholder}-{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 \ - --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} + if [ "$backup_exit" != "0" ]; then + fatal "Error creating snapshot" + fi +} + +# Use the `prune` subcommand to maintain daily, weekly and monthly archives. +# The '${placeholder}-' prefix is very important to limit prune's operation to +# one specific archive and not apply to archives also. +function borger_prune { + info "Pruning repository..." + borg prune \ + --list \ + --prefix "${placeholder}-" \ + --show-rc \ + --keep-daily $keepdaily \ + --keep-weekly $keepweekly \ + --keep-monthly $keepmonthly \ + + prune_exit=$? + + if [ "$prune_exit" != "0" ]; then + fatal "Error pruning repository" + fi +} + +# Main +borger_usage +borger_config +borger_check +borger_trap +borger_init +borger_create +borger_prune |