8.1 Core changes

4.8.0

Mit dieser Version wird der verwendete Suchindex Apache Solr auf die Version 8 aktualisiert. Dafür muss Solr 8 komplett neu installiert und der Datenbestand anschließend durch eine besondere Neuindexierung in die neuen Installation überführt werden. Eine Migration über mehr als zwei Major Versionen wird von Solr offiziell nicht unterstützt (Hintergrund). Für die Unterstützung von Solr Streaming Expressions ist es notwendig SolrCloud zu verwenden. Die notwendigen Schritte sind im folgenden in chronologischer Reihenfolge aufgelistet:

Solr

Die Installation von Apache Solr 8 ist hier in der Updateanleitung nur in gekürzter Form. Für eine längere Variante bitte den entsprechenden Abschnitt in der Installationsanleitung lesen.

cd /tmp
wget http://archive.apache.org/dist/lucene/solr/8.5.2/solr-8.5.2.tgz
tar -xzf solr-8.5.2.tgz solr-8.5.2/bin/install_solr_service.sh --strip-components=2
mkdir -p /opt/digiverso/solr/
./install_solr_service.sh solr-8.5.2.tgz -i /opt/digiverso/solr -d /opt/digiverso/solr -u solr -s solr -p 8983 -n
cat << "EOF" >/etc/security/limits.d/solr.conf
solr hard nofile 65535
solr soft nofile 65535
solr hard nproc 65535
solr soft nproc 65535
EOF
apt install -y zookeeperd
patch /etc/default/solr.in.sh << "EOF"
@@ -28,7 +28,7 @@
#SOLR_STOP_WAIT="180"
# Increase Java Heap as needed to support your indexing / query needs
-#SOLR_HEAP="512m"
+SOLR_HEAP="2048m"
# Expert: If you want finer control over memory options, specify them directly
# Comment out SOLR_HEAP if you are using this though, that takes precedence
@@ -64,7 +64,7 @@
# Set the ZooKeeper connection string if using an external ZooKeeper ensemble
# e.g. host1:2181,host2:2181/chroot
# Leave empty if not using SolrCloud
-#ZK_HOST=""
+ZK_HOST="127.0.0.1:2181"
# Set the ZooKeeper client timeout (for SolrCloud mode)
#ZK_CLIENT_TIMEOUT="15000"
EOF
chmod 755 /opt/digiverso/solr/solr/bin/solr
cd /opt/digiverso/solr/solr/server/solr/configsets/
cp -a _default/ goobiviewer
cd goobiviewer/conf/
rm managed-schema
wget https://raw.githubusercontent.com/intranda/goobi-viewer-indexer/master/goobi-viewer-indexer/src/main/resources/other/schema.xml
cp lang/stopwords_de.txt lang/stopwords.txt
wget https://raw.githubusercontent.com/intranda/goobi-viewer-indexer/master/goobi-viewer-indexer/src/main/resources/other/mapping-ISOLatin1Accent.txt
patch solrconfig.xml << "EOF"
@@ -21,6 +21,7 @@
this file, see http://wiki.apache.org/solr/SolrConfigXml.
-->
<config>
+ <schemaFactory class="ClassicIndexSchemaFactory"/>
<!-- In all configuration below, a prefix of "solr." for class names
is an alias that causes solr to search appropriate packages,
including org.apache.solr.(search|update|request|core|analysis)
@@ -58,6 +59,11 @@
<lib dir="./lib" />
-->
+ <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" regex=".*\.jar" />
+ <lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-analysis-extras-\d.*\.jar" />
+
+
<!-- A 'dir' option by itself adds any files found in the directory
to the classpath, this is useful for including all jars in a
directory.
@@ -773,7 +779,7 @@
<initParams path="/update/**,/query,/select,/spell">
<lst name="defaults">
- <str name="df">_text_</str>
+ <str name="df">DEFAULT</str>
</lst>
</initParams>
@@ -1108,7 +1114,7 @@
</updateProcessor>
<!-- The update.autoCreateFields property can be turned to false to disable schemaless mode -->
- <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:true}"
+ <updateRequestProcessorChain name="add-unknown-fields-to-the-schema" default="${update.autoCreateFields:false}"
processor="uuid,remove-blank,field-name-mutating,parse-boolean,parse-long,parse-double,parse-date,add-schema-fields">
<processor class="solr.LogUpdateProcessorFactory"/>
<processor class="solr.DistributedUpdateProcessorFactory"/>
EOF
chown -R solr. *
cd /opt/digiverso/solr/solr/
sudo -u solr bin/solr zk upconfig -n goobiviewer -d server/solr/configsets/goobiviewer/
systemctl start solr
sudo -u solr bin/solr create -c collection1 -n goobiviewer

Nun die Apache Konfiguration anpassen, so dass Solr auf dem neuen Port angesprochen wird. Dafür den entsprechenden Apache vhost öffnen und in dem Block <Location /solr/> die ProxyPass und ProxyPassReverse Einträge auf diese neuen Werte anpassen:

/etc/apache2/sites-available/HOSTNAME.conf
ProxyPass http://localhost:8983/solr/ retry=0
ProxyPassReverse http://localhost:8983/solr/

Anschließend sicherstellen, dass auch das benötigte Modul proxy_http geladen ist und den Dienst neu starten:

