- dup & rdiff handlers: finally, a real and well tested fix for the globbing bug
authorintrigeri <intrigeri@boum.org>
Thu, 19 Jan 2006 21:58:38 +0000 (21:58 +0000)
committerintrigeri <intrigeri@boum.org>
Thu, 19 Jan 2006 21:58:38 +0000 (21:58 +0000)
- 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

examples/example.dup
examples/example.rdiff
handlers/dup
handlers/dup.helper
handlers/rdiff
handlers/rdiff.helper

index 50d957291247e63ea0cd5d498ab8791610a078b4..e6a66a87e3a3e5107a790823eba0f657a20a69d3 100644 (file)
@@ -87,15 +87,15 @@ include = /var/lib/dpkg/status-old
 # vsinclude = <path>
 # ...
 # 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
index 8878ad0a45328db5f8d9ed6e0943c2c59dbe0e86..198516c726cdc15339d4ede7c6b5d29dc3d29bc6 100644 (file)
@@ -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 | <vserver1> <vserver2> ... (default = all)
+# vsinclude = <path>
+# vsinclude = <path>
+# ...
+# 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 '*')
index d32fcf26851890112f4a36f64e164e18e3850ca0..6918702634d3d87a734aad1335e1d2ec2e16f3b3 100644 (file)
@@ -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
index f2413344f00fbb733a66808a00a377167730c330..490914efd1eadad81aa43a7772291b6a79a1e586 100644 (file)
@@ -354,13 +354,14 @@ EOF
 # vsinclude = <path>
 # ...
 # 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
 
index dc985019fa6df2ae0b44420199f13aa44cb9cdaf..adc4b5d8e6a6377545d4602cc0ae27e66295e71d 100644 (file)
@@ -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 '/*' "
                
index 2538dd8fcb9282f9f5695acd30dfdd73cb7a758d..703444c277986ad8d73dbedfd3785bd1d9aeb9d2 100644 (file)
@@ -289,13 +289,14 @@ EOF
 # vsinclude = <path>
 # ...
 # 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