diff --git a/examples/example.borg b/examples/example.borg index 4abc2c0a91575c33dbf1c06ed7719fee376f87f8..5d5212a2fb964ce87f5b90319718fcc6bca18648 100644 --- a/examples/example.borg +++ b/examples/example.borg @@ -6,8 +6,8 @@ ## as the commented out option, uncomment and change when ## necessary. Options which are uncommented in this example do not have ## defaults, and the settings provided are recommended. -## -## The defaults are useful in most cases, just make sure to configure the +## +## The defaults are useful in most cases, just make sure to configure the ## destination host and user. ## @@ -82,7 +82,7 @@ exclude = /var/lib/mysql ## put the backups under this directory, this must be set! ## an example setting would be: ## directory = /backups -## +## ## Default: # directory = @@ -90,6 +90,8 @@ exclude = /var/lib/mysql ## an example setting would be: ## host = backuphost ## +## set host = localhost for local backups (no ssh) +## ## Default # host = @@ -118,4 +120,4 @@ exclude = /var/lib/mysql ## for more info see : borg create -h ## ## Default: -# compression = lz4 \ No newline at end of file +# compression = lz4 diff --git a/handlers/borg b/handlers/borg index 9e2fb2d835dce017172cfd867c6b4df858064d5c..bc6e112789ccb0502fc132a6be1afddb0dafb1c5 100644 --- a/handlers/borg +++ b/handlers/borg @@ -44,7 +44,11 @@ fi # destination specific checks [ "$directory" != "" ] || fatal "Destination directory not set" -execstr_repository="$user@$host:$directory" +if [ "$host" != "localhost" ]; then + execstr_repository="$user@$host:$directory" +else + execstr_repository="$directory" +fi execstr_archive="$archive" ### INIT IF NEEDED ### @@ -117,4 +121,4 @@ else warning "Failed removing old backups." fi -return 0 \ No newline at end of file +return 0 diff --git a/handlers/borg.in b/handlers/borg.in new file mode 100644 index 0000000000000000000000000000000000000000..4b7e7168855f6cc02702b30dac564122e7188a44 --- /dev/null +++ b/handlers/borg.in @@ -0,0 +1,128 @@ +# -*- 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 +# +# TODO: encryption support +# + +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 [ "$host" != "localhost" ] && ([ "$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" +if [ "$host" != "localhost" ]; then + execstr_repository="$user@$host:$directory" +else + execstr_repository="$directory" +fi +execstr_archive="$archive" + +### INIT IF NEEDED ### + +# :TODO:maethor:160509: Manage encryption + +initstr="borg init --encryption=none $execstr_repository" +debug "$initstr" + +if [ $test = 0 ]; then + 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 +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