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)

Advertisements

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…

Topic Maps Dublin Core, FRBR e Dewey

Soundtrack per il post: Stairway to Heaven – Led Zeppelin
Murray Altheim ha segnalato su topicmapmail di aver rilasciato diverse ontologie espresse in una topic map (in particolare in formato LTM).

Di estremo interesse dal punto di vista biblioteconomico risultano essere le ontologie relative alla classificazione decimale Dewey, a Dublin Core e a FRBR.

Quest’ultima assume particolare valore in funzione del mio dottorato: è (ovviamente e per fortuna ;)) da completare, aggiungendo tutte le possibili relazioni fra le entità, gli attributi delle stesse e, quando uscirà in forma definitiva FRAD, integrando le entità del secondo gruppo.

In ogni caso oltre a un’ontologia di riferimento sarà opportuno predisporre mapping fra i diversi data model (prendendo come punto di riferimento TMDM o direttamente TMRM, in modo da essere indipendenti dal linguaggio di serializzazione poi usato) e definire dei PSI (Public Subject Indicator).

OpenLibrary.org – accesso libero e universale ai libri: un gnu manifesto per le biblioteche

Soundtrack per il post: Free Software Song – Richard Stallman

Credo che la definizione “un gnu manifesto per le biblioteche” riassuma tutto il mio pensiero e l’entusiasmo a riguardo: leggendo la presentazione del progetto mi è sembrato di essere catapultato nel 1983 davanti al famoso messaggio di Richard Stallman al newsgroup net.unix-wizards o davanti al gnu manifesto (se mi si perdona il paragone ardito da biblioteconomo eccessivamente entusiasta ;)).

Le considerazioni alla base di OpenLibrary possono essere riassunte in:

  • mancanza di sistemi di cooperazione per biblioteche liberi, aperti e scalabili (con un occhio d’attenzione, quindi, per le biblioteche di piccole dimensioni, scolastiche etc.): i diversi ILS infatti sono pensati maggiormente per la singola biblioteca piuttosto che per la condivisione aperta (è doveroso citare i nuovi ILS interamente web-based come EOSWEB, tuttavia anche in questo caso il target è il singolo, pur inteso come consorzio, rete etc. e non la comunità). Reti come OCLC invece mancano delle caratteristiche di open e free (inteso, in questo caso, sia come parlare libero che birra gratis) e i loro dati sono avviabili solo sotto licenza. Progetti come google book o wikibook appaiono ancora troppo giovani per potersi candidare come sostituti autorevoli;
  • quasi l’84% degli utenti cerca informazioni (anche bibliografiche) su internet con motori di ricerca e l’80% di loro ritiene affidabili le informazioni che trova. Questo è un potenziale rischio sia lato utente (non ottengono le informazioni cercate o, banalmente, non trovano il libro cercato) sia lato biblioteche (che diventano così meno rilevanti nella ricerca delle informazioni poiché non consultabili tramite i canali ormai diffusi). OpenLibrary si propone, dunque, di ridurre questa distanza
  • sommare competenze e soluzioni diverse a partire da:
    • il sito web costruito e mantenuto dall’Internet Archive
    • un catalogo centrale unico costruito a partire dal Catalogo della Library of Congress, dai feeds ONIX degli editori e dai libri scanditi (per la polemica scandire, scansionare, scannare si veda l’Accademia della Crusca) dall’OCA (Open Content Alliance);
    • struttura colaborativa (wiki) con la possibilità dei partecipanti (istituzioni e biblioteche) di modificare e aggiungere informazioni ai singoli libri;
    • una versione multiutente (multibiblioteca) di Scriblio da integrare con OpenLibrary.org: scriblio (ex WPOPAC, in italiano recensito da The Geek Librarian) è un OPAC basato su wordpress ed è stato pensato per singole biblioteche (si veda ad esempio la Lamson Library), tuttavia come wordpress ha una propria versione multiutente (wordpressMU, peraltro alla base proprio di wordpress.com) così la Plymouth State University sta sviluppando una versione multiutente di Scriblio;
    • le digitalizzazioni fin qui effettuate dall’OCA, anche queste da integrare e metter a disposizione su OpenLibrary.org;

Credo di aver tediato fin troppo e occupato anche eccessivo spazio, il consiglio è di analizzare i primi passi effettuati (su OpenLibrary.org) e il piano di sviluppo previsto sui due anni direttamente dall’articolo originale (disponibile anche in versione PDF).

