From d395ae94a5657afcc878adcd851d8e8c53df98de Mon Sep 17 00:00:00 2001 From: intrigeri Date: Sat, 7 Oct 2006 00:40:58 +0000 Subject: [PATCH] dup, rdiff: implemented and documented simpler and clearer symlinks/globbing behaviour, as proposed on http://lists.riseup.net/www/arc/backupninja/2006-07/msg00008.html --- ChangeLog | 17 ++++++++++------- NEWS | 27 ++++++++++++++++++++++----- examples/example.dup | 18 +++++++++++++++--- examples/example.rdiff | 19 ++++++++++++++----- handlers/dup | 22 ++++------------------ handlers/dup.helper | 20 +++++++++++++++++--- handlers/rdiff | 16 +++------------- handlers/rdiff.helper | 20 +++++++++++++++----- 8 files changed, 100 insertions(+), 59 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5eab333..913a90f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -40,10 +40,10 @@ version 0.9.4 -- unreleased svn: . Fixed inversed vsname emptiness check rdiff: - . Symlink and globbing support enhancement and clarification: for - a given include/exclude/vsinclude statement, rdiff handler now - support EITHER globbing with '*' OR symlinks in the path. - . Fixed improper include/exclude symlink dereference + . Symlink and globbing support in include/exclude/vsinclude + clarification: globbing is fully supported again, whereas no attempt + is done to dereference symlinks anymore, due to incompatibilities + between various readlink versions in this field. . Removed overzealous vsnames check . Now works if testconnect=no and if $test is not defined. . add $sshoptions config parameter in [dest] section of config so @@ -52,9 +52,10 @@ version 0.9.4 -- unreleased options = --remote-schema 'ssh -p REMOTE-PORT -C %s rdiff-backup --server' dup: - . Symlink and globbing support enhancement and clarification: for - a given include/exclude/vsinclude statement, dup handler now - support EITHER globbing with '*' OR symlinks in the path. + . Symlink and globbing support in include/exclude/vsinclude + clarification: globbing is fully supported again, whereas no attempt + is done to dereference symlinks anymore, due to incompatibilities + between various readlink versions in this field. . Removed over zealous vsnames check . Does not pretend anymore that duplicity can work without any passphrase @@ -82,6 +83,8 @@ version 0.9.4 -- unreleased . Fix configdirectory error that forced you to use /etc/backup.d, thanks anarcat . When determining which backup actions to list, find now follows symlinks for $configdirectory + dup.helper: + . Fix: signing was enabled with symmetric encryption. changed cron permissions to 644 minor documentation fixes improved RPM build process allowing 'make rpm-package' and 'make diff --git a/NEWS b/NEWS index 7b262c4..f866125 100644 --- a/NEWS +++ b/NEWS @@ -1,8 +1,25 @@ +backupninja (0.9.4-1) UNRELEASED + + * duplicity: Old (pre-0.9.4) example.dup file used to give false + information about the way the GnuPG-related options are used. + Please read the new /usr/share/doc/backupninja/examples/example.dup + file, and update your own configuration files if needed. + + * duplicity, rdiff: symlinks and globbing support in + include/exclude/vsinclude was unclear and did not work in all + situations, with weird behavious, due to incompatibilities + between various readlink versions in this field. This has been made + clear eventually: globbing is fully supported again, whereas no + attempt is done to dereference symlinks anymore. + Please read the new /usr/share/doc/backupninja/examples/example.dup + or /usr/share/doc/backupninja/examples/example.rdiff file, and update + your own configuration files if needed. + +backupninja (0.9.2-1) unstable; urgency=low + WARNING FOR DUPLICITY USERS -1. Old (pre-0.9.4) example.dup file used to give false information about the way - the GnuPG-related options are used. Please read the new example.dup file, and - update your own configuration files if needed. +Old (pre-0.9.2) example.dup file used to give false information about the way +the GnuPG-related options are used. Please read the new example.dup file, and +update your own configuration files if needed. -2. The bandwidthlimit option does not work anymore with duplicity >=0.4.2. - Trying to solve this... diff --git a/examples/example.dup b/examples/example.dup index f3d3981..457883c 100644 --- a/examples/example.dup +++ b/examples/example.dup @@ -55,9 +55,21 @@ password = a_very_complicated_passphrase [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. +# A few notes about includes and excludes: +# 1. include, exclude and vsinclude statements support globbing with '*' +# 2. 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 +# 3. All the excludes come after all the includes. The order is not otherwise +# taken into account. # files to include in the backup include = /var/spool/cron/crontabs diff --git a/examples/example.rdiff b/examples/example.rdiff index dd2ac5e..25cd26e 100644 --- a/examples/example.rdiff +++ b/examples/example.rdiff @@ -34,11 +34,20 @@ type = local keep = 60 # 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. +# 1. include, exclude and vsinclude statements support globbing with '*' +# 2. 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 +# 3. All the excludes come after all the includes. The order is not otherwise +# taken into account. # files to include in the backup include = /var/spool/cron/crontabs diff --git a/handlers/dup b/handlers/dup index b4a7c9d..15d1a02 100644 --- a/handlers/dup +++ b/handlers/dup @@ -134,24 +134,14 @@ symlinks_warning="Maybe you have mixed symlinks and '*' in this statement, which # excludes for i in $exclude; do 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 + execstr="${execstr}--exclude '$str' " done # includes for i in $include; do [ "$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 + execstr="${execstr}--include '$str' " done # vsincludes @@ -159,12 +149,8 @@ if [ $usevserver = yes ]; then 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 + str="$VROOTDIR/$vserver$str" + execstr="${execstr}--include '$str' " done done fi diff --git a/handlers/dup.helper b/handlers/dup.helper index dbf9643..da299c6 100644 --- a/handlers/dup.helper +++ b/handlers/dup.helper @@ -199,6 +199,8 @@ do_dup_gpg() { if [ "$dup_gpg_sign" == yes ]; then do_dup_gpg_signkey ; [ $? = 0 ] || return 1 fi + else + dup_gpg_sign=no fi # a passphrase is alway needed @@ -310,9 +312,21 @@ password = $dup_gpg_password [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. +# A few notes about includes and excludes: +# 1. include, exclude and vsinclude statements support globbing with '*' +# 2. 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 +# 3. All the excludes come after all the includes. The order is not otherwise +# taken into account. # files to include in the backup EOF diff --git a/handlers/rdiff b/handlers/rdiff index 79577c6..bdc1cbd 100644 --- a/handlers/rdiff +++ b/handlers/rdiff @@ -179,23 +179,13 @@ symlinks_warning="Maybe you have mixed symlinks and '*' in this statement, which # excludes for i in $exclude; do 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 + execstr="${execstr}--exclude '$str' " done # includes for i in $include; do [ "$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 + execstr="${execstr}--include '$str' " done # vsinclude @@ -203,7 +193,7 @@ if [ $usevserver = yes ]; then for vserver in $vsnames; do for vi in $vsinclude; do str="${vi//__star__/*}" - str=`readlink -f $VROOTDIR/$vserver$str` + str="$VROOTDIR/$vserver$str" if [ -n "$str" ]; then execstr="${execstr}--include '$str' " else diff --git a/handlers/rdiff.helper b/handlers/rdiff.helper index 904ac98..42bcb1b 100644 --- a/handlers/rdiff.helper +++ b/handlers/rdiff.helper @@ -271,12 +271,22 @@ 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. +# 1. include, exclude and vsinclude statements support globbing with '*' +# 2. 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 +# 3. All the excludes come after all the includes. The order is not otherwise +# taken into account. +# files to include in the backup EOF ## includes ## if [ "$host_or_vservers" == host -o "$host_or_vservers" == both ]; then -- 2.30.2