Software

Die technische Dokumentation der HTTP-Schnittstelle findet sich unter API:

Nachfolgend sei eine Innenansicht der einzelnen Module aufgestellt. Die Integration der Module erfolgt i.d.R. über HTTPs. Die Module werden über entsprechende Einträge in der Apache-Konfiguration sichtbar gemacht. Es handelt sich also um eine Webservice-Architektur, in der alle Webservices über einen Apache-Webserver und entsprechende Einträge in ihren Konfigurationsdateien miteinander verbunden werden.

Regal Abhängigkeiten

Regal Abhängigkeiten

regal-api

Überblick

Source

regal-api <https: //github.com/edoweb/regal-api>

Technik

Play 2.4 .2 <https://www.playframework.com /documentation/2.4.x/JavaHome>

Ports

9000 / 9100

Verzeichnis

/opt/regal/apps/regal , /opr/regal/src/regal

HTTP Pfad

/

Mit regal-api werden alle grundlegenden Funktionen von Regal bereitgestellt. Dies umfasst:

  • HTTP Schnittstelle

  • Sichtbarkeiten, Zugriffskontrolle, Rollen

  • Speicherung, Datenhaltung

  • Konvertierungen

  • Ansichten

  • Suche

  • Webarchivierung

Der Webservice ist auf Basis von Play 2.4.2 realisiert und bietet eine reichhaltig HTTP-API zur Verwaltung von elektronischen Publikationen an. Die regal-api operiert auf Fedora Commons 3, MySql und Elasticsearch 1.1. Über die API werden auch Funktionalitäten von Etikett, Thumby, Zettel und Deepzoomer angesprochen. Für die Webarchivierung werden heritrix, wpull und openwayback angebunden.

Konfiguration

Dateien im /conf Verzeichnis

Datei

Beschreibung

aggregations.conf

Diese Datei wird verwendet um die Schnittstelle /browse zu konfigurieren. Die Einträg im Object “aggs” können direkt über die /browse Schnittstelle angesprochen werden. Mit Hilfe des Elasticsearch-Indexes wird dann eine entsprechende Antwort generiert. Beispiel: /browse/rdftype liefert eine Liste mit allen Publikationstypen, die im Index vorhanden sind.

application.conf.tmpl

Eine template Datei für die Hauptkonfiguration von regal-api. Diese Datei sollte zur lokalen Verwendung einmal nach application.conf kopiert werden. In der Datei sind alle Passwörter auf admin gesetzt.

crawler-beans.cxml

Die Datei wird verwendet, wenn im Webarchivierungsmodul eine neue Konfiguration für eine Webseite angelegt wird.

ehcache.xml

die Konfiguration der Ehcache Komponente

fedora-users.xml

deprecated - Zur Löschung vorgeschlagen

hbz_edoweb_url.txt

deprecated - Zur Löschung vorgeschlagen

html.html

deprecated - Zur Löschung vorgeschlagen

install.properties

deprecated - Zur Löschung vorgeschlagen

labels-edoweb.de

Labels für eine bestimmt Regal-Instanz

labels-for -proceeding-and-researchData.json

deprecated - Zur Löschung vorgeschlagen

labels-lobid.json

deprecated - Zur Löschung vorgeschlagen

labels-publisso.de

Labels für eine bestimmte Regal-Instanz

labels.json

Eine sinnvolle Startkonfiguration. Die Datei wurde mit Etikett erzeugt. Beim Start von regal-api wird zunächst versucht eine ähnliche Konfiguration direkt von einer laufenden Etikett-Instanz zu holen. Wenn dies nicht klappt, wird auf die labels.json zurückgegriffen.

list.html

deprecated - Zur Löschung vorgeschlagen

logback.developer.xml

Eine logging Konfiguration. Ich kopiere die immer nach logback.developer.js.xml (in .gitignore) und trage sie dann in die application.conf ein. Auf diese Weise kann ich an Loglevels herumkonfigurieren ohne das in diese Änderungen in die Versionsverwaltung spielen zu müssen.

logback.xml

Konfiguration des Loggers. Diese Datei ist in application.conf eingetragen.

mab xml-string-template-on-record.xml

Eine template-Datei zur Generierung von MAB-Ausgaben.

mail.properties

Konfiguration zur Versendung von Mails. Standardmäßig schickt die Applikation eine Mail, sobald sie im Production-Mode neu gestartet wurde. Auch der Umzugsservice im Webarchivierungsmodul verschickt Mails.

nwbib-spatial.ttl

deprecated - Zur Löschung vorgeschlagen

nwbib.ttl

deprecated - Zur Löschung vorgeschlagen

public-index-config.json

Konfiguration des Elasticsearch-Indexes. Da in dem Index vorallem Metadaten liegen, soll fast nicht tokenisiert werden.

routes

Hier sind alle HTTP-Pfade übersichtlich aufgeführt.

scm-info.sh

Diese Datei kann man unter Linux in die profile-Konfiguration seines Benutzers einbinden. Dann erhält man im Terminal farbige Angabgen zu Git-Branches,etc.

start-regal.sh

deprecated - Zur Löschung vorgeschlagen

tomcat-users.xml

deprecated - Zur Löschung vorgeschlagen

unescothes.ttl

deprecated - Zur Löschung vorgeschlagen

wglcontributor.csv

deprecated - Zur Löschung vorgeschlagen

Die Applikation

