Changes from rel-1-2 branch
authortonnesen <tonnesen>
Mon, 22 Jul 2002 22:33:03 +0000 (22:33 +0000)
committertonnesen <tonnesen>
Mon, 22 Jul 2002 22:33:03 +0000 (22:33 +0000)
installer.pl
koha.upgrade

index 496bac1..d8d66b9 100644 (file)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl -w # please develop with -w
 
-use diagnostics;
+#use diagnostics;
 use strict; # please develop with the strict pragma
 
 if ($<) {
@@ -15,6 +15,39 @@ unless ($< == 0) {
 my $kohaversion=`cat koha.version`;
 chomp $kohaversion;
 
+
+if ($kohaversion =~ /RC/) {
+    print qq|
+=====================
+= RELEASE CANDIDATE =
+=====================
+
+WARNING WARNING WARNING WARNING WARNING
+
+You are about to install Koha version $kohaversion.  This version of Koha is a
+release candidate.  It is not intended to be installed on production systems.
+It is being released so that users can test it before we release a final
+version.
+
+|;
+    print "Are you sure you want to install Koha $kohaversion? (Y/[N]): ";
+
+    my $answer = <STDIN>;
+    chomp $answer;
+
+    if ($answer eq "Y" || $answer eq "y") {
+       print "Great! continuing setup... \n";
+    } else {
+       print qq|
+
+Watch for announcements of Koha releases on the Koha mailing list or the Koha
+web site (http://www.koha.org/).
+
+|;
+       exit;
+    };
+}
+
 if (-e "/etc/koha.conf") {
     my $installedversion=`grep kohaversion= /etc/koha.conf`;
     chomp $installedversion;
@@ -95,21 +128,21 @@ unless (eval {require DBI})               { push @missing,"DBI" };
 unless (eval {require Date::Manip})       { push @missing,"Date::Manip" };
 unless (eval {require DBD::mysql})        { push @missing,"DBD::mysql" };
 unless (eval {require Set::Scalar})       { push @missing,"Set::Scalar" };
-#unless (eval {require Net::Z3950})        { 
-#    print qq|
-#
-#The Net::Z3950 module is missing.  This module is necessary if you want to use
-#Koha's Z39.50 client to download bibliographic records from other libraries.
-#To install this module, you will need the yaz client installed from
-#http://www.indexdata.dk/yaz/ and then you can install the perl module with the
-#command:
-#
-#perl -MCPAN -e 'install Net::Z3950'
-#
-#Press the <ENTER> key to continue:
-#|;
-#    <STDIN>;
-#}
+unless (eval {require Net::Z3950})        { 
+    print qq|
+
+The Net::Z3950 module is missing.  This module is necessary if you want to use
+Koha's Z39.50 client to download bibliographic records from other libraries.
+To install this module, you will need the yaz client installed from
+http://www.indexdata.dk/yaz/ and then you can install the perl module with the
+command:
+
+perl -MCPAN -e 'install Net::Z3950'
+
+Press the <ENTER> key to continue:
+|;
+    <STDIN>;
+}
 
 #
 # Print out a list of any missing modules
@@ -297,6 +330,31 @@ foreach my $httpdconf (qw(/usr/local/apache/conf/httpd.conf
       close(HTTPDCONF);
    }
 }
+unless ($realhttpdconf) {
+    print qq|
+
+I was not able to find your apache configuration file.  It is usually
+called httpd.conf or apache.conf.
+|;
+    print "Where is your Apache configuratin file? ";
+    chomp($input = <STDIN>);
+
+    if ($input) {
+       $realhttpdconf = $input;
+    } else {
+       $realhttpdconf='';
+    }
+    if ( -f $realhttpdconf ) {
+       open (HTTPDCONF, $realhttpdconf) or warn "Insufficient privileges to open $realhttpdconf for reading.\n";
+       while (<HTTPDCONF>) {
+           if (/^\s*User\s+"?([-\w]+)"?\s*$/) {
+               $httpduser = $1;
+           }
+       }
+       close(HTTPDCONF);
+    }
+}
+
 unless ($httpduser) {
     print qq|
 
@@ -316,23 +374,6 @@ files using the "User" directive.
 }
 
 
-#Create the configuration file
-open(SITES,">$etcdir/koha.conf") or warn "Couldn't create file
-at $etcdir.  Must have write capability.\n";
-print SITES <<EOP
-database=$dbname
-hostname=$hostname
-user=$user
-pass=$pass
-includes=$kohadir/htdocs/includes
-intranetdir=$kohadir
-opacdir=$opacdir
-kohaversion=$kohaversion
-httpduser=$httpduser
-EOP
-;
-close(SITES);
-
 #
 # Set ownership of the koha.conf file for security
 #
@@ -584,6 +625,33 @@ EOP
     print "Successfully updated Apache Configuration file.\n";
 }
 
+print qq|
+
+SETTING UP Z39.50 DAEMON
+========================
+|;
+
+my $kohalogdir='/var/log/koha';
+print "Directory for logging by Z39.50 daemon [$kohalogdir]: ";
+chomp($input = <STDIN>);
+if ($input) {
+    $kohalogdir=$input;
+}
+
+unless (-e "$kohalogdir") {
+    my $result = mkdir 0770, "$kohalogdir"; 
+    if ($result==0) {
+        my @dirs = split(m#/#, $kohalogdir);
+       my $checkdir='';
+       foreach (@dirs) {
+           $checkdir.="$_/";
+           unless (-e "$checkdir") {
+               mkdir($checkdir, 0775);
+           }
+       }
+    }
+}
+
 #
 # Setup the modules directory
 #
@@ -672,6 +740,27 @@ system("cp -R opac-cgi/* $opacdir/cgi-bin/");
 system("chown -R root.$httpduser $opacdir");
 system("chown -R root.$httpduser $kohadir");
 
+
+
+#Create the configuration file
+open(SITES,">$etcdir/koha.conf") or warn "Couldn't create file
+at $etcdir.  Must have write capability.\n";
+print SITES <<EOP
+database=$dbname
+hostname=$hostname
+user=$user
+pass=$pass
+includes=$kohadir/htdocs/includes
+intranetdir=$kohadir
+opacdir=$opacdir
+kohalogdir=$kohalogdir
+kohaversion=$kohaversion
+httpduser=$httpduser
+EOP
+;
+close(SITES);
+
+
 print qq|
 
 MYSQL CONFIGURATION
@@ -815,32 +904,6 @@ Press <ENTER> to continue...
 }
 
 
-print qq|
-
-SETTING UP Z39.50 DAEMON
-========================
-|;
-
-my $kohalogdir='/var/log/koha';
-print "Directory for logging by Z39.50 daemon [$kohalogdir]: ";
-chomp($input = <STDIN>);
-if ($input) {
-    $kohalogdir=$input;
-}
-
-unless (-e "$kohalogdir") {
-    my $result = mkdir 0770, "$kohalogdir"; 
-    if ($result==0) {
-        my @dirs = split(m#/#, $kohalogdir);
-       my $checkdir='';
-       foreach (@dirs) {
-           $checkdir.="$_/";
-           unless (-e "$checkdir") {
-               mkdir($checkdir, 0775);
-           }
-       }
-    }
-}
 chmod 0770, $kohalogdir;
 chown((getpwnam($httpduser)) [2,3], $kohalogdir) or warn "can't chown $kohalogdir: $!";
 
index 2912dd5..a9dee42 100644 (file)
@@ -1,6 +1,18 @@
 #!/usr/bin/perl -w
 
+#use diagnostics;
+use strict; # please develop with the strict pragma
+
+
+if ($<) {
+    print "\n\nYou must run koha.upgrade as root.\n\n";
+    exit;
+}
+
+my $input;
+
 my %configfile;
+
 open (KC, "/etc/koha.conf");
 while (<KC>) {
  chomp;
@@ -20,8 +32,9 @@ while (<KC>) {
 my $intranetdir=$configfile{'intranetdir'};
 my $opacdir=$configfile{'opacdir'};
 my $kohaversion=$configfile{'kohaversion'};
+my $kohalogdir=$configfile{'kohalogdir'};
 my $database=$configfile{'database'};
-my $host=$configfile{'host'};
+my $hostname=$configfile{'hostname'};
 my $user=$configfile{'user'};
 my $pass=$configfile{'pass'};
 
@@ -29,6 +42,37 @@ my $pass=$configfile{'pass'};
 ($kohaversion) || ($kohaversion='unknown version');
 my $newversion=`cat koha.version`;
 chomp $newversion;
+if ($newversion =~ /RC/) {
+    print qq|
+=====================
+= RELEASE CANDIDATE =
+=====================
+
+WARNING WARNING WARNING WARNING WARNING
+
+You are about to install Koha version $newversion.  This version of Koha is a
+release candidate.  It is not intended to be installed on production systems.
+It is being released so that users can test it before we release a final
+version.
+
+|;
+    print "Are you sure you want to install Koha $newversion? (Y/[N]): ";
+
+    my $answer = <STDIN>;
+    chomp $answer;
+
+    if ($answer eq "Y" || $answer eq "y") {
+       print "Great! continuing setup... \n";
+    } else {
+       print qq|
+
+Watch for announcements of Koha releases on the Koha mailing list or the Koha
+web site (http://www.koha.org/).
+
+|;
+       exit;
+    };
+}
 
 print qq|
 
@@ -57,6 +101,59 @@ Aborting.  Please re-run koha.upgrade when you are ready to upgrade Koha.
     exit;
 };
 
+
+#
+# Test for Perl and Modules
+#
+print qq|
+
+PERL & MODULES
+==============
+
+|;
+
+print "\nChecking perl modules ...\n";
+    unless (eval "require 5.004") {
+    die "Sorry, you need at least Perl 5.004\n";
+}
+
+my @missing = ();
+unless (eval {require DBI})               { push @missing,"DBI" };
+unless (eval {require Date::Manip})       { push @missing,"Date::Manip" };
+unless (eval {require DBD::mysql})        { push @missing,"DBD::mysql" };
+unless (eval {require Set::Scalar})       { push @missing,"Set::Scalar" };
+unless (eval {require Net::Z3950})        { 
+    print qq|
+
+The Net::Z3950 module is missing.  This module is necessary if you want to use
+Koha's Z39.50 client to download bibliographic records from other libraries.
+To install this module, you will need the yaz client installed from
+http://www.indexdata.dk/yaz/ and then you can install the perl module with the
+command:
+
+perl -MCPAN -e 'install Net::Z3950'
+
+Press the <ENTER> key to continue:
+|;
+    <STDIN>;
+}
+
+#
+# Print out a list of any missing modules
+#
+if (@missing > 0) {
+    print "\n\n";
+    print "You are missing some Perl modules which are required by Koha.\n";
+    print "Once these modules have been installed, rerun this installer.\n";
+    print "They can be installed by running (as root) the following:\n";
+    foreach my $module (@missing) {
+       print "   perl -MCPAN -e 'install \"$module\"'\n";
+       exit(1);
+    }} else{
+    print "All modules appear to be installed, continuing...\n";
+};
+
+
 my $backupdir='/usr/local/koha/backups';
 print "Please specify a backup directory [$backupdir]: ";  
 
@@ -107,9 +204,9 @@ $month++;
 $year+=1900;
 my $date= sprintf "%4d-%02d-%02d_%02d:%02d:%02d", $year, $month, $day,$hr,$min,$sec;
 
-open (MD, "$mysqldir/bin/mysqldump --user=$user --password=$pass --host=$host $database|");
+open (MD, "$mysqldir/bin/mysqldump --user=$user --password=$pass --host=$hostname $database|");
 
-open BF, ">$backupdir/Koha.backup_$date";
+(open BF, ">$backupdir/Koha.backup_$date") || (die "Error opening up backup file $backupdir/Koha.backup_$date: $!\n");
 
 my $itemcounter=0;
 my $bibliocounter=0;
@@ -279,7 +376,23 @@ foreach my $httpdconf (qw(/usr/local/apache/conf/httpd.conf
       close(HTTPDCONF);
    }
 }
-$httpduser ||= 'Undetermined';
+
+unless ($httpduser) {
+    print qq|
+I was not able to determine the user that Apache is running as.  This
+information is necessary in order to set the access privileges correctly on
+/etc/koha.conf.  This user should be set in one of the Apache configuration
+files using the "User" directive.
+|;
+    print "What is your Apache user? ";
+    chomp($input = <STDIN>);
+
+    if ($input) {
+       $httpduser = $input;
+    } else {
+       $httpduser='Undetermined';
+    }
+}
 
 print "\n\nINSTALLING KOHA...\n";
 print "\n\n==================\n";
@@ -299,6 +412,129 @@ system("cp -R opac-cgi/* $opacdir/cgi-bin/");
 system("chown -R root.$httpduser $opacdir");
 system("chown -R root.$httpduser $intranetdir");
 
+# LAUNCH SCRIPT
+print "Modifying Z39.50 daemon launch script...\n";
+my $newfile='';
+open (L, "$intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh");
+while (<L>) {
+    if (/^RunAsUser=/) {
+       $newfile.="RunAsUser=$httpduser\n";
+    } elsif (/^KohaZ3950Dir=/) {
+       $newfile.="KohaZ3950Dir=$intranetdir/scripts/z3950daemon\n";
+    } else {
+       $newfile.=$_;
+    }
+}
+close L;
+system("mv $intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh $intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh.orig");
+open L, ">$intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh";
+print L $newfile;
+close L;
+
+unless ($kohalogdir && -e $kohalogdir) {
+    $kohalogdir='/var/log/koha';
+    print "\n\nDirectory for logging by Z39.50 daemon [$kohalogdir]: ";
+    chomp($input = <STDIN>);
+    if ($input) {
+       $kohalogdir=$input;
+    }
+}
+
+unless (-e "$kohalogdir") {
+    my $result = mkdir 0770, "$kohalogdir"; 
+    if ($result==0) {
+        my @dirs = split(m#/#, $kohalogdir);
+       my $checkdir='';
+       foreach (@dirs) {
+           $checkdir.="$_/";
+           unless (-e "$checkdir") {
+               mkdir($checkdir, 0775);
+           }
+       }
+    }
+}
+
+# SHELL SCRIPT
+print "Modifying Z39.50 daemon wrapper script...\n";
+$newfile='';
+open (S, "$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh");
+while (<S>) {
+    if (/^KohaModuleDir=/) {
+       $newfile.="KohaModuleDir=$intranetdir/modules\n";
+    } elsif (/^KohaZ3950Dir=/) {
+       $newfile.="KohaZ3950Dir=$intranetdir/scripts/z3950daemon\n";
+    } elsif (/^LogDir=/) {
+       $newfile.="LogDir=$kohalogdir\n";
+    } else {
+       $newfile.=$_;
+    }
+}
+close S;
+
+system("mv $intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh $intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh.orig");
+open S, ">$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh";
+print S $newfile;
+close S;
+chmod 0750, "$intranetdir/scripts/z3950daemon/z3950-daemon-launch.sh";
+chmod 0750, "$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh";
+chmod 0750, "$intranetdir/scripts/z3950daemon/processz3950queue";
+chown(0, (getpwnam($httpduser)) [3], "$intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh") or warn "can't chown $intranetdir/scripts/z3950daemon/z3950-daemon-shell.sh: $!";
+chown(0, (getpwnam($httpduser)) [3], "$intranetdir/scripts/z3950daemon/processz3950queue") or warn "can't chown $intranetdir/scripts/z3950daemon/processz3950queue: $!";
+
+
+open (KC, "/etc/koha.conf");
+my $kccontents='';
+my $kc;
+while (<KC>) {
+    if (/^\s*includes\s*=/) {
+       $kccontents.="includes=$intranetdir/htdocs/includes\n";
+       $kc->{'includes'}=1;
+    } elsif (/^\s*httpduser\s*=/) {
+       $kccontents.="httpduser=$httpduser\n";
+       $kc->{'httpduser'}=1;
+    } elsif (/^\s*kohaversion\s*=/) {
+       $kccontents.="kohaversion=$newversion\n";
+       $kc->{'kohaversion'}=1;
+    } elsif (/^\s*kohalogdir\s*=/) {
+       $kccontents.="kohalogdir=$kohalogdir\n";
+       $kc->{'kohalogdir'}=1;
+    } elsif (/^\s*intranetdir\s*=/) {
+       $kccontents.="intranetdir=$intranetdir\n";
+       $kc->{'intranetdir'}=1;
+    } elsif (/^\s*opacdir\s*=/) {
+       $kccontents.="opacdir=$opacdir\n";
+       $kc->{'opacdir'}=1;
+    } else {
+       $kccontents.="$_";
+    }
+}
+
+unless (defined($kc->{'kohaversion'})) {
+    $kccontents.="kohaversion=$newversion\n";
+}
+unless (defined($kc->{'includes'})) {
+    $kccontents.="includes=$intranetdir/htdocs/includes\n";
+}
+unless (defined($kc->{'httpduser'})) {
+    $kccontents.="httpduser=$httpduser\n";
+}
+unless (defined($kc->{'intranetdir'})) {
+    $kccontents.="intranetdir=$intranetdir\n";
+}
+unless (defined($kc->{'opacdir'})) {
+    $kccontents.="opacdir=$opacdir\n";
+}
+unless (defined($kc->{'kohalogdir'})) {
+    $kccontents.="kohalogdir=$kohalogdir\n";
+}
+
+
+system("mv /etc/koha.conf /etc/koha.conf.backup");
+
+open (KC, ">/etc/koha.conf") || warn "Couldn't open /etc/koha.conf for writing.";
+print KC $kccontents;
+close KC;
+
 
 print qq|