[source]
-# files to include in the backup
-# (supports globbing with '*')
+# WARNING: include, exclude and vsinclude statements support EITHER globbing
+# with '*' OR symlinks in the path; usage of both in the same statement is *not*
+# supported and will lead to weird behaviour.
+# files to include in the backup
include = /var/spool/cron/crontabs
include = /var/backups
include = /etc
# 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 '*')
exclude = /home/*/.gnupg
######################################################
# (you can also use the time format of rdiff-backup, e.g. 6D5h)
keep = 60
-# a note about includes and excludes:
-# All the excludes come after all the includes. The order is
-# not otherwise taken into account.
+# A few notes about includes and excludes:
+# - include, exclude and vsinclude statements support EITHER globbing with '*'
+# OR symlinks in the path; usage of both in the same statement is *not*
+# supported and will lead to weird behaviour.
+# - All the excludes come after all the includes. The order is not otherwise
+# taken into account.
# files to include in the backup
-# (supports globbing with '*')
include = /var/spool/cron/crontabs
include = /var/backups
include = /etc
# 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 '*')
#exclude = /home/*/.gnupg
######################################################
set -o noglob
+symlinks_warning="Maybe you have mixed symlinks and '*' in this statement, which is not supported."
+
# excludes
for i in $exclude; do
- str="${i//__star__/*}"
- i=`readlink -f ${i#}`
- execstr="${execstr}--exclude '$str' "
+ str="${i//__star__/*}"
+ str=`readlink -f $str`
+ if [ -n "$str" ]; then
+ execstr="${execstr}--exclude '$str' "
+ else
+ warning "exclude statement ${i//__star__/*} will be ignored. $symlinks_warning"
+ fi
done
# includes
for i in $include; do
- str="${i//__star__/*}"
- i=`readlink -f ${i#}`
- execstr="${execstr}--include '$str' "
+ str="${i//__star__/*}"
+ str=`readlink -f $str`
+ if [ -n "$str" ]; then
+ execstr="${execstr}--include '$str' "
+ else
+ warning "include statement ${i//__star__/*} will be ignored. $symlinks_warning"
+ fi
done
# vsincludes
if [ $usevserver = yes ]; then
- for vserver in $vsnames; do
- for vi in $vsinclude; do
- i=`readlink -f $VROOTDIR/$vserver$vi`
- str="${i//__star__/*}"
- execstr="${execstr}--include '$VROOTDIR/$vserver$str' "
- done
- done
+ for vserver in $vsnames; do
+ for vi in $vsinclude; do
+ str="${vi//__star__/*}"
+ str=`readlink -f $VROOTDIR/$vserver$str`
+ if [ -n "$str" ]; then
+ execstr="${execstr}--include '$str' "
+ else
+ warning "vsinclude statement ${vi//__star__/*} will be ignored for VServer $vserver. $symlinks_warning"
+ fi
+ done
+ done
fi
set +o noglob
### EXECUTE ###
-# exclude everything else, start with root
-#execstr="${execstr}--exclude '**' / "
-
-# include client-part and server-part
-#execstr="$execstr $execstr_serverpart"
-
execstr=${execstr//\\*/\\\\\\*}
debug "duplicity $execstr --exclude '**' / $execstr_serverpart"
[source]
+# WARNING: include, exclude and vsinclude statements support EITHER globbing
+# with '*' OR symlinks in the path; usage of both in the same statement is *not*
+# supported and will lead to weird behaviour.
+
# files to include in the backup
-# (supports globbing with '*')
-# BIG FAT WARNING
-# Symlinks are not dereferenced. Moreover, an include line whose path
-# contains, at any level, a symlink to a directory, will only have the
-# symlink backed-up, not the target directory's content. Yes, you have
-# to dereference yourself the symlinks, or to use 'mount --bind'
-# instead.
-# EXAMPLE
-# Let's say /home is a symlink to /mnt/crypt/home ; the following line
-# will only backup a "/home" symlink ; neither /home/user nor
-# /home/user/Mail will be backed-up :
-# include = /home/user/Mail
-# A workaround is to 'mount --bind /mnt/crypt/home /home' ; another
-# one is to write :
-# include = /mnt/crypt/home/user/Mail
EOF
if [ "$host_or_vservers" == host -o "$host_or_vservers" == both ]; then
# 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
# excludes
cat >> $next_filename <<EOF
-# rdiff-backup specific comment, TO ADAPT
# files to exclude from the backup
-# (supports globbing with '*')
EOF
set -o noglob
for i in $dup_excludes; do
fi
# check the connection at the source and destination
+[ -n "$test" ] || test=0
if [ "$testconnect" = "yes" ] || [ "${test}" -eq 1 ]; then
test_connection $sourceuser $sourcehost
test_connection $destuser $desthost
set -o noglob
+symlinks_warning="Maybe you have mixed symlinks and '*' in this statement, which is not supported."
+
# TODO: order the includes and excludes
# excludes
for i in $exclude; do
- str="${i//__star__/*}"
- i=`readlink -f ${i#}`
- execstr="${execstr}--exclude '$str' "
+ str="${i//__star__/*}"
+ str=`readlink -f $str`
+ if [ -n "$str" ]; then
+ execstr="${execstr}--exclude '$str' "
+ else
+ warning "exclude statement ${i//__star__/*} will be ignored. $symlinks_warning"
+ fi
done
# includes
for i in $include; do
- [ "$i" != "/" ] || fatal "Sorry, you cannot use 'include = /'"
- str="${i//__star__/*}"
- i=`readlink -f $i`
- execstr="${execstr}--include '$str' "
+ [ "$i" != "/" ] || fatal "Sorry, you cannot use 'include = /'"
+ str="${i//__star__/*}"
+ str=`readlink -f $str`
+ if [ -n "$str" ]; then
+ execstr="${execstr}--include '$str' "
+ else
+ warning "include statement ${i//__star__/*} will be ignored. $symlinks_warning"
+ fi
done
# vsinclude
if [ $usevserver = yes ]; then
for vserver in $vsnames; do
for vi in $vsinclude; do
- i=`readlink -f $VROOTDIR/$vserver$vi`
- str="${i//__star__/*}"
- execstr="${execstr}--include '$str' "
+ str="${vi//__star__/*}"
+ str=`readlink -f $VROOTDIR/$vserver$str`
+ if [ -n "$str" ]; then
+ execstr="${execstr}--include '$str' "
+ else
+ warning "vsinclude statement ${vi//__star__/*} will be ignored for VServer $vserver. $symlinks_warning"
+ fi
done
done
fi
[source]
type = local
keep = $rdiff_keep
+
+# A few notes about includes and excludes:
+# - include, exclude and vsinclude statements support EITHER globbing with '*'
+# OR symlinks in the path; usage of both in the same statement is *not*
+# supported and will lead to weird behaviour.
+# - All the excludes come after all the includes. The order is not otherwise
+# taken into account.
+
EOF
## includes ##
if [ "$host_or_vservers" == host -o "$host_or_vservers" == both ]; then
# 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