Das /app Verzeichnis

Package

Beschreibung

default package

Hier befindet sich die Datei Global, die in Play 2 .4 noch eine große Rolle spielt. In der Datei können zum Beispiel Aktionen vor dem Start der Applikation erfolgen, auch können hier HTTP-Requests mit geloggt werden. Bestimmte Aktionen werden nur im Production-Mode ausgeführt, d.h. nur wenn die Applikation mit start gestartet wurde oder über dist ein entsprechendes Binary erzeugt wurde.

actions

Hier sind Funktionen versammelt, die meist unmittelbar aus den Controller-Klassen aufgerufen werden.

archive.fedora

Ein Reihe von Dateien, über die Zugriffe auf Fedora Commons 3 organisiert werden. Hier finden sich auch einige Hilfsklassen (Utils). Das FedoraInterface zeigt an, welche Aktionen auf der Fedora ausgeführt werden. Der Code in diesem Paket gehört mit zu dem ältesten Code im gesamten Regal-Projekt.

archive.search

Zugriff auf die Elasticsearch

authenticate

Regal verwendet Basic-Auth zur Authentifizierung. Um die entsprechenden Aufrufe in den Controllern zu Schützen wird eine Annotation @BasicAuth verwendet. Diese findet sich hier. Die Annotation selbst bewirkt, dass jeder Controller-Aufruf durch die Methode basicAuth der Klasse BasicAuthAction.java läuft. Ziel dieser Prozedur ist es, dem aktuellen Zugriff die Berechtigungen einer bestimmten Rolle zuzuordnen.

controllers

Der Code, der in diesen Klassen organisiert ist, wird bei den entsprechenden HTTP-Aufrufen ausgeführt. In der /conf/routes Datei kann man sehen, welcher HTTP-Aufruf, welchen Methoden-Aufruf zur Folge hat. Die Controller-Klassen sind i.d.R. von der Klasse MyController abgeleitet, die Hilfsfunktionen bereitstellt, aber auch Funktionen zur Überprüfung von Zugriffsrechten. Die Überprüfung von Zugriffsrechten erfolgt durch eingebettet Calls und wird über die internen Klassen von MyController realisiert. Beispiel: Die Funktion listNodes in der Klasse controllers.Resource ruft ihre Prozeduren eingebettet in eine Funktion der Klasse ListAction auf. Die Klasse ListAction ist in MyController implementiert und überprüft, ob der Aufruf mit der nötigen Berechtigung erfolgte. Vgl. Zugriffsberechtigungen und Sichtbarkeiten

converter.mab

Diese Datei realisiert das OAI-Providing von MAB-Daten. Ursprünglich war geplant, wesentlich umfangreichere MAB-Datensätze an den Verbundkatalog zu liefern. Daher wird hier mit einer eigenen Template-Engine gearbeitet, etc. Ein lustiges Produkt in diesem Kontext ist auch die Klasse models.MabRecord.

de.hbz.lobid.helper

Der hier befindliche Code kommt ursprünglich aus einem anderen Paket, wurde dann aber beim Neuaufbau des Lobid 2 Datendienstes gemeinsam mit den Kollegen weiterentwickelt und ist schließlich wieder hier gelandet. Mittlerweile ist die offizielle JSON-LD-Library soweit entwickelt, dass man die Konvertierung auch darüber machen kann. Achja, denn dafür ist der Code: Lobid N-Triples in schönes JSON umzuformen, das dann auch in den Elasticsearch-Index kann.

helper

Die mit Abstand wichtigste Klasse in diesem Package heißt JsonMapper. Hier wird das JSON für Index und Ansichten erzeugt.

helper.mail

Emails verschicken.

helper.oai

Einige Klassen zur Regelung des OAI-Providings. Der OAIDispatcher analysiert, ob und wie ein Node an die OAI-Schnittstelle gelangt.

models

Die wichtigste Klasse hier ist Node über diese Klasse läuft der Großteil des Datentransportes.

views

Templates in der Sprache Twirl und einige Java-Hilfsklassen.

views.mediaViewers

Ein paar Viewer, die über die Hilfsklasse ViewerInfo in tags.resourceView eingebunden werden können.

views.oai

Mit Twirl XML zu generieren war keine gute Idee.

views.tags

Hilfstemplates.

Etikett

Überblick

Source

`Etikett`_

Technik

Play

Ports

9002 / 9102

Verzeichnis

/opt/regal/apps/etikett , /opr/regal/src/etikett

HTTP Pfad

/tools/etikett

Etikett ist eine einfache Datenbankanwendung, die es erlaubt

  1. Menschenlesbare Labels für URIs abzulegen. Über eine HTTP-Schnittstelle kann dann nach dem Label gefragt werden.

  2. Auch Konfigurationen zur Erzeugung eines JSON-LD Kontextes können abgelegt werden.

  3. Die Etikett-Datenbank erweitert sich dynamisch. Wird in einem authentifizierten Zugriff nach einer noch nicht bekannten URI gefragt, so versucht die Applikation ein Label für die URI zu finden.

In Etikett sind verschiedene Lookups realisiert, die dynamisch Labels für URIs finden können. Beispiele:

  • Crossref

  • Geonames

  • GND

  • Openstreetmap

  • Orcid

  • RDF, Skos, etc.

Fragt man Etikett nach einem Label, so antwortet Etikett mit dem Ergebnis des Lookups. Wenn Etikett nicht in der Lage ist, ein Label zu finden, wird die URI, mit angefragt wurde, zurückgegeben.

