use strict; # please develop with the strict pragma
use Install;
-$::language='en';
+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();
-
-
-($::kohaversion) || ($::kohaversion='unknown version');
+my $curr_ver = Install::getkohaversion();
$::newversion=`cat koha.version`;
chomp $::newversion;
+Install::setkohaversion $::newversion;
+
+
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;
-
-if ($answer =~/n/i) {
- print qq|
-
-Aborting. Please re-run koha.upgrade when you are ready to upgrade Koha.
-|;
- exit;
+my $answer = showmessage(getmessage('WelcomeToUpgrader',[$curr_ver,$::newversion]),'yn','n');
+if ($answer eq "Y" || $answer eq "y") {
+ print "Great! continuing upgrade... \n";
} else {
- print "Great! continuing upgrade... \n";
+ showmessage(getmessage('AbortingInstall'),'none');
+ exit;
};
-
-
+Install::setkohaversion($::newversion);
checkperlmodules();
-
-
-
-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
-
-File Listing
----------------------------------------------------------------------
-$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";
-};
-
-
-
-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 intranet-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("touch $::opacdir/cgi-bin/opac");
-
-system("chown -R root:$httpduser $::opacdir");
-system("chown -R root:$httpduser $::intranetdir");
-
-
-# Copy custom templates and reports back in
-
-opendir D, "$backupdir/kohafiles-$date/intranet/htdocs/";
-my @dirlist=readdir D;
-foreach (@dirlist) {
- (next) if (/^\./);
- (next) if ($_ eq 'default');
- (next) if ($_ eq 'doc');
- (next) if ($_=~/^koha-/);
- (next) if (-e "$::intranetdir/htdocs/$_");
- print "Restoring custom intranet templates $_...\n";
- system("cp -a $backupdir/kohafiles-$date/intranet/htdocs/$_ $::intranetdir/htdocs/");
-}
-
-opendir D, "$backupdir/kohafiles-$date/opac/htdocs/";
-my @dirlist=readdir D;
-foreach (@dirlist) {
- (next) if (/^\./);
- (next) if ($_ eq 'default');
- (next) if ($_ eq 'doc');
- (next) if ($_=~/^koha-/);
- (next) if (-e "$::opacdir/htdocs/$_");
- print "Restoring custom opac template $_...\n";
- system("cp -a $backupdir/kohafiles-$date/opac/htdocs/$_ $::opacdir/htdocs/");
-}
-
-
-
-
-
-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);
- }
- }
- }
-}
-
-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|
-
-==================
-= Authentication =
-==================
-
-This release of Koha has a new authentication module. If you are not already
-using basic authentication on your intranet, you will be required to log in to
-access some of the features of the intranet. You can log in using the userid
-and password from the /etc/koha.conf configuration file at any time. Use the
-"Members" module to add passwords for other accounts and set their permissions.
-
-[NOTE PERMISSIONS ARE NOT COMPLETED AS OF 1.2.3RC1. Do not give passwords to
- any patrons unless you want them to have full access to your intranet.]
-|;
-print "Press the <ENTER> key to continue: ";
-<STDIN>;
-
-
-
-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/
-|;
-
-
-my $reply=showmessage('Would you like to complete a survey about your library?', 'yn', 'y');
-if ($reply=~/y/i) {
- system("perl kohareporter");
-}
+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");
+# }