335 lines
8 KiB
Perl
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/
|
|
|;
|