Etikett kann auch als Cache verwendet werden. So werden authentifizierte Anfragen in einer Datenbank persistiert. Erneute Anfragen werden dann aus der Datenbank beantwortet, ein erneuter Lookup wird eingespart. Einmal persistierte Labels werden nicht invalidiert. Die Invalidierung kann von außerhalb über authentifizierte HTTP-Zugriffe realisiert werden, stellt aber insgesamt noch ein Desiderat dar.

Etikett kann auch mit Labels vorkonfiguriert werden. Dabei können zusätzliche Informationen zu jeder URIs mit abgelegt werden. Folgende Informationen können in etikett abgelegt werden:

  • URI

  • Label

  • Weight - Zur Definition von Anzeigereihenfolgen.

  • Pictogram Iconfont-ID - Kann anstatt oder zusätzlich zum Label angezeigt werden.

  • ReferenceType - JSON-LD Typ

  • Container - JSON-LD Container

  • Beschreibung - Kommentar als Markdown

Etikett Oberfläche

Etikett Oberfläche

Mit Hilfe dieser Angaben kann Etikett auch einen “JSON-LD Context” bereitstellen. Insgesamt wird über Etikett eine Art “Application Profile” realisiert. Das Profil gibt Auskunft, welche Metadatenfelder (definiert als URIs) in welcher Weise (Typ, Container) Verwendung finden und wie sie angezeigt werden sollen (Label, Weight, Pictogram).

Im Regal-Kontext wird Etikett an vielen Stellen verwendet.

  • Zur Wandlung von RDF nach JSON-LD

  • Zur Anreicherung von RDF Importen

  • Zur menschenlesbaren Darstellung von RDF

  • Zur Konfiguration von Labels, Anzeigereihenfolgen und Pictogrammen

  • Als Cache

Konfiguration

Dateien im /conf Verzeichnis

Datei

Beschreibung

evolutions

Dieses Verzeichnis enthält SQL-Skripte, die bei Änderungen des Datenbankschemas automatisch über EBean angelegt werden. Beim nächsten Deployment einer neuen Etikett-Version werden die Skripte automatische angewendet. Die Skripte enthalten immer einen mit “Up” markierten Part, und einen mit “Down” markierten Part (für rollbacks).

application.conf

Hier kann ein Benutzer eingestellt werden. Alle Klassen im Verzeichnis models.* erhalten eine SQL-Tabelle.

ddc.turtle

Eine DDC Datei. Die Datei bietet Labels für DDC-URIs an.

labels.json

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

regal.turtle

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

routes

Alle HTTP-Schnittstellen übersichtlich in einer Datei

rpb.turtle

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

rpb2.turtle

Eine Labels-Datei, die zur initialen Befüllung verwendet werden kann.

Die Applikation

Das /app Verzeichnis

Package

Beschreibung

default

In Global werden die Requests mit geloggt.

controllers

In Application werden alle HTTP-Operationen implementiert. Unterstützt wird BasicAuth.

helper

Verschiedene Klassen, die eine URI verfolgen und versuchen ein Label aus den zurückgelieferten Daten zu kreieren.

models

Das Model Etikett ist persistierbar.

views

Die meisten HTTP-Operationen lassen sich auch über eine Weboberfläche im Browser aufrufen.

Zettel

Überblick

Source

`zettel < https://github.com/hbz/zettel>`__

Technik

Play Play 2.5 .4

Ports

9003 / 9103

Verzeichnis

/opt/regal/apps/zettel, /opr/regal/src/zettel

HTTP Pfad

/tools/zettel

Zettel ist ein Webservice zur Bereitstellung von Webformularen. Die Webformulare können über ein HTTP-GET geladen werden. Sollen existierende Daten in ein Formular geladen werden, so können diese Daten (1) als Form-encoded, (2) als JSON, oder (3) als RDF-XML über ein HTTP POST in das Formular geladen werden. Gleichzeitig kann spezifiziert werden, in welchem Format das Formular Daten zurückliefern soll.

Zettel Oberfläche

Zettel Oberfläche

Zettel verfügt über keine eigene Speicherschicht. Daten die über ein Formular erzeugt wurden, werden in der HTTP-Response zurückgeliefert. Zur Integration von Zettel in andere Applikationen wurde ein Kommunikationspattern entwickelt, das auf Javascript beruht. Das Zettel-Formular wird hierzu in einem IFrame in die Applikation eingebunden. Die Applikation muss außerdem ein Javascript einbinden, das auf bestimmte Nachrichten aus dem IFrame lauscht. Bei bestimmte Aktionen sendet das Zettel-Formular dann Nachrichten an die Applikation und erlaubt dieser darauf zu reagieren. Um Daten von Zettel in die Applikation zu bekommen, werden diese im HTML-DOM gespeichert und können von dort durch die Applikation entgegengenommen werden.

Zettel Datenfluss

Zettel Datenfluss

Konfiguration

Dateien im /conf Verzeichnis

Datei

Beschreibung

application.conf

Die Datei enthält einen Eintrag zur Konfiguration von Etikett. Über einen weiteren Eintrag können “Hilfetexte” angelinkt werden. Die Hilfetexte müssen in einer statischen HTML abgelegt sein. Am Ende der Datei werden einige Limits deutlich über den Standard erhöht, damit die großen RDF-Posts auch funktionieren.

