X-Git-Url: http://git.rot13.org/?p=BackupPC.git;a=blobdiff_plain;f=configure.pl;h=d592b8fbf0123de4acf2bff00c7e3973b831817f;hp=dddb7d711328e68a10f84fc6e44e890ace1dc98b;hb=27f513f89d885d24bf1a01242fba676c7a840fd5;hpb=c91d12b33bf294fd6e4728eeb3e582efc359acc5 diff --git a/configure.pl b/configure.pl index dddb7d7..d592b8f 100755 --- a/configure.pl +++ b/configure.pl @@ -9,13 +9,17 @@ # # perl configure.pl # +# To read about the command-line options for this configure script: +# +# perldoc configure.pl +# # The installation steps are described as the script runs. # # AUTHOR # Craig Barratt # # COPYRIGHT -# Copyright (C) 2001-2004 Craig Barratt +# Copyright (C) 2001-2006 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,7 +37,7 @@ # #======================================================================== # -# Version 2.1.0beta1, released 9 Apr 2004. +# Version 3.0.0alpha, released 23 Jan 2006 # # See http://backuppc.sourceforge.net. # @@ -74,21 +78,26 @@ EOF } my %opts; +$opts{"set-perms"} = 1; if ( !GetOptions( \%opts, "batch", + "backuppc-user=s", "bin-path=s%", - "config-path=s", "cgi-dir=s", + "compress-level=i", + "config-path=s", "data-dir=s", "dest-dir=s", + "fhs!", "help|?", "hostname=s", "html-dir=s", "html-dir-url=s", "install-dir=s", "man", - "uid-ignore", + "set-perms!", + "uid-ignore!", ) || @ARGV ) { pod2usage(2); } @@ -97,7 +106,7 @@ pod2usage(-exitstatus => 0, -verbose => 2) if $opts{man}; my $DestDir = $opts{"dest-dir"}; -if ( $< != 0 ) { +if ( !$opts{"uid-ignore"} && $< != 0 ) { print < Full path to existing conf/config.pl", - $ConfigPath, - "config-path"); + if ( -f "/etc/BackupPC/config.pl" ) { + $ConfigPath = "/etc/BackupPC/config.pl"; + $opts{fhs} = 1 if ( !defined($opts{fhs}) ); + } else { + $ConfigPath = prompt("--> Full path to existing main config.pl", + $ConfigPath, + "config-path"); + } last if ( $ConfigPath eq "" - || ($ConfigPath =~ /^\// && -r $ConfigPath && -w $ConfigPath) ); + || ($ConfigPath =~ /^\// && -f $ConfigPath && -w $ConfigPath) ); my $problem = "is not an absolute path"; - $problem = "is not writable" if ( !-w $ConfigPath ); - $problem = "is not readable" if ( !-r $ConfigPath ); - $problem = "doesn't exist" if ( !-f $ConfigPath ); + $problem = "is not writable" if ( !-w $ConfigPath ); + $problem = "is not readable" if ( !-r $ConfigPath ); + $problem = "is not a regular file" if ( !-f $ConfigPath ); + $problem = "doesn't exist" if ( !-e $ConfigPath ); print("The file '$ConfigPath' $problem.\n"); if ( $opts{batch} ) { print("Need to specify a valid --config-path for upgrade\n"); exit(1); } } +$opts{fhs} = 1 if ( !defined($opts{fhs}) && $ConfigPath eq "" ); +$opts{fhs} = 0 if ( !defined($opts{fhs}) ); + my $bpc; if ( $ConfigPath ne "" && -r $ConfigPath ) { - (my $topDir = $ConfigPath) =~ s{/[^/]+/[^/]+$}{}; + (my $confDir = $ConfigPath) =~ s{/[^/]+$}{}; die("BackupPC::Lib->new failed\n") - if ( !($bpc = BackupPC::Lib->new($topDir, ".", 1)) ); + if ( !($bpc = BackupPC::Lib->new(".", ".", $confDir, 1)) ); %Conf = $bpc->Conf(); %OrigConf = %Conf; - $Conf{TopDir} = $topDir; + if ( !$opts{fhs} ) { + ($Conf{TopDir} = $ConfigPath) =~ s{/[^/]+/[^/]+$}{} + if ( $Conf{TopDir} eq '' ); + $bpc->{LogDir} = $Conf{LogDir} = "$Conf{TopDir}/log" + if ( $Conf{LogDir} eq '' ); + } + $bpc->{ConfDir} = $Conf{ConfDir} = $confDir; my $err = $bpc->ServerConnect($Conf{ServerHost}, $Conf{ServerPort}, 1); if ( $err eq "" ) { print < BackupPC should run as user", $Conf{BackupPCUser} || "backuppc", - "username"); - ($name, $passwd, $Uid, $Gid) = getpwnam($Conf{BackupPCUser}); - last if ( $name ne "" ); - print <compOk ? 3 : 0; if ( $ConfigPath eq "" && $Conf{CompressLevel} ) { @@ -431,7 +489,7 @@ Ok, we're about to: - install the binaries, lib and docs in $Conf{InstallDir}, - create the data directory $Conf{TopDir}, - - create/update the config.pl file $Conf{TopDir}/conf, + - create/update the config.pl file $Conf{ConfDir}/config.pl, - optionally install the cgi-bin interface. EOF @@ -443,14 +501,16 @@ exit unless prompt("--> Do you want to continue?", "y") =~ /y/i; # foreach my $dir ( qw(bin doc lib/BackupPC/CGI + lib/BackupPC/Config lib/BackupPC/Lang + lib/BackupPC/Storage lib/BackupPC/Xfer lib/BackupPC/Zip ) ) { next if ( -d "$DestDir$Conf{InstallDir}/$dir" ); mkpath("$DestDir$Conf{InstallDir}/$dir", 0, 0775); if ( !-d "$DestDir$Conf{InstallDir}/$dir" - || !chown($Uid, $Gid, "$DestDir$Conf{InstallDir}/$dir") ) { + || !my_chown($Uid, $Gid, "$DestDir$Conf{InstallDir}/$dir") ) { die("Failed to create or chown $DestDir$Conf{InstallDir}/$dir\n"); } else { print("Created $DestDir$Conf{InstallDir}/$dir\n"); @@ -463,7 +523,7 @@ foreach my $dir ( qw(bin doc foreach my $dir ( ($Conf{CgiImageDir}) ) { next if ( $dir eq "" || -d $dir ); mkpath("$DestDir$dir", 0, 0775); - if ( !-d "$DestDir$dir" || !chown($Uid, $Gid, "$DestDir$dir") ) { + if ( !-d "$DestDir$dir" || !my_chown($Uid, $Gid, "$DestDir$dir") ) { die("Failed to create or chown $DestDir$dir"); } else { print("Created $DestDir$dir\n"); @@ -471,69 +531,38 @@ foreach my $dir ( ($Conf{CgiImageDir}) ) { } # -# Create $TopDir's top-level directories +# Create other directories # -foreach my $dir ( qw(. conf pool cpool pc trash log) ) { - mkpath("$DestDir$Conf{TopDir}/$dir", 0, 0750) if ( !-d "$DestDir$Conf{TopDir}/$dir" ); - if ( !-d "$DestDir$Conf{TopDir}/$dir" - || !chown($Uid, $Gid, "$DestDir$Conf{TopDir}/$dir") ) { - die("Failed to create or chown $DestDir$Conf{TopDir}/$dir\n"); +foreach my $dir ( ( + "$Conf{TopDir}", + "$Conf{TopDir}/pool", + "$Conf{TopDir}/cpool", + "$Conf{TopDir}/pc", + "$Conf{TopDir}/trash", + "$Conf{ConfDir}", + "$Conf{LogDir}", + ) ) { + mkpath("$DestDir/$dir", 0, 0750) if ( !-d "$DestDir/$dir" ); + if ( !-d "$DestDir/$dir" + || !my_chown($Uid, $Gid, "$DestDir/$dir") ) { + die("Failed to create or chown $DestDir/$dir\n"); } else { - print("Created $DestDir$Conf{TopDir}/$dir\n"); + print("Created $DestDir/$dir\n"); } } printf("Installing binaries in $DestDir$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", "$DestDir$Conf{InstallDir}/bin/$prog", 0555); +foreach my $prog ( qw( + __CONFIGURE_BIN_LIST__ + ) ) { + InstallFile($prog, "$DestDir$Conf{InstallDir}/$prog", 0555); } printf("Installing library in $DestDir$Conf{InstallDir}/lib\n"); 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/es.pm - BackupPC/Lang/de.pm - BackupPC/Lang/it.pm - BackupPC/Lang/nl.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 + __CONFIGURE_LIB_LIST__ ) ) { - InstallFile("lib/$lib", "$DestDir$Conf{InstallDir}/lib/$lib", 0444); + InstallFile($lib, "$DestDir$Conf{InstallDir}/$lib", 0444); } if ( $Conf{CgiImageDir} ne "" ) { @@ -556,7 +585,8 @@ if ( $Conf{CgiImageDir} ne "" ) { printf("Making init.d scripts\n"); foreach my $init ( qw(gentoo-backuppc gentoo-backuppc.conf linux-backuppc - solaris-backuppc debian-backuppc suse-backuppc) ) { + solaris-backuppc debian-backuppc suse-backuppc + slackware-backuppc ) ) { InstallFile("init.d/src/$init", "init.d/$init", 0444); } @@ -565,16 +595,16 @@ foreach my $doc ( qw(BackupPC.pod BackupPC.html) ) { InstallFile("doc/$doc", "$DestDir$Conf{InstallDir}/doc/$doc", 0444); } -printf("Installing config.pl and hosts in $DestDir$Conf{TopDir}/conf\n"); -InstallFile("conf/hosts", "$DestDir$Conf{TopDir}/conf/hosts", 0644) - if ( !-f "$DestDir$Conf{TopDir}/conf/hosts" ); +printf("Installing config.pl and hosts in $DestDir$Conf{ConfDir}\n"); +InstallFile("conf/hosts", "$DestDir$Conf{ConfDir}/hosts", 0644) + if ( !-f "$DestDir$Conf{ConfDir}/hosts" ); # # Now do the config file. If there is an existing config file we # merge in the new config file, adding any new configuration # parameters and deleting ones that are no longer needed. # -my $dest = "$DestDir$Conf{TopDir}/conf/config.pl"; +my $dest = "$DestDir$Conf{ConfDir}/config.pl"; my ($newConf, $newVars) = ConfigParse("conf/config.pl"); my ($oldConf, $oldVars); if ( -f $dest ) { @@ -699,10 +729,12 @@ if ( -f $dest && !-f $confCopy ) { my $mode = $stat[2]; my $uid = $stat[4]; my $gid = $stat[5]; - die("can't copy($dest, $confCopy)\n") unless copy($dest, $confCopy); + die("can't copy($dest, $confCopy)\n") + unless copy($dest, $confCopy); die("can't chown $uid, $gid $confCopy\n") - unless chown($uid, $gid, $confCopy); - die("can't chmod $mode $confCopy\n") unless chmod($mode, $confCopy); + unless my_chown($uid, $gid, $confCopy); + die("can't chmod $mode $confCopy\n") + unless my_chmod($mode, $confCopy); } open(OUT, ">", $dest) || die("can't open $dest for writing\n"); binmode(OUT); @@ -723,8 +755,8 @@ foreach my $var ( @$newConf ) { } close(OUT); if ( !defined($oldConf) ) { - die("can't chmod 0640 mode $dest\n") unless chmod(0640, $dest); - die("can't chown $Uid, $Gid $dest\n") unless chown($Uid, $Gid, $dest); + die("can't chmod 0640 mode $dest\n") unless my_chmod(0640, $dest); + die("can't chown $Uid, $Gid $dest\n") unless my_chown($Uid, $Gid, $dest); } if ( $Conf{CgiDir} ne "" ) { @@ -739,12 +771,12 @@ print < ) { s/__INSTALLDIR__/$Conf{InstallDir}/g; + s/__LOGDIR__/$Conf{LogDir}/g; + s/__CONFDIR__/$Conf{ConfDir}/g; s/__TOPDIR__/$Conf{TopDir}/g; + s/^(\s*my \$useFHS\s*=\s*)\d;/${1}$opts{fhs};/ + if ( $prog =~ /Lib.pm/ ); s/__BACKUPPCUSER__/$Conf{BackupPCUser}/g; s/__CGIDIR__/$Conf{CgiDir}/g; if ( $first && /^#.*bin\/perl/ ) { @@ -829,8 +865,8 @@ sub InstallFile close(PROG); close(OUT); } - die("can't chown $uid, $gid $dest") unless chown($uid, $gid, $dest); - die("can't chmod $mode $dest") unless chmod($mode, $dest); + die("can't chown $uid, $gid $dest") unless my_chown($uid, $gid, $dest); + die("can't chmod $mode $dest") unless my_chmod($mode, $dest); } sub FindProgram @@ -942,6 +978,22 @@ sub ConfigMerge return $res; } +sub my_chown +{ + my($uid, $gid, $file) = @_; + + return 1 if ( !$opts{"set-perms"} ); + return chown($uid, $gid, $file); +} + +sub my_chmod +{ + my ($mode, $file) = @_; + + return 1 if ( !$opts{"set-perms"} ); + return chmod($mode, $file); +} + sub prompt { my($question, $default, $option) = @_; @@ -986,6 +1038,11 @@ Run configure.pl in batch mode. configure.pl will run without prompting the user. The other command-line options are used to specify the settings that the user is usually prompted for. +=item B<--backuppc-user=USER> + +Specify the BackupPC user name that owns all the BackupPC +files and runs the BackupPC programs. Default is backuppc. + =item B<--bin-path PROG=PATH> Specify the path for various external programs that BackupPC @@ -1003,6 +1060,11 @@ Examples --bin-path cat=/bin/cat --bin-path bzip2=/home/user/bzip2 +=item B<--compress-level=N> + +Set the configuration compression level to N. Default is 3 +if Compress::Zlib is installed. + =item B<--config-path CONFIG_PATH> Path to the existing config.pl configuration file for BackupPC. @@ -1038,6 +1100,13 @@ to run it from below the --dest-dir directory, since all the paths are set assuming BackupPC is installed in the intended final locations. +=item B<--fhs> + +Use locations specified by the Filesystem Hierarchy Standard +for installing BackupPC. This is enabled by default for new +installatios. To use the pre-3.0 installation locations, +specify --no-fhs. + =item B<--help|?> Print a brief help message and exits. @@ -1082,6 +1151,13 @@ Example: Prints the manual page and exits. +=item B<--set-perms> + +When installing files and creating directories, chown them to +the BackupPC user and chmod them too. This is enabled by default. +To disable (for example, if staging a destination directory) +then specify --no-set-perms. + =item B<--uid-ignore> configure.pl verifies that the script is being run as the super user