2025

Allgemein

Zum Update des Goobi viewer Indexers auf die neuste Version immer die folgenden Kommandos benutzen:

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/latest/download/solrIndexer.jar
systemctl start solrindexer

25.01-SNAPSHOT WORK IN PROGRESS

Das Januar Release hat verschiedene Breaking-Changes. Bitte die Anleitung sorgfältig durchgehen.

Allgemein

Der Goobi viewer benötigt jetzt Java 21 und Tomcat 10. Die folgenden Punkte beziehen sich auf ein System, das von Ubuntu Linux Server 22.04 auf 24.04 aktualisiert wurde. Bei alternativen Distributionen sind die Schritte entsprechend der dortigen Pfade und Befehle anzupassen.

Java

Der Goobi viewer läuft jetzt mit Java 21. Dafür sicherstellen, dass das entsprechende Paket installiert und diese Version auch in Verwendung ist:

apt install openjdk-21-jre-headless
update-alternatives --config java

Eventuell vorhandene ältere Java Versionen können nach Prüfung entfernt werden.

Tomcat

Der Goobi viewer benötigt jetzt Tomcat 10:

apt install tomcat10

Anschließend müssen die Einstellungen, die für den Tomcat 9 galten ebenfalls für den Tomcat 10 gesetzt werden:

SYSTEMD_EDITOR=tee systemctl edit tomcat10 << "EOF"
[Service]
LogsDirectoryMode=755
CacheDirectoryMode=755
ProtectSystem=full
NoNewPrivileges=true
ReadWritePaths=
EOF
patch /etc/default/tomcat10 << "EOF"
@@ -6,11 +6,20 @@
 # You may pass JVM startup parameters to Java here. If you run Tomcat with
 # Java 8 instead of 9 or newer, add "-XX:+UseG1GC" to select a suitable GC.
 # If unset, the default options will be: -Djava.awt.headless=true
-JAVA_OPTS="-Djava.awt.headless=true"
+#JAVA_OPTS="-Djava.awt.headless=true"
 
 # To enable remote debugging uncomment the following line.
 # You will then be able to use a Java debugger on port 8000.
 #JAVA_OPTS="${JAVA_OPTS} -agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"
+JAVA_OPTS="-Djava.awt.headless=true -Xmx4g -Xms4g"
+JAVA_OPTS="${JAVA_OPTS} -XX:+UseG1GC"
+JAVA_OPTS="${JAVA_OPTS} -XX:+ParallelRefProcEnabled"
+JAVA_OPTS="${JAVA_OPTS} -XX:+DisableExplicitGC"
+JAVA_OPTS="${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom"
+JAVA_OPTS="${JAVA_OPTS} -Dfile.encoding='utf-8'"
+JAVA_OPTS="${JAVA_OPTS} --add-exports=java.desktop/sun.awt.image=ALL-UNNAMED"
+
+UMASK=0022
 
 # Java compiler to use for translating JavaServer Pages (JSPs). You can use all
 # compilers that are accepted by Ant's build.compiler property.
@@ -20,4 +29,4 @@
 #SECURITY_MANAGER=true
 
 # Whether to compress logfiles older than today's
-#LOGFILE_COMPRESS=1
+LOGFILE_COMPRESS=1
EOF
patch /etc/tomcat10/context.xml << "EOF"
@@ -28,4 +28,7 @@
     <!--
     <Manager pathname="SESSIONS.ser" />
     -->
+
+    <!-- Set mode for the JSESSONID cookie. Google authentication needs "lax" -->
+    <CookieProcessor sameSiteCookies="strict" />
 </Context>
EOF
patch /etc/tomcat10/server.xml << "EOF"
@@ -65,49 +65,22 @@
          AJP  Connector: /docs/config/ajp.html
          Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
     -->
-    <Connector port="8080" protocol="HTTP/1.1"
-               connectionTimeout="20000"
-               redirectPort="8443"
-               maxParameterCount="1000"
-               />
-    <!-- A "Connector" using the shared thread pool-->
-    <!--
-    <Connector executor="tomcatThreadPool"
-               port="8080" protocol="HTTP/1.1"
-               connectionTimeout="20000"
-               redirectPort="8443"
-               maxParameterCount="1000"
-               />
-    -->
-    <!-- Define an SSL/TLS HTTP/1.1 Connector on port 8443 with HTTP/2
-         This connector uses the NIO implementation. The default
-         SSLImplementation will depend on the presence of the APR/native
-         library and the useOpenSSL attribute of the AprLifecycleListener.
-         Either JSSE or OpenSSL style configuration may be used regardless of
-         the SSLImplementation selected. JSSE style configuration is used below.
-    -->
-    <!--
-    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
-               maxThreads="150" SSLEnabled="true"
-               maxParameterCount="1000"
-               >
-        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
-        <SSLHostConfig>
-            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
-                         type="RSA" />
-        </SSLHostConfig>
-    </Connector>
-    -->
 