a2enmod proxy_http
systemctl restart apache2

Goobi viewer Indexer

Der Datenbestand muss neu indexiert werden. Dafür muss der Goobi viewer Indexer aktualisiert werden damit er bei der Neuindexierung einige Solr Felder von der alten in die neue Installation übernimmt:

mkdir -p /root/BACKUP/$(date -I)/
systemctl stop solrindexer
mv /opt/digiverso/indexer/solrIndexer.jar /root/BACKUP/$(date -I)
wget -O /opt/digiverso/indexer/solrIndexer.jar https://github.com/intranda/goobi-viewer-indexer/releases/download/v4.8.2/solrIndexer.jar

Dieser Abschnitt ist wichtig. Da sich die Neuindexierung über einen längeren Zeitraum hinziehen kann ist es wichtig spätere Arbeiten nicht zu vergessen!

Nun die Konfigurationsdatei des Goobi viewer Indexers anpassen. Der Eintrag in <solrUrl> muss dabei auf den neuen Solr 8 und ein neuer Eintrag <oldSolrUrl> auf den bisherigen Solr 4 zeigen:

cp /opt/digiverso/indexer/solr_indexerconfig.xml /root/BACKUP/$(date -I)
sed -i "s|<solrUrl>\(.*\)</solrUrl>|<oldSolrUrl>\1</oldSolrUrl>|g" /opt/digiverso/indexer/solr_indexerconfig.xml
sed -i "s|<oldSolrUrl>|<solrUrl>http://localhost:8983/solr/collection1</solrUrl>\n<oldSolrUrl>|g" /opt/digiverso/indexer/solr_indexerconfig.xml

Anschließend erst mit einem Datensatz testen ob keine Fehler bei der Indexierung auftreten. Wenn das der Fall ist den Datenbestand neu Indexieren.

Wenn die Neuindexierung abgeschlossen ist, muss der Eintrag <oldSolrUrl /> aus der solr_indexerconfig.xml auskommentiert werden.

Damit die Versionsnummer an den Goobi viewer Core zur Anzeige im Dashboard korrekt übermittelt werden kann, müssen die folgenden beiden Einstellungen in der Konfigurationsdatei vorhanden sein. Bitte URL und Token prüfen und gegebenenfalls an die lokalen Gegebenheiten anpassen:

solr_indexerconfig.xml
<init>
<viewerUrl>http://127.0.0.1:8080/viewer/</viewerUrl>
<viewerAuthorizationToken>CHANGEME</viewerAuthorizationToken>
</init>

Goobi viewer Connector

Damit der Goobi viewer Connector mit Solr 8 kompatibel ist und zusätzlich seine Versionsnummer im gewünschten Format ausgeben kann, ist es notwendig den Connector zu aktualisieren:

wget -O /tmp/M2M.war https://github.com/intranda/goobi-viewer-connector/releases/download/v4.8.1/M2M.war
mv /tmp/M2M.war /opt/digiverso/viewer/bin/M2M.war

Außerdem muss die URL zum Solr Suchindex angepasst werden:

config_oai.xml
<solrUrl>http://localhost:8983/solr/collection1</solrUrl>

Goobi viewer Core

In der lokalen config_viewer.xml muss die URL zu dem Solr Suchindex angepasst werden. Das betrifft vor allem den geänderten Port:

config_viewer.xml
<solr>http://localhost:8983/solr/collection1</solr>

Zur korrekten Anzeige von Beschreibungstexten muss sichergestellt werden, dass in der Datenbank auch die richtigen Message Keys hinterlegt sind. Dafür die folgenden beiden SQL Statements ausführen:

UPDATE license_types SET description = "licenseType_setRepresentativeImage_desc" WHERE name = "licenseType_setRepresentativeImage";
UPDATE license_types SET description = "licenseType_deleteOcrPage_desc" WHERE name = "licenseType_deleteOcrPage";

4.7.0

Goobi viewer Indexer

Um die Ausgabe von Fehlern beim Start des Goobi viewer Indexers auch in die Logdatei mit zu übernehmen muss die folgende Zeile in den Abschnitt [Service] in der Systemd Unit File eingefügt werden:

  • /etc/systemd/system/solrindexer.service

solrindexer.service
StandardError=file:/opt/digiverso/logs/indexer.log

Anschließend muss der Daemon neu geladen und der Dienst neu gestartet werden:

systemctl daemon-reload
systemctl restart solrindexer

Die Option wurde erst mit Systemd 236 eingeführt und steht demnach erst ab Ubuntu Linux 18.04 Systemen zur Verfügung.

4.6.0

Goobi viewer Core

Die Solr Konfiguration wurde um weiteres Mapping von diakritischen Zeichen erweitert. Zur Übernahme der Änderungen muss die Datei mapping-ISOLatin1Accent.txt aktualisiert und der Datenbestand neu indexiert werden:

mkdir -p /root/BACKUP/$(date -I)
cp /opt/digiverso/viewer/apache-solr/collection1/conf/mapping-ISOLatin1Accent.txt /root/BACKUP/$(date -I)
wget -O /tmp/mapping-ISOLatin1Accent.txt https://raw.githubusercontent.com/intranda/goobi-viewer-indexer/master/goobi-viewer-indexer/src/main/resources/other/mapping-ISOLatin1Accent.txt
cp /tmp/mapping-ISOLatin1Accent.txt /opt/digiverso/viewer/apache-solr/collection1/conf/
systemctl restart tomcat8

