From d74f58f47f5d5d9e62275c144dcd351dc5ad6e03 Mon Sep 17 00:00:00 2001 From: tipaul Date: Fri, 22 Nov 2002 10:40:12 +0000 Subject: [PATCH] moving non koha-running files to misc dir --- misc/koha.upgrade | 572 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 572 insertions(+) create mode 100644 misc/koha.upgrade diff --git a/misc/koha.upgrade b/misc/koha.upgrade new file mode 100644 index 0000000000..2edfe0565c --- /dev/null +++ b/misc/koha.upgrade @@ -0,0 +1,572 @@ +#!/usr/bin/perl -w + +# $Id$ + +#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; + (next) if (/^\s*#/); + if (/(.*)\s*=\s*(.*)/) { + my $variable=$1; + my $value=$2; + # Clean up white space at beginning and end + $variable=~s/^\s*//g; + $variable=~s/\s*$//g; + $value=~s/^\s*//g; + $value=~s/\s*$//g; + $configfile{$variable}=$value; + } +} + +my $intranetdir=$configfile{'intranetdir'}; +my $opacdir=$configfile{'opacdir'}; +my $kohaversion=$configfile{'kohaversion'}; +my $kohalogdir=$configfile{'kohalogdir'}; +my $database=$configfile{'database'}; +my $hostname=$configfile{'hostname'}; +my $user=$configfile{'user'}; +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| + +================ += Koha Upgrade = +================ + +You are attempting to upgrade from Koha $kohaversion to $newversion. + +We recommend that you do a complete backup of all your files before upgrading. +This upgrade script will make a backup copy of your files for you. + +Would you like to proceed? ([Y]/N): +|; + +my $answer = ; +chomp $answer; + +if ($answer eq "Y" || $answer eq "y") { + print "Great! continuing upgrade... \n"; + } else { + print qq| + +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 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]: "; + +$answer = ; +chomp $answer; + +if ($answer) { + $backupdir=$answer; +} + +if (! -e $backupdir) { + my $result=mkdir ($backupdir, oct(770)); + if ($result==0) { + my @dirs = split(m#/#, $backupdir); + my $checkdir=''; + foreach (@dirs) { + $checkdir.="$_/"; + unless (-e "$checkdir") { + mkdir($checkdir, 0775); + } + } + } +} + +chmod 0770, $backupdir; + +# Backup MySql database +# +# +my $mysql; +my $mysqldir; + +foreach my $mysql (qw(/usr/local/mysql + /opt/mysql + )) { + if ( -d $mysql ) { + $mysqldir=$mysql; + } +} +if (!$mysqldir){ + $mysqldir='/usr'; +} + + + +my ($sec, $min, $hr, $day, $month, $year) = (localtime(time))[0,1,2,3,4,5]; +$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=$hostname $database|"); + +(open BF, ">$backupdir/Koha.backup_$date") || (die "Error opening up backup file $backupdir/Koha.backup_$date: $!\n"); + +my $itemcounter=0; +my $bibliocounter=0; +my $biblioitemcounter=0; +my $membercounter=0; + +while () { + (/insert into items /i) && ($itemcounter++); + (/insert into biblioitems /i) && ($biblioitemcounter++); + (/insert into biblio /i) && ($bibliocounter++); + (/insert into borrowers /i) && ($membercounter++); + print BF $_; +} + +close BF; +close MD; + + +my $filels=`ls -hl $backupdir/Koha.backup_$date`; +chomp $filels; +printf qq| + +Backed up: + +%6d biblio entries +%6d biblioitems entries +%6d items entries +%6d borrowers + +$filels + +Does this look right? ([Y]/N): +|, $bibliocounter, $biblioitemcounter, $itemcounter, $membercounter; + +$answer = ; +chomp $answer; + +if ($answer=~/^n/i) { + print qq| + +Aborting. The database dump is located in: + + $backupdir/Koha.backup_$date + +|; + exit; +} else { + print "Great! continuing upgrade... \n"; +}; + + + +if ($opacdir && $intranetdir) { + print qq| + +I believe that your old files are located in: + + OPAC: $opacdir + INTRANET: $intranetdir + + +Does this look right? ([Y]/N): +|; + $answer = ; + chomp $answer; + + if ($answer =~/n/i) { + $intranetdir=''; + $opacdir=''; + } else { + print "Great! continuing upgrade... \n"; + } +} + + +if (!$opacdir || !$intranetdir) { + $intranetdir=''; + $opacdir=''; + while (!$intranetdir) { + print "Please specify the location of your INTRANET files: "; + + $answer = ; + chomp $answer; + + if ($answer) { + $intranetdir=$answer; + } + if (! -e "$intranetdir/htdocs") { + print "\nCouldn't find the htdocs directory here. That doesn't look right.\nPlease enter another location.\n\n"; + $intranetdir=''; + } + } + while (!$opacdir) { + print "Please specify the location of your OPAC files: "; + + $answer = ; + chomp $answer; + + if ($answer) { + $opacdir=$answer; + } + if (! -e "$opacdir/htdocs") { + print "\nCouldn't find the htdocs directory here. That doesn't look right.\nPlease enter another location.\n\n"; + $opacdir=''; + } + } +} + + + +print "\n\nBacking up old Koha scripts...\n"; +print "===============================\n\n"; + +mkdir "$backupdir/kohafiles-$date", 0770; +mkdir "$backupdir/kohafiles-$date/intranet", 0770; +mkdir "$backupdir/kohafiles-$date/opac", 0770; + +my $result=system("cp -R $intranetdir/* $backupdir/kohafiles-$date/intranet/"); +if ($result) { + print "Error encounted when copying $intranetdir to $backupdir/kohafiles-$date/intranet/\n"; + exit; +} else { + system("rm -rf $intranetdir/*"); +} +$result=system("cp -R $opacdir/* $backupdir/kohafiles-$date/opac/"); +if ($result) { + print "Error encounted when copying $opacdir to $backupdir/kohafiles-$date/opac/\n"; + exit; +} else { + system("rm -rf $opacdir/*"); +} + + print "Creating $intranetdir/htdocs...\n"; + mkdir ("$intranetdir/htdocs", oct(750)); + print "Creating $intranetdir/cgi-bin...\n"; + mkdir ("$intranetdir/cgi-bin", oct(750)); + print "Creating $intranetdir/modules...\n"; + mkdir ("$intranetdir/modules", oct(750)); + print "Creating $intranetdir/scripts...\n"; + mkdir ("$intranetdir/scripts", oct(750)); + chmod (oct(770), "$opacdir"); + print "Creating $opacdir/htdocs...\n"; + mkdir ("$opacdir/htdocs", oct(750)); + print "Creating $opacdir/cgi-bin...\n"; + mkdir ("$opacdir/cgi-bin", oct(750)); + +my $httpduser; +my $realhttpdconf; + +foreach my $httpdconf (qw(/usr/local/apache/conf/httpd.conf + /usr/local/etc/apache/httpd.conf + /usr/local/etc/apache/apache.conf + /var/www/conf/httpd.conf + /etc/apache/conf/httpd.conf + /etc/apache/conf/apache.conf + /etc/apache-ssl/conf/apache.conf + /etc/httpd/conf/httpd.conf + /etc/httpd/httpd.conf)) { + if ( -f $httpdconf ) { + $realhttpdconf=$httpdconf; + open (HTTPDCONF, $httpdconf) or warn "Insufficient privileges to open $httpdconf for reading.\n"; + while () { + if (/^\s*User\s+"?([-\w]+)"?\s*$/) { + $httpduser = $1; + } + } + close(HTTPDCONF); + } +} + +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"; +print "Copying internet-html files to $intranetdir/htdocs...\n"; +system("cp -R intranet-html/* $intranetdir/htdocs/"); +print "Copying intranet-cgi files to $intranetdir/cgi-bin...\n"; +system("cp -R intranet-cgi/* $intranetdir/cgi-bin/"); +print "Copying script files to $intranetdir/scripts...\n"; +system("cp -R scripts/* $intranetdir/scripts/"); +print "Copying module files to $intranetdir/modules...\n"; +system("cp -R modules/* $intranetdir/modules/"); +print "Copying opac-html files to $opacdir/htdocs...\n"; +system("cp -R opac-html/* $opacdir/htdocs/"); +print "Copying opac-cgi files to $opacdir/cgi-bin...\n"; +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| + +Upgrading Database +================== +|; +system ("perl -I $intranetdir/modules scripts/updater/updatedatabase"); + + + +print qq| + +========================== += Koha Upgrade Completed = +========================== +The Koha Upgrade is finished. If you are upgrading from a version of Koha +prior to 1.2.1, it is likely that you will have to modify your Apache +configuration to point it to the new files. + +In your INTRANET VirtualHost section you should have: + DocumentRoot $intranetdir/htdocs + ScriptAlias /cgi-bin/koha/ $intranetdir/cgi-bin/ + SetEnv PERL5LIB $intranetdir/modules + +In the OPAC VirtualHost section you should have: + DocumentRoot $opacdir/htdocs + ScriptAlias /cgi-bin/koha/ $opacdir/cgi-bin/ + SetEnv PERL5LIB $intranetdir/modules + +You may also need to uncomment a "LoadModules env_module ... " line and restart +Apache. + +Please report any problems you encounter through http://bugs.koha.org/ +|; -- 2.39.5