#!/usr/bin/perl -w
-# $Id$
-
#use diagnostics;
use strict; # please develop with the strict pragma
+use Install;
+Install::setlanguage('en');
-if ($<) {
- print "\n\nYou must run koha.upgrade as root.\n\n";
- exit;
-}
+###############################################
+# SET THE etcdir ENVIRONMENT VAR INSTEAD #
+###############################################
+Install::setetcdir($ENV{etcdir}||'/etc');
my $input;
+loadconfigfile();
-my %configfile;
-
-open (KC, "/etc/koha.conf");
-while (<KC>) {
- 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.
+my $curr_ver = Install::getkohaversion();
+$::newversion=`cat koha.version`;
+chomp $::newversion;
+Install::setkohaversion $::newversion;
-|;
- 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;
- };
+if ($::newversion =~ /RC/) {
+ releasecandidatewarning();
}
-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 = <STDIN>;
-chomp $answer;
-
+my $answer = showmessage(getmessage('WelcomeToUpgrader',[$curr_ver,$::newversion]),'yn','n');
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 <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]: ";
-
-$answer = <STDIN>;
-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 (<MD>) {
- (/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 = <STDIN>;
-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";
+ showmessage(getmessage('AbortingInstall'),'none');
+ exit;
};
-
-
-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 = <STDIN>;
- 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 = <STDIN>;
- 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 = <STDIN>;
- 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 (<HTTPDCONF>) {
- 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 = <STDIN>);
-
- 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 (<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|
-
-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/
-|;
+Install::setkohaversion($::newversion);
+checkperlmodules();
+backupmycnf();
+backupkoha();
+getapacheinfo();
+installfiles();
+# custom templates warning added to installfiles();
+updatedatabase();
+restoremycnf();
+finalizeconfigfile();
+
+showmessage(getmessage('UpgradeCompleted',['FIXME','FIXME','FIXME','FIXME','FIXME','FIXME']),'PressEnter');
+
+# my $reply=showmessage('Would you like to complete a survey about your library? [Y]/N: ', 'yn', 'y');
+# if ($reply=~/y/i) {
+# system("perl kohareporter");
+# }