123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- Index: flexbackup
- ===================================================================
- --- flexbackup (.../tags/flexbackup-1.2.1-r5) (revision 784)
- +++ flexbackup (.../trunk) (revision 784)
- @@ -1301,8 +1301,8 @@
- $cmd .= "$::unz";
- }
- $cmd .= "(";
- - $cmd .= "mkdir -p $::device ; ";
- - $cmd .= "cd $::device ; ";
- + $cmd .= "mkdir -p \"$::device\" ; ";
- + $cmd .= "cd \"$::device\" ; ";
- $cmd .= "$::path{cpio} -i ";
- $cmd .= "-m ";
- $cmd .= "-d ";
- @@ -1351,9 +1351,8 @@
-
- # Have to take leading './' off to make rsync's include/exclude work right
- $cmd .= " | $::path{sed} -e \"s/\\.\\///g\" | ";
- -
- $cmd .= "$::path{rsync} ";
- - $cmd .= "--include-from=- --exclude=* ";
- + $cmd .= "--files-from=- ";
- $cmd .= "--archive ";
- $cmd .= "$::rsync_verb_flag ";
- $cmd .= "--delete --delete-excluded ";
- @@ -1368,7 +1367,7 @@
- $cmd .= "$remote:";
- }
- }
- - $cmd .= "$dir/ $::device";
- + $cmd .= "\"$dir/\" \"$::device\"";
-
- push(@cmds, $cmd);
-
- @@ -1658,7 +1657,9 @@
- my $tmpfile = "$cfg::tmpdir/ar.$PROCESS_ID";
- my $remove = '';
-
- - &log("| NOTE: ar archives will not descend directories");
- + &log("| NOTE: ar archives will not recurse into subdirectories,");
- + &log("| which makes them inappropriate for most backups.");
- + &log("| Be sure this is what you want.");
-
- if (defined($remote) and ($level != 0)) {
- my $time = &get_last_date($label, $level, 'numeric');
- @@ -1682,11 +1683,13 @@
- $cmd = "cd \"$dir\" && ";
- $cmd .= &file_list_cmd( $dir, $stamp, 'newline', $level, $remote, '-maxdepth 1 ! -type d');
- $cmd .= "> $filelist; ";
- + # Escape any spaces in filenames.
- + $cmd .= "$::path{sed} -i -e 's/ /\\\\ /g' $filelist; ";
-
- $cmd .= "$::path{ar} rc";
- $cmd .= "$::ar_verb_flag ";
- $cmd .= "$tmpfile ";
- - $cmd .= "`$::path{cat} $filelist`";
- + $cmd .= "\@$filelist ";
- $cmd .= "; $::path{cat} $tmpfile $::z";
-
- # Buffer both sides if remote
- @@ -1800,12 +1803,9 @@
-
- $cmd = "cd \"$dir\" && ";
- $cmd .= &file_list_cmd( $dir, $stamp, 'newline', $level, $remote);
- - $cmd .= "> $filelist; ";
- -
- - $cmd .= "$::path{lha} a";
- + $cmd .= " | $::path{lha} a";
- $cmd .= "$::lha_verb_flag ";
- $cmd .= "$tmpfile ";
- - $cmd .= "`$::path{cat} $filelist`";
- $cmd .= "; $::path{cat} $tmpfile $::z";
-
- # Buffer both sides if remote
- @@ -2766,6 +2766,7 @@
- $::path{'dd'} = &checkinpath('dd');
- $::path{'printf'} = &checkinpath('printf');
- $::path{'mkdir'} = &checkinpath('mkdir');
- + $::path{'sed'} = &checkinpath('sed');
-
- push(@::remoteprogs,($::path{'touch'},$::path{'rm'},$::path{'find'},$::path{'printf'},$::path{'mkdir'}));
-
- @@ -4894,9 +4895,9 @@
- $rex .= '\)"';
- }
- # Show what the darn thing is constructing for prune expressions.
- - &log("| \"find\" regex for pruning is:");
- - &log("| $rex");
- - &line();
- + (my $temp = $rex) =~ s/\\([()|])/$1/g;
- + &log("| \"find\" regex for pruning (shell escaping omitted for clarity) is:");
- + &log("| $temp");
- $cmd .= '-regex ' . $rex . ' -prune -o ';
- } else {
- # Show what the darn thing is constructing for prune expressions.
- @@ -4906,6 +4907,7 @@
- # don't have permissions on and are running as non-root)
- $cmd .= "-depth ";
- }
- + &line();
-
- $cmd .= "$::mountpoint_flag ";
- $cmd .= "! -type s ";
- @@ -5301,12 +5303,14 @@
- print $::msg "| Checking '$cfg::buffer' on this machine... ";
- $pipecmd = "sh $tmp_script ";
- } else {
- + $pipecmd =
- + "$::remoteshell $host '$::path{mkdir} -p $cfg::tmpdir'; " .
- + "cat $tmp_script | ($::remoteshell $host 'cat > $tmp_script; " .
- + "sh $tmp_script; rm -rf $cfg::tmpdir')";
- print $::msg "| Checking '$cfg::buffer' on host $host... ";
- - $pipecmd = "$::remoteshell $host '$::path{mkdir} -p $cfg::tmpdir'; cat $tmp_script | ($::remoteshell $host 'cat > $tmp_script; sh $tmp_script; rm -rf $cfg::tmpdir')";
- }
-
- if (!defined($::debug)) {
- -
- open(PIPE,"$pipecmd |") || die;
-
- $explicit_success = 0;
- Index: flexbackup.conf
- ===================================================================
- --- flexbackup.conf (.../tags/flexbackup-1.2.1-r5) (revision 784)
- +++ flexbackup.conf (.../trunk) (revision 784)
- @@ -12,19 +12,27 @@
-
- # Configure backup "sets".
- # Not needed if you use "-dir <dir>" to backup one tree at a time.
- -# Each set is a simple space-separated list of filesystems
- -# Remote filesystems should denoted as 'host:dir'
- -# You can use anything (other than 'all') as set names
- -#
- -# Example:
- -# $set{'set1'} = "/home /usr";
- -# $set{'set2'} = "/dir3 machine2:/dir4 machine3:/dir5";
- +# Each set is a simple space-separated list of filesystems. Remote filesystems
- +# should denoted as 'host:dir'. If the filesystem name (local or remote)
- +# contains spaces, then it should be enclosed in its entirety in double quotes.
- +# Multiple quoted filesystems included in a set should be space separated just
- +# like unquoted filesystem. The Perl '.' string concatenation operator can be
- +# used to split excessively long lines.
- +#
- +# You can use anything (other than 'all') as set names.
- +#
- +# Examples:
- +# $set{'set1'} = '/home /usr';
- +# $set{'set2'} = '/dir3 machine2:/dir4 machine3:/dir5';
- +# $set{'set3'} =
- +# '"/mnt/winmachine1/Documents and Settings" ' .
- +# '"/mnt/winmachine1/Program Files"';
- #
- # "-set all" will back up all defined sets. If you are doing a full backup
- # using tapes, each "set" will go onto a different tape and you will be
- # prompted for tape change in between.
- #
- -$set{'backup'} = "/home";
- +$set{'backup'} = '/home';
-
- # Subtree pruning
- # A space-separated list of directories to prune from each backup.
- @@ -42,7 +50,7 @@
- # start with "./". To be helpful, FlexBackup packages each space-separated
- # prune directory as follows. If you have a prune list like this
- #
- -# $prune{'/somedir'} = "one two three";
- +# $prune{'/somedir'} = 'one two three';
- #
- # then, the constructed -regex argument to "find" looks like this
- #
- @@ -54,31 +62,38 @@
- # terms that match the current base directory in the set you're backing
- # up. For example, if your backup set definition looks like this
- #
- -# $set{'daily'} = "/home /root /var /usr";
- +# $set{'daily'} = '/home /root /var /usr';
- #
- # and you want to do some exclusions in "/home" and "/var" (but not the other
- # directories), you must set up a prune list for those two directories
- # separately. For example, to exclude bert's and ernie's home directories plus
- # /var/tmp, you would need the following:
- #
- -# $prune{'/home'} = "bert ernie";
- -# $prune{'/var'} = "tmp";
- +# $prune{'/home'} = 'bert ernie';
- +# $prune{'/var'} = 'tmp';
- #
- # In particular, combining these *does not* work. For example, this
- #
- -# $prune{'/'} = "home/bert home/ernie var/tmp";
- +# $prune{'/'} = 'home/bert home/ernie var/tmp';
- #
- # doesn't work, unless, of course, your backup set is backing up "/",
- # which our example is not.
- #
- +# Like the $set configuration item, special handling is required for
- +# directories with spaces in them. Double quotes should surround pruning
- +# targets but not the key. Example:
- +#
- +# $prune{'/mnt/winmachine1/Documents and Settings'} =
- +# '"user1/Local Settings/Temp" user2';
- +#
- # Many other complex and abstruse variations are possible. Here's one
- # interesting corner case. If you want to preserve a directory but none of its
- # contents, you can do it. Picking on ernie from our previous example, preserve
- # only his home directory:
- #
- -# $prune{'/home'} = "ernie/.*";
- +# $prune{'/home'} = 'ernie/.*';
- #
- -$prune{'/'} = "tmp proc";
- +$prune{'/'} = 'tmp proc';
-
- # Compression
- $compress = 'gzip'; # one of false/gzip/bzip2/lzop/zip/compress/hardware/lzma
- Index: flexbackup.conf.5
- ===================================================================
- --- flexbackup.conf.5 (.../tags/flexbackup-1.2.1-r5) (revision 784)
- +++ flexbackup.conf.5 (.../trunk) (revision 784)
- @@ -24,25 +24,51 @@
- .TP
- \fB$set{\fI'tag'\fR}\fR = \fI'/dir'\fR;
- Configure backup \(dqsets\(dq. Not needed if \(dq-dir <dir>\(dq is used to
- -backup one tree at a time. Each set is a simple space-separated list of
- -filesystems/directories. Remote filesystems should be denoted as
- -\(dqhost:directory\(dq. You can use anything (other than \fI'all'\fR) as set
- -names. Using \(dq-set all\(dq will back up all defined sets. If you are doing
- -a full backup using tapes, each \(dqset\(dq will go onto a different tape and
- -you will be prompted for tape change in between. Examples:
- +backup one tree at a time.
- +Each set is a simple space-separated list of filesystems/directories.
- +Remote filesystems should be denoted as \(dqhost:directory\(dq.
- +You can use anything (other than \fI'all'\fR) as set names.
- +Using \(dq-set all\(dq will back up all defined sets.
- +If you are doing a full backup using tapes, each \(dqset\(dq will go onto a
- +different tape and you will be prompted for tape change in between.
- +Examples:
- .RS
- .PP
- \fB$set{\fI'set1'\fI}\fR = \fI'/home /usr'\fR;
- .br
- \fB$set{\fI'set2'\fI}\fR = \fI'/dir3 machine2:/dir4 machine3:/dir5'\fR;
- +.br
- +.PP
- +Directories (local or remote) with spaces in their names should be enclosed in
- +their entirety in double quotes.
- +Multiple quoted directories included in a set should be space separated just
- +like unquoted directories.
- +The Perl '.' string concatenation operator can be used to split excessively
- +long sets.
- +Example:
- +.PP
- +\fB$set{\fI'set3'\fI}\fR = \fI
- + '\(dq/mnt/winmachine1/Documents and Settings\(dq ' .
- + '\(dq/mnt/winmachine1/Program Files\(dq';\fR
- .RE
- .TP
- \fB$prune{\fI'/'\fR}\fR = \fI'tmp proc'\fR;
- Configure subtree pruning. A space-separated list of directories to prune from
- each backup. Key is a filesystem/directory or \(dqhost:directory\(dq spec as
- -outlined above. Regular expressions allowed (not shell-type wildcards!). There
- -is additional explanation (and a lot of examples) in the provided configuration
- -file.
- +outlined above. Regular expressions allowed (not shell-type wildcards!).
- +.RS
- +.PP
- +Like the \fB$set\fR configuration item, special handling is required for
- +directories with spaces in them. Double quotes should surround pruning targets
- +but not the key. Example:
- +.PP
- +\fB$prune{\fI'/mnt/winmachine1/Documents and Settings'\fI}\fR =
- + \fI'\(dquser1/Local Settings/Temp\(dq user2'\fR;
- +.br
- +.PP
- +There are lots of examples and additional explanation in the provided sample
- +configuration file.
- +.RE
- .TP
- \fB$compress\fR = \fI'false|gzip|bzip2|lzop|zip|compress|hardware'\fR;
- .TQ
- @@ -207,7 +233,7 @@
- .RS
- .TP
- If GNU \fBtar\fR is called \fB\(dqgtar\(dq\fR on your system:
- -\fB$path{'tar'} = 'gtar';
- +\fB$path{'tar'} = 'gtar';\fR
- .TP
- Or it can be used to \fB\(dqsudo\(dq\fR certain commands:
- \fB$path{\fI'find'\fR}\fR = \fI'sudo find'\fR;
- @@ -304,3 +330,6 @@
- Written by Edwin Huffstutler (edwinh@computer.org)
- .SH "SEE ALSO"
- \fBflexbackup\fR(1)
- +.\" Local Variables:
- +.\" mode: nroff
- +.\" End:
|