reported by Doug Lytle.
* Added comment to Cmd settings in conf/config.pl that they are
not executed by a shell, as suggested by Erik van Linstee.
* Added undefIfEmpty => 1 to lib/BackupPC/Config/Meta.pm for
RsyncRestoreArgs, TarClientRestoreCmd and SmbClientRestoreCmd
so that restores can be disabled by clear these fields in the
CGI editor. Patch supplied by Stephen Joyce
* Replaced the FAQ link with Wiki in the navigation bar and added
mention of the Wiki to the documentation. Since these navigation
bar links are specified in the config file, upgrades will keep
the old FAQ link. The FAQ opening page will have a prominent
link to the Wiki.
# $dfPath path to df ($Conf{DfPath})
# $topDir top-level BackupPC data directory
#
# $dfPath path to df ($Conf{DfPath})
# $topDir top-level BackupPC data directory
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{DfCmd} = '$dfPath $topDir';
#
$Conf{DfCmd} = '$dfPath $topDir';
#
# . ' $serverInitdPath start'
# . ' < /dev/null >& /dev/null';
#
# . ' $serverInitdPath start'
# . ' < /dev/null >& /dev/null';
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{ServerInitdPath} = '';
$Conf{ServerInitdStartCmd} = '';
$Conf{ServerInitdPath} = '';
$Conf{ServerInitdStartCmd} = '';
# $X_option exclude option (if $fileList is an exclude list)
# $timeStampFile start time for incremental dump
#
# $X_option exclude option (if $fileList is an exclude list)
# $timeStampFile start time for incremental dump
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{SmbClientFullCmd} = '$smbClientPath \\\\$host\\$shareName'
. ' $I_option -U $userName -E -N -d 1'
. ' -c tarmode\\ full -Tc$X_option - $fileList';
$Conf{SmbClientFullCmd} = '$smbClientPath \\\\$host\\$shareName'
. ' $I_option -U $userName -E -N -d 1'
. ' -c tarmode\\ full -Tc$X_option - $fileList';
#
# Same variable substitutions are applied as $Conf{SmbClientFullCmd}.
#
#
# Same variable substitutions are applied as $Conf{SmbClientFullCmd}.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{SmbClientIncrCmd} = '$smbClientPath \\\\$host\\$shareName'
. ' $I_option -U $userName -E -N -d 1'
. ' -c tarmode\\ full -TcN$X_option $timeStampFile - $fileList';
$Conf{SmbClientIncrCmd} = '$smbClientPath \\\\$host\\$shareName'
. ' $I_option -U $userName -E -N -d 1'
. ' -c tarmode\\ full -TcN$X_option $timeStampFile - $fileList';
# You should set $Conf{SmbClientRestoreCmd} to undef and the
# corresponding CGI restore option will be removed.
#
# You should set $Conf{SmbClientRestoreCmd} to undef and the
# corresponding CGI restore option will be removed.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{SmbClientRestoreCmd} = '$smbClientPath \\\\$host\\$shareName'
. ' $I_option -U $userName -E -N -d 1'
. ' -c tarmode\\ full -Tx -';
$Conf{SmbClientRestoreCmd} = '$smbClientPath \\\\$host\\$shareName'
. ' $I_option -U $userName -E -N -d 1'
. ' -c tarmode\\ full -Tx -';
#
# This setting only matters if $Conf{XferMethod} = 'tar'.
#
#
# This setting only matters if $Conf{XferMethod} = 'tar'.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{TarClientCmd} = '$sshPath -q -x -n -l root $host'
. ' env LC_ALL=C $tarPath -c -v -f - -C $shareName+'
. ' --totals';
$Conf{TarClientCmd} = '$sshPath -q -x -n -l root $host'
. ' env LC_ALL=C $tarPath -c -v -f - -C $shareName+'
. ' --totals';
# $Conf{TarClientRestoreCmd} to undef and the corresponding CGI
# restore option will be removed.
#
# $Conf{TarClientRestoreCmd} to undef and the corresponding CGI
# restore option will be removed.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{TarClientRestoreCmd} = '$sshPath -q -x -l root $host'
. ' env LC_ALL=C $tarPath -x -p --numeric-owner --same-owner'
. ' -v -f - -C $shareName+';
$Conf{TarClientRestoreCmd} = '$sshPath -q -x -l root $host'
. ' env LC_ALL=C $tarPath -x -p --numeric-owner --same-owner'
. ' -v -f - -C $shareName+';
#
# This setting only matters if $Conf{XferMethod} = 'rsync'.
#
#
# This setting only matters if $Conf{XferMethod} = 'rsync'.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l root $host $rsyncPath $argList+';
#
$Conf{RsyncClientRestoreCmd} = '$sshPath -q -x -l root $host $rsyncPath $argList+';
#
#
# This setting only matters if $Conf{XferMethod} = 'backuppcd'.
#
#
# This setting only matters if $Conf{XferMethod} = 'backuppcd'.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{BackupPCdRestoreCmd} = '$bpcdPath TODO';
$Conf{BackupPCdRestoreCmd} = '$bpcdPath TODO';
# $archiveloc The location to put the archive
# $parfile The amount of parity data to create (percentage)
#
# $archiveloc The location to put the archive
# $parfile The amount of parity data to create (percentage)
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{ArchiveClientCmd} = '$Installdir/bin/BackupPC_archiveHost'
. ' $tarCreatePath $splitpath $parpath $host $backupnumber'
. ' $compression $compext $splitsize $archiveloc $parfile *';
$Conf{ArchiveClientCmd} = '$Installdir/bin/BackupPC_archiveHost'
. ' $tarCreatePath $splitpath $parpath $host $backupnumber'
. ' $compression $compext $splitsize $archiveloc $parfile *';
# This command is only used for DHCP hosts: given an IP address, this
# command should try to find its NetBios name.
#
# This command is only used for DHCP hosts: given an IP address, this
# command should try to find its NetBios name.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{NmbLookupCmd} = '$nmbLookupPath -A $host';
#
$Conf{NmbLookupCmd} = '$nmbLookupPath -A $host';
#
# Experiment manually for your site to see what form of nmblookup command
# works.
#
# Experiment manually for your site to see what form of nmblookup command
# works.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{NmbLookupFindHostCmd} = '$nmbLookupPath $host';
#
$Conf{NmbLookupFindHostCmd} = '$nmbLookupPath $host';
#
# exit status (0 even on failure). Replace with "ping $host 1", which
# gets the correct exit status but we don't get the round-trip time.
#
# exit status (0 even on failure). Replace with "ping $host 1", which
# gets the correct exit status but we don't get the round-trip time.
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{PingCmd} = '$pingPath -c 1 $host';
#
$Conf{PingCmd} = '$pingPath -c 1 $host';
#
# $type set to "archive"
# $cmdType set to ArchivePreUserCmd or ArchivePostUserCmd
#
# $type set to "archive"
# $cmdType set to ArchivePreUserCmd or ArchivePostUserCmd
#
+# Note: all Cmds are executed directly without a shell, so the prog name
+# needs to be a full path and you can't include shell syntax like
+# redirection and pipes; put that in a script if you need it.
+#
$Conf{DumpPreUserCmd} = undef;
$Conf{DumpPostUserCmd} = undef;
$Conf{DumpPreShareCmd} = undef;
$Conf{DumpPreUserCmd} = undef;
$Conf{DumpPostUserCmd} = undef;
$Conf{DumpPreShareCmd} = undef;
lname => "Documentation", # actually displays $Lang->{Documentation}
},
{
lname => "Documentation", # actually displays $Lang->{Documentation}
},
{
- link => "http://backuppc.sourceforge.net/faq",
- name => "FAQ", # displays literal "FAQ"
+ link => "http://backuppc.wiki.sourceforge.net",
+ name => "Wiki", # displays literal "Wiki"
},
{
link => "http://backuppc.sourceforge.net",
},
{
link => "http://backuppc.sourceforge.net",
This page has links to the current releases of BackupPC.
This page has links to the current releases of BackupPC.
-BackupPC has a FAQ at L<http://backuppc.sourceforge.net/faq>.
+BackupPC has a Wiki at L<http://backuppc.wiki.sourceforge.net>.
+Everyone is encouraged to contribute to the Wiki. Anyone with
+a SourceForge account can edit the Wiki.
+
+The old FAQ is at L<http://backuppc.sourceforge.net/faq>, but
+is deprecated in favor of the Wiki.
all of you! Feel free to vote for BackupPC at
L<http://freshmeat.net/projects/backuppc>.
all of you! Feel free to vote for BackupPC at
L<http://freshmeat.net/projects/backuppc>.
-Also, everyone is encouraged to contribute patches, bug reports, feature
-and design suggestions, new code, FAQs, and documentation corrections or
-improvements. Answering questions on the mailing list is a big help too.
+Also, everyone is encouraged to contribute patches, bug reports,
+feature and design suggestions, new code, Wiki additions (you can
+do those directly) and documentation corrections or improvements.
+Answering questions on the mailing list is a big help too.
=head1 Installing BackupPC
=head1 Installing BackupPC
=head2 Fixing installation problems
=head2 Fixing installation problems
-Please see the FAQ at L<http://backuppc.sourceforge.net/faq> for
-debugging suggestions.
+Please see the Wiki at L<http://backuppc.wiki.sourceforge.net> for
+debugging suggestions. If you find a solution to your problem that
+could help other users please add it to the Wiki!
Youlin Feng provided the Chinese translation for 3.1.0.
Youlin Feng provided the Chinese translation for 3.1.0.
-Semper provided the Polish translation for 3.1.0.
+Karol 'Semper' Stelmaczonek provided the Polish translation for 3.1.0.
Jeremy Tietsort provided the host summary table sorting feature for 3.1.0.
Jeremy Tietsort provided the host summary table sorting feature for 3.1.0.
#
#========================================================================
#
#
#========================================================================
#
-# Version 3.1.0beta0, released 3 Sep 2007.
+# Version 3.1.0beta1, released 23 Sep 2007.
#
# See http://backuppc.sourceforge.net.
#
#
# See http://backuppc.sourceforge.net.
#
SmbClientPath => {type => "execPath", undefIfEmpty => 1},
SmbClientFullCmd => "string",
SmbClientIncrCmd => "string",
SmbClientPath => {type => "execPath", undefIfEmpty => 1},
SmbClientFullCmd => "string",
SmbClientIncrCmd => "string",
- SmbClientRestoreCmd => "string",
+ SmbClientRestoreCmd => {type => "string", undefIfEmpty => 1},
TarShareName => {
type => "list",
TarShareName => {
type => "list",
TarClientCmd => "string",
TarFullArgs => "string",
TarIncrArgs => "string",
TarClientCmd => "string",
TarFullArgs => "string",
TarIncrArgs => "string",
- TarClientRestoreCmd => "string",
+ TarClientRestoreCmd => {type => "string", undefIfEmpty => 1},
TarClientPath => {type => "string", undefIfEmpty => 1},
RsyncShareName => {
TarClientPath => {type => "string", undefIfEmpty => 1},
RsyncShareName => {
RsyncCsumCacheVerifyProb => "float",
RsyncArgs => {
RsyncCsumCacheVerifyProb => "float",
RsyncArgs => {
- type => "list",
- emptyOk => 1,
- child => "string",
+ type => "list",
+ emptyOk => 1,
+ child => "string",
- type => "list",
- emptyOk => 1,
- child => "string",
+ type => "list",
+ emptyOk => 1,
+ undefIfEmpty => 1,
+ child => "string",
},
BackupPCdCmd => "string",
},
BackupPCdCmd => "string",
CgiURL => "string",
Language => {
type => "select",
CgiURL => "string",
Language => {
type => "select",
- values => [qw(de en es fr it nl pt_br zh_CN)],
+ values => [qw(de en es fr it nl pl pt_br zh_CN)],
},
CgiUserHomePageCheck => "string",
CgiUserUrlCreate => "string",
},
CgiUserHomePageCheck => "string",
CgiUserUrlCreate => "string",
BEGIN {
eval "use IO::Dirent qw( readdirent DT_DIR );";
BEGIN {
eval "use IO::Dirent qw( readdirent DT_DIR );";
- $IODirentOk = 1 if ( !$@ );
+ if ( !$@ && opendir(my $fh, ".") ) {
+ #
+ # Make sure the IO::Dirent really works - some installs
+ # on certain file systems don't return a valid type.
+ #
+ my $dt_dir = eval("DT_DIR");
+ foreach my $e ( readdirent($fh) ) {
+ if ( $e->{name} eq "." && $e->{type} == $dt_dir ) {
+ $IODirentOk = 1;
+ last;
+ }
+ }
+ closedir($fh);
+ }
-my $Version = "3.1.0beta0";
-my $ReleaseDate = "3 Sep 2007";
+my $Version = "3.1.0beta1";
+my $ReleaseDate = "21 Oct 2007";
my $DistDir = "dist/BackupPC-$Version";
my @PerlSrc = qw(
my $DistDir = "dist/BackupPC-$Version";
my @PerlSrc = qw(