collectionOne.csv

Die Datei regelt den Inhalt eines Combo-Box widgets mit id collectionOne.

ddc.csv

Die Datei regelt den Inhalt eines Combo-Box widgets mit id ddc.

labels.json

Ein paar labels, falls keine Instanz von Etikett erreichbar ist.

logback.xml

Logger Konfiguration.

professionalGroup.csv

Die Datei regelt den Inhalt eines Combo-Box widgets mit id professionalGroup.

routes

Alle HTTP-Pfade übersichtlich in einer Datei

Die Applikation

Das /app Verzeichnis

Package

Beschreibung

controllers

Es gibt nur einen Controller. Hier ist sowohl die Basisfunktionalität implementiert, als auch die Autocompletion-Endpunkte für die unterschiedlichen Widgets. Die Schnittstelle zu Abhandlung von Formulardaten ist recht generisch gehalten. Über eine ID wird das entsprechende Formular aus dem services.ZettelRegister geholt und das zugehörige Formular wird gerendert. Die Formular erhalten dabei unterschiedliche Templates (z.B. views.Article) und unterschiedliche Modelklassen (z.B. models.Article).

models

Das Model “Article” heißt aus historischen Gründen so. Tatsächlich können mittlerweile auch Kongressschriften und Buchkapitel darüber abgebildet werden (vermutlich wird sich der Name nochmal ändern). Das Model “Catalog” dient zum Import von Daten aus dem Aleph-Katalog (über Lobid). Mit ResearchData steht ein prototypisches Model zur Verarbeitung von Daten über Forschungsdaten zur Verfügung. Alle Models basieren auf einem einzigen “fetten” ZettelModel. Das ZettelModel enthält auch Funktionen zur De/Serialisierung in RDF und Json.

services

Hier werden verschiedene Hilfsklassen versammelt. Die Klasse ZettelFields enthält ein Mapping zur RDF-Deserialisierung.

views

Alle HTML-Sichten und die eigentlichen Formulare.

skos-lookup

Überblick

Source

skos-lookup

Technik

Play Play 2.5 .8

Ports

9004 / 9104

Verzeichnis

/opt/regal/apps/skos-lookup, /opr/regal/src/skos-lookup

HTTP Pfad

/tools/skos-lookup

skos-lookup dient zur Unterstützung von Zettel. Der Webservice startet eine eingebettete Elasticsearch-Instanz und verfügt über eine Schnittstelle um SKOS-Daten in separate Indexe zu importieren und Schnittstellen zur Unterstützung von jQuery-Autocomplete- und Select2-Widgets aufzubauen. Auf diese Weise können auch umfangreichere Thesauri und Notationssysteme in den Formularen von Zettel fachgerecht angelinkt werden. skos-lookup unterstützt auch mehrsprachige Thesauri.

SKOS-Lookup Beispiel 1

SKOS-Lookup Beispiel 1

SKOS-Lookup Beispiel 2

SKOS-Lookup Beispiel 2

Konfiguration

Dateien im /conf Verzeichnis

Datei

Beschreibung

application.conf

Hier wird der interne Elasticsearch-Index konfiguriert. Auch werden einige Speichereinstellungen erhöht. Damit auch große SKOS-Dateien geladen werden können, sollten auch die Java-Opts erhöht werden.

logback.xml

Logger Konfiguration

routes

Alle HTTP-Pfade übersichtlich in einer Datei

skos-context.json

Ein JSON-LD-Kontext zur Umwandlung von RDF nach JSON. (Origianl von: Jakob Voss)

skos-setting.json

Settings zur Konfiguration des Elasticsearchindexse. (Original von: Jörg Prante)

Die Applikation

Das /app Verzeichnis

Package

Beschreibung

controllers

Alles in einem Controller. Die API-Methoden liefern HTML und JSON, so dass man sie aus dem Browser, aber auch über andere Tools ansprechen kann.

elasticsearch

Eine embedded Elasticsearch. Dies hat den Vorteil, dass man eine aktuellere Version nutzen kann, als z.B. die regal-api.

services

Hilfsklassen zum Laden der Daten.

views

Ein Formular um neue Daten in die Applikation zu laden. Und ein Beispielformular zur Demonstration der Nutzung.

Thumby

Überblick

Source

`thumby < https://github.com/hbz/thumby>`__

Technik

Play Play 2.2 .2

Ports

9001 / 9101

Verzeichnis

/opt/regal/apps/thumby, /opr/regal/src/thumby

HTTP Pfad

/tools/thumby

Thumby realisiert einen Thumbnail-Generator. Über ein HTTP-GET wird Thumby die URL eines PDFs, oder eines Bildes übergeben. Sofern die Thumby den Server kennt, wird es versuchen ein Thumbnail der zurückgelieferten Daten zu erstellen. Die Daten werden dauerhaft auf der Platte abgelegt und zukünftige Requests, die auf dasselbe Bild verweisen werden direkt aus dem Speicher von Thumby beantwortet.

Konfiguration

Dateien im /conf Verzeichnis

Datei

Beschreibung

application.conf

Hier wird eine Whitelist gesetzt. Thumby verarbeitet nur URLs von den hier angegebenen Quellen. Hier wird auch der Pfad auf der Platte gesetzt, unter dem Thumby thumbnail-Daten ablegt.

routes

Alle HTTP-Pfade übersichtlich in einer Datei

