aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2006-01-19 21:58:38 +0000
committerintrigeri <intrigeri@boum.org>2006-01-19 21:58:38 +0000
commit51d938cd68c7a2eeaca73de9e14c6c34efceca88 (patch)
tree01b9ec9937af45650a9a48a024d655af11bb9257
parent8bc9312e15bf0284b3767e1791c0de3522f410f2 (diff)
downloadbackupninja-51d938cd68c7a2eeaca73de9e14c6c34efceca88.tar.gz
backupninja-51d938cd68c7a2eeaca73de9e14c6c34efceca88.tar.bz2
- 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
-rw-r--r--examples/example.dup4
-rw-r--r--examples/example.rdiff20
-rw-r--r--handlers/dup13
-rw-r--r--handlers/dup.helper3
-rw-r--r--handlers/rdiff33
-rw-r--r--handlers/rdiff.helper3
6 files changed, 55 insertions, 21 deletions
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 = <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
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 | <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 '*')
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 = <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
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 = <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