# Craig Barratt <cbarratt@users.sourceforge.net>
#
# COPYRIGHT
-# Copyright (C) 2001 Craig Barratt
+# Copyright (C) 2001-2003 Craig Barratt
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
#
#========================================================================
#
-# Version __VERSION__, released __RELEASEDATE__.
+# Version 2.0.0_CVS, released 18 Jan 2003.
#
# See http://backuppc.sourceforge.net.
#
#========================================================================
use strict;
+no utf8;
use vars qw(%Conf %OrigConf);
use lib "./lib";
last if ( $ConfigPath eq ""
|| ($ConfigPath =~ /^\// && -r $ConfigPath && -w $ConfigPath) );
my $problem = "is not an absolute path";
- $problem = "is no writable" if ( !-w $ConfigPath );
+ $problem = "is not writable" if ( !-w $ConfigPath );
$problem = "is not readable" if ( !-r $ConfigPath );
$problem = "doesn't exist" if ( !-f $ConfigPath );
print("The file '$ConfigPath' $problem.\n");
if ( $ConfigPath ne "" && -r $ConfigPath ) {
(my $topDir = $ConfigPath) =~ s{/[^/]+/[^/]+$}{};
die("BackupPC::Lib->new failed\n")
- if ( !($bpc = BackupPC::Lib->new($topDir)) );
+ if ( !($bpc = BackupPC::Lib->new($topDir, ".", 1)) );
%Conf = $bpc->Conf();
%OrigConf = %Conf;
$Conf{TopDir} = $topDir;
'gtar/tar' => "TarClientPath",
smbclient => "SmbClientPath",
nmblookup => "NmbLookupPath",
+ rsync => "RsyncClientPath",
ping => "PingPath",
df => "DfPath",
- 'ssh2/ssh' => "SshPath",
+ 'ssh/ssh2' => "SshPath",
sendmail => "SendmailPath",
hostname => "HostnamePath",
);
Apache image directory: /usr/local/apache/htdocs/BackupPC
URL for image directory: /BackupPC
+The URL for the image directory should start with a slash.
+
EOF
while ( 1 ) {
$Conf{CgiImageDir} = prompt("--> Apache image directory (full path)",
last if ( $Conf{CgiImageDir} =~ /^\// );
}
while ( 1 ) {
- $Conf{CgiImageDirURL} = prompt("--> URL for image directory (omit http://host)",
+ $Conf{CgiImageDirURL} = prompt("--> URL for image directory (omit http://host; starts with '/')",
$Conf{CgiImageDirURL});
- last if ( $Conf{CgiImageDirURL} ne "" );
+ last if ( $Conf{CgiImageDirURL} =~ /^\// );
}
}
printf("Installing library in $Conf{InstallDir}/lib\n");
foreach my $lib ( qw(BackupPC/Lib.pm BackupPC/FileZIO.pm BackupPC/Attrib.pm
- BackupPC/PoolWrite.pm BackupPC/Xfer/Tar.pm BackupPC/Xfer/Smb.pm
- BackupPC/Zip/FileMember.pm
- BackupPC/Lang/en.pm BackupPC/Lang/fr.pm
+ BackupPC/PoolWrite.pm BackupPC/View.pm BackupPC/Xfer/Tar.pm
+ BackupPC/Xfer/Smb.pm BackupPC/Xfer/Rsync.pm
+ BackupPC/Xfer/RsyncFileIO.pm BackupPC/Zip/FileMember.pm
+ BackupPC/Lang/en.pm BackupPC/Lang/fr.pm BackupPC/Lang/es.pm
+ BackupPC/Lang/de.pm
) ) {
InstallFile("lib/$lib", "$Conf{InstallDir}/lib/$lib", 0444);
}
}
printf("Making init.d scripts\n");
-foreach my $init ( qw(linux-backuppc solaris-backuppc debian-backuppc) ) {
+foreach my $init ( qw(gentoo-backuppc gentoo-backuppc.conf linux-backuppc
+ solaris-backuppc debian-backuppc suse-backuppc) ) {
InstallFile("init.d/src/$init", "init.d/$init", 0444);
}
}
$Conf{EMailFromUserName} ||= $Conf{BackupPCUser};
$Conf{EMailAdminUserName} ||= $Conf{BackupPCUser};
+
+#
+# Update various config parameters
+#
+
+#
+# Guess $Conf{CgiURL}
+#
+if ( !defined($Conf{CgiURL}) ) {
+ if ( $Conf{CgiDir} =~ m{cgi-bin(/.*)} ) {
+ $Conf{CgiURL} = "'http://$Conf{ServerHost}/cgi-bin$1/BackupPC_Admin'";
+ } else {
+ $Conf{CgiURL} = "'http://$Conf{ServerHost}/cgi-bin/BackupPC_Admin'";
+ }
+}
+
+#
+# The smbclient commands have moved from hard-coded to the config file.
+# $Conf{SmbClientArgs} no longer exists, so merge it into the new
+# commands if it still exists.
+#
+if ( defined($Conf{SmbClientArgs}) ) {
+ if ( $Conf{SmbClientArgs} ne "" ) {
+ foreach my $param ( qw(SmbClientRestoreCmd SmbClientFullCmd
+ SmbClientIncrCmd) ) {
+ $newConf->[$newVars->{$param}]{text}
+ =~ s/(-E\s+-N)/$1 $Conf{SmbClientArgs}/;
+ }
+ }
+ delete($Conf{SmbClientArgs});
+}
+
#
# IncrFill should now be off
#
$Conf{IncrFill} = 0;
+
#
# Figure out sensible arguments for the ping command
#
-if ( $^O eq "solaris" || $^O eq "sunos" ) {
- $Conf{PingArgs} ||= '-s $host 56 1';
-} elsif ( $^O eq "linux" || $^O eq "openbsd" || $^O eq "netbsd" ) {
- $Conf{PingArgs} ||= '-c 1 -w 3 $host';
-} else {
- $Conf{PingArgs} ||= '-c 1 $host';
+if ( defined($Conf{PingArgs}) ) {
+ $Conf{PingCmd} = '$pingPath ' . $Conf{PingArgs};
+} elsif ( !defined($Conf{PingCmd}) ) {
+ if ( $^O eq "solaris" || $^O eq "sunos" ) {
+ $Conf{PingCmd} = '$pingPath -s $host 56 1';
+ } elsif ( ($^O eq "linux" || $^O eq "openbsd" || $^O eq "netbsd")
+ && !system("$Conf{PingPath} -c 1 -w 3 localhost") ) {
+ $Conf{PingCmd} = '$pingPath -c 1 -w 3 $host';
+ } else {
+ $Conf{PingCmd} = '$pingPath -c 1 $host';
+ }
+ delete($Conf{PingArgs});
+}
+
+#
+# Figure out sensible arguments for the df command
+#
+if ( !defined($Conf{DfCmd}) ) {
+ if ( $^O eq "solaris" || $^O eq "sunos" ) {
+ $Conf{DfCmd} = '$dfPath -k $topDir';
+ }
+}
+
+#
+# $Conf{SmbClientTimeout} is now $Conf{ClientTimeout}
+#
+if ( defined($Conf{SmbClientTimeout}) ) {
+ $Conf{ClientTimeout} = $Conf{SmbClientTimeout};
+ delete($Conf{SmbClientTimeout});
}
-my $confCopy = "$dest.pre-1.4.0.b1";
+my $confCopy = "$dest.pre-__VERSION__";
if ( -f $dest && !-f $confCopy ) {
#
# Make copy of config file, preserving ownership and modes
unless chown($uid, $gid, $confCopy);
die("can't chmod $mode $confCopy\n") unless chmod($mode, $confCopy);
}
-open(OUT, ">$dest") || die("can't open $dest for writing\n");
+open(OUT, ">", $dest) || die("can't open $dest for writing\n");
+binmode(OUT);
my $blockComment;
foreach my $var ( @$newConf ) {
if ( length($blockComment)
print <<EOF;
-Ok, it looks we are finished. There are several more things you
+Ok, it looks like we are finished. There are several more things you
will need to do:
- Browse through the config file, $Conf{TopDir}/conf/config.pl,
Enjoy!
EOF
+if ( $ENV{LANG} =~ /utf/i && $^V ge v5.8.0 ) {
+ print <<EOF;
+
+WARNING: Your LANG environment variable is set to $ENV{LANG}, which
+doesn't behave well with this version of perl. Please set the
+LANG environment variable to en_US before running BackupPC.
+
+On RH-8 this setting is in the file /etc/sysconfig/i18n, or you
+could set it in BackupPC's init.d script.
+EOF
+}
+
+exit(0);
+
###########################################################################
# Subroutines
###########################################################################
if ( $binary ) {
die("can't copy($prog, $dest)\n") unless copy($prog, $dest);
} else {
- open(PROG, $prog) || die("can't open $prog for reading\n");
- open(OUT, ">$dest") || die("can't open $dest for writing\n");
+ open(PROG, $prog) || die("can't open $prog for reading\n");
+ open(OUT, ">", $dest) || die("can't open $dest for writing\n");
+ binmode(PROG);
+ binmode(OUT);
while ( <PROG> ) {
s/__INSTALLDIR__/$Conf{InstallDir}/g;
s/__TOPDIR__/$Conf{TopDir}/g;
s/__BACKUPPCUSER__/$Conf{BackupPCUser}/g;
s/__CGIDIR__/$Conf{CgiDir}/g;
if ( $first && /^#.*bin\/perl/ ) {
- if ( $Perl56 ) {
- #
- # perl56 and later is taint ok
- #
- print OUT "#!$Conf{PerlPath} -T\n";
- } else {
- #
- # prior to perl56, File::Find fails taint checks,
- # so we run without -T. It's still safe.
- #
- print OUT "#!$Conf{PerlPath}\n";
- }
+ #
+ # Fill in correct path to perl (no taint for >= 2.0.1).
+ #
+ print OUT "#!$Conf{PerlPath}\n";
} else {
print OUT;
}
{
my($file) = @_;
open(C, $file) || die("can't open $file");
+ binmode(C);
my($out, @conf, $var);
my $comment = 1;
my $allVars = {};
while ( <C> ) {
- if ( /^\s*#/ ) {
+ if ( /^#/ ) {
if ( $comment ) {
$out .= $_;
} else {
$allVars->{$var} = @conf if ( defined($var) );
push(@conf, {
text => $out,
- var => $var,
+ var => $var,
});
$out = $_;
} else {