X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=configure.pl;h=1f787dfe146c852e664f72e4700eaa6b1c471324;hp=d4ec87147c9c0fd49d19379f35d4fe041b9dc154;hb=8f5625f9cdf47f8e04be654c4954838b2df3e26d;hpb=1282f5f90cf092cb406ee186e6bf328875e4c306 diff --git a/configure.pl b/configure.pl index d4ec871..1f787df 100755 --- a/configure.pl +++ b/configure.pl @@ -15,7 +15,7 @@ # Craig Barratt # # COPYRIGHT -# Copyright (C) 2001 Craig Barratt +# Copyright (C) 2001-2004 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 @@ -33,13 +33,14 @@ # #======================================================================== # -# 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"; @@ -90,7 +91,7 @@ while ( 1 ) { 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"); @@ -99,11 +100,11 @@ my $bpc; 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; - my $err = $bpc->ServerConnect($Conf{ServerHost}, $Conf{ServerPort}, 1); + my $err = $bpc->ServerConnect($Conf{ServerHost}, $Conf{ServerPort}, 1); if ( $err eq "" ) { print < "PerlPath", - 'gtar/tar' => "TarClientPath", - smbclient => "SmbClientPath", - nmblookup => "NmbLookupPath", - ping => "PingPath", - df => "DfPath", - 'ssh2/ssh' => "SshPath", - sendmail => "SendmailPath", - hostname => "HostnamePath", + perl => "PerlPath", + 'gtar/tar' => "TarClientPath", + smbclient => "SmbClientPath", + nmblookup => "NmbLookupPath", + rsync => "RsyncClientPath", + ping => "PingPath", + df => "DfPath", + 'ssh/ssh2' => "SshPath", + sendmail => "SendmailPath", + hostname => "HostnamePath", + split => "SplitPath", + 'parchive/par' => "ParPath", + cat => "CatPath", + gzip => "GzipPath", + bzip2 => "Bzip2Path", ); foreach my $prog ( sort(keys(%Programs)) ) { @@ -147,7 +154,7 @@ I found the following locations for these programs: EOF foreach my $prog ( sort(keys(%Programs)) ) { - printf(" %-11s => %s\n", $prog, $Conf{$Programs{$prog}}); + printf(" %-12s => %s\n", $prog, $Conf{$Programs{$prog}}); } print "\n"; last if (prompt('--> Are these paths correct?', 'y') =~ /^y/i); @@ -327,6 +334,8 @@ needs to know the URL to access these images. Example: 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)", @@ -334,9 +343,9 @@ EOF 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} =~ /^\// ); } } @@ -356,7 +365,12 @@ exit unless prompt("--> Do you want to continue?", "y") =~ /y/i; # # Create install directories # -foreach my $dir ( qw(bin lib/BackupPC/Xfer lib/BackupPC/Zip doc) ) { +foreach my $dir ( qw(bin doc + lib/BackupPC/CGI + lib/BackupPC/Lang + lib/BackupPC/Xfer + lib/BackupPC/Zip + ) ) { next if ( -d "$Conf{InstallDir}/$dir" ); mkpath("$Conf{InstallDir}/$dir", 0, 0775); if ( !-d "$Conf{InstallDir}/$dir" @@ -397,6 +411,7 @@ printf("Installing binaries in $Conf{InstallDir}/bin\n"); foreach my $prog ( qw(BackupPC BackupPC_dump BackupPC_link BackupPC_nightly BackupPC_sendEmail BackupPC_tarCreate BackupPC_trashClean BackupPC_tarExtract BackupPC_compressPool BackupPC_zcat + BackupPC_archive BackupPC_archiveHost BackupPC_restore BackupPC_serverMesg BackupPC_zipCreate ) ) { InstallFile("bin/$prog", "$Conf{InstallDir}/bin/$prog", 0555); } @@ -407,10 +422,44 @@ foreach my $prog ( qw(BackupPC BackupPC_dump BackupPC_link BackupPC_nightly unlink("$Conf{InstallDir}/bin/BackupPC_queueAll"); 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 +foreach my $lib ( qw( + BackupPC/Lib.pm + BackupPC/FileZIO.pm + BackupPC/Attrib.pm + BackupPC/PoolWrite.pm + BackupPC/View.pm + BackupPC/Xfer/Archive.pm + BackupPC/Xfer/Tar.pm + BackupPC/Xfer/Smb.pm + BackupPC/Xfer/Rsync.pm + BackupPC/Xfer/RsyncDigest.pm + BackupPC/Xfer/RsyncFileIO.pm BackupPC/Zip/FileMember.pm - BackupPC/Lang/en.pm BackupPC/Lang/fr.pm + BackupPC/Lang/en.pm + BackupPC/Lang/fr.pm + BackupPC/Lang/es.pm + BackupPC/Lang/de.pm + BackupPC/Lang/it.pm + BackupPC/CGI/AdminOptions.pm + BackupPC/CGI/Archive.pm + BackupPC/CGI/ArchiveInfo.pm + BackupPC/CGI/Browse.pm + BackupPC/CGI/DirHistory.pm + BackupPC/CGI/EmailSummary.pm + BackupPC/CGI/GeneralInfo.pm + BackupPC/CGI/HostInfo.pm + BackupPC/CGI/Lib.pm + BackupPC/CGI/LOGlist.pm + BackupPC/CGI/Queue.pm + BackupPC/CGI/ReloadServer.pm + BackupPC/CGI/RestoreFile.pm + BackupPC/CGI/RestoreInfo.pm + BackupPC/CGI/Restore.pm + BackupPC/CGI/StartServer.pm + BackupPC/CGI/StartStopBackup.pm + BackupPC/CGI/StopServer.pm + BackupPC/CGI/Summary.pm + BackupPC/CGI/View.pm ) ) { InstallFile("lib/$lib", "$Conf{InstallDir}/lib/$lib", 0444); } @@ -421,10 +470,21 @@ if ( $Conf{CgiImageDir} ne "" ) { (my $destImg = $img) =~ s{^images/}{}; InstallFile($img, "$Conf{CgiImageDir}/$destImg", 0444, 1); } + + # + # Install new CSS file, making a backup copy if necessary + # + my $cssBackup = "$Conf{CgiImageDir}/BackupPC_stnd.css.pre-__VERSION__"; + if ( -f "$Conf{CgiImageDir}/BackupPC_stnd.css" && !-f $cssBackup ) { + rename("$Conf{CgiImageDir}/BackupPC_stnd.css", $cssBackup); + } + InstallFile("conf/BackupPC_stnd.css", + "$Conf{CgiImageDir}/BackupPC_stnd.css", 0444, 0); } printf("Making init.d scripts\n"); -foreach my $init ( qw(linux-backuppc solaris-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); } @@ -451,22 +511,113 @@ if ( -f $dest ) { } $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}); +} + +# +# CSS is now stored in a file rather than a big config variable. +# +delete($Conf{CSSstylesheet}); + +# +# The blackout timing settings are now stored in a list of hashes, rather +# than three scalar parameters. +# +if ( defined($Conf{BlackoutHourBegin}) ) { + $Conf{BlackoutPeriods} = [ + { + hourBegin => $Conf{BlackoutHourBegin}, + hourEnd => $Conf{BlackoutHourEnd}, + weekDays => $Conf{BlackoutWeekDays}, + } + ]; + delete($Conf{BlackoutHourBegin}); + delete($Conf{BlackoutHourEnd}); + delete($Conf{BlackoutWeekDays}); +} + +# +# $Conf{RsyncLogLevel} has been replaced by $Conf{XferLogLevel} +# +if ( defined($Conf{RsyncLogLevel}) ) { + $Conf{XferLogLevel} = $Conf{RsyncLogLevel}; + delete($Conf{RsyncLogLevel}); +} + +# +# In 2.1.0 the default for $Conf{CgiNavBarAdminAllHosts} is now 1 +# +$Conf{CgiNavBarAdminAllHosts} = 1; + # # 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 @@ -481,7 +632,8 @@ if ( -f $dest && !-f $confCopy ) { 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) @@ -512,7 +664,7 @@ if ( $Conf{CgiDir} ne "" ) { print <$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 ( ) { 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; } @@ -604,11 +774,13 @@ sub ConfigParse { my($file) = @_; open(C, $file) || die("can't open $file"); + binmode(C); my($out, @conf, $var); my $comment = 1; my $allVars = {}; + my $endLine = undef; while ( ) { - if ( /^\s*#/ ) { + if ( /^#/ && !defined($endLine) ) { if ( $comment ) { $out .= $_; } else { @@ -629,14 +801,17 @@ sub ConfigParse $allVars->{$var} = @conf if ( defined($var) ); push(@conf, { text => $out, - var => $var, + var => $var, }); $out = $_; } else { $out .= $_; } $var = $1; + $endLine = $1 if ( /^\s*\$Conf\{[^}]*} *= *<<(.*);/ ); + $endLine = $1 if ( /^\s*\$Conf\{[^}]*} *= *<<'(.*)';/ ); } else { + $endLine = undef if ( defined($endLine) && /^\Q$endLine[\n\r]*$/ ); $out .= $_; } }