[Koha-devel] XML::LIBXSLT error on Debian etch

Marc Chantreux marc.chantreux at koha-fr.org
Mon May 12 20:10:34 CEST 2008


hello,

> I have installed Ubuntu Hardy Heron on the server and will be installing Koha on Monday.
peraps you will give a last chance to etch using the script as
attachment.

just run it with sh, answer to the questions (Y during all the debian
part) and enjoy ...(or please report bugs).

regards,
mc

-- 
Marc Chantreux
BibLibre, expert en logiciels libres pour l'info-doc
http://biblibre.com
-------------- next part --------------
# $Id:$ vim: fdm=marker

# Licensed under the GPL
# Copyright 2008 Biblibre.com
# Koha library project  www.koha.org
#
# this script follow all the installtion procedure described in INSTALL.Debian
# with some additions to use lenny packages.
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA  02111-1307 USA
#
# TODO:
# - search and destroy all TODO in this file
# - detect country or locale to choose lang and marc by default for koha install
#   (fr, unimarc) 
# - detect country or locale to choose translator

# abort if anything wrong
set -e

: ${DB_TYPE:=mysql}
: ${DB_HOST:=localhost}
: ${DB_NAME:=koha}    
: ${DB_USER:=kohaadmin}
: ${DB_PASS:=katikoan}

: ${INSTALL_ZEBRA:=yes}
: ${INSTALL_SRU:=yes}
: ${INSTALL_PAZPAR2:=no}
: ${AUTH_INDEX_MODE:=grs1}

: ${INSTALL_MODE:=standard}

: ${ZEBRA_MARC_FORMAT:=marc21}
: ${ZEBRA_LANGUAGE:=en}
: ${ZEBRA_USER:=kohauser}
: ${ZEBRA_PASS:=zebrastripes}
: ${ZEBRA_SRU_HOST:=localhost}
: ${ZEBRA_SRU_BIBLIOS_PORT:=9998}
: ${ZEBRA_SRU_AUTHORITIES_PORT:=9999}

: ${KOHA_USER:=koha}
: ${KOHA_GROUP:=koha}


: ${MERGE_SERVER_HOST:=localhost}
: ${MERGE_SERVER_PORT:=11001}

: ${PAZPAR2_HOST:=localhost}
: ${PAZPAR2_PORT:=11002}

: ${KOHA_SRC_DIR:=/usr/local/src}
: ${KOHA_SRC_BASE:=koha}
KOHA_SRC_PATH="$KOHA_SRC_DIR/$KOHA_SRC_BASE"
: ${GET_KOHA_SRC_METHOD:=beta}

# repo that is used by configure_lenny_sources
# FIXME: comment this before update
LENNY_FLAVORS="testing main non-free contrib" 

GET_KOHA_LOG=/dev/null

# functions declarations {{{

ask_yn () {
	local ans
	echo
	echo
	echo "$*" 
	while echo '(y/n)' && read ans; do
		[ x"$ans" = xn ] && return 1
		[ x"$ans" = xy ] && return 0
	done
}

# perlish warn
warn () { echo "$*" >&2
}

# $1 is errorlevel
# the rest is an error message
die () {
    err=$1
    shift
    warn "$*"
    exit $err
}

add_package () {
# add a list of names of packages to be installed 
# exemple: add_package screen zsh 
# or     : echo screen zsh | add_package 
	local deb 
	if [ "$1" ]; then
	    for deb in $@; do
		    echo $deb >&3
	    done
	else
	    cat >&3
	fi
}

open_package_list () {
    PACKAGELIST=$(mktemp)
    # write in fd3 to add a name of required package
    exec 3>$PACKAGELIST
}

install_package_list () {
    # close the list
    exec 3>&-
    # install it
    xargs -a $PACKAGELIST aptitude install
    # remove it
    rm $PACKAGELIST
}

configure_indexdata_sources () {
    
    # Add indexdata packages to the apt sources
    echo ' # Sources for yaz and idzebra
    deb http://ftp.indexdata.dk/debian etch main
    ' > /etc/apt/sources.list.d/indexdata.sources.list
    
    # install indexdata key (to make indexdata sources usable)
    wget -O- http://ftp.indexdata.dk/debian/indexdata.asc |
	    apt-key add - || die 1 "can't get indexdata sources"

}

configure_lenny_using_apt_spy () {
    dpkg -l apt-spy ||
	aptitude -y install apt-spy
    apt-spy -d lenny
}

# TODO:
# configure_lenny_using_etch_mirror () { 
# sed /etc/apt/sources.list > \
# /etc/apt/sources.list.d/testing.sources.list
# need to handle $@ for this 
# }

add_default_lenny_repro () {
    echo "deb $LENNY_REPO $LENNY_FLAVORS" > \
	/etc/apt/sources.list.d/testing.sources.list
}