Open Access? Sì, ma ricordiamoci le licenze!

Soundtrack per il post: Eagle Fly Free – Helloween

Open Access…

Accesso aperto, libero, ma spesso direi (purtroppo) solo gratuito alla conoscenza…

Non è mia intenzione criticare nessuna esperienza di Open Access Archive, anzi, sono generalmente esperienze di estremo interesse e di sicura utilità.

Tuttavia voglio porre l’accento su una questione che da tempo alberga, minacciosa :D, dentro di me. L’uso delle licenze:

  • un repository come E-LIS non prevede nei numerosi campi da compilare nell’inserimento di nuovo materiale la voce licenza (neanche come opzionale). Questa situazione è comune a molti Open Access Archive e, di default, a diversi open-source digital archiving system.
    Credo di essere uno dei pochi, se non l’unico, ad aver esplicitamente indicato (nell’abstract non avendo altro campo disponibile) la licenza (nel mio caso la solita cc-by-sa) sotto la quale rilasciavo il mio lavoro.
    Nei casi in cui la licenza non viene indicata vige, ovviamente, “all rights reserved”, tutti i diritti sono riservati.
    E-LIS però prevede delle eccezioni, ad esempio:

    The documents posted on E-LIS archive are protected by copyright, retained by the authors, or by other ownerships. Authors or Publishers control translation and reproduction rights to these works. However, users of the works are granted permission for individual, educational research, and non-commercial reproduction under national, foreign, and international laws on Copyright.

    Ok, sostanzialmente questa è assimilabile a una creative commons by-nc-nd.
    Potrebbe essere una buona idea prevedere, nell’inserimento dati, un menù a tendina (obbligatorio) per la scelta della licenza da applicare, usando proprio la cc-by-nc-nd come scelta di default. La presenza di questa scelta, a mio avviso, stimolerebbe nell’autore una riflessione su quale licenza applicare ed è ipotizzabile e auspicabile che questo favorisca una diffusione maggiore di licenze che permettano un accesso aperto e libero alla conoscenza e non meramente gratuito.

  • E veniamo al secondo punto.
    L’inserimento di opere da parte di persona diversa dall’autore.
    Posso affermare con relativa sicurezza che in buona parte dei casi si tratta di “banale” violazione di copyright: slide di corsi, interventi ai convegni etc. inseriti senza che l’autore sappia alcunché (e questo non lo ipotizzo, ma lo so, avendo chiesto ai diretti interessati).
    Ma il punto focale non è questo, il punto è ancora una volta la licenza.
    Per poter inserire materiale di cui non si è autori bisogna dichiarare che il materiale è di dominio pubblico. Tratto dalla submission policy di E-LIS:

    For work being deposited by someone other than its author:
    I hereby declare that the collection of files and associated bibliographic metadata that I am archiving at E-LIS is in the public domain. If this is not the case, I accept full responsibility for any breach of copyright that distributing these files or metadata may entail.

    Ora, non so se ciò avvenga per faciloneria o per ignoranza nelle licenze (motivo per cui, anche nell’inserimento, la questione licenze dovrebbe essere enfatizzata), ma “public domain” non significa che sia disponibile altrove su internet o che il materiale sia stato distribuito a un convegno pubblico o a una lezione. Public Domain (si veda la voce su wikipedia e la public domain certification su creativecommons.org) è una licenza di copyleft che, per fare un esempio legato al software, è assimilabile alla licenza MIT o alla BSD License originale. Tra l’altro, in Italia, la public domain sarebbe limitata dall’esistenza dei diritti morali sull’opera, inalienabili.
    In pratica è possibile prendere una lezione, un preprint, un qualunque documento inserito sotto public domain, stamparlo, pubblicarlo a proprio nome e rivenderlo.
    E-LIS si cautela con quel “I accept full responsibility for any breach of copyright”…simili clausole sono presenti anche nella submission policy di youtube, tuttavia la Walt Disney va in assetto da guerra da Google, non da chi ha inserito il materiale.
    A mio avviso è necessaria una ferma presa di posizione, in questo caso, e rifiutare tutti gli inserimenti effettuati non dall’autore tranne i casi in cui lo stato di public domain sia esplicitamente dichiarato (non da chi inserisce) e provato.

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