Die Applikation

Das /app Verzeichnis

Package

Beschreibung

controllers

Der Controller realisiert eine GET-Methode, über die Thumbnails erzeugt und zurückgegeben werden.

helper

Klassen zur Organisation des Speichers und zur Thumbnailgenerierung.

views

Es gibt eine Oberfläche mit einem Upload-Formular.

Deepzoomer

Überblick

Source

DeepZoomService

Technik

`Servlet 2.3 < https://download.oracle.com/otn-p ub/jcp/7840-servlet-2.3-spec-oth- JSpec/servlet-2_3-fcs-spec.ps>`__

Ports

9091 / 9191

Verzeichnis

/opt/regal/tomcat-for-deepzoom/, /opr/regal/src/DeepZoomService

Der [DeepZoomService] kann als WAR in einem Application-Server deployed werden. Mit dem Deepzoomer können pyramidale Bilder erzeugt, gespeichert und über eine OpenSeadragon-konforme Schnittstelle abgerufen werden. Auf diese Weise kann in Regal eine Viewer-Komponente realisiert werden, die die Anzeige sehr großer, hochaufgelöster Bilder im Webbrowser unterstützt.

Konfiguration

Dateien im /conf Verzeichnis

Datei

Beschreibung

deepzoomer.cfgf

Hier werden lokale Verzeichnisse, aber auch die Server-URLs, unter denen der Service öffentlich abrufbar ist, gesetzt.

regal-drupal

Überblick

Source

regal-drupal

Technik

PHP 5

Ports

80 / 443

Verzeichnis

/opt/re gal/var/drupal/sites/all/modules/

Ein Drupal 7 Modul über das Funktionalitäten der regal-api angesprochen werden können. Das Modul bietet Oberflächen zur Konfiguration, zur Suche und zur Verwaltung von Objekthierarchien.

Die Applikation

Verzeichnisstruktur

Verzeichnis

Beschreibung

edoweb

Hier ist der Code für die Oberflächen.

edoweb-field

Hier werden Felder für unterschiedliche RDF-Properties in der Drupal-Datenbank konfiguriert. Der Code ist größtenteils obsolet, da die Feldlogik nicht mehr benutzt wird.

edoweb_storage

Hier sind die Zugriffe auf regal-api und ??? zu finden.

edoweb-drupal-theme

Überblick

Source

edow eb-drupal-theme

Technik

PHP 5

Ports

80 / 443

Verzeichnis

/opt/r egal/var/drupal/sites/all/themes/

Eine Reihe von Stylsheets, CSS, Icons zur Gestaltung einer Oberfläche für den Server https://edoweb-rlp.de

zbmed-drupal-theme

Überblick

Source

zb med-drupal-theme

Technik

PHP 5

Ports

80 / 443

Verzeichnis

/opt/r egal/var/drupal/sites/all/themes/

Eine Reihe von Stylsheets, CSS, Icons zur Gestaltung einer Oberfläche für den Server https://repository.publisso.de

openwayback

Repo: https://github.com/iipc/openwayback Servlet 2.5 .Überblick

Source

openwayback

Technik

Servlet 2.5

Ports

8091 / 8191

Verzeichnis

/o pt/regal/tomcat-for-openwayback/, /opr/regal/src/openwayback

Achtung: Es gibt einen am hbz entwickelten Branch. Dieser ist nicht auf Github.

Openwayback ist eine Webapplikation die im ROOT Bereich eines Tomcats installiert werden will. Sie kann Verzeichnisse mit WARC-Dateien indexieren und darauf eine Oberfläche zur Recherche und zur Navigation aufbauen.

heritrix

Heritrix ist ein Werkzeug zur Sammlung von Webseiten. Heritrix startet standalone als Webapplikation und bietet eine Weboberfläche zur Verwaltung von Sammelvorgängen an. Eingesammelte Webseiten werden als WARC-Dateien in einem bestimmten Bereich der Platte abgelegt.

wpull

Wpull ist ein Kommandozeilen-Wermzeug zur Sammlung von Webseiten. Mit WPull können WARC-Dateien erzeugt werden.

Fedora Commons 3

Fedora Commons 3 ist ein Repository-Framework. Für Regal wird vorallem die Speicherschicht von Fedora Commons 3 benutzt. Fedora-Commons legt alle Daten im Dateisystem (auch) ab. Mit den Daten aus dem Dateisystem lässt sich eine komplette Fedora-Commons 3 Instanz von grundauf neu aufbauen.

MySql

MySQL wir von Fedora, regal-api und etikett verwendet.

Elasticsearch 1.1

Elasticsearch ist eine Suchmaschine und wird von regal-api verwendet. Auch regal-drupal greift auf den Index zu.

Drupal 7

Über Drupal 7

Vagrant

Zur Veranschaulichung dieser Dokumentation wird ein Vagrant-Skript angeboten, mit dem eine Regal-Installation innerhalb eines VirtualBox-Images erzeugt werden kann.

Zur Installation kannst Du folgende Schritte ausführen. Die Kommandos beziehen sich auf die Installation auf einem Ubuntu-System. Für andere Betriebssyteme ist die Installation ähnlich.

Die VirtualBox hat folgendes Setup

  • hdd 40GB

  • cpu 2core

  • ram 4096M

VirtualBox installieren

sudo apt-get install virtualbox

Vagrant installieren