ask_for_lenny_repo () {
	echo 'type the url of the repository to use for lenny packages. Be sure that is a valid debian repository.
	for example http://ftp.fr.debian.org/debian/'
	read LENNY_REPO
	add_default_lenny_repro
}

configure_lenny () {
    local howto
    if [ "$LENNY_REPO" ]; then
	add_default_lenny_repro
    else
	echo '$LENNY_REPO not set, what do you want to do now'
	select howto in \
		'manually set LENNY_REPO
		' \
		'get and use apt-spy to automatically find a repository
		(it can take some times)
		' \
		'let sources.list as it (still configured)' \
		'leave the installation' 
	do
		case "$howto" in

			*manually*)
				ask_for_lenny_repo
				break
			;;

			*automatically*)
				configure_lenny_using_apt_spy
				break
			;;

			*configured*)
				break
			;;

			*leave*)
				exit
			;;
		esac
	done
    fi
}

configure_aptitude_correctly () {
# configure aptitude to behave as old apt tools and
# use etch packages by default
cat << CONFAPT >  /etc/apt/apt.conf.d/Apt
APT {
    Default-Release "stable";
    Cache-Limit 20000000;
}

Aptitude {
    Recommends-Important false;
    Keep-Recommends false;
}
CONFAPT
}


set_libxml_parser () {
    # TODO: update-perl-sax-parsers --priority since lib-xml-sax-perl 0.16
	sed -i '
		# when XML::LibXML::SAX::Parser header detected
		# move the 2 lines in the hold space
		/[[]XML::LibXML::SAX::Parser[]]/ {
			N;H;d
		}

		# replace end of file by hold space
		$ { p;x }
	' /etc/perl/XML/SAX/ParserDetails.ini
}

verify_sax_parser () {
    local r
    r=`perl -MXML::SAX::ParserFactory -e 'print ref XML::SAX::ParserFactory->parser'`
    test "$r" = XML::LibXML::SAX::Parser || set_libxml_parser
}

create_debian_koha_user() {
# TODO: use $KOHA_GROUP
echo ----------------------
echo add the system user and group for koha.
echo your choice: $1
echo ----------------------
adduser $1
}

apache_add_ports () {
	local ports ports_conf needed
	ports_conf="${1:-/etc/apache2/ports.conf}"
	ports=`sed -n 's/Listen[\t ]\([0-9]\+\)/\1/p' "$ports_conf"` 
	{ for needed in 80 8080; do
		expr "$ports" : '.*\<\('$needed'\)\>.*' > /dev/null ||
			echo "# Added by koha installer
Listen $needed
"
	done } >> "$ports_conf" 
}

get_koha_git_clone () {
    # /!\ be carrefull to be in the good directory
    # /usr/local/src/ recommended
    local base="${1:-koha}"

    dpkg -l git-core ||
	aptitude -y  install git-core git-email
    git clone git://git.koha.org/pub/scm/koha.git "$base"
}

get_koha_release () {
    wget -O- http://download.koha.org/koha-3.00.00.tar.gz |
	tar xzf - 
}

get_koha_beta () {
    # /!\ be carrefull to be in the good directory
    # /usr/local/src/ recommended

    local method base
    base="$1"
    method="${2:-beta}"

    get_koha_release "$base" && return 0
    [ $method = tar ] && return 1 

    local i basename; i=2
    while [ $i != 11 ]; do
	basename=koha-3.00.00-beta$i
	wget -O- http://download.koha.org/$basename.tar.gz |
	    tar xzf - &&
		mv $basename "$base" &&
		return 0
	let i+=1
    done

    return 1 
}

get_koha_sources () {
    # /!\ be carrefull to be in the good directory
    # /usr/local/src/ recommended
    local method base
    method="${2:-git}"
    base="$1"

    case "$method" in
	git) get_koha_git_clone $base
	;;
	tar)
		get_koha_release "$base" ||
			die 1 koha not found
	;;
	beta) get_koha_beta "$base" "$method" ||
			die 1 koha not found
	;;
	*) : # TODO: error message and exit 
	;;
    esac
}

# end of function declarations }}}

if [ -e "$KOHA_SRC_PATH" ];then
    if ask_yn "$KOHA_SRC_PATH still exists. use it ?"; then
	    ask_yn "download the sources again ?" ||
		PLEASE_DONT_GET=1
    else 
	    exit
    fi
else 
	[ -d "$KOHA_SRC_DIR" ] ||
		die 1 "$KOHA_SRC_DIR is not a directory"
fi

# parsing arguments {{{
# TODO: document it
if [ "$1" ]; then
    [ "$1" = *g* ] && GET_KOHA_SRC_METHOD=git
fi

goto_koha_path () {
    cd $KOHA_SRC_PATH && return 0
    cd $KOHA_SRC_DIR
    local candidate
    local done
    done=no
    for candidate in koha?*; do
	if [ $done = no ]; then
	    mv $candidate $KOHA_SRC_BASE
	else
	    die 1 "more than one koha candidate into $KOHA_SRC_DIR, please clean up" 
	fi
    done 
    cd $KOHA_SRC_PATH && die 1 "can't cd to $KOHA_SRC_PATH"
}

