From 00564428aa4b704dfa73a332158aa8730f28bf21 Mon Sep 17 00:00:00 2001 From: tonnesen Date: Mon, 22 Jul 2002 22:33:03 +0000 Subject: [PATCH] Changes from rel-1-2 branch --- installer.pl | 181 +++++++++++++++++++++++++------------- koha.upgrade | 244 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 362 insertions(+), 63 deletions(-) diff --git a/installer.pl b/installer.pl index 496bac112b..d8d66b931c 100644 --- a/installer.pl +++ b/installer.pl @@ -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 = ; + 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 key to continue: -#|; -# ; -#} +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 key to continue: +|; + ; +} # # 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 = ); + + if ($input) { + $realhttpdconf = $input; + } else { + $realhttpdconf=''; + } + if ( -f $realhttpdconf ) { + open (HTTPDCONF, $realhttpdconf) or warn "Insufficient privileges to open $realhttpdconf for reading.\n"; + while () { + 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 <); +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 < 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 = ); -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: $!"; diff --git a/koha.upgrade b/koha.upgrade index 2912dd5b0f..a9dee421e9 100644 --- a/koha.upgrade +++ b/koha.upgrade @@ -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 () { chomp; @@ -20,8 +32,9 @@ while () { 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 = ; + 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 key to continue: +|; + ; +} + +# +# 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 = ); + + 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 () { + 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 = ); + 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 () { + 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 () { + 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| -- 2.20.1