cd /tmp
wget https://releases.hashicorp.com/vagrant/2.2.3/vagrant_2.2.3_x86_64.deb
sudo dpkg -i vagrant_2.2.3_x86_64.deb

Repository herunterladen

git clone https://github.com/jschnasse/Regal
cd Regal/vagrant/ubuntu-14.04

Eine JDK8 bereitstellen

Hierfür bitte ein JDK8-Tarball herunterladen und unter dem Namen java8.tar.gz in einem Verzeichnis /bin unterhalb des Vagrant-Directories bereitstellen.

mkdir bin
mv ~/downloads/jdk.... bin/java8.tar.gz

Geteiltes Entwicklungsverzeichnis

mkdir ~/regal-dev

Vagrant Guest Additions installieren

vagrant plugin install vagrant-vbguest && vagrant reload

Vagrant Host anlegen

Damit alle Dienste komfortabel erreichbar sind, muss in die lokale HOSTs Datei ein Eintrag für die Vagrant-Box erfolgen. Im Vagrantfile ist die IP 192.168.50.4 für die Box konfiguriert. Über die FRONTEND und BACKEND Einträge in der variables.conf ist der Servername als regal.vagrant definiert.

sudo printf "192.168.50.4 regal.vagrant api.regal.vagrant" >> /etc/hosts

Vagrant starten

vagrant up

Auf der Maschine einloggen

vagrant ssh

Server

Die Installation auf einem Server kann mit Hilfe des mitgelieferten Skriptes regal-install.sh erfolgen. Dazu muss analog zur Vagrant-Installation zunächst das bin Verzeichnis mit einem JDK aufgebaut werden. Danach erfolgt die Installation unter /opt/regal und mit einem Benutzer regal (vgl. variables.conf)

Hardware Empfehlung

  • hdd >500GB

  • cpu 8 core

  • ram 32 G

Unterschiede zur Vagrant Installation

Auf dem Server empfehlen ich den fedora tomcat mit erweiterten Speichereinstellungen zu betreiben.

Dazu in /opt/regal/bin/fedora/tomcat/bin eine setenv.sh anlegen und folgende Zeilen hinein kopieren.

CATALINA_OPTS=" \
-Xms1536m \
-Xmx1536m \
-XX:NewSize=256m \
-XX:MaxNewSize=256m \
-XX:PermSize=256m \
-XX:MaxPermSize=256m \
-server \
-Djava.awt.headless=true \
-Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true"

export CATALINA_OPTS

Entwicklung Java

In der VirtualBox

Hat man über Vagrant eine neue VirtualBox erzeugt und alle Konfigurationen wie beschrieben vorgenommen, kann man die VirtualBox zur Entwicklung nutzen. Da im Installationsprozess bereits Eclipse-Projekte der unter /opt/regal/src befindlichen Java-Applikationen erzeugt wurden, können die Projekte direkt aus dem “synced folder” unter ~/regal-dev in eine Eclipse-IDE auf dem Host-System importiert werden.

Damit Änderungen am Code in der VirtualBox direkt sichtbar werden, sollte die Applikation zunächst im Develop-Mode neu gestartet werden. Dazu loggt man sich auf der VirtualBox mit vagrant ssh ein und stoppt zunächst den entsprechenden Service, z.B. sudo service regal-api stop. Anschließend navigiert man in das Source-Verzeichnis, z.B. cd /opt/regal/src/regal-api. Hier startet man die Applikation auf dem korrekten Port (im Zweifel unter /opt/regal/apps/regal-api/conf/application.conf nachschauen). Der Start im Develop-Mode erfolgt aus dem Verzeichnis der Applikation, mit z.B. /opt/regal/bin/activator/bin/activator -Dhttp.port=9100. Danach kann in die Kosole run eingegegeben werden. Die Applikation sollte nun unter dem entsprechenden Port (im Beispiel: 9100) antworten.

Leider funktioniert das Reloading zwischen Host-System und Guest-VirtualBox nicht richtig. D.h. nach Code-Änderungen im Host, muss auf der Virtualbox zunächst mit Ctrl+D und run neu gestartet werden, damit die Änderungen sichtbar werden.

Auf dem eigenen System

Die Javakomponenten können problemlos auch auf einem aktuellen Ubuntusystem entwickelt werden. Leider läuft die PHP/Drupal-Implementierung nicht unter neueren Ubuntusystemen. Für die lokale installation können die entsprechenden Funktionen aus dem regal-install.sh ausgeführt werden. Dazu einfach eine Kopie anlegen, entsprechend editieren und ausführen.

