Appunti per l’installazione di Koha su Ubuntu Feisty 7.04 (breve guida)

Soundtrack per il post: Wake Up – Rage Against the Machine

Solo un breve appunto sull’installazione di Koha (visto che mi è capitato di installarlo due volte a tre giorni di distanza e non ricordarmi ciò che avevo fatto la volta prima). Sicuramente l’installazione sarà estremamente simile su altre distribuzioni GNU/Linux però potrebbe variare qualche dipendenza non installata.

Installazione di un server lamp [tratte da wiki.ubuntu-it.org] (apache, mysql, php):
sudo apt-get install apache2-mpm-prefork mysql-server libapache2-mod-php5 php5-mysql

Installazione di Yaz
wget http://ftp.indexdata.dk/pub/yaz/yaz-3.0.6.tar.gz
tar xvfz yaz-3.0.6.tar.gz
cd yaz-3.0.6
./configure
make
sudo make install

Installazione di php-yaz (qualora servisse)
sudo apt-get install php5-dev php-pear
sudo pecl install yaz

Aggiungere extension=”yaz.so” in php.ini

Installazione di Koha, l’ultima versione stabile è la 2.2.9
wget http://download.savannah.nongnu.org/releases/koha/koha-2.2.9.tar.gz
tar xvfz koha-2.2.9.tar.gz
cd koha-2.2.9
sudo perl installer.pl

Partirà il controllo dei moduli perl necessari, nel mio caso (quindi con un’installazione pulita di ubuntu feisty) ho installato:
sudo perl -MCPAN -e 'install "XML::Simple"'
sudo perl -MCPAN -e 'install "Date::Manip"'
sudo perl -MCPAN -e 'install "HTML::Template"'
sudo perl -MCPAN -e 'install "MARC::Record"'
sudo perl -MCPAN -e 'install "Mail::Sendmail"'
sudo perl -MCPAN -e 'install "PDF::API2"'
sudo perl -MCPAN -e 'install "Event"'
sudo perl -MCPAN -e 'install "Class::Accessor"'
sudo perl -MCPAN -e 'install "MARC::Charset"'
sudo perl -MCPAN -e 'install "MARC::File::XML"'
sudo perl -MCPAN -e 'install "Date::Calc"'
sudo perl -MCPAN -e 'install "GD::Barcode"'
sudo perl -MCPAN -e 'install "Data::Random"'
sudo perl -MCPAN -e 'install "PDF::Reuse::Barcode"'
sudo perl -MCPAN -e 'install "ZOOM"'

molto meglio installare ZOOM al posto del vetusto Net::Z3950 che l’installer suggerisce

Quindi installare koha con sudo perl installer.pl seguendo le istruzioni a schermo
Alla scelta sul file di configurazione di apache da usare scegliere /etc/apache2/apache2.conf

Terminata l’installazione configure Apache per usare Koha:
cd /etc/apache2/sites-enabled/
sudo ln -s /etc/koha-httpd.conf
sudo gedit koha-httpd.conf

Nell mio file di configurazione ho solo aperto la porta 8080 (listen 8080)

Riavviare apache
Collegarsi a nomescelto:80 per l’opac e nomescelto:8080 per la gestione (nel mio caso aziel:80 aziel:8080)

OpenBiblio e interrogazione di SBN tramite Z39.50: soluzione

Soundtrack per il post: Eruption – Van Halen

Recentemente avevo illustrato come installare la lookup patch per permettere la ricerca z39.50 in OpenBiblio, riscontrando problemi nell’interrogazione di SBN.

Ho avuto il tempo di effettuare qualche test e direi che il problema è sostanzialmente risolto: interrogando il server opac.sbn.it alla porta 2100 si otterrà sempre un errore, poiché in quel caso è supportata solo la sintassi del record surts e questa non è supportata dalla funzione php yaz_record se si utilizza il type array.

Se invece si interroga sempre opac.sbn.it alla porta 3950 è supportata anche la sintassi di dati usmarc, ovviando al problema.

$host[0] = 'opac.sbn.it:3950'; ##-- sbn
$hostName[0] = 'SBN - Sistema Bibliotecario Nazionale';
$database[0] = 'nopac'; ##-- as required for the server
$hostUser[0] = ''; ##-- as required for the server
$hostPassword[0] = ''; ##-- as required for the server

Bisogna ancora risolvere un piccolo inconveniente: la lookup patch, nel caso di un ISBN elimina tutti gli spazi vuoti e gli score “-“, SBN invece si aspetta proprio il numero ISBN segmentato nelle 4 (5 se ISBN13) parti.