mysql_create_base () {
	# TODO: what if non mysql backend ? so code ! 
	# try to create or try to find the base
	mysqladmin -uroot create "$1" || 
		echo show databases   |
			mysql         |
			grep -q "^$1$"
}

mysql_grant_access () { 
	local base login password
	base="$1" login="$2" password="$3"
cat << GRANTACCESS | mysql 
grant all on $base.* to '$login'@'localhost' identified by '$password';
flush privileges;
GRANTACCESS
}

verify_etch_sources () {
	local current backup
	current=/etc/apt/sources.list 
	backup=/etc/apt/sources.list.bak 
	if [ ! -e $current ] || [ ! -s $current ]; then
		[ -e $backup ] && mv $backup $current || die 1 "can't find etch"
	fi
}

# }}}

cd "$KOHA_SRC_DIR"
[ "$PLEASE_DONT_GET" ] ||
	get_koha_sources "$KOHA_SRC_BASE" "$GET_KOHA_SRC_METHOD" > $GET_KOHA_LOG 2>&1  & 
configure_indexdata_sources  # to install yaz and iezebra
configure_lenny              # because etch lacks some packages
configure_aptitude_correctly # to solve dependancies and conflicts
verify_etch_sources
# update the system
aptitude update
aptitude upgrade

open_package_list           # now we can add packages with add_package command
# this would be installed by dependances but it needs to be
# installed first to autoconfigure perl sax parser
add_package libxml-libxml-perl
# libyaz-dev required to build Net::Z3950::ZOOM from cpan
# can be removed when debian package will be usefull
add_package libyaz-dev
# lot of koha dependancies
cat << PACKAGES | add_package
idzebra-2.0
yaz
libmail-sendmail-perl
libmarc-record-perl/testing
libmarc-charset-perl/testing
libmarc-crosswalk-dublincore-perl
libpdf-reuse-perl
libpdf-reuse-barcode-perl
libdata-ical-perl
libxml-rss-perl/testing
libpoe-perl/testing
libschedule-at-perl
apache2
daemon
libgcrypt11
libgcrypt11-dev
gcc
make
mysql-server
libcgi-session-perl
libdate-calc-perl
libdate-manip-perl
libdate-ical-perl
libdatetime-format-mail-perl
liblingua-stem-perl
libdatetime-format-strptime-perl
libdatetime-format-w3cdtf-perl
libdbi-perl
libmysqlclient15-dev
libnet-ldap-perl
liblocale-po-perl
libpdf-api2-perl
libpoe-perl/testing
libtext-csv-perl/testing
libtext-charwidth-perl
libtime-duration-perl
libtime-format-perl
libunix-syslog-perl
libxml-dom-perl
libxml-dumper-perl
libxml-simple-perl
libxml-regexp-perl
libxml-xslt-perl/testing
libxml-libxslt-perl
libxml2-utils
libxslt1-dev
libyaml-syck-perl
libhtml-template-pro-perl
libdbd-mysql-perl/testing
libimage-magick-perl
liblist-moreutils-perl
libtext-iconv-perl/testing
PACKAGES

# no more "path not found" message during cpan configuration
add_package unzip lynx ncftp ftp

# just because it ease the life of the sysop
add_package screen zsh less lsof strace

# every selected packages will now be installed
install_package_list
# something wrong with libyaz-dev... KISS workaround is reinstall
aptitude install libyaz-dev

# those perl libs have no statisfying debian packages
# so they are installed via cpan.
cpan Net::Z3950::ZOOM MARC::File::XML \
    Algorithm::CheckDigits::M43_001 Biblio::EndnoteStyle

getent passwd $KOHA_USER ||
    create_debian_koha_user $KOHA_USER ||
    die "can't create $KOHA_USER"

mysql_create_base "$DB_NAME" ||
	die 1 "can't create or find $DB_NAME"
mysql_grant_access "$DB_NAME" "$DB_USER" "$DB_PASS" ||
	die 1 "can't grant access to $DB_USER"

echo "please wait while i'm downloading koha sources"
wait
cd "$KOHA_SRC_PATH"

verify_sax_parser 

perl Makefile.PL
make
make test
make install
apache_add_ports
kohaconf="`sed -n 's/^KOHA_DEST_KOHA_CONF_DIR = //p'  Makefile`"
ln -s "$kohaconf"/koha-httpd.conf /etc/apache2/sites-available/koha
a2enmod rewrite
a2ensite koha

# TODO:
# - add translator
# if cd misc/translator; then
#     ./tmpl_process3 install -s po/fr-FR... -i ../../koha-tmpl/opac-tmpl/prog/en -o ../../koha-tmpl/opac-tmpl/prog/fr-FR
#     cd -
# fi


More information about the Koha-devel mailing list