Um vom ContentServer die neuen Standardwerte für die PDF-Generierung zu verwenden muss geprüft werden, ob eine lokale config_contentServer.xml Datei vorliegt. Ist das der Fall müssen in dem Konfigurationselement <defaultPdfConfig /> die beiden Attribute imageScale="0.5" und imageCompression="50" hinzugefügt werden. Das vollständige Element sieht dann zum Beispiel so aus:

config_contentServer.xml
<defaultPdfConfig alwaysUseRenderedImage="true"
alwaysCompressToJPEG="true"
metsFileGroup="PRESENTATION"
metsFileUrlRemove="file:\/\/\/opt\/digiverso\/viewer\/media\/"
writeAsPdfA="false"
pagesize="original"
imageDpi="0"
convertToGrayscale="false"
imageScale="0.5"
imageCompression="50" />

Goobi viewer Indexer

Zur Unterstützung der Kartenfunktionalität wurde das Solr-Schema und der Goobi viewer Indexer erweitert. Beide Komponenten müssen aktualisiert werden. Weiter ist es notwendig eine zusätzliche Jar in den WEB-INF/lib Ordner von Solr abzulegen

cp /opt/digiverso/viewer/apache-solr/collection1/conf/schema.xml /root/BACKUP/$(date -I)
wget -O /tmp/schema.xml https://raw.githubusercontent.com/intranda/goobi-viewer-indexer/master/goobi-viewer-indexer/src/main/resources/other/schema.xml
cp /tmp/schema.xml /opt/digiverso/viewer/apache-solr/collection1/conf/
wget -O /tmp/jts-1.14.zip http://downloads.sourceforge.net/project/jts-topo-suite/jts/1.14/jts-1.14.zip
unzip -j /tmp/jts-1.14.zip "lib/jts-1.14.jar" -d /tmp
mv /tmp/jts-1.14.jar /var/lib/tomcat8/webapps/solr/WEB-INF/lib/
systemctl restart tomcat8

Der Datenbestand muss neu indexiert werden, ansonsten fehlt die Sektion "Bild" in dem Widget "Zitieren und Nachnutzen.

4.5.0

Goobi viewer Indexer

Damit die Indexierung von im Backend erstellten Dublin Core Datensätzen funktioniert, muss zusammen mit dem Core auch der Indexer aktualisiert werden. Damit das Feature aktiviert wird, muss der indexedDublinCore Ordner definiert werden:

solr_indexerconfig.xml
<indexedDublinCore>indexed_dublincore</indexedDublinCore>

Damit alle Metadaten korrekt indexiert werden auf das Mapping der folgenden Felder achten. Gegebenenfalls müssen einige Felder wie MD_RECORDDESCRIPTION oder MD_ACCESSLICENSE neu angelegt werden.

Feldname

Mapping

PI

<item>dc:identifier</item>

DC

<item>dc:subject</item>

ACCESSCONDITION

<item>dc:rights[not(contains(text(),'http'))]</item>

MD_TITLE

<item>dc:title</item>

MD_LANGUAGE

<item>dc:language</item>

MD_CREATOR

<item>dc:creatory</item>

Zusätzlich noch zu dem XPATH Mapping noch den folgenden Eintrag innerhalb von <groupEntity> ergänzen:

<field name="MD_VALUE">text()</field>

MD_DATECREATED

<item>dc:date</item>

MD_RECORDDESCRIPTION

<xpath>dc:description></xpath>

MD_ACCESSLICENSE

<xpath>dc:rights[contains(text(),'http')]</xpath>

4.4.0

Goobi viewer Core

Auf PDF-Titelseiten im Goobi viewer ist die Unterstützung für hebräische Sprachzeichen hinzugefügt worden. Dafür müssen in der fop.xconf die Schriften definiert und die TTF Dateien daneben abgelegt werden:

mkdir -p /root/BACKUP/$(date -I)
cp /opt/digiverso/viewer/config/PdfTitlePage/fop.xconf /root/BACKUP/$(date -I)
cp /opt/digiverso/viewer/config/PdfTitlePage/*.fo /root/BACKUP/$(date -I)
cd /tmp
git clone https://github.com/intranda/goobi-viewer-core-config.git
cd goobi-viewer-core-config/goobi-viewer-core-config/src/main/resources/install/
cp fop.xconf /opt/digiverso/viewer/config/PdfTitlePage/
cp *.ttf /opt/digiverso/viewer/config/PdfTitlePage/

Anschließend noch in dem Ordner /opt/digiverso/viewer/config/PdfTitlePage/ in den *.fo Dateien die Zeile <fo:flow ...> suchen und darin das Attribut font-family="opensans, unicode" ergänzen.

<!-- Alt -->
<fo:flow flow-name="xsl-region-body">
<!-- Neu -->
<fo:flow flow-name="xsl-region-body" font-family="opensans, unicode">

Weiter ist der schon länger als veraltet gekennzeichnete Schalter <alwaysDisplayDocstruct /> aus der Sektion <toc /> entfallen. Wenn ein entsprechender Eintrag in der lokalen config_viewer.xml existiert kann dieser gelöscht werden. Die Funktionalität wird jetzt über den Bereich <labelConfig /> zur Verfügung gestellt.

Für den Zugriff auf das IIIF Manifest eines Werkes und den Download von Metadaten stehen neue Rechte zur Verfügung. Diese werden nicht automatisch hinzugefügt.

Bei einem Update auf die Version 4.4.0 müssen im Backend konfigurierte Lizenzen geprüft und die neuen Rechte explizit neu hinzugefügt werden!

Goobi viewer Indexer

Wenn DataRepositories und dabei die RemainingSpaceStrategy verwendet werden, muss der Token zur WebAPI des Goobi viewer Cores hinterlegt werden, damit dieser beim Verschieben zwischen den DataRepositories informiert wird:

solr_indexerconfig.xml
<init>
<viewerAuthorizationToken>CHANGEME</viewerAuthorizationToken>
</init>

Sofern die Unterstützung der Recht-Nach-Links Leserichtung für einzelne Werke gewünscht ist muss das folgende Feld in die Konfigurationsdatei hinzugefügt werden. Dafür muss sichergestellt sein, dass der intranda-Namespace definiert ist:

solr_indexerconfig.xml
<init>
<namespaces>
<list>
<intranda>https://intranda.com/MODS/</intranda>
</list>
</namespaces>
<init>
[...]
<BOOL_DIRECTION_RTL>
<list>
<item>
<xpath>mets:xmlData/mods:mods/mods:extension/intranda:directionRTL</xpath>
<addToDefault>false</addToDefault>
<addSortField>true</addSortField>
</item>
</list>
</BOOL_DIRECTION_RTL>

Goobi viewer Connector

Bei einem Update auf die Version 4.4.0 des Goobi viewer Connectors ist in der lokalen config_oai.xml zu prüfen ob dort der Schalter <contentApiUrl /> gesetzt ist und wenn ja muss dieser zu <restApiUrl /> umbenannt und der Pfad angepasst werden::

config_oai.xml
<!-- Alt -->
<contentApiUrl>http://localhost:8080/viewer/rest/content/</contentApiUrl>
<!-- Neu -->
<restApiUrl>http://localhost:8080/viewer/rest/</restApiUrl>

Weiter kann optional das Inhaltsverzeichnis eines Werkes als Text im DublinCore Feld dc:description ausgegeben werden. Dafür ist ein Goobi viewer Core ab der Version 4.4.0 notwendig, da ansonsten der notwendige REST Endpoint nicht zur Verfügung steht.

Das Inhaltsverzeichnis in dc:description kann wie folgt konfiguriert werden:

config_oai.xml
<oai_dc>
<fields>
<template name="...">
<metadata label="description" value="#TOC#" />
</template>
</fields>
</oai_dc>

2020-01-24

Durch die Refaktorisierung der Bücherregale/Merklisten Funktionalität hin zu einheitlicher Benennung aller Funktionen in im Java-Stack, XHTML-Seiten bis hin zu CSS und JavaScript hat sich auch der Schalter in der Konfigurationsdatei geändert. Bei einem Update auf die Version 4.3.0 muss in der lokalen config_viewer.xml der Schalter <bookshelves /> zu <bookmarks /> umbenannt werden:

config_viewer.xml
<bookmarks>
<bookmarksEnabled>true</bookmarksEnabled>
</bookmarks>

Ebenfalls muss für die Suche in den Merklisten das gegebenenfalls konfigurierte statische Feld BOOKSHELF in BOOKMARKS umbenannt werden:

config_viewer.xml
<search>
<advanced>
<searchFields>
<field>BOOKMARKS</field>
</searchFields>
</advanced>
</search>

2020-01-14

Folgendes SQL Statement ausführen, damit die Beschreibungen von Medien Dateien und die Namen von Werken auf Merklisten länger sein dürfen:

ALTER TABLE cms_media_item_metadata MODIFY description TEXT;
ALTER TABLE bookshelf_items MODIFY name LONGTEXT;

2019-12-20

Folgendes SQL Statement ausführen, damit die Beschreibungen von Merklisten länger sein dürfen:

ALTER TABLE bookshelves MODIFY description LONGTEXT;

2019-10-24

Für das Logging müssen die Log4j und SLF4j libs vom Solr in einen dedizierten Ordner. Dafür sind folgende Schritte auszuführen:

mkdir /opt/digiverso/viewer/apache-solr/tomcat-lib/
mv /opt/digiverso/tomcat-lib/log4j*jar /opt/digiverso/viewer/apache-solr/tomcat-lib/
mv /opt/digiverso/tomcat-lib/*slf4j* /opt/digiverso/viewer/apache-solr/tomcat-lib/
chown -R tomcat8. /opt/digiverso/viewer/apache-solr/tomcat-lib/

Anschließend muss der Pfad in dem base="" Attribut der PreResource in der /etc/tomcat8/Catalina/localhost/solr.xml auf den neuen Ordner angepasst werden.

Damit dann die log4j2.xml aus der Applikation selbst greift, muss gegebenenfalls noch die Definition einer globalen Konfigurationsdatei, die als Parameter der JVM beim Starten übergeben wird, aus der /etc/default/tomcat8 entfernt werden.

2019-10-08

Ein ein Update des Goobi viewer Core enthält ab diesem Zeitpunkt automatisch die neuen Crowdsourcing Kampagnen. Aus diesem Grund muss der Goobi viewer Indexer und das Solr-Schema mit aktualisiert werden. Die Indexer Konfigurationsdatei muss um die folgende Ordnerdefinition erweitert werden:

solr_indexerconfig.xml
<init>
<annotationFolder>annotation</annotationFolder>
</init>

Eine Neuindexierung des Datenbestandes ist trotz Update des Solr Schemas nicht notwendig.

2019-08-29

Für die Suche in den Merklisten muss das Feld BOOKSHELF in der Feldliste für die erweiterte Suche konfiguriert sein. Deswegen muss bei einem Update geprüft werden, ob in der lokalen config_viewer.xml eine individuelle Liste an Suchfeldern definiert wurde. Wenn ja das Feld hinzufügen:

config_viewer.xml
<search>
<advanced>
<searchFields>
[...]
<field>BOOKSHELF</field>
</searchFields>
</advanced>
</search>

2019-08-22

Es muss überprüft werden, ob in der lokalen config_viewer.xml ein alternatives Mapping für den pageType viewImage existiert:

config_viewer.xml
<viewer>
<pageTypes>
<viewImage>objekt</viewImage>
...
</pageTypes>
</viewer>

Wenn ja, dann muss das Mapping auf den neuen pageType viewObject geändert werden:

<viewer>
<pageTypes>
<viewObject>objekt</viewObject>
...
</pageTypes>
</viewer>

2019-07-31

Wenn für ein Werk nur Volltextdateien (kein ALTO) vorliegt, konvertiert der Goobi viewer Indexer diese ab sofort automatisch zu UTF-8 wenn ein abweichendes Encoding vorliegt.

Wenn im Goobi viewer Indexer die RemainingSpaceStrategy inklusive Buffer verwendet wird, dann wird dieser bei einer Neuindexierung überprüft und das Werk gegebenenfalls in ein anderes Repository verschoben wenn der konfigurierte Wert unterschritten wird.

2019-07-06

Da URLs nicht mehr automatisch gesetzt werden muss sichergestellt sein, dass in der lokalen config_viewer.xml die folgenden URLs konfiguriert sind:

config_viewer.xml
<urls>
<metadata>
<mets>https://viewer.example.org/oai?verb=GetRecord&amp;metadataPrefix=mets&amp;identifier=</mets>
<marc>https://viewer.example.org/oai?verb=GetRecord&amp;metadataPrefix=marcxml&amp;identifier=</marc>
<dc>https://viewer.example.org/oai?verb=GetRecord&amp;metadataPrefix=oai_dc&amp;identifier=</dc>
<ese>https://viewer.example.org/oai?verb=GetRecord&amp;metadataPrefix=europeana&amp;identifier=</ese>
</metadata>
<contentServerWrapper>https://viewer.example.org/content/</contentServerWrapper>
<download>https://viewer.example.org/download/</download>
<rest>https://viewer.example.org/rest/</rest>
</urls>

2019-06-11

Die CORS Unterstützung im Apache muss um die folgenden Einträge ergänzt werden:

Header always set Access-Control-Allow-Methods "GET, OPTIONS"
Header always set Access-Control-Max-Age "600"
Header always set Access-Control-Allow-Headers "Authorization, Content-Type"
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]

2019-06-05

Die Package-Struktur des Goobi viewer Connectors hat sich geändert. Bei einem Update ist es zwingend notwendig die Inhalte aus dem Ordner /opt/digiverso/viewer/oai/token/ zu löschen.

2019-05-29

Die Projektstrukur wurde geändert. Bestehende Themes sind nicht mehr mit dem aktuellen Goobi viewer Core kompatibel und müssen angepasst werden. Eine Anleitung erscheint in Kürze in Kapitel 8.2 Theme changes.

Wenn das Theme als externes Theme eingebunden ist sind die im folgenden beschriebenen Anpassungen notwendig. Sie sind in diesem Fall exemplarisch mit dem Reference-Theme dargestellt. Der Theme beziehungsweise Repositoryname ist immer auf den eigenen Fall anzupassen.

Anpassen der Repository URL. Dafür in dem ausgecheckten Repository die Datei .git/config/ editieren und die URL zum remote origin anpassen.

Status

Wert

Alt

gitolite@git.intranda.com:goobi-viewer-theme-reference.git

Neu

git@gitea.intranda.com:goobi-viewer/goobi-viewer-theme-reference.git

Weiter muss der base Pfad für die PreResources in der context.xml geändert werden.

Alt:

viewer.xml
<PreResources
className="org.apache.catalina.webresources.DirResourceSet"
base="/opt/digiverso/viewer/themes/goobi-viewer-theme-reference/goobi-viewer-theme-reference/src/META-INF/resources/resources/themes/"
webAppMount="/resources/themes" />

Neu:

viewer.xml
<PreResources
className="org.apache.catalina.webresources.DirResourceSet"
base="/opt/digiverso/viewer/themes/goobi-viewer-theme-reference/goobi-viewer-theme-reference/WebContent/resources/themes/"
webAppMount="/resources/themes" />

Die Anpassung des Pfades muss natürlich auch in der lokalen config_viewer.xml unter viewer/theme/rootPath erfolgen.

2019-05-27

Sofern die Unterstützung von denkXweb gewünscht wird, muss der Goobi viewer Indexer aktualisiert und die folgenden beiden Zeilen in dessen Konfigurationsdatei eingefügt werden:

solr_indexerconfig.xml
<indexedDenkXweb>indexed_denkxweb</indexedDenkXweb> <origDenkXweb>/opt/digiverso/viewer/orig_denkxweb/</origDenkXweb>

Außerdem den Ordner im Dateisystem anlegen:

mkdir /opt/digiverso/viewer/indexed_denkxweb/
mkdir /opt/digiverso/viewer/orig_denkxweb/
chown tomcat8:tomcat8 /opt/digiverso/viewer/indexed_denkxweb/
chown tomcat8:tomcat8 /opt/digiverso/viewer/orig_denkxweb/

2019-05-22

Damit nach Änderungen am Javascript und CSS Dateien diese schneller an den Client ausgeliefert werden ist eine Änderung in der Apache Konfiguration des Goobi viewer vhosts notwendig. Einerseits hinzufügen der folgenden Zeile:

# make sure the ETag headers are correctly forwarded.
# Post Apache 2.4 have a look at
# https://httpd.apache.org/docs/trunk/mod/mod_deflate.html#deflatealteretag
RequestHeader edit "If-None-Match" '(.*)-gzip"$' '$1", $1-gzip"'

Andererseits das auskommentieren der folgenden drei Zeilen im <LocationMatch /> Block für den Goobi viewer:

# ExpiresByType text/css "access plus 24 hours"
# ExpiresByType text/javascript "access plus 24 hours"
# ExpiresByType application/javascript "access plus 24 hours"

2019-04-24

Die URLs für Verlinkung der Sammlungen aus dem Backend heraus werden nun anders gebildet. Bei relativen URLs wird nun immer auch der Anwendungsname mit angegeben. Beim Update ist zu prüfen ob im Admin-Backend unter "Sammlungen" Einträge vorhanden sind. Wenn ja muss geprüft werden ob URLs zu CMS-Seiten vergeben sind. Ist das der Fall muss der Anwendungsname entfernt werden.

Beispiel:

Alt

Neu

/viewer/sammlungen/alle-werke/

/sammlungen/alle-werke/

2019-03-29

Aktualisierung des Goobi viewer Indexers und Anpassen der Konfigurationsdatei solr_indexerconfig.xml. Wenn das Metadatum MD_SERIESTITLE existiert muss dieses in MD_TITLE_SERIES umbenannt werden. Siehe dazu auch den letzten Abschnitt in Kapitel 6.2.

Außerdem kann aus der lokalen config_viewer.xml die Definition der Klassifikationen aus dem CMS-Bereich gelöscht werden (config/cms/classifications). Die Werte werden inzwischen in der Datenbank vorgehalten.

Durch die Refaktorisierung des Medien-Bereichs sind einige Funktionen von dort an andere Stelle gewandert. Zum Beispiel auch die Zuweisung einer Bild-Datei zu einer Sammlung. Dieser Umzug muss manuell gemacht werden. Dafür ist vor dem Update folgendes SQL auszuführen:

SELECT cms_media_item_id, file_name, collection, collection_name, collection_field FROM cms_media_items WHERE collection=1;

Die Query liefert eine Liste aller Medien-Objekte die berücksichtigt werden müssen. Für jedes muss im CMS-Backend eine neue Sammlung angelegt werden mit collection_field als Sammlungsfeld und collection_name als Sammlungsname. Das Bild muss anhand der id oder des Dateinamens identifiziert werden.

2019-02-14

Die Übersichtsseiten-Funktionalität wurde zugunsten einer CMS-Erweiterung entfernt. Mit dem Update des Cores muss zwingend auch der Goobi viewer Indexer und das Solr-Schema aktualisiert werden.

In der Konfigurationsdatei des Goobi viewer Indexers den Eintrag für den overviewFolder entfernen und für einen cmsFolder hinzufügen:

solr_indexerconfig.xml
<!--overviewFolder>overview</overviewFolder-->
<cmsFolder>cms</cmsFolder>

Außerdem den Ordner im Dateisystem anlegen:

mkdir /opt/digiverso/viewer/cms/
chown tomcat8:tomcat8 /opt/digiverso/viewer/cms/

Nun folgendes SQL Statement ausführen um sicherzustellen, dass der Zeichensatz der CMS-Zieltabelle korrekt ist und die Migration nicht fehlschlägt:

ALTER TABLE cms_content_items CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Ob die Migration ausgeführt werden muss, kann in der Datenbank geprüft werden:

SELECT COUNT(*) FROM overview_pages,overview_page_updates;

Um dann bereits angelegte Übersichtsseiten aller Werke ins CMS zu migrieren, den folgenden Aufruf einmalig ausführen:

https://viewer.example.org/viewer/tools?action=migrateOverviewPages

Am Ende kann der overview Ordner aus dem Dateisystem auch in das Backup verschoben werden.

2018-12-19

Der Goobi viewer Indexer und das dazugehörige Schema müssen aktualisiert und der Datenbestand neu indexiert werden damit die Bildmaße als WIDTH und HEIGHT in den Solr Suchindex geschrieben werden.

2018-12-17

Für die neue Facettierung nach Strukturelementen muss der Goobi viewer Indexer auf die Version 3.2.20181214 und das Solr-Schema auf 20181214 aktualisiert und der Datenbestand neu indexiert werden.

Außerdem muss in der lokalen config_viewer.xml geprüft werden, ob das Feld DOCSTRCT zur Facettierung konfiguriert ist. Wenn ja ist dieses durch die neuen beiden Feldnamen DOCSTRCT_TOP und DOCSTRCT_SUB zu ersetzen.

<search>
<drillDown>
<!--field initialElementNumber="3">DOCSTRCT</field-->
<field initialElementNumber="3">DOCSTRCT_TOP</field>
<field initialElementNumber="3">DOCSTRCT_SUB</field>
</drillDown>
</search>

2018-11-19

Eine Änderung in der Darstellung von Normdaten-Buttons erfordert eine Umkonfigurierung aller Installationen, die Normdaten anzeigen.

Der Type für NORM_URI lautet nicht mehr field sondern neu normdatauri und kann als Parameter an beliebige Stelle platziert werden. So können Normdaten-Buttons auch zwischen anderen Parametern gerendert werden, anstatt wie bisher nur ganz am Ende.

config_viewer.xml
<metadata label="MD_AUTHOR" value="MASTERVALUE_WIKINORM" group="true">
<param type="field" key="MD_VALUE"/>
<param type="wikipersonfield" key="MD_VALUE"/>
<param type="normdatauri" key="NORM_URI" />
</metadata>

Für den Normdaten-Button muss ein eigener Platzhalter (hier: {5}) definiert werden:

messages_de.properties
MASTERVALUE_WIKINORM={1} <a href="http://de.wikipedia.org/wiki/{3}" target="_blank" title="Wikipedia" alt="Wikipedia" data-trigger="hover" data-placement="top" data-toggle="tooltip"><i class="fa fa-wikipedia-w" aria-hidden="true"></i></a> {5}

Außerdem die folgende Datei unter /opt/digiverso/viewer/config/ ablegen:

normdatamap.properties
001=NORM_IDENTIFIER_ZLB
0247_a=URI
035__(DE-101)=NORM_IDENTIFIER_ZLB
1001_a=NORM_NAME
1001_d=NORM_LIFEPERIOD
1001_q=NORM_SEX
4001_a=NORM_ALTNAME
5000_4\:beza=NORM_ACQUAINTANCE
5000_4\:bezav:VD-16\ Mitverf.=NORM_COAUTHOR
5001_4\:beza=NORM_ACQUAINTANCE
5001_4\:bezav:Mitschu\u0308ler=NORM_CLASSMATE
5001_4\:bezav:VD-16\ Mitverf.=NORM_COAUTHOR
5001_4\:bezf=NORM_RELATIVE
5001_4\:bezfv:Vater=NORM_FATHER
5001_4\:bezfv:Vorfahren=NORM_ANCESTOR
5001_4\:saml=NORM_COLLECTOR
5102_4\:besi=NORM_OWNER
5102_4\:bete=NORM_CONTRIBUTOR
530_04\:rela=NORM_RELATIONSHIP
548__4\:datl=NORM_LIFEPERIOD
548__4\:dats=NORM_PRODUCTIONPERIOD
548__4\:datw=NORM_WORKPERIOD
548__4\:datx=NORM_LIFEPERIODEXACT
550__4\:stud=NORM_EDUCATION
550__4\:beru=NORM_PROFESSION
550__4\:obin=NORM_OBIN
551__4\:ortg=NORM_PLACEOFBIRTH
551__4\:ortu=NORM_PLACEOFEDUCATION
551__4\:orts=NORM_PLACEOFDEATH

2018-10-25

Die folgenden beiden Feldeinträge sollen in der Konfigurationsdatei des Goobi viewer Indexers ergänzt werden:

solr_indexerconfig.xml
<MD_PROCESSID>
<list>
<item>
<xpath>@OBJID</xpath>
<addToDefault>false</addToDefault>
<addUntokenizedVersion>false</addUntokenizedVersion>
</item>
</list>
</MD_PROCESSID>
<BOOL_CONTAINSIMAGE>
<list>
<item>
<xpath>string(boolean(mets:fileSec/mets:fileGrp[@USE="PRESENTATION"]))</xpath>
<addToDefault>false</addToDefault>
<addSortField>true</addSortField>
</item>
</list>
</BOOL_CONTAINSIMAGE>

2018-10-19

Der Goobi viewer Indexer muss aktualisiert und der Datenbestand neu indexiert werden um sicherzustellen, dass keine falschen Suchtreffer angezeigt werden.

2018-10-09

In der config_viewer.xml muss der Block <openIdConnect> umbenannt werden in <authenticationProviders>. Sein Attribut showwandert in die einzelnen enthaltenen <provider> Einträge. Der Default-Wert für show ist dabei true. Alle <provider> Einträge mit Namen Google und Facebook müssen zusätzlich das Attribut type="openId" bekommen. Die Anmeldung über lokale Viewer-Nutzeraccounts muss als separater <provider> eingetragen werden:

<provider type="local" show="true" name="Goobi viewer"/>

Eine typische komplette Konfiguration sieht dann so aus:

<authenticationProviders>
<provider type="openId" show="true" name="Google" endpoint="https://accounts.google.com/o/oauth2/auth" clientId="CHANGEME" clientSecret="CHANGEME" image="google.png" />
<provider type="openId" show="false" name="Facebook" endpoint="https://www.facebook.com/dialog/oauth" clientId="CHANGEME" clientSecret="CHANGEME" image="facebook.png" />
<provider type="local" show="true" name="Goobi viewer"/>
</authenticationProviders>

Siehe auch Sektion 5.2 Benutzeraccounts.

2018-09-10

Da sich bei der Suchtreffer- und Sammlungsanzeige in der URL die Position geändert hat an dem die Einschränkung angezeigt ist muss eine Weiterleitung eingerichtet werden, damit externe Verlinkungen weiterhin funktionieren. Dafür kann zum Beispiel im Apache das folgende Snippet verwendet werden:

## Redirect collection facetting to new URL destination
ProxyPassMatch ^/viewer/browse/DC(.*)/-/([0-9]+)/-/-/$ !
RedirectMatch 301 ^/viewer/browse/DC(.*)/-/([0-9]+)/-/-/$ /viewer/browse/-/$2/-/DC$1/
ProxyPassMatch ^/viewer/search/DC(.*)/-/([0-9]+)/-/-/$ !
RedirectMatch 301 ^/viewer/search/DC(.*)/-/([0-9]+)/-/-/$ /viewer/search/-/-/$2/-/DC$1/
ProxyPassMatch ^/viewer/search/(.*)/-/([0-9]+)/-/-/$ !
RedirectMatch 301 ^/viewer/search/(.*)/-/([0-9]+)/-/-/$ /viewer/search/-/-/$2/-/DC:$1/

2018-09-06

Bestehende Cronjobs für den Goobi viewer sind zu prüfen und in die Datei /etc/cron.d/intranda-goobiviewer zusammenzuführen. Eine Vorlage für so eine Datei ist wie folgt:

/etc/cron.d/intranda-goobiviewer
PATH=/usr/bin:/bin:/usr/sbin/
MAILTO=support@intranda.com
#
# Regular cron jobs for the Goobi viewer
#
## This REST call triggers the email notification about new search hits for users,
## that enabled notifications for saved searches
42 8,12,17 * * * root curl -s http://localhost:8080/viewer/rest/search/sendnotifications/?token=fc375cda-0908-405b-ad7a-1fc5ba638662
## This REST call creates an XML sitemap for the Goobi viewer instance. Please always
## call it on it's external URL because otherwise the protocol (http/https) might not
## be detected correctly
18 1 * * * root curl -s -X POST -H "Content-Type: application/json" -d '{}' "https://viewer.example.org/viewer/rest/sitemap/update/?token=fc375cda-0908-405b-ad7a-1fc5ba638662" 1>/dev/null
## This two scripts pull the theme git repository regulary. The @daily part is only
## a reminder for the 1-minute schedule
*/1 * * * * root cd /opt/digiverso/viewer/themes/goobi-viewer-theme-reference; git pull | grep -v "Already up-to-date."
@daily root echo "Please look at the git checkout interval for the Goobi viewer theme" | mail -s "Reference: Theme repository is checked out every minute" do-not-reply@example.org
## Optimize the Solr search index once a month
@monthly root curl -s "http://localhost:8080/solr/update?optimize=true&waitFlush=false"