-    <!-- Define an AJP 1.3 Connector on port 8009 -->
-    <!--
-    <Connector protocol="AJP/1.3"
-               address="::1"
-               port="8009"
-               redirectPort="8443"
-               maxParameterCount="1000"
-               />
-    -->
+        <Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1"
+                server=" "
+                connectionTimeout="20000"
+                maxThreads="400"
+                URIEncoding="UTF-8"
+                enableLookups="false"
+                disableUploadTimeout="true"
+                proxyName="VIEWER.EXAMPLE.ORG"
+                proxyPort="80" />
+  
+        <Connector address="127.0.0.1" port="8009" protocol="AJP/1.3"
+                secretRequired="false"
+                connectionTimeout="20000"
+                maxThreads="400"
+                URIEncoding="UTF-8" />
 
     <!-- An Engine represents the entry point (within Catalina) that processes
          every request.  The Engine implementation for Tomcat stand alone
@@ -150,9 +123,14 @@
         <!-- Access log processes all example.
              Documentation at: /docs/config/valve.html
              Note: The pattern used is equivalent to using pattern="common" -->
+        <!--
         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log" suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
+        -->
+       <Valve className="org.apache.catalina.valves.CrawlerSessionManagerValve"
+               crawlerUserAgents=".*[bB]ot.*|.*Yahoo! Slurp.*|.*Feedfetcher-Google.*|.*Apache-HttpClient.*|.*[Ss]pider.*|.*[Cc]rawler.*|.*nagios.*|.*Yandex.*|.*facebookexternalhit.*|.*bytedance.com.*|.*Turnitin.*|.*GoogleOther.*|.*python-requests.*|.*check_http.*"
+               sessionInactiveInterval="60"/>
 
       </Host>
     </Engine>
EOF

Nun die zum Goobi viewer dazugehörige Konfigurationsdatei übernehmen:

systemctl stop tomcat10
mv /etc/tomcat9/Catalina/localhost/*.xml /etc/tomcat10/Catalina/localhost/

Zu diesem Zeitpunkt muss eine aktualisierte, neue viewer.war mit dem 25.01 Release vorliegen, da eine ältere Version des Goobi viewers im Tomcat 10 nicht mehr startet.

Sofern auf dem System der Bash Alias cata gesetzt ist, muss der auf den neuen Pfad beziehungsweise die neue Unitfile angepasst werden.

Zuletzt noch sicherstellen, dass für den Benutzeraccount tomcatder richtige Pfad zum Homeverzeichnis gesetzt ist und - sofern vorhanden - das entsprechende .ssh Verzeichnis verschieben:

mkdir /var/lib/tomcat/
chown tomcat: /var/lib/tomcat/
usermod -d /var/lib/tomcat tomcat
[ -d /var/lib/tomcat9/.ssh ] && mv /var/lib/tomcat9/.ssh /var/lib/tomcat/

Zookeeper

In der /etc/zookeeper/conf/zoo.cfg sicherstellen, dass das dataDir auf den richtigen Pfad zeigt und die clientPortAddress auf localhost gesetzt ist:

dataDir=/var/lib/zookeeper
clientPortAddress=127.0.0.1

Anschließend den folgenden Symlink entfernen:

rm /var/lib/zookeeper/myid

Goobi viewer Indexer

Um die Abhängigkeit von Tomcat 9 zu Tomcat 10 zu ändern muss die Systemd Unitfile aktualisiert werden:

mkdir -p /root/BACKUP/$(date -I)
systemctl stop solrindexer
cp /etc/systemd/system/solrindexer.service /root/BACKUP/$(date -I)
wget -O /etc/systemd/system/solrindexer.service https://raw.githubusercontent.com/intranda/goobi-viewer-indexer/master/goobi-viewer-indexer/src/main/resources/other/solrindexer.service
systemctl daemon-reload
systemctl start solrindexer

Die Konfigurationsdatei des Indexers muss an die vereinfachte XPATH-Konfiguration angepasst werden. Dafür können die folgenden Befehle und Skript verwendet werden:

cd /opt/digiverso/indexer/
cp config_indexer.xml /root/BACKUP/$(date -I)/
apt install xmlstarlet
file=config_indexer.xml
XSL=$(cat << "EOF"
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" encoding="UTF-8" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output encoding="UTF-8" version="1.0" indent="yes"/>

    <xsl:template match="root/fields/child::*/list/item">
        <xsl:copy>
            <xsl:for-each select="xpath/list/item">
                <xpath><xsl:value-of select="."/></xpath>
            </xsl:for-each>
            <xsl:apply-templates select="comment() | @* | *[not(self::xpath/list/item)] "/>
        </xsl:copy>
    </xsl:template>

    <!-- IdentityTransform -->
    <xsl:template match="/ | @* | node()">
        <xsl:copy>
            <xsl:apply-templates select="@* | node()" />
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>
EOF
)

xmlstarlet tr <(echo "$XSL") $file | xmlstarlet fo -s 4 > ${file}.tmp
mv ${file}.tmp ${file}

Last updated