[Koha-de] Vorstellung und Frage nach Programmstruktur

Roger Grossmann roger.grossmann at lmscloud.de
Mo Jul 24 18:33:31 CEST 2017


Hallo Herr Becker,

hier ein paar zusammenfassende Informationen zu verwendeten Techniken bei Koha und wichtigen Verzeichnissen einer Koha-Debian-Installation.
Die Informationen sind als Einstiegshilfe gedacht. Die Angaben erheben keineswegs Anspruch auf Vollständigkeit. Eventuell sind Sie ja inzwischen viel weiter.

Wie Sie sicher bereits wissen, ist der überwiegende Teil aller Koha-Funktionalitäten in Perl entwickelt. Um Koha-Programme zu verstehen, sollten Sie daher ein gutes Verständnis für die Programmierung mit Perl aufbauen.
Perl-Programmcode wird nicht kompiliert sondern vom Perl-Interpreter zur Laufzeit interpretiert. Der Code von Perl-Porgrammen ist also auch in der installierten Umgebung lesbar und änderbar für einen Benutzer-Account, der die entsprechenden Zugriffsrechte auf dem Server besitzt.


Eingesetzte Techniken
------------------------------
Koha setzt auf folgende wichtige Tools, Techniken und Toolkits:

Perl-Module
Mit der Installation von Koha werden auf einem Debian-System mehr als 130 Perl-Module installiert, auf deren Funktionalität Koha aufsetzt. Beispiele sind: PDF-Generierung, XML-Verarbeitung, CSV-Daten-Verarbeitung, Zugriff auf andere Internet-Dienste, MARC-Daten-Verarbeitung usw. Diese stehen mit dem Aufruf von perl-Programmen zur Verfügung. Ein Aufruf von "perl -V" gibt Ihnen umfangreiche Informationen über die verwendete Perl-Installation.

Apache2
Die Koha-Oberfläche ist vollständig web-basiert. Koha benutzt Apache als Web-Server, der die Browser-Anfragen entgegennimmt und über die Standard-CGI-Schnittstelle an die Perl-Programme übergibt. Mit Apache kann sehr leicht per Konfiguration eine sicherer Betrieb der Koha-Anwendung mit HTTPS konfiguriert werden.

Template-Toolkit
Das Template-Toolkit wird als Template-Engine verwendet um programmgesteuert HTML-Antworten zu generieren, die der Web-Server an den Browser liefert. Bei jedem Aufruf an Koha wird ein Perl-Skript aufgerufen, mit dem am Ende eine HTML-Antwort mit Hilfe eines Templates erzeugt wird.

Perl-DBI-Datenbankschnittstelle
Mit Hilfe der unter Perl standardisierten Datenbankschnittstelle DBI erfolgen Zugriffe auf die Datenbank über eine standardisierte SQL-Schnittstelle.

DBIx
Abstraktion der DBI-Schnittstelle, die einen nativen Zugriff auf Datenbankobjekte als Perl-"Klassen" zur Verfügung stellt.
  
Datenbank MySQL
Koha wird überlicherweise mit einer auf MySQL basierenden Datenbank betrieben. Das ist überlicherwerse eine der folgenden Distributionen MariaDB, MySQL Community Server oder Percona MySQL. 
  
Perl Web Server Gateway Interface (PSGI/Plack)
Die Schnittstelle zwischen Webserver und Webanwendung wird benutzt um CGI-Aufrufe zu beschleunigen. Bei Benutzung der Schnittstelle wird nicht bei jedem Aufruf ein Programm neu gestartet, sondern die Programme werden über einen Anwendungserver im Arbeitsspeicher gehalten und über eine Schnittstelle aufgerufen. 
Wikipedia: Beim Standard-CGI werden die Daten (wie zum Beispiel aus Webformularen) vom Webserver (zum Beispiel Apache) via Umgebungsvariablen an den Perl-Interpreter übermittelt, der dafür immer wieder in einem neuen Prozess starten muss. Bei PSGI erhält jede Anwendung beim Aufruf eine Referenz auf einen Hash (mit Variablen ähnlich wie beim CGI). 

Zebra
Volltext-Indexierer, mit dem Katalog- und Exemplardaten indexiert werden. Mit dem Zebra-Sever werden Katalog-Suchen abgearbeitet.


Abarbeitung eines Web-Requests
--------------------------------------------
Koha stellt ja ein vollständig Browser-basiertes Benutzerinterface für OPAC und Managementfunktionen zur Verfügung. Ein Koha-Browser-Request wird üblicherweise mit folgenden Schritten abgearbeitet:

1. Der Apache nimmt vom Browser die HTTP(s)-Anfrage an dem für den Apache-Server konfigurierten Port entsprechend der Apache-Konfiguration, die für die Koha-Instanz hinterlegt ist. Es ist möglich, mehrere Koha-Instanzen mit einem Apache zu betreiben. Hierzu kann entweder für jede Instanz unter einem unterschiedlicher Port betrieben werden oder per DNS-Konfiguration können unterschieliche Server-Namen bekannt gemacht werden, auf die der Apache reagiert. 
   
2. In der Apache-Konfiguration ist hinterlegt, ob die angfeforderte Seite oder Datei statisch ist oder der Inhalt über ein CGI-Skript generiert wird. Für einen CGI-Aufruf startet der Apache das in der Request-URL hinterlegte Perl-Skript und wartet auf die Ausgabe des Programmes. Bevor der CGI-Aufruf erfolgt, wertet der Apache die Aufrufparameter aus, abhängig davon, ob es sich um einen HTTP-GET oder HTTP-POST-Aufruf handelt. Danaben werden entsprechende Umgebungsvariablen des Programmes gesetzt.
   
3. Das vom Apache aufgerufene (bzw. ausgeführte) Programm startet die Verarbeitung. Überlicherweise wird hierbei zuerst die Datenbankverbindung initialisiert und die Benutzer-Authentifzierung geprüft. Bei der Verarbeitung greift das Skript auf Funtkionalität zurück, die in Koha-Perl-Modulen hinterlegt ist. Am Ende der Abarbeitung wird das für das Skript zugehörige HTML-Template mit den von Perl-Skript erzeugten Variablen aufgerufen und die HTML-Anwort erzeugt. Diese wird von Skript auf die Standardausgabe geschrieben.
   
4. Der Apache nimmt die Ausgabe des Perl-Skriptes entgegen und generiert daraus die HTTP(S)-Response mit HTTP-Statuscode, HTTP-Header und HTTP-Body, die wiederum an den Browser als Antwort weitergegeben wird.

Bei etlichen Funktionen werden inzwischen AJAX-Aufrufe per JavaScript verwendet, die mit den zurückgelieferten Daten im Browser dir angezeigte HTML-Seite dynamisch anpassen.
 

Laufende Prozesse einer Koha-Instanz
----------------------------------------------------
Üblicherweise laufen auf einem Server die folgenden Koha-Prozesse pro Instanz:

a) starman master/worker: PSGI/Plack-Prozesse, an die vom Apache Web-Request weitergeleitet werden. Diese Rufen die Perl-Skripte auf, mit den OPAC und Bibliotheksmanagementfunktionalität implemntiert ist.
b) indexer daemon/prozess: Ruft regelmäßig den Koha-Indexer auf, die prüfen, ob neue Indexierungsaufträge nach Änderungen von Katalog- oder Exmplardaten vorliegen und diese abarbeiten.
c) zebra server: Server für die Katalog- und Exemplardatensuche.
d) SIP server: SIP2-Server-Dienste (muß explizit konfiguriert und gestartet werden)


Wichtige Verzeichnisse einer Koha-Installation
-------------------------------------------------------------
Folgende Verzeichnisse sind wichtig:
  
/etc/koha
Koha-Konfigurationsdateien
  
