Vorwort Dieses Dokument beschreibt in bewusst knapper Form die Installation und Konfiguration von Fedora sowie die Installation und Konfiguration des darauf aufsetzenden OAI Provider Service. Ziel ist die Auslieferung von Metadaten im CMDI-Format zu den in Fedora hinterlegten Objekten. In diesem Beispiel gehen wir davon aus, dass Fedora mit MySQL und Tomcat betrieben wird. Weiterhin gehen wir davon aus, dass die Installation dieser beiden Softwarekomponenten bereits erfolgreich vorgenommen wurde. Die Installation wird beispielhaft für ein Linux-System (im Beispiel ein Debian-Derivat) beschrieben, ist aber in den Grundzügen auch auf andere Betriebssysteme übertragbar. Wir empfehlen zuvor das Studium der folgenden Dokumente: https://wiki.duraspace.org/display/fedoracreate/tutorial+1+-+introduction+to+fedora https://wiki.duraspace.org/display/fedoracreate/tutorial+2+-+creating+fedora+objects https://wiki.duraspace.org/display/fedora34/rest+api Hilfreich sind zudem folgende Dokumente: https://wiki.duraspace.org/display/fedora34/installation+and+configuration+guide https://wiki.duraspace.org/display/fcsvcs/oai+provider+service+1.2.1 1
Installation und Konfiguration von Fedora Zunächst muss in MySQL eine DB angelegt und der Zugriff auf diese korrekt konfiguriert werden. Dazu wird eine Datenbank fedora3 angelegt, auf welche durch den Nutzer fedoraadmin (identifiziert durch das Passwort mypasswd ) schreibend zugegriffen werden kann: CREATE DATABASE fedora3; GRANT ALL ON fedora3.* TO fedoraadmin@localhost IDENTIFIED BY 'mypasswd'; GRANT ALL ON fedora3.* TO fedoraadmin@'%' IDENTIFIED BY 'mypasswd'; ALTER DATABASE fedora3 DEFAULT CHARACTER SET utf8; ALTER DATABASE fedora3 DEFAULT COLLATE utf8_bin; Zudem benötigt Fedora einige Umgebungsvariablen. Wir haben uns dazu entschieden, diese über /etc/environment zu konfigureren. Eintrag in /etc/environment (ggf. ohne "): JAVA_HOME="/usr/lib/jvm/java-6-sun/jre" # wärend Installation genutzt #CATALINA_HOME="/usr/share/tomcat6" # nach Installation korrigiert CATALINA_HOME="/var/lib/tomcat6" FEDORA_HOME="/usr/local/fedora" PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/jvm/java-6- sun/jre:/usr/local/fedora" Achtung: In unserem Fall musste während der Installation von Fedora ein andere Konfiguration für Tomcat genutzt werden, als später im Rahmen des Betriebs (siehe Kommentare). Auf anderen Systemen ist dies ggf. nicht nötig. Für ein korrektes durchlaufen der Installation mussten zudem einige Symlinks erstellt sowie Zugriffsrechte (Achtung: Im Beispiel für den dauerhaften Betrieb zu offen ) angepasst werden: cd /usr/share/tomcat6 sudo ln -s /etc/tomcat6/ conf sudo ln -s /usr/share/tomcat6/ common sudo chmod -R 777 lib/ sudo chmod -R 777 webapps/ Anschließend sollte die aktuelle Version von Fedora heruntergeladen werden: http://downloads.sourceforge.net/fedora-commons/fcrepo-installer-3.4.2.jar Danach kann die Installation durchgeführt werden: java -jar fcrepo-installer-3.4.2.jar Log der Installation: Fedora home directory --------------------- This is the base directory for Fedora scripts, configuration files, etc. Enter the full path where you want to install these files. Enter a value [default is /usr/local/fedora] ==> /usr/local/fedora Fedora administrator password ----------------------------- Enter the password to use for the Fedora administrator (fedoraadmin) account. Enter a value ==> mypasswd Fedora server host ------------------ The host Fedora will be running on. If a hostname (e.g. www.example.com) is supplied, a lookup will be performed and the IP address of the host (not the host name) will be used in the default Fedora XACML policies. 2
Enter a value [default is localhost] ==> localhost Fedora application server context --------------------------------- The application server context Fedora will be running in. If 'fedora' (default) is supplied, the resulting context path will be http://www.example.com/fedora. It must be ensured that the configured application server context matches this path if explicitly configured. Enter a value [default is fedora] ==> fedora Authentication requirement for API-A ------------------------------------ Fedora's management (API-M) interface always requires user authentication. Require user authentication for Fedora's access (API-A) interface? Enter a value [default is false] ==> false SSL availability ---------------- Should Fedora be available via SSL? Note: this does not preclude regular HTTP access; it just indicates that it should be possible for Fedora to be accessed over SSL. Enter a value [default is true] ==> false Servlet engine -------------- Which servlet engine will Fedora be running in? Enter 'included' to use the bundled Tomcat 6.0.20 server. To use your own, existing installation of Tomcat, enter 'existingtomcat'. Enter 'other' to use a different servlet container. Options : included, existingtomcat, other Enter a value [default is included] ==> existingtomcat Tomcat home directory --------------------- Please provide the full path to your existing Tomcat installation, or the path where you plan to install the bundled Tomcat. Enter a value ==> /usr/share/tomcat6 Tomcat HTTP port ---------------- Which HTTP port (non-ssl) should Tomcat listen on? This can be changed later in Tomcat's server.xml file. Enter a value [default is 8080] ==> 8080 Tomcat shutdown port -------------------- Which port should Tomcat use for shutting down? Make sure this doesn't conflict with an existing service. This can be changed later in Tomcat's server.xml file. Enter a value [default is 8005] ==> 8005 Database -------- Please select the database you will be using with Fedora. The supported databases are Derby, McKoi, MySQL, Oracle and Postgres. If you do not have a database ready for use by Fedora or would prefer to use the embedded version of Derby bundled with Fedora, enter 'included'. Options : derby, mckoi, mysql, oracle, postgresql, included Enter a value ==> mysql 3
MySQL JDBC driver ----------------- You may either use the included JDBC driver or your own copy. Enter 'included' to use the included JDBC driver, or, enter the location (full path) of the driver. Enter a value [default is included] ==> included Database username ----------------- Enter the database username Fedora will use to connect to the Fedora database. Enter a value ==> fedoraadmin Database password ----------------- Enter the database password Fedora will use to connect to the Fedora database. Enter a value ==> mypasswd JDBC URL -------- Please enter the JDBC URL. Enter a value [default is jdbc:mysql://localhost/fedora3?useunicode=true&characterencoding=utf- 8&autoReconnect=true] ==> jdbc:mysql://localhost/fedora3? useunicode=true&characterencoding=utf-8&autoreconnect=true JDBC DriverClass ---------------- Please enter the JDBC driver class. Enter a value [default is com.mysql.jdbc.driver] ==> com.mysql.jdbc.driver Enable FeSL AuthN ----------------- Enable FeSL Authentication? To continue to use Fedora's legacy authentication, enter "false" below. Please note that Fedora's legacy authentication is expected to be phased out in a subsequent release. For more information, see: http://fedora-commons.org/confluence/x/h4ov Enter a value [default is true] ==> true Enable FeSL AuthZ (Experimental Feature) ---------------------------------------- Enable FeSL Authorization? This is an experimental replacement for Fedora's legacy authorization module, and is still under development. Production repositories should NOT enable this, but we invite you to try it out and give us feedback. For more information, see: http://fedora-commons.org/confluence/x/h4ov Enter a value [default is false] ==> false Policy enforcement enabled -------------------------- Should XACML policy enforcement be enabled? Note: This will put a set of default security policies in play for your Fedora server. Enter a value [default is true] ==> true Low Level Storage ----------------- Which low-level (file) storage plugin do you want to use? We recommend akubra-fs for new installs. If you are upgrading Fedora from version 3.3 or below, you should use legacy-fs for compatibility with your existing storage. Other plugins are also available, but they must be configured after installation. For more information, please see https://wiki.duraspace.org/x/voqv Options : akubra-fs, legacy-fs Enter a value [default is akubra-fs] ==> akubra-fs 4
Enable Resource Index --------------------- Enable the Resource Index? Enter a value [default is false] ==> true Enable Messaging ---------------- Enable Messaging? Messaging sends notifications of API-M events via JMS. Enter a value [default is false] ==> false Deploy local services and demos ------------------------------- Several sample back-end services are included with this distribution. These are required if you want to use the demonstration objects. If you'd like these to be automatically deployed, enter 'true'. Otherwise, the installer will put the files in your FEDORA_HOME/install directory in case you want to deploy them later. Enter a value [default is true] ==> false Bei der Installation muss selbstverständlich darauf geachtet werden, dass die korrekten Zugangsdaten für MySQL angeben werden. Bis auf die Nutzung von MySQL und Tomcat können, mit einer Ausnahme, die Default-Einstellungen genutzt werden. Lediglich im Fall des Settings Enable Resource Index muss für einen korrekten Betrieb des OAI-Provider (Installation und Konfiguration wird im Anschluss beschrieben) vom Default false abgewichen und true gewählt werden. Auf unserem System war anschließend eine Anpassung der Zugriffsrechte für das Fedora- Verzeichnis erforderlich: sudo chmod -R 777 /usr/local/fedora Unter der Annahme, dass der verantwortliche Tomcat unter der URL http://myhost:8080/manager/html erreichbar ist, ist das Fedora-Repository nun (spätestens nach einem Neustart des Tomcat) über folgende URL erreichbar: http://myhost:8080/fedora/describe Hinweis: Fedora benötigt einige korrekt gesetzte Environment-Variablen (im Beispiel gesetzt per /etc/environment). Zum Starten des Tomcat werden ggf. root-rechte benötigt. Es sollte daher mit folgendem Aufruf gearbeitet werden, damit die Environment-Variablen ebenfalls transportiert werden: sudo -E /etc/init.d/tomcat6 start Fedora-Troubleshooting Fedora ist im Verzeichnis /usr/local/fedora zu finden. Das Log liegt in: 5
/usr/local/fedora/server/logs/fedora.log "Schreibende" Zugriffe von außen sind nur für "bekannte" Hosts möglich. Diese müssen in /data/fedora-xacml-policies/repository-policies/default/deny-apim-if-not-localhost.xml vermerkt sein:... <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag"> <!-- 127.0.0.1/localhost ist voreingestellt --> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">127.0.0.1</AttributeValue> <!-- registriert zusätzlich die IP 1.2.3.4 --> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">1.2.3.4</AttributeValue> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">::1</AttributeValue> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">0:0:0:0:0:0:0:1</AttributeValue> </Apply>... Andernfalls tritt bei externen, daher nicht vom Host auf dem Fedora läuft stammenden, schreibenden Zugriffen über die Fedora-REST-API folgende Exception (siehe fedora.log) auf: WARN 2011-08-15 14:54:33.905 [http-8080-1] (FedoraObjectResource) Authorization failed; unable to fulfill REST API request org.fcrepo.server.errors.authorization.authzdeniedexception: at org.fcrepo.server.security.policyenforcementpoint.enforce(policyenforcementpoint.java:422) 6
Installation und Konfiguration des OAI-Providers Fedora bringt von Haus aus einen eigenen OAI-PMH Provider mit. Dieser kann, unseres Wissens nach, jedoch nur Metadaten in Dublin Core ausliefern. Daher ist die Installation eines zusätzlichen OAI-Providers Service (basierend auf ProAI) zu empfehlen. Im Folgenden ist die Installation und Konfiguration des OAI-Provider Service, ausgehend von der Annahme das Metadaten im CMDI Format (in OAI-PMH identifiziert durch den Identifier cmdi ) ausgeliefert werden sollen, dokumentiert. Die folgende Grafik soll zunächst das Zusammenspiel zwischen Fedora und dem OAI-Provider bzw. die im CLARIN-Umfeld relevanten Zusammenhänge verdeutlichen: Sowohl Fedora als auch der OAI-Provider Service laufen als Webapplikation in einem Tomcat und greifen u.a. jeweils auf eine Datenbank - im Beispiel verwaltet durch das Datenbanksystem MySQL - zurück. In CLARIN sollen Ressourcen mit Hilfe von CMDI-Dokumenten beschrieben und über ein Repository (Fedora) verwaltet werden. Fedora verwaltet Einträge in Form sogenannter Fedora Digital Objects. Diese Objekte können Datenströme besitzen, wovon einige bereits vorab spezifiziert wurden (RELS-EXT), andere jedoch frei definiert werden können. Im Beispiel haben wir uns für die Definition eines Datenstroms cmdi entschieden, welcher die Metadaten - in Form eines CMDI-Dokuments - der jeweiligen, durch das Fedora Digital Object repräsentierten Ressource enthält (oder in Form einer URI referenziert). Der OAI Provider Service muss nun so konfiguriert werden, dass ein Format cmdi über die OAI-PMH Schnittstelle nach außen zur Verfügung gestellt wird. Dabei soll auf den cmdi-datenstrom des jeweiligen Objektes zurückgegriffen und das dort hinterlegte CMDI-Dokument als Inhalt des jeweiligen OAI-PMH metadata-records verwendet werden. 7
Das oaiprovider-war kann hier bezogen werden: http://sourceforge.net/project/downloading.php?group_id=177054&filename=oaiprovider-1.2.zip Nachdem das oaiprovider-war im Tomcat deployed wurde, kann die Konfigurationsdatei proai.properties angepasst werden. Diese ist auf folgendem Pfad zu finden: /var/lib/tomcat6/webapps/oaiprovider/web-inf/classes/proai.properties Die Standardkonfiguration kann nun ein wenig aufgeräumt und um die Auslieferung von Daten im CMDI-Format erweitert werden. Im Folgenden wurden, aufgrund des Umfangs der Konfigurationsdatei, nur die zu ändernden bzw. relevanten Teile der Konfiguration aufgeführt: proai.validateupdates = false proai.db.username = fedoraadmin proai.db.password = mypasswd driver.fedora.user = fedoraadmin driver.fedora.pass = mypasswd driver.fedora.itemid = http://www.openarchives.org/oai/2.0/itemid driver.fedora.md.formats = oai_dc cmdi driver.fedora.md.format.cmdi.loc = http://www.wortschatz.uni-leipzig.de/~vboehlke/example_schema.xsd driver.fedora.md.format.cmdi.uri = http://www.informatik.uni-leipzig.de driver.fedora.md.format.cmdi.disstype = info:fedora/*/cmdi Hinweis: Einige zu Testzwecken vorhandene/definierte Formate (formatx, formaty, ) wurden aus der Konfiguration entfernt. Es sind dementsprechend auch die zugehörige Einträge unter driver.fedora.md.format.cmdi.formatx.* etc. aus der Konfiguration zu entfernen. Nun sollten unter der folgenden URL Angaben zu den beiden ausgelieferten Metadaten-Formaten, identifiziert durch oai_dc und cmdi, erfolgen: http://myhost:8080/oaiprovider/oai?verb=listmetadataformats zugehöriger Content: <?xml version="1.0" encoding="utf-8"?> <OAI-PMH xmlns="http://www.openarchives.org/oai/2.0/" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.openarchives.org/oai/2.0/ http://www.openarchives.org/oai/2.0/oai-pmh.xsd"> <responsedate>2011-09-27t12:57:16z</responsedate> <request verb="listmetadataformats">http://139.18.2.32:8080/oaiprovider/oai</request> <ListMetadataFormats> <metadataformat> <metadataprefix>oai_dc</metadataprefix> <schema>http://www.openarchives.org/oai/2.0/oai_dc.xsd</schema> <metadatanamespace>http://www.openarchives.org/oai/2.0/oai_dc/</metadatanamespace> </metadataformat> <metadataformat> <metadataprefix>cmdi</metadataprefix> <schema>http://www.wortschatz.uni-leipzig.de/~vboehlke/example_schema.xsd</schema> <metadatanamespace>http://www.informatik.uni-leipzig.de</metadatanamespace> </metadataformat> </ListMetadataFormats> </OAI-PMH> Neben der Spezifikation der Zugangsdaten für Fedora und MySQL wurden einige weitere Einstellungen vorgenommen, auf die im Folgenden detaillierter eingegangen werden soll. 8
Im Zuge der Konfiguration wurde ein neues Metadatenformat mit dem Identifier cmdi eingeführt: driver.fedora.md.formats = oai_dc cmdi Außerdem wurde ein Schema und ein Namespace für dieses Format festgelegt: driver.fedora.md.format.cmdi.loc = http://www.wortschatz.uni-leipzig.de/~vboehlke/example_schema.xsd driver.fedora.md.format.cmdi.uri = http://www.informatik.uni-leipzig.de Hinweis: Die im Beispiel gewählten Namespaces und Links zum zugehörigen Schema wurden nur exemplarisch gewählt und werden zukünftig sicher anders definiert werden müssen. Zudem wurde festgelegt, dass die Metadaten im CMDI-Format im Datenstrom cmdi eines jeden in Fedora vorhandenen Objektes/Eintrags hinterlegt sind: driver.fedora.md.format.cmdi.disstype = info:fedora/*/cmdi Über das Property proai.validateupdates wird definiert, ob der in den jeweiligen Datenströmen hinterlegte Inhalt (z.b. das CMDI-Dokument) gegen das für dieses Format definierte Schema (siehe driver.fedora.md.format.cmdi.loc) validiert wird. Steht dieses Property auf true, so werden nichtvalide Einträge nicht über die OAI-PMH Schnittstelle ausgeliefert! Außerdem ist in der Konfiguration definiert, dass relevante Objekte durch ein itemid-element ausgezeichnet sind. Nicht dadurch gekennzeichnete Elemente werden nicht über die OAI-PMH Schnittstelle ausgeliefert bzw. von ProAI nicht indiziert: driver.fedora.itemid = http://www.openarchives.org/oai/2.0/itemid Diese für das jeweilige Element vergebene itemid muss dazu im RELS-EXT Datenstrom des Elements hinterlegt sein. Beispielaufruf: http://myhost:8080/fedora/objects/sentence:1/datastreams/rels-ext/content/ zugehöriger Content: <rdf:rdf xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:description rdf:about="info:fedora/sentence:1"> <itemid xmlns="http://www.openarchives.org/oai/2.0/">oai:sentence:1</itemid> <ispartof xmlns="info:fedora/fedora-system:def/relations-external#" rdf:resource="corpus:1"></ispartof> </rdf:description> </rdf:rdf> Um in Fedora ein Objekt einzufügen zu dem anschließend auch CMDI-Metadaten über den OAI- PMH Provider Service ausgeliefert werden, muss wie folgt vorgegangen werden (bei Nutzung der API-M Methoden der REST-Schnittstelle von Fedora): ingest => Einfügen des neuen Objektes addrelationship => Einfügen einer neuen Relation für das zuvor definierte Objekt (gleiche Id) als Literal mit dem Predikat http://www.openarchives.org/oai/2.0/itemid und einer Id für das Objekt (Vorschlag: Identisch zur in Fedora vergebenen Id bzw. CLARIN-PID ergänzt um den Prefix oai) Hinweis: War zuvor kein RELS-EXT Datenstrom vorhanden, so wird dieser im Zuge 9
dieses Vorgangs mit den Default-Inhalten erzeugt und um den entsprechenden Eintrag (itemid) ergänzt. adddatastream => hinzufügen eines Datenstroms zu dem zuvor definierten Objekt (gleiche Id) mit dem Identifier cmdi und dem Inhalt eines CMDI Dokumentes (wenn inline gemanagt; oder dem Link zu einem solchen Dokument wenn extern gemanagt => siehe ControlGroup- Argument) als Content 10
Schlusswort Die hier dargestellten Informationen stellen die Erfahrungen des CLARIN-D Ressourcenzentrums Leipzig (Abteilung Automatische Sprachverarbeitung; Universität Leipzig) dar. Das gewählte Vorgehen/Setup entspricht nicht notwendigerweise den individuellen Bedürfnissen anderer CLARIN-D Ressourcenzentren. Im Fall von Fragen kontaktieren Sie bitte den Autor dieses Dokumentes bzw. das Leipziger CLARIN-D Team: boehlkev@informatik.uni-leipzig.de clarin@informatik.uni-leipzig.de 11