From: intrigeri Date: Thu, 19 Jan 2006 21:58:38 +0000 (+0000) Subject: - dup & rdiff handlers: finally, a real and well tested fix for the globbing bug X-Git-Tag: backupninja-0.9.3~17 X-Git-Url: https://git.stderr.nl/gitweb?p=matthijs%2Fupstream%2Fbackupninja.git;a=commitdiff_plain;h=51d938cd68c7a2eeaca73de9e14c6c34efceca88 - dup & rdiff handlers: finally, a real and well tested fix for the globbing bug - rdiff: it's now possible to choose exactly which vservers should be backed-up, as it already was with duplicity handler, with the "vsnames" configuration setting --- diff --git a/examples/example.dup b/examples/example.dup index 50d9572..e6a66a8 100644 --- a/examples/example.dup +++ b/examples/example.dup @@ -87,15 +87,15 @@ include = /var/lib/dpkg/status-old # vsinclude = # ... # Any path specified in vsinclude is added to the include list for each vserver -# listed in vsnames (or all if vsnames = all). +# listed in vsnames (or all if vsnames = all, which is the default). # # For example, vsinclude = /home will backup the /home directory 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. # Vservers paths are derived from $VROOTDIR. +# vsinclude supports globbing with '*'. -# rdiff-backup specific comment, TO ADAPT # files to exclude from the backup # (supports globbing with '*') exclude = /home/*/.gnupg diff --git a/examples/example.rdiff b/examples/example.rdiff index 8878ad0..198516c 100644 --- a/examples/example.rdiff +++ b/examples/example.rdiff @@ -52,11 +52,21 @@ include = /usr/local/sbin include = /var/lib/dpkg/status include = /var/lib/dpkg/status-old -# If vservers = yes in /etc/backupninja.conf then vsinclude -# may be used. Any path specified in vsinclude is added to -# the include list for each vserver on the system. e.g. -# vsinclude = /home will backup /vservers/v1/home, -# /vservers/v2/home, etc. +# If vservers = yes in /etc/backupninja.conf then the following variables can +# be used: +# vsnames = all | ... (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, which is the default). +# +# For example, vsinclude = /home will backup the /home directory 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. +# Vservers paths are derived from $VROOTDIR. +# vsinclude supports globbing with '*'. # files to exclude from the backup # (supports globbing with '*') diff --git a/handlers/dup b/handlers/dup index d32fcf2..6918702 100644 --- a/handlers/dup +++ b/handlers/dup @@ -34,8 +34,9 @@ destdir=${destdir%/} [ "$include" != "" ] || fatal "No source includes specified" ### vservers stuff ### -local usevserver=no + # If vservers are configured, check that the ones listed in $vsnames do exist. +local usevserver=no if [ $vservers_are_available = yes ]; then if [ "$vsnames" = all ]; then vsnames="$found_vservers" @@ -113,14 +114,16 @@ execstr_clientpart="/" ### SOURCE ### +set -o noglob + # excludes -for i in "$exclude"; do +for i in $exclude; do str="${i//__star__/*}" execstr="${execstr}--exclude '$str' " done # includes -for i in "$include"; do +for i in $include; do str="${i//__star__/*}" execstr="${execstr}--include '$str' " done @@ -128,13 +131,15 @@ done # vsincludes if [ $usevserver = yes ]; then for vserver in $vsnames; do - for vi in "$vsinclude"; do + for vi in $vsinclude; do str="${vi//__star__/*}" execstr="${execstr}--include '$VROOTDIR/$vserver$str' " done done fi +set +o noglob + ### EXECUTE ### # exclude everything else, start with root diff --git a/handlers/dup.helper b/handlers/dup.helper index f241334..490914e 100644 --- a/handlers/dup.helper +++ b/handlers/dup.helper @@ -354,13 +354,14 @@ EOF # vsinclude = # ... # Any path specified in vsinclude is added to the include list for each vserver -# listed in vsnames (or all if vsnames = all). +# listed in vsnames (or all if vsnames = all, which is the default). # # For example, vsinclude = /home will backup the /home directory 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. # Vservers paths are derived from $VROOTDIR. +# vsinclude supports globbing with '*'. EOF diff --git a/handlers/rdiff b/handlers/rdiff index dc98501..adc4b5d 100644 --- a/handlers/rdiff +++ b/handlers/rdiff @@ -78,6 +78,7 @@ check_consistency "source" "$type" "$user" "$host" getconf label getconf keep 60 getconf include +getconf vsnames all getconf vsinclude getconf exclude @@ -92,11 +93,23 @@ check_consistency "destination" "$type" "$user" "$host" ### CHECK CONFIG ### -# See if vservers are configured +# If vservers are configured, check that the ones listed in $vsnames do exist. local usevserver=no -if [ $vservers_are_available = yes -a -n "$vsinclude" ]; then - info "vserver method enabled" - usevserver=yes +if [ $vservers_are_available = yes ]; then + if [ "$vsnames" = all ]; then + vsnames="$found_vservers" + else + if ! vservers_exist "$vsnames" ; then + fatal "At least one of the vservers listed in vsnames ($vsnames) does not exist." + fi + fi + if [ -n "$vsinclude" ]; then + info "Using vservers '$vsnames'" + usevserver=yes + fi +else + [ -z "$vsinclude" ] || warning 'vservers support disabled in backupninja.conf, vsincludes configuration lines will be ignored' + [ -z "$vsnames" ] || warning 'vservers support disabled in backupninja.conf, vsnames configuration line will be ignored' fi # check the connection at the source and destination @@ -157,14 +170,16 @@ fi execstr="$RDIFFBACKUP $options --print-statistics " +set -o noglob + # TODO: order the includes and excludes # excludes -for i in "$exclude"; do +for i in $exclude; do str="${i//__star__/*}" execstr="${execstr}--exclude '$str' " done # includes -for i in "$include"; do +for i in $include; do [ "$i" != "/" ] || fatal "Sorry, you cannot use 'include = /'" str="${i//__star__/*}" execstr="${execstr}--include '$str' " @@ -172,14 +187,16 @@ done # vsinclude if [ $usevserver = yes ]; then - for vserver in $found_vservers; do - for vi in "$vsinclude"; do + for vserver in $vsnames; do + for vi in $vsinclude; do str="${vi//__star__/*}" execstr="${execstr}--include '$VROOTDIR/$vserver$str' " done done fi +set +o noglob + # exclude everything else execstr="${execstr}--exclude '/*' " diff --git a/handlers/rdiff.helper b/handlers/rdiff.helper index 2538dd8..703444c 100644 --- a/handlers/rdiff.helper +++ b/handlers/rdiff.helper @@ -289,13 +289,14 @@ EOF # vsinclude = # ... # Any path specified in vsinclude is added to the include list for each vserver -# listed in vsnames (or all if vsnames = all). +# listed in vsnames (or all if vsnames = all, which is the default). # # For example, vsinclude = /home will backup the /home directory 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. # Vservers paths are derived from $VROOTDIR. +# vsinclude supports globbing with '*'. EOF set -o noglob