-
-
Save maethor/01b1466f3b11f25b9c12a675d0c682ea to your computer and use it in GitHub Desktop.
BorgBackup handler script for backupninja
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- mode: sh; sh-basic-offset: 3; indent-tabs-mode: nil; -*- | |
# vim: set filetype=sh sw=3 sts=3 expandtab autoindent: | |
# | |
# borg handler script for backupninja | |
# requires borgbackup | |
# | |
# Guillaume Subiron, Sysnove, 2016 | |
# | |
# Copyright 2016 Guillaume Subiron <[email protected]> | |
# This work is free. You can redistribute it and/or modify it under the | |
# terms of the Do What The Fuck You Want To Public License, Version 2, | |
# as published by Sam Hocevar. See the http://www.wtfpl.net/ file for more details. | |
# | |
# | |
export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes | |
### GET CONFIG ### | |
getconf testconnect yes | |
getconf nicelevel 0 | |
setsection source | |
getconf keepdaily 7 | |
getconf keepweekly 4 | |
getconf keepmonthly -1 | |
getconf include | |
getconf exclude | |
setsection dest | |
getconf user | |
getconf host | |
getconf directory | |
# strip trailing / | |
directory=${directory%/} | |
getconf archive {now:%Y-%m-%d} | |
getconf compression lz4 | |
### CHECK CONFIG ### | |
# check the connection at the source and destination | |
[ -n "$test" ] || test=0 | |
if [ "$testconnect" = "yes" ] || [ "${test}" -eq 1 ]; then | |
debug "ssh -o PasswordAuthentication=no $host -l $user 'echo -n 1'" | |
local ret=`ssh -o PasswordAuthentication=no $host -l $user 'echo -n host is alive'` | |
if echo $ret | grep "host is alive"; then | |
debug "Connected to $host as $user successfully" | |
else | |
fatal "Can't connect to $host as $user." | |
fi | |
fi | |
# destination specific checks | |
[ "$directory" != "" ] || fatal "Destination directory not set" | |
execstr_repository="$user@$host:$directory" | |
execstr_archive="$archive" | |
### INIT IF NEEDED ### | |
# :TODO:maethor:160509: Manage encryption | |
initstr="borg init --encryption=none $execstr_repository" | |
debug "$initstr" | |
output="`su -c "$initstr" 2>&1`" | |
if [ $? = 2 ]; then | |
debug $output | |
info "Repository was already initialized" | |
else | |
warning $output | |
warning "Repository has been initialized" | |
fi | |
### EXECUTE ### | |
execstr="borg create --stats --compression $compression" | |
set -o noglob | |
# includes | |
SAVEIFS=$IFS | |
IFS=$(echo -en "\n\b") | |
for i in $include; do | |
includes="${includes} '$i'" | |
done | |
IFS=$SAVEIFS | |
# excludes | |
SAVEIFS=$IFS | |
IFS=$(echo -en "\n\b") | |
for i in $exclude; do | |
excludes="${excludes} --exclude '$i'" | |
done | |
IFS=$SAVEIFS | |
set +o noglob | |
# include client-part and server-part | |
execstr="${execstr} ${excludes} $execstr_repository::$execstr_archive ${includes}" | |
debug "$execstr" | |
if [ $test = 0 ]; then | |
output=`nice -n $nicelevel su -c "$execstr" 2>&1` | |
if [ $? = 0 ]; then | |
debug $output | |
info "Successfully finished backing up source $label" | |
else | |
error $output | |
fatal "Failed backuping up source $label" | |
fi | |
fi | |
### REMOVE OLD BACKUPS ### | |
# borg prune | |
prunestr="borg prune --keep-daily $keepdaily --keep-weekly $keepweekly --keep-monthly $keepmonthly $execstr_repository" | |
debug "$prunestr" | |
output="`su -c "$prunestr" 2>&1`" | |
if [ $? = 0 ]; then | |
debug $output | |
info "Removing old backups succeeded." | |
else | |
warning $output | |
warning "Failed removing old backups." | |
fi | |
return 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Bonjour,
J'ai forké votre script borg pour y intégrer le chiffrement simple via passphrase (repokey) ainsi qu'une limitation de bande passante : https://gist.github.com/leoberry/b6431b0fdb8f04693977d86dbfe8ca77
Vue qu'il n'est pas possible d'effectuer un pool-request sur un gist je vous laisse donc ce commentaire.
Bien cordialement,
Léo Berry