mkdir regal-install
cp -r path/to/Regal/vagrant/ubuntu-XX/* regal-install
cd regal-install
# Edit system user "vagrant" --> "your user"
editor variables.conf
# put drupal stuff in comments
#
#  #installDrush
#  #installDrupal
#  #installRegalDrupal
#  #installDrupalThemes
#  #configureDrupalLanguages
#  #configureDrupal
#
editor regal-install.sh

Aktualisierung

Play-Applikationen

Die Aktualisierung der Regal-Komponenten erfolgt über Skripte. Die Aktualisierung funktioniert dabei so, dass der Quellcode der zu aktualisierenden Komponente unter /opt/regal/src per git auf den entsprechenden Branch gestellt wird. Danach wird ein neues Kompilat der Komponente erzeugt. Die aktuelle Konfiguration wird aus /opt/regal/conf genommen und es wird unter /opt/regal/apps eine neue lauffähige Version abgelegt.

Neue Versionen werden immer parallel zu alten Versionen gestartet und über einen Wechsel der Apachekonfiguration aktiviert. Erst danach wird die alte Version heruntergefahren.

Der komplette Aktualisierungsprozess erfolgt automatisch. Die alte Version bleibt immer auf dem Server liegen, so dass bei Bedarf wieder zurück gewechselt werden kann.

Tomcat-Applikation

Es wird ein war-Container erzeugt und im Tomcat hot-deployed.

Drupal-Module

Beinhaltet die Aktualisierung ein Datenbankupdate, so wird Drupal erst in den Wartungszustand versetzt (per drush oder über die Oberfläche). Danach wird die aktualisierte Version einfach per Git geholt. Bei Datenbankupdates wird noch ein Drupal-Updateskript ausgeführt.

Speicherschicht

Aktualisierungen von MySQL, Elasticsearch und Fedora gehen mit einer Downtime einher.

Verzeichnisse

Verzeichnisstruktur

Verzeichnis

Beschreibung

/opt/regal

Außer Apache2, Elasticsearch und MySQL befinden sich alle Regal-Komponenten unter diesem Verzeichnis.

/opt/regal/apps

Die auf Play beruhenden Komponenten: etikett  fedora  regal-a pi  skos-lookup  thumby  zettel

/opt/regal/bin

Fremdpakete wie activator, fedora, heritrix, python - weitere tomcats.

/opt/regal/conf

Die variables.conf und die application.conf wird von verschiedenen Komponenten verwendet.

/opt/regal/logs

Logfiles der Skripte und Cronjobs

/opt/regal/src

Alle Eigenentwicklungen oder im Quellcode modifizierten Komponenten.

/opt/regal/var

drupal und Datenverzeichnisse.

Ports

Ports und Komponenten (typische Belegung)

Port

Komponente

80 /443

Apache 2

8080

fedora tomcat

9090

openwayback tomcat

9200

elasticsearch

9000/9100

regal-api

9001/9101

thumby

9002/9102

etikett

9003/9103

zettel

9004/9104

skos-lookup

Logs

Logfiles

Komponente

Pfad

Apache

/var/log/apache2

Tomcat

/opt/regal/bin/fedora/tomcat/logs

Fedora

/opt/regal/bin/fedora/server/logs

Elasticsearch

/var/log/elasticsearch

regal-api

/opt/regal/apps/regal-api/logs

drupal

/var/log/apache2 #otherhosts ! und/var/log/apache2/error.log (hier ist auch die Debugausgabe)

MySql

/var/log/mysql

monit

/var/log/monit.log

regal-scripts

/opt/regal/logs

Configs

Configfiles

Komponente

Pfad

Apache

/etc/apache2/sites-enabled

Tomcat

/opt/regal/bin/fedora/tomcat/conf

Fedora

/opt/regal/bin/fedora/server/conf

Elasticsearch

/etc/elasticsearch

regal-api

/opt/regal/conf enthält Konfigurationsvorschläge des Installers

regal-api

/opt/regal/apps/regal-api/conf

drupal

Konfig kann gut mit dem Tool drush überwacht werden

Elasticsearch Plugins

/etc/elasticsearch

oai-pmh

/opt/regal/ bin/fedora/tomcat/webapps/dnb-unr /WEB-INF/classes/proai.properties

monit

/etc/monit

Apache2

Frontend Pfade

Komponente

HTTP-Pfad

Lokaler Pfad/Proxy

Drupal

/

/opt/regal/var/drupal

Alte Importe von Webarchiven

/webharvests

/data/webharvests

Täglich generierte Datei mit Kennziffern

/crawlreports

/o pt/regal/crawlreports

API Pfade

Komponente

HTTP-Pfad

Lokaler Pfad/Proxy

Über wget erstellte Webarchive

/wget-data

/op t/regal/var/wget-data

Über wpull erstellte Webarchive

/wpull-data

/opt /regal/var/wpull-data

Über heritrix erstellte Webarchive

/heritrix-data

/opt/re gal/var/heritrix-data

OAI-Schnittstelle für die DNB

/dnb-urn

http://loc alhost:8080/dnb-urn$1

OAI-Schnittstelle

/oai-pmh

http://loc alhost:8080/oai-pmh$1

Deepzoomer

/deepzoom

http://loca lhost:7080/deepzoom$1

Openwayback privat

/wayback

http://l ocalhost:9080/wayback

Openwayback öffentlich

/weltweit

http://lo calhost:9080/weltweit

Thumby

/tools/thumby

http://localh ost:9001/tools/thumby

Etikett

/tools/etikett

http://localho st:9002/tools/etikett

Zettel

/tools/zettel

http://localh ost:9004/tools/zettel

Elasticsearch GET

/search

http://localhost:9200

Fedora

/fedora

http:// localhost:8080/fedora

JSON-LD Context

/ public/resources.json

http:/ /localhost:9002/tools /etikett/context.json

regal-api

/

h ttp://localhost:9000/

heritrix

/tools/heritrix

https://localhos t:8443/tools/heritrix

Matomo

Matomo wird einmal täglich per Cronjob mit Apache-Logfiles befüllt. Dabei erfolgt eine Anonymisierung. Die Logfiles verbleiben noch sieben Tage auf dem Server und werden dann annoynmisiert.

Monit

Das Tool Monit erlaubt es, den Status der Regal-Komponenten zu überwachen und Dienste ggfl. neu zu starten. Folgende Einträge können in /etc/monit/monitrc vorgenommen werden

check process apache with pidfile /var/run/apache2/apache2.pid
    start program = "/etc/init.d/apache2 start" with timeout 60 seconds
    stop program  = "/etc/init.d/apache2 stop"

check process regal-api with pidfile /opt/regal/apps/regal-api/RUNNING_PID
     start program = "/etc/init.d/regal-api start" with timeout 60 seconds
     stop program = "/etc/init.d/regal-api stop"

check process tomcat6 with pidfile /var/run/tomcat6.pid
     start program = "/etc/init.d/tomcat6 start" with timeout 60 seconds
     stop program = "/etc/init.d/regal-api stop"

check process elasticsearch with pidfile /var/run/elasticsearch.pid
     start program = "/etc/init.d/elasticsearch start" with timeout 60 seconds
     stop program = "/etc/init.d/elasticsearch stop"

check process thumby with pidfile /opt/regal/apps/thumby/RUNNING_PID
     start program = "/etc/init.d/thumby start" with timeout 60 seconds
     stop program = "/etc/init.d/thumby stop"

check process etikett with pidfile /opt/regal/apps/etikett/RUNNING_PID
     start program = "/etc/init.d/etikett start" with timeout 60 seconds
     stop program = "/etc/init.d/etikett stop"

check process zettel with pidfile /opt/regal/apps/zettel/RUNNING_PID
     start program = "/etc/init.d/zettel start" with timeout 60 seconds
     stop program = "/etc/init.d/zettel stop"

Scripts und Cronjobs

Für das Funktionieren von Regal sind einige regal-scripts sinnvoll. Die Skripte sind sämtlich unter Github zu finden.

https://github.com/edoweb/regal-scripts

Die folgenden Abschnitte zeigen ein typisches Setup.

OAI-Providing

Der OAI-Provider läuft nicht die ganze Zeit mit, da dies Probleme gemacht hat. Er wird nur für einen bestimmten Zeitraum angestellt und dann wieder ausgestellt. Auf diese Weise liefert die OAI-Schnittstelle tagesaktuelle Daten.

0 2 * * * /opt/regal/src/regal-scripts/turnOnOaiPmhPolling.sh
0 5 * * * /opt/regal/src/regal-scripts/turnOffOaiPmhPolling.sh

URN-Registrierung

Die URN-Registrierung erfolgt mit einem gewissen Verzug. Das dafür zuständige Skript überprüft daher zunächst das Anlagedatum der Ressource.

05 7 * * * /opt/regal/src/regal-scripts/register_urn.sh control  >> /opt/regal/regal-scripts/log/control_urn_vergabe.log
1 1 * * * /opt/regal/src/regal-scripts/register_urn.sh katalog >> /opt/regal/regal-scripts/log/katalog_update.log
1 0 * * * /opt/regal/src/regal-scripts/register_urn.sh register >> /opt/regal/regal-scripts/log/register_urn.log

Katalog-Aktualisierung

Das System gleicht einmal am Tag Metadaten mit dem hbz-Verbundkatalog ab und führt ggf. Aktualisierungen durch.

0 5 * * * /opt/regal/src/regal-scripts/updateAll.sh > /dev/null

Matomo

Matomo wird mit Apache-Logfiles befüllt. Innerhalb von Matomo werden die Einträge annonymisiert.

0 1 * * * /opt/regal/regal-scripts/import-logfiles.sh >/dev/null

Logfile Annonymisierung

Apache-Logfiles werden sieben Tage unverändert aufbewahrt. Danach erfolgt eine Annonymisierung.

0 2 * * * /opt/regal/src/regal-scripts/depersonalize-apache-logs.sh

Webgatherer

Der Webgatherer prüft Archivierungsintervalle von Webpages und stößt bei Bedarf die Erzeugung eines neuen Snapshots/Version an.

0 20 * * * /opt/regal/src/regal-scripts/runGatherer.sh >> /opt/regal/regal-scripts/log/runGatherer.log
# Auswertung des letzten Webgatherer-Laufs
0 21 * * * /opt/regal/src/regal-scripts/evalWebgatherer.sh >> /opt/regal/regal-scripts/log/runGatherer.log
# Crawl Reports
0 22 * * * /opt/regal/src/regal-scripts/crawlReport.sh >> /opt/regal/logs/crawlReport.log

Backup

MySQL und Elasticsearch

Der Elasticsearch-Index und die MySQL-Datenbanken werden täglich gesichert. Es werden Backups der letzten 30 Tage aufbewahrt. Ältere Backups werden von der Platte gelöscht.

0 2 * * * /opt/regal/src/regal-scripts/backup-es.sh -c >> /opt/regal/logs/backup-es.log 2>&1
30 2 * * * /opt/regal/src/regal-scripts/backup-es.sh -b >> /opt/regal/logs/backup-es.log 2>&1
0 2 * * * /opt/regal/src/regal-scripts/backup-db.sh -c >> /opt/regal/logs/backup-db.log 2>&1
30 2 * * * /opt/regal/src/regal-scripts/backup-db.sh -b >> /opt/regal/logs/backup-db.log 2>&1

Entwicklung

Für die Entwicklung an Regal empfiehlt sich folgende Vorgehensweise…