Koha/koha.upgrade
2002-07-02 20:35:17 +00:00

335 lines
8 KiB
Perl

#!/usr/bin/perl -w
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 $database=$configfile{'database'};
my $host=$configfile{'host'};
my $user=$configfile{'user'};
my $pass=$configfile{'pass'};
($kohaversion) || ($kohaversion='unknown version');
my $newversion=`cat koha.version`;
chomp $newversion;
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 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;
};
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=$host $database|");
open BF, ">$backupdir/Koha.backup_$date";
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";
};
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);
}
}
$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");
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/
|;