Der Token muss erst generiert und dann in der lokalen config_viewer.xml konfiguriert werden:

cat /proc/sys/kernel/random/uuid
config_viewer.xml
<webapi>
<authorization>
<token>fc375cda-0908-405b-ad7a-1fc5ba638662</token>
</authorization>
</webapi>

2018-08-17

Wenn das Crowdsourcing Modul installiert ist, muss aus dessen Konfigurationsdatei config_viewer-module-crowdsourcing.xml der folgende Block entfernt werden:

<viewImage>
<url>resources/components/viewImageUserGeneratedContent.xhtml</url>
</viewImage>

2018-06-21

Bei der Facettierung dürfen die konfigurierten Feldnamen nicht mehr mit FACET_ starten, sondern müssen mit MD_ beginnen.

2018-05-28

Optional: Extrahiertes Theme einbinden. Siehe dazu Kapitel 2.16.1

2018-05-08

Damit die vom Goobi viewer generierten IIIF Presentation Manifeste von extern funktionieren, muss CORS erlaubt werde. Dafür das Headers Modul im Apache aktivieren sofern noch nicht geschehen:

a2enmod headers

In dem oder in den vhosts folgendes Snippet einfügen:

## CORS for IIIF
Header set Access-Control-Allow-Origin "*"

Anschließend den Apache neu starten:

systemctl restart apache2

Außerdem muss der Goobi viewer Indexer aktualisiert und der Datenbestand neu indexiert werden. Hintergrund ist, dass für die Generierung der IIIF Manifeste die Bildgrößen verfügbar sein müssen. Stehen diese im Solr Suchindex ist die Generierung der Manifeste deutlich schneller als wenn dafür jedes Bild einzeln gelesen werden muss.