/etc/koha/sites/<KOHA-INSTANZ>/*
Koha-Konfigurationsdateien einer spezifischen Koha-Instanz
  
/etc/apache2/sites-available/<KOHA-INSTANZ>.conf
Apache-Konfigurationsdaten der Koha-Instanzen. Bitte beachten Sie, dass hier Konfigurationsdateien aus dem /etc/koha/-Verzeichnis eingebunden werden.
  
/usr/sbin/koha-*
Shell-Programme zur Verwaltung der Koha-Instanzen. Z.B.: Einrichten neuer Instanzen, Start und Stop der Koha-Services, Indexierung der Daten usw. 

/usr/share/koha
Hier befinden sich alle Perl-Module, Perl-Skripte und Tageslaufprogramme. 
Wichtige Verzeichnisse unter /usr/share/koha sind folgende:
/usr/share/koha/lib: Perl-Module, die von Perl-Skripten eingebunden werden und die Koha-Business-Funktionialität kapseln.
/usr/share/koha/bin: Perl-Programme für den Tageslauf, zur Datenmigration und Datenmanipulation sowie Startprogramme.
/usr/share/koha/misc: Translator-Programme, mit denen Koha für zusätzliche Sprachen dem dem Standard (Englisch) konfiguriert werden kann
/usr/share/koha/api: API-Schnittstelle von Koha für ausgewählte AJAX-Aufrufe, die JSON-Daten zurückliefern
/usr/share/koha/opac: CGI-Skripte und Templates der Koha-OPAC-Anwendung
/usr/share/koha/intranet: CGI-Skripte und Templates der Bibliotheksmanagment-Funktionalität  
	
/var/lib/koha
Hier werden dynamische Daten der Koha-Instanzen wie die Zebra-Indexe, installierte Plugins, Daten-Uploads usw. abgelegt.
  
/var/log/koha
Log-Dateien der Koha-Instanzen wie z.B. der Web-Server-Log, Fehlerlog usw.
  
/var/spool/koha
Standardmäßig werden die Datenbank als auch die Konfiguration und dynamischen Daten einer Instanz täglich per Cronjob gesichert. Die Sicherungsdaten der letzten zwei Tage werden in diesem Verzeichnis abgelegt.
  
/run/koha
In dem Verzeichnis werden pro Instanz PID-Dateien der gestarteten Server abgelegt bzw. für die Interprozesskommunikation per Sockets abgelegt.

/run/lock/koha
In dem Verzeichnis werden pro Instanz Lock-Dateien z.B. vom Zebra indexer abgelegt, um sicherzustellen, dass nicht gleichzeitig mehrere Prozesse den Index manipulieren können.

/etc/cron.daily, /etc/cron.hourly, /etc/cron.monthly
Hier befindet sich jeweils das Skript koha-common, welches die Programme des Koha-Tageslauf aufruft bzw. die stündlich oder monatlich auszuführenden Programme.

SRU
------
Zu ihrer konkreten Anfrage hinsichtlich der SRU-Schnittstelle: Hier wäre interessant zu wissen, ob Sie fremde SRU- oder Z39.50-Quellen einbinden wollen oder Ihren Bestand per SRU anbieten wollen. Im folgenden gehe ich von ersterem aus.
Die SRU-Schnittstelle kommt ja z.B. beim Copy-Cataloging zum Einsatz. 
Das Script zum Durchführen einer Katalogsuche finden Sie unter:
/usr/share/koha/intranet/cgi-bin/cataloguing/z3950_search.pl
Dieses verwendet das Modul C4::Breeding, das die Methode Z3950Search implementiert, welche wiederum von z3950_search.pl aufgerufen wird.
Den Code des Moduls finden Sie unter /usr/share/koha/lib/C4/Breeding.pm. Breeding.pm greift wiederum die Z39.50 Implementierung der ZOOM-Initiative zurück (http://zoom.z3950.org/) die über das Debian-Perl-Modul libnet-z3950-zoom-perl eingebunden wurde.

Sollten Sie einen eigenen SRU-Server betreiben wollen, so wird dieser mit dem Zebra-Server zur Verfügung gestellt. 
Hierzu müssten Sie die Konfigurationsdatei: /etc/koha/sites/<KOHA-INSTANZ>/koha-conf.xml bearbeiten und die entsprechenden Einträge für den publicserver aktivieren und bearbeiten. Danach die Koha-Dienste neu starten.

Ich hoffe, die Informationen helfen Ihnen weiter, einen Einstieg in den installierten Koha-Code zu finden. 

Viele Grüße,
Roger Großmann

--
LMSCloud GmbH
Roger Großmann - Geschäftsführer
Konrad-Zuse-Platz 8 - D-81829 München
t +49 (0)89 207042-620  m +49 (0)171-2194775 f +49 (0)89 207042-623
e roger.grossmann at lmscloud.de
w www.lmscloud.de

> Am 19.07.2017 um 19:14 schrieb Markus Becker <markus at flusskiesel.de>:
> 
> Liebe Koha-Mailingliste!
> 
> Ich weiß nicht, ob es hier so üblich ist, aber ich möchte mich nach Anmelden hier einfach mal vorstellen:
> 
> Mein Name lautet Markus Becker und ich leite die Bibliothek des Ministerium für Heimat, Kommunales, Bauen und Gleichstellung des Landes Nordrhein-Westfalen.
> 
> Gleichzeitig studiere ich berufsbegleitend Bibliotheksinformatik an der TH Wildau und möchte meine Masterarbeit über Koha schreiben. Ich denke nämlich, dass Koha für unsere Behördenbibliotheken eine Alternative zum bisher genutzten BIBLIOTHECAplus sein könnte.
> 
> Nun habe ich schon längst zwei Test-Installationen unter Debian und möchte nun mal in den Code schauen. Leider finde ich nirgendwo eine Doku über die Programmstruktur von Koha.
> 
> Gibt es irgendwo eine Übersicht, wo welche Funktionalität gesteuert wird?
> 
> Mich interessieren besonders die SRU-Schnittstellen.
> 
> Viele Grüße und vielen Dank im voraus,
> Markus Becker
> 
> _______________________________________________
> Koha-de mailing list
> Koha-de at lists.koha-community.org
> http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-de



Mehr Informationen über die Mailingliste Koha-de