From 5f17b1c53ba821eee0ef20a5f8b11e96c8749067 Mon Sep 17 00:00:00 2001 From: micah Date: Tue, 27 Dec 2005 22:14:00 +0000 Subject: [PATCH] r241@um: micah | 2005-12-27 15:21:17 -0500 Updated rdiff-backup to do vserver selection using lib/vservers git-svn-id: http://code.autistici.org/svn/backupninja/trunk@288 758a04ac-41e6-0310-8a23-8373a73cc35d --- ChangeLog | 2 + handlers/rdiff.helper | 240 ++++++++++++++++++++++++++++++++---------- 2 files changed, 184 insertions(+), 58 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c75eca..54e7247 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19,6 +19,8 @@ version 0.9.2 -- unreleased added duplicity ninjahelper, including: a nice menu to choose the Vservers to backup (thanks to lib/vserver) + updated rdiff ninjahelper to include Vserver selection (thanks to + lib/vserver) added man/ninjahelper.1 man page duplicity handler: now possible to use different keys to encrypt and sign diff --git a/handlers/rdiff.helper b/handlers/rdiff.helper index 8642a42..8fad847 100644 --- a/handlers/rdiff.helper +++ b/handlers/rdiff.helper @@ -3,65 +3,139 @@ HELPERS="$HELPERS rdiff:incremental_remote_filesystem_backup" declare -a rdiff_includes declare -a rdiff_excludes -do_rdiff_dest() { - set -o noglob - formBegin "$rdiff_title" - formItem "keep" "$rdiff_keep" - formItem "dest_directory" "$rdiff_directory" - formItem "dest_host" "$rdiff_host" - formItem "dest_user" "$rdiff_user" - formDisplay - [ $? = 0 ] || return - - IFS=$'' - replyconverted=`echo $REPLY | tr '\n' :` - IFS=$':' - thereply=($replyconverted) - IFS=$' \t\n' - - rdiff_keep=${thereply[0]} - rdiff_directory=${thereply[1]} - rdiff_host=${thereply[2]} - rdiff_user=${thereply[3]} +# FUNCTIONS - _dest_done="(DONE)" - setDefault conn - set +o noglob +do_rdiff_host_includes() { + set -o noglob + # choose the files to backup + REPLY= + while [ -z "$REPLY" ] + do + formBegin "$rdiff_title - host system: includes" + for ((i=0; i < ${#rdiff_includes[@]} ; i++)) + do + formItem include ${rdiff_includes[$i]} + done + formItem include + formItem include + formItem include + formDisplay + [ $? = 0 ] || return + unset rdiff_includes + rdiff_includes="$REPLY" + done + set +o noglob } -do_rdiff_src() { - #echo ${rdiff_includes[@]} - set -o noglob - formBegin "$rdiff_title: includes" - for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do - formItem include ${rdiff_includes[$i]} - done - formItem include - formItem include - formItem include - formDisplay - [ $? = 0 ] || return +do_rdiff_vserver() { + # choose the vservers to backup (into $selected_vservers) + choose_one_or_more_vservers "$rdiff_title" + [ $? = 0 ] || return 1 - unset rdiff_includes - rdiff_includes=($REPLY) + set -o noglob + # choose the files to backup + REPLY= - formBegin "$rdiff_title: excludes" - for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do + while [ -z "$REPLY" ]; do + formBegin "$rdiff_title - vsincludes (backup these directories from every vserver)" + [ -z "$rdiff_vsincludes" ] && rdiff_vsincludes="$rdiff_default_includes" + + for i in $rdiff_vsincludes; do + formItem include "$i" + done + + formItem include "" + formItem include "" + formItem include "" + formDisplay + [ $? = 0 ] || return 1 + rdiff_vsincludes="$REPLY" + done + + set +o noglob +} + +do_rdiff_excludes() { + set -o noglob + formBegin "$rdiff_title: excludes" + for ((i=0; i < ${#rdiff_excludes[@]} ; i++)) + do formItem exclude ${rdiff_excludes[$i]} - done - formItem exclude - formItem exclude - formDisplay - [ $? = 0 ] || return + done + + formItem exclude + formItem exclude + formDisplay + + [ $? = 0 ] || return + unset rdiff_excludes + rdiff_excludes="$REPLY" + set +o noglob +} - unset rdiff_excludes - rdiff_excludes=($REPLY) +do_rdiff_src() { + choose_host_or_vservers_or_both "$rdiff_title" + [ $? = 0 ] || return 1 + case $host_or_vservers in + 'host') + do_rdiff_host_includes + [ $? = 0 ] || return 1 + ;; + 'vservers') + do_rdiff_vserver + [ $? = 0 ] || return 1 + ;; + 'both') + do_rdiff_host_includes + [ $? = 0 ] || return 1 + do_rdiff_vserver + [ $? = 0 ] || return 1 + ;; + *) + return 1 + ;; + esac + do_rdiff_excludes + [ $? = 0 ] || return 1 + _src_done="(DONE)" + setDefault dest +} + +do_rdiff_dest() { + + local replyconverted + local thereply - _src_done="(DONE)" - setDefault dest + set -o noglob + REPLY= + while [ -z "$REPLY" -o -z "$rdiff_directory" -o -z "$rdiff_host" -o -z "$rdiff_user" ] + do + formBegin "$rdiff_title - destination: last three items are required" + formItem "keep" "$rdiff_keep" + formItem "dest_directory" "$rdiff_directory" + formItem "dest_host" "$rdiff_host" + formItem "dest_user" "$rdiff_user" + formDisplay + [ $? = 0 ] || return + + IFS=$'' + replyconverted=`echo $REPLY | tr '\n' :` + IFS=$':' + thereply=($replyconverted) + IFS=$' \t\n' + + rdiff_keep=${thereply[0]} + rdiff_directory=${thereply[1]} + rdiff_host=${thereply[2]} + rdiff_user=${thereply[3]} + + done set +o noglob + + _dest_done="(DONE)" + setDefault conn } - + do_rdiff_ssh_con() { IFS=$' \t\n' if [ "$_dest_done" = "" ]; then @@ -232,15 +306,60 @@ do_rdiff_finish() { type = local keep = $rdiff_keep EOF - set -o noglob - for ((i=0; i < ${#rdiff_includes[@]} ; i++)); do - echo "include = ${rdiff_includes[$i]}" >> $next_filename - done - for ((i=0; i < ${#rdiff_excludes[@]} ; i++)); do - echo exclude = ${rdiff_excludes[$i]} >> $next_filename - done - set +o noglob - cat >> $next_filename <> $next_filename + done + + set +o noglob + fi + + if [ "$host_or_vservers" == vservers -o "$host_or_vservers" == both ] + then + cat >> $next_filename < ... (default = all) +# vsinclude = +# vsinclude = +# ... +# Any path specified in vsinclude is added to the include list for each vserver +# listed in vsnames (or all if vsnames = all). +# +# For example, vsinclude = /home will backup the /home partition in every +# vserver listed in vsnames. If you have vsnames = "foo bar baz", this +# vsinclude will add to the include list /vservers/foo/home, +# /vservers/bar/home and /vservers/baz/home. +# Vserver paths are derived from $VROOTDIR. + +EOF + + set -o noglob + echo -e "vsnames = \"$selected_vservers\"\n" >> $next_filename + for i in $rdiff_vsincludes; do + echo "vsinclude = $i" >> $next_filename + done + set +o noglob + fi + + # excludes + + for ((i=0; i < ${#rdiff_excludes[@]} ; i++)) + do + echo exclude = ${rdiff_excludes[$i]} >> $next_filename + done + set +o noglob + cat >> $next_filename <