Per ovviare a questo, nel file lookup_z3950_search.php proprio all’inizio bisogna sostituire l’intero else if ($srchBy == “7”) con:

else if ($srchBy == "7") {

$srchByName = 'ISBN';
## remove any space char user may have entered
$lookupVal = str_replace(" ", "-", $lookupVal);

## test if its a scanned EAN code
## '978' & '979' per Cristoph Lange of Germany
## sbn seems to record isbn13 without "-"

if (((substr($lookupVal, 0,3) == '978') ||(substr($lookupVal, 0,3) == '979')) && (strlen($lookupVal) > 12)) {
## remove any "-" char user may have entered
$lookupVal = str_replace("-", "", $lookupVal);

## remove any space char user may have entered
str_replace(" ", "", $lookupVal);

}
//$lookupVal = substr($lookupVal,0,10);
//echo 'final isbn: ' . $lookupVal . '';
}

In questo modo inserendo un codice ISBN segmentato la ricerca su SBN funziona (mentre l’isbn13 viene passato non segmentato così come sembra essere di solito registrato in sbn).
Mi rendo conto che come workaround non è il massimo dell’eleganza…

Openbiblio: guida all’importazione tramite Z39.50

Soundtrack per il post: Back on earth – Ozzy Osbourne

A distanza di oltre un mese dall’ultimo post (ma nell’ultimo mese ho continuato a scandagliare, usare, modificare progetti open source e liberi per gli archivi e le biblioteche) riprendo da openbiblio.

Openbiblio è uno degli ILS (Integrated Library System) open source più noti e apprezzati (a mio avviso secondo solo a Koha e Evergreen).

Openbiblio necessita di php4 e mysql4 o superiori e l’istallazione è estremamente semplice.

Nella sua versione base Openbiblio non permette l’interrogazione e l’importazione da altri cataloghi. A questo ha posto rimedio Fred LaPlante con la sua lookup patch.

Per installare la patch, supponendo di avere un’installazione funzionante di openbiblio, è necesario:

  • installare l’estensione php yaz. Questo può essere un po’ complicato a seconda del sistema usato (cercherò a giorni di scrivere un post con istruzioni per ogni sistema operativo e versione di php) assumendo abbiate installato apache php5 e mysql su un sistema *nix, ad esempio su ubuntu feisty basterà:
    • installare php-pear
      sudo apt-get install php-pear
    • scaricare il sorgente di yaz (contiene libyaz3 e libyaz3-dev(, decomprimerlo entrare nella directory e lanciaarsi nella danza magica della compilazione (./configure make sudo make install)
    • scaricare e installare tramite pecl yaz (notare che serve phpize, se ottenete phpize not found dovete installare il pacchetto php5-dev
      sudo pecl install yaz
    • modificare php.ini aggiungendo nelle sezione dynamic extension extension=”yaz.so”
    • caricare sul proprio server un file info.php con all’interno la stringa (nota. lo spazio fra < ? non deve esserci, è necessario, altrimenti wordpress
      <?php phpinfo(); ?>
    • riavviare apache
      sudo /etc/init.d/apache2 restart
    • visualizzare il file info.php (http://localhost/info.php) e controllare che a metà pagina ci sia una sezione su yaz (con yaz support enabled)
  • scaricare la lookup patch (la versione per openbiblio 0.6 è disponibile qui)
  • decomprimere il file scaricato e copiare tutti i file php e js nella directory in cui avete copiato openbilio, sottodirectory catalog (nel mio caso /var/www/openbiblio/catalog)
  • copiare i file ‘cutter.MYD’, ‘cutter.frm’ e ‘cutter.MY’ nella directory del database mysql di openbiblio (nel mio caso /var/lib/mysql/openbilio)
  • aggiungere al fondo del file [directoryopenbiblio]/locale/en/cataloging.php (nel mio caso /var/www/openbiblio/locale/en/cataloging.php) le seguenti righe:

    #****************************************************************************
    #* Translation text for page lookup_form.php
    #****************************************************************************
    $trans["lookupZ3950Search"] = "\$text = 'Z39.50 search';";
    $trans["lookupISBN"] = "\$text = 'ISBN';";
    $trans["lookupISSN"] = "\$text = 'ISSN';";
    $trans["lookupLCCN"] = "\$text = 'LCCN';";
    $trans["lookupTitle"] = "\$text = 'Title';";
    $trans["lookupAuthor"] = "\$text = 'Author';";
    $trans["lookupKeyword"] = "\$text = 'Keyword anywhere';";
    $trans["lookupPublisher"] = "\$text = 'Name of Publisher';";
    $trans["lookupPubLoc"] = "\$text = 'Place of Publication';";
    $trans["lookupPubDate"] = "\$text = 'Date of Publication';";
    $trans["lookupSearch"] = "\$text = 'Search';";
    $trans["lookupRepository"] = "\$text = 'Repository';";
    $trans["lookup_yaz_setup_failed"] = "\$text = 'yaz setup failed for host: !';";
    $trans["lookup_badQuery"] = "\$text = 'Bad Query';";
    $trans["lookup_YAZerror"] = "\$text = 'Lookup YAZ Error: ';";
    $trans["lookup_NothingFound"] = "\$text = 'Nothing found for ';";
    $trans["lookup_TooManyHits"] = "\$text = 'Too many hits to display, ';";
    $trans["lookup_RefineSearch"] = "\$text = 'Please refine the search and try again.';";
    $trans["lookup_Success"] = "\$text = 'Success! Z39.50 search data is shown below!';";
    $trans["lookup_hits"] = "\$text = ' hits, please select one.';";
    $trans["lookup_callNmbrType"] = "\$text = 'Your my_callNmbrType is invalid!';";
    #****************************************************************************
  • aggiungere al fondo del file [directoryopenbiblio]/locale/en/navbars.php (nel mio caso /var/www/openbiblio/locale/en/navbars.php) le seguenti righe:

    #****************************************************************************
    #* Translation text for page lookup_form.php
    #****************************************************************************
    $trans["z3950search"] = "\$text = 'Z39.50 Search';";
  • editare la parte finale del file [directoryopenbiblio]/navbars.cataloging.php (nel mio caso /var/www/openbiblio/navbars/cataloging.php) in modo che sia:
    <?php if ($nav == "upload_usmarc") { ?>
    » <?php echo $navLoc->getText("Upload Marc Data");?><br>
    <?php } else { ?>
    <a href="../catalog/upload_usmarc_form.php" mce_href="../catalog/upload_usmarc_form.php" class="alt1"><?php echo $navLoc->getText("Upload Marc Data");?></a><br>
    <?php } ?><!-- ---------------------------------------- --->
    <!-- added for Fred LaPlante's Lookup Function -->
    <?php if ($nav == "search_z3950") { ?>
    » <?php echo $navLoc->getText("z3950search");?><br>
    <?php } else { ?>
    <a href="../catalog/lookup_form.php" mce_href="../catalog/lookup_form.php" class="alt1"><?php echo $navLoc->getText("z3950search");?></a><br>
    <?php } ?>
    <!-- ---------------------------------------- --->
    <!-- ---------------------------------------- --->
    &lt;!-- da questo punto in poi si lascia invariato con <a href="javascript:popSecondary( etc... --->
    &lt;a href="javascript:popSecondary(.....................
    
  • Editare il file [directoryopenbiblio]/catalog/lookup_conf.php (nel mio caso /var/www/openbiblio/catalog/lookup_conf.php) inserendo i database che si vogliono interrogare via Z39.50. Ad esempio nel caso di sbn i parametri sarebbero:

    $host[4] = 'opac.sbn.it:2100'; ##-- sbn
    $hostName[4] = 'SBN - Sistema Bibliotecario Nazionale';
    $database[4] = 'nopac'; ##-- as required for the server
    $hostUser[4] = ''; ##-- as required for the server
    $hostPassword[4] = ''; ##-- as required for the server
    

Risultato e Problemi

Ricerca tramite z39.50 di “art of” come titolo e “mitnick” come autore. Una volta selezionato uno dei record trovati nella LoC i campi verranno automaticamente importati nella scheda per la catalogazione del libro

I problemi riguardano l’importazione nei casi in cui il server utilizzi sutrs o xml come sintassi del record.

Infatti quando lookup richiam il record con:

$ar = yaz_record($id[$host],$hit,"array");

ci troveremo con un bell’array vuoto dato che il type array non supporta sutrs o xml…

Il problema non è da poco perché proprio SBN (non a caso nell’indicare i parametri di SBN ho utilizzato il condizionale) utilizza sutrs, ma ho contatto Fred LaPlante per vedere se si può trovare una soluzione, sperando che venga in supporto alle mie limitate capacità in php 🙂

Soluzione del problema