<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://superxhosting.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andrek</id>
	<title>SuperX - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://superxhosting.de/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andrek"/>
	<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php/Spezial:Beitr%C3%A4ge/Andrek"/>
	<updated>2026-11-02T23:15:37Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Tomcat-Einrichtung&amp;diff=16888</id>
		<title>Kernmodul Tomcat-Einrichtung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Tomcat-Einrichtung&amp;diff=16888"/>
		<updated>2026-10-09T06:16:22Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Installation und Einrichtung von&lt;br /&gt;
[[Bild:tomcat.png]]&lt;br /&gt;
Tomcat&lt;br /&gt;
&lt;br /&gt;
Für das SuperX-Kernmodul 6.0 empfehlen wir &#039;&#039;&#039;Tomcat 10.1&#039;&#039;&#039; mit &#039;&#039;&#039;Java 21&#039;&#039;&#039;. Die folgenden Beispiele beziehen sich überwiegend auf Ubuntu Linux 26.04. Bei anderen Linux-Distributionen sind die Konfigurationsschritte weitgehend identisch, die Paketnamen und Pfade können aber abweichen.&lt;br /&gt;
{{Achtung|Der Umstieg von Tomcat 9 auf Tomcat 10 ist kein reines Versionsupdate. Die Java-EE-Schnittstellen wurden von &amp;lt;code&amp;gt;javax.*&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.*&amp;lt;/code&amp;gt; umgestellt. Für Tomcat 10 wird eine dafür geeignete SuperX-Webanwendung benötigt. Weitere Hinweise dazu stehen im Abschnitt [[#Wechsel_von_Tomcat_9_auf_Tomcat_10|Wechsel von Tomcat 9 auf Tomcat 10]].}}&lt;br /&gt;
&lt;br /&gt;
=Tomcat aus Linux Distributionen=&lt;br /&gt;
Da die Versionsnummern des Tomcat nicht immer zu SuperX passen, können Sie einen eigenen Tomcat bzw. den im SuperX-Kernmodul mitgelieferten Tomcat nutzen. Auch wenn Sie mehrere Tomcats auf einem Server betreiben, kann es sinnvoll sein, Tomcat [[Kernmodul_Tomcat-Einrichtung#Tomcat_manuell_installieren|manuell]] zu installieren.&lt;br /&gt;
Der Betrieb von Tomcat aus der jeweiligen Linux-Distribution hat jedoch den Vorteil, dass man&lt;br /&gt;
* benötigte Drittsoftware direkt mitinstallieren kann&lt;br /&gt;
* die Apache-Integration einfacher einrichten kann&lt;br /&gt;
* regelmäßige Sicherheitsupdates und Bugfixes über die Paketverwaltung beziehen kann&lt;br /&gt;
* Tomcat in der Regel bereits als systemd-Dienst erhält&lt;br /&gt;
Wenn eine für SuperX geeignete Tomcat-Version in der Distribution enthalten ist, empfehlen wir daher die Installation aus der Distribution.&lt;br /&gt;
&lt;br /&gt;
==Tomcat aus der Ubuntu-Distribution==&lt;br /&gt;
Im Folgenden wird das Vorgehen für Ubuntu Linux 26.04 mit Java 21 und Tomcat 10.1 beschrieben.&lt;br /&gt;
Zunächst wechseln Sie in die root-Shell mit&lt;br /&gt;
 sudo -i&lt;br /&gt;
Java 21, Tomcat 10 und den Apache-Webserver installieren:&lt;br /&gt;
 apt-get update&lt;br /&gt;
 apt-get install -y openjdk-21-jdk tomcat10 apache2&lt;br /&gt;
Tomcat anschließend zunächst stoppen:&lt;br /&gt;
 systemctl stop tomcat10.service&lt;br /&gt;
Die installierten Versionen können Sie prüfen mit&lt;br /&gt;
 java -version&lt;br /&gt;
 /usr/share/tomcat10/bin/version.sh&lt;br /&gt;
{{Hinweis|Das Ubuntu-Paket &amp;lt;code&amp;gt;tomcat10&amp;lt;/code&amp;gt; enthält Tomcat 10.1. Die tatsächlich ausgelieferte Patchversion hängt vom Paketstand ab. Die hier empfohlene Kombination mit Java 21 ist eine SuperX-Empfehlung; Tomcat 10.1 selbst benötigt mindestens Java 11.}}&lt;br /&gt;
&lt;br /&gt;
Die Konfiguration des Distributions-Tomcat liegt üblicherweise in&lt;br /&gt;
 /etc/tomcat10/server.xml&lt;br /&gt;
und die Webanwendungen in&lt;br /&gt;
 /var/lib/tomcat10/webapps&lt;br /&gt;
Kopieren Sie die zu Tomcat 10 passende SuperX-Webanwendung in das webapps-Verzeichnis. Der Tomcat-Dienstbenutzer muss auf die benötigten Dateien zugreifen können; die Eigentümer- und Schreibrechte sollten auf die tatsächlich erforderlichen Verzeichnisse begrenzt werden.&lt;br /&gt;
Beim HTTP-Connector in der &amp;lt;code&amp;gt;server.xml&amp;lt;/code&amp;gt; setzen Sie die Zeichenkodierung auf UTF-8. Wenn Apache und Tomcat auf demselben Server laufen, empfehlen wir außerdem die Bindung an localhost:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Connector port=&amp;quot;8080&amp;quot; protocol=&amp;quot;HTTP/1.1&amp;quot;&lt;br /&gt;
           address=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
           connectionTimeout=&amp;quot;20000&amp;quot;&lt;br /&gt;
           URIEncoding=&amp;quot;UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die weiteren Einstellungen für den Betrieb hinter Apache werden unter [[#Apache_Anbindung|Apache Anbindung]] erläutert. Weitere Details zur &amp;lt;code&amp;gt;server.xml&amp;lt;/code&amp;gt; siehe [[Kern_Installation_Upgrade#Steuerung_des_Servers%3A_Die_server.xml|SuperX-Installationshandbuch]].&lt;br /&gt;
&lt;br /&gt;
Unter Ubuntu können Java-Optionen üblicherweise in der Datei&lt;br /&gt;
 /etc/default/tomcat10&lt;br /&gt;
hinterlegt werden, z.B.:&lt;br /&gt;
 JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64&lt;br /&gt;
 JAVA_OPTS=&amp;quot;-Djava.awt.headless=true -DSuperX-DB-PROPERTIES-SET=true -Xmx3700M&amp;quot;&lt;br /&gt;
Der Speicherwert ist nur ein Beispiel. Prüfen Sie mit &amp;lt;code&amp;gt;systemctl cat tomcat10&amp;lt;/code&amp;gt;, welche Konfigurationsdateien der installierte Dienst tatsächlich einliest. Die vom Paket bereitgestellte systemd-Service-Datei sollte nicht direkt bearbeitet werden; bei Bedarf verwenden Sie eine systemd-Override-Datei.&lt;br /&gt;
Starten Sie Tomcat mit&lt;br /&gt;
 systemctl start tomcat10.service&lt;br /&gt;
und prüfen Sie den Status mit&lt;br /&gt;
 systemctl status tomcat10.service&lt;br /&gt;
Wenn der HTTP-Connector nur an &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt; gebunden ist, kann der Zugriff auf demselben Server getestet werden mit&lt;br /&gt;
 curl -I http://127.0.0.1:8080/superx/&lt;br /&gt;
Für den Aufruf vom Arbeitsplatzrechner wird anschließend die Apache-Anbindung eingerichtet.&lt;br /&gt;
&lt;br /&gt;
==Tomcat unter anderen Linux-Distributionen==&lt;br /&gt;
Auch unter SUSE Linux und Red Hat Enterprise Linux können Sie den Tomcat aus der Distribution oder [[#Tomcat_manuell_installieren|manuell]] installieren. Die genauen Paketnamen, Dienstnamen und Verzeichnisse sind distributionsabhängig. Entscheidend sind eine geeignete Tomcat-10.1-Version, Java 21, eine kompatible SuperX-Webanwendung und die Konfiguration des HTTP-Connectors bzw. AJP-Connectors.&lt;br /&gt;
Ältere Verfahren mit &amp;lt;code&amp;gt;rctomcat&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;chkconfig&amp;lt;/code&amp;gt; oder &amp;lt;code&amp;gt;SuSEconfig&amp;lt;/code&amp;gt; werden hier nicht mehr beschrieben. Für die Dienstverwaltung wird systemd verwendet.&lt;br /&gt;
&lt;br /&gt;
==Tomcat aus der Distribution mit abweichender Userkennung oder anderem webapps-Verzeichnis==&lt;br /&gt;
Wenn Sie Tomcat aus der Distribution nutzen, läuft der Dienst unter einer dafür eingerichteten Systemkennung. Bei Ubuntu liegt das webapps-Verzeichnis üblicherweise unter &amp;lt;code&amp;gt;/var/lib/tomcat10/webapps&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hinweis|Standardmäßig hat der Tomcat-Dienstbenutzer keine Login-Shell. Dies sollte aus Sicherheitsgründen so bleiben.}}&lt;br /&gt;
Sie können das Verzeichnis der Webanwendungen auch ändern, indem Sie in der Datei &amp;lt;code&amp;gt;/etc/tomcat10/server.xml&amp;lt;/code&amp;gt; beim Element &amp;lt;code&amp;gt;Host&amp;lt;/code&amp;gt; das Attribut &amp;lt;code&amp;gt;appBase&amp;lt;/code&amp;gt; anpassen, z.B.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Host name=&amp;quot;localhost&amp;quot; appBase=&amp;quot;/home/superx/webserver/tomcat/webapps&amp;quot;&lt;br /&gt;
      unpackWARs=&amp;quot;true&amp;quot; autoDeploy=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Beachten Sie, dass der Tomcat-Dienstbenutzer Lese- und Ausführungsrechte auf den gesamten benötigten Verzeichnispfad benötigt. Schreibrechte sollten nur für tatsächlich beschreibbare Verzeichnisse vergeben werden, etwa für temporäre Dateien oder SuperX-Logdateien. Auf gemeinsam verwendeten Verzeichnissen kann die Gruppenberechtigung entsprechend angepasst werden.&lt;br /&gt;
Wenn Sie als User &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; neue Dateien anlegen und eine gemeinsam verwendete Gruppe eingerichtet haben, kann eine passende umask helfen:&lt;br /&gt;
 # Full access to user and group, none for others:&lt;br /&gt;
 umask u=rwx,g=rwx,o=&lt;br /&gt;
Die konkrete Gruppenkennung und die Eigentümerschaft richten sich nach der Installation. Beachten Sie auch die Hinweise für [[#Tomcat_und_Kettle|Tomcat und Kettle]].&lt;br /&gt;
&lt;br /&gt;
==Tomcat und Kettle==&lt;br /&gt;
Im Homeverzeichnis des Benutzers, unter dem Tomcat läuft, sollte das Verzeichnis &amp;lt;code&amp;gt;.kettle&amp;lt;/code&amp;gt; mit der Datei &amp;lt;code&amp;gt;kettle.properties&amp;lt;/code&amp;gt; angelegt werden. Die Datei kann zunächst leer sein. Ermitteln Sie zuerst das Homeverzeichnis des Tomcat-Benutzers, z.B. mit&lt;br /&gt;
 getent passwd tomcat&lt;br /&gt;
Liegt dieses bei Ubuntu unter &amp;lt;code&amp;gt;/var/lib/tomcat10&amp;lt;/code&amp;gt;, können Sie als root Folgendes ausführen:&lt;br /&gt;
 install -d -o tomcat -g tomcat /var/lib/tomcat10/.kettle&lt;br /&gt;
 touch /var/lib/tomcat10/.kettle/kettle.properties&lt;br /&gt;
 chown tomcat:tomcat /var/lib/tomcat10/.kettle/kettle.properties&lt;br /&gt;
{{Hinweis|Bei einer Distributionsaktualisierung sollte geprüft werden, ob das Homeverzeichnis des Tomcat-Benutzers weiterhin korrekt gesetzt ist.}}&lt;br /&gt;
&lt;br /&gt;
=Tomcat manuell installieren=&lt;br /&gt;
Sie können auch spezielle Versionen von [https://tomcat.apache.org Tomcat] herunterladen und installieren. Oder Sie verwenden den im SuperX-Kernmodul mitgelieferten Tomcat. Speicherort ist z.B. &amp;lt;code&amp;gt;/home/superx/webserver/tomcat&amp;lt;/code&amp;gt;.&lt;br /&gt;
Bei einer Neuinstallation bzw. einem Versionswechsel sollten Sie die Konfiguration der neuen Tomcat-Version als Ausgangspunkt verwenden. Kopieren Sie nicht einfach die kompletten alten Verzeichnisse &amp;lt;code&amp;gt;bin&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;lib&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;conf&amp;lt;/code&amp;gt; darüber. Auch bisher benötigte Zusatzbibliotheken und Java-Optionen müssen auf Kompatibilität geprüft werden.&lt;br /&gt;
&lt;br /&gt;
==Tomcat als Dienst==&lt;br /&gt;
Damit Tomcat beim Systemstart automatisch hochfährt und beim Herunterfahren kontrolliert gestoppt wird, kann man einen systemd-Dienst anlegen. Im Beispiel liegt SuperX unter &amp;lt;code&amp;gt;/home/superx&amp;lt;/code&amp;gt; und Tomcat wird vom Benutzer &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; gestartet. Für eine Installation aus der Linux-Distribution ist der Dienst in der Regel bereits vorhanden.&lt;br /&gt;
&lt;br /&gt;
===Service-Scripte===&lt;br /&gt;
Zunächst legen wir als User &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; im Verzeichnis &amp;lt;code&amp;gt;tomcat/bin&amp;lt;/code&amp;gt; zwei Dateien an.&lt;br /&gt;
&amp;lt;code&amp;gt;startup_service.x&amp;lt;/code&amp;gt;:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # Startup script for Apache Tomcat with systemd&lt;br /&gt;
 set -e&lt;br /&gt;
 # Load the service settings&lt;br /&gt;
 . /home/superx/db/bin/SQL_ENV&lt;br /&gt;
 export CATALINA_BASE=/home/superx/webserver/tomcat&lt;br /&gt;
 export CATALINA_HOME=/home/superx/webserver/tomcat&lt;br /&gt;
 export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp&lt;br /&gt;
 # Start Tomcat&lt;br /&gt;
 cd &amp;quot;$CATALINA_BASE&amp;quot; &amp;amp;&amp;amp; exec &amp;quot;$CATALINA_HOME/bin/catalina.sh&amp;quot; run&lt;br /&gt;
und &amp;lt;code&amp;gt;shutdown_service.x&amp;lt;/code&amp;gt;:&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # Shutdown script for Apache Tomcat with systemd&lt;br /&gt;
 set -e&lt;br /&gt;
 # Load the service settings&lt;br /&gt;
 . /home/superx/db/bin/SQL_ENV&lt;br /&gt;
 export CATALINA_BASE=/home/superx/webserver/tomcat&lt;br /&gt;
 export CATALINA_HOME=/home/superx/webserver/tomcat&lt;br /&gt;
 export CATALINA_TMPDIR=/home/superx/webserver/tomcat/temp&lt;br /&gt;
 # Stop Tomcat&lt;br /&gt;
 cd &amp;quot;$CATALINA_BASE&amp;quot; &amp;amp;&amp;amp; exec &amp;quot;$CATALINA_HOME/bin/catalina.sh&amp;quot; stop&lt;br /&gt;
In der Datei &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; sollten die für Tomcat benötigten Umgebungsvariablen, insbesondere &amp;lt;code&amp;gt;JAVA_HOME&amp;lt;/code&amp;gt; für Java 21 und die Java-Optionen, korrekt gesetzt bzw. exportiert werden. Der Pfad zu Java ist von der Distribution abhängig.&lt;br /&gt;
&lt;br /&gt;
===Dienst einrichten===&lt;br /&gt;
Legen Sie als User root die Datei &amp;lt;code&amp;gt;/etc/systemd/system/tomcat_superx.service&amp;lt;/code&amp;gt; an, mit dem Inhalt:&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Tomcat SuperX&lt;br /&gt;
 After=network.target&lt;br /&gt;
&lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=simple&lt;br /&gt;
 User=superx&lt;br /&gt;
 Group=users&lt;br /&gt;
 WorkingDirectory=/home/superx/webserver/tomcat/bin&lt;br /&gt;
 ExecStart=/bin/bash /home/superx/webserver/tomcat/bin/startup_service.x&lt;br /&gt;
 ExecStop=/bin/bash /home/superx/webserver/tomcat/bin/shutdown_service.x&lt;br /&gt;
&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
Die Gruppe &amp;lt;code&amp;gt;users&amp;lt;/code&amp;gt; ist hier nur ein Beispiel und muss gegebenenfalls angepasst werden. Der Eintrag &amp;lt;code&amp;gt;EnvironmentFile=/home/superx/db/bin/SQL_ENV&amp;lt;/code&amp;gt; wird nicht benötigt, da die Skripte die &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; bereits als Bash-Skript einlesen. systemd kann unter &amp;lt;code&amp;gt;EnvironmentFile&amp;lt;/code&amp;gt; keine beliebigen Bash-Befehle ausführen.&lt;br /&gt;
Den Dienst aktivieren und starten Sie mit&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl enable tomcat_superx&lt;br /&gt;
 systemctl start tomcat_superx&lt;br /&gt;
Den Status und die Logmeldungen können Sie prüfen mit&lt;br /&gt;
 systemctl status tomcat_superx&lt;br /&gt;
 journalctl -u tomcat_superx -e&lt;br /&gt;
Wenn Sie die Service-Datei ändern, müssen Sie danach &amp;lt;code&amp;gt;systemctl daemon-reload&amp;lt;/code&amp;gt; ausführen. Den Dienst deaktivieren Sie mit&lt;br /&gt;
 systemctl disable tomcat_superx&lt;br /&gt;
{{Achtung|Ein Fallstrick: Wenn die &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; komplexe Bash-Kommandos enthält oder für einen systemd-Dienst ungeeignete Einstellungen setzt, kann der Dienststart scheitern. In diesem Fall kann eine separate, vereinfachte &amp;lt;code&amp;gt;TOMCAT_ENV&amp;lt;/code&amp;gt; sinnvoll sein, die von den Startskripten eingelesen wird.}}&lt;br /&gt;
Für mögliche SELinux-Probleme bei Shell-Skripten in systemd-Diensten siehe [[Kern_Installation_Upgrade#SELinux_(Security-Enhanced_Linux)|SELinux im SuperX-Installationshandbuch]].&lt;br /&gt;
&lt;br /&gt;
=Tomcat Logging=&lt;br /&gt;
==Tomcat Logging mit systemd==&lt;br /&gt;
Je nach Installationsart erscheinen Tomcat-Meldungen im systemd-Journal oder in Dateien unter &amp;lt;code&amp;gt;$CATALINA_BASE/logs&amp;lt;/code&amp;gt;. Bei einem manuell installierten Tomcat kann z.B. die Datei &amp;lt;code&amp;gt;catalina.out&amp;lt;/code&amp;gt; vorhanden sein. Bei der Ubuntu-Distributionsinstallation sollte auch das systemd-Journal geprüft werden.&lt;br /&gt;
Alle Journalmeldungen anzeigen:&lt;br /&gt;
 journalctl&lt;br /&gt;
Die Meldungen eines bestimmten Tomcat-Dienstes anzeigen, z.B.:&lt;br /&gt;
 journalctl -u tomcat10 -e&lt;br /&gt;
 journalctl -u tomcat_superx -e&lt;br /&gt;
Die Meldungen live verfolgen:&lt;br /&gt;
 journalctl -u tomcat10 -f&lt;br /&gt;
{{Hinweis|Ab SuperX 5.1 bzw. HISinOne-BI 2023.12 werden SuperX-spezifische Logmeldungen in der Datei &amp;lt;code&amp;gt;$CATALINA_BASE/logs/superx.log&amp;lt;/code&amp;gt; ausgegeben. Je nach Fehlerbild sind sowohl diese Datei als auch die Tomcat-/systemd-Meldungen relevant.}}&lt;br /&gt;
&lt;br /&gt;
=Apache Anbindung=&lt;br /&gt;
In Systemumgebungen, in denen bereits ein Webserver wie Apache läuft, bietet es sich an, den SuperX-Tomcat mit dem Webserver zu verbinden. Der Webserver kann so konfiguriert werden, dass Aufrufe zu &amp;lt;code&amp;gt;https://superx.example.de/superx/&amp;lt;/code&amp;gt; an Tomcat weitergeleitet werden. Dadurch müssen die internen Tomcat-Ports nicht nach außen freigegeben werden. Die HTTPS-Verschlüsselung und die Zertifikatsverwaltung können vom Apache übernommen werden. Wir empfehlen daher generell die Anbindung von Tomcat an Apache für einen Produktivbetrieb.&lt;br /&gt;
Für die Verbindung zwischen Apache und Tomcat gibt es verschiedene Möglichkeiten:&lt;br /&gt;
* &#039;&#039;&#039;HTTP über Port 8080 mit ProxyPass (empfohlen)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;AJP über Port 8009 mit ProxyPass (Alternative)&#039;&#039;&#039;&lt;br /&gt;
* Mod-JK für bestehende Installationen&lt;br /&gt;
Wenn Apache und Tomcat auf demselben Server laufen, sollten die internen Connectoren nur an &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt; gebunden werden. Bei getrennten Servern muss die Verbindung über ein vertrauenswürdiges und entsprechend geschütztes Netzwerk erfolgen.&lt;br /&gt;
&lt;br /&gt;
==ProxyPass über HTTP (Port 8080)==&lt;br /&gt;
Wir empfehlen die HTTP-Anbindung über &amp;lt;code&amp;gt;mod_proxy&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;mod_proxy_http&amp;lt;/code&amp;gt;. Sie ist einfach zu konfigurieren, verwendet das übliche HTTP-Protokoll und benötigt keinen AJP-Connector. AJP bietet zusätzliche Zugriffsmöglichkeiten auf Tomcat-interne Informationen und benötigt deshalb besondere Absicherung. HTTP über localhost ist damit bei gleicher Zugangsbeschränkung die einfacher zu betreibende Variante. Der interne HTTP-Verkehr ist dabei nicht verschlüsselt; dieses Beispiel gilt deshalb für Apache und Tomcat auf demselben Server.&lt;br /&gt;
Unter Ubuntu aktivieren Sie die benötigten Apache-Module mit&lt;br /&gt;
 a2enmod proxy proxy_http ssl&lt;br /&gt;
&lt;br /&gt;
===Tomcat konfigurieren===&lt;br /&gt;
In der &amp;lt;code&amp;gt;server.xml&amp;lt;/code&amp;gt; (bei Ubuntu &amp;lt;code&amp;gt;/etc/tomcat10/server.xml&amp;lt;/code&amp;gt;) richten Sie den HTTP-Connector ein:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Connector port=&amp;quot;8080&amp;quot; protocol=&amp;quot;HTTP/1.1&amp;quot;&lt;br /&gt;
           address=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
           connectionTimeout=&amp;quot;20000&amp;quot;&lt;br /&gt;
           URIEncoding=&amp;quot;UTF-8&amp;quot;&lt;br /&gt;
           proxyName=&amp;quot;superx.example.de&amp;quot;&lt;br /&gt;
           proxyPort=&amp;quot;443&amp;quot;&lt;br /&gt;
           scheme=&amp;quot;https&amp;quot;&lt;br /&gt;
           secure=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Der Wert &amp;lt;code&amp;gt;proxyName&amp;lt;/code&amp;gt; muss dem öffentlich verwendeten Hostnamen entsprechen. Die Angaben &amp;lt;code&amp;gt;proxyPort=&amp;quot;443&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scheme=&amp;quot;https&amp;quot;&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;secure=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; teilen Tomcat mit, dass die Anwender die Webanwendung über HTTPS am Apache aufrufen. Diese Konfiguration ist für eine ausschließlich über HTTPS erreichbare SuperX-Anwendung mit einem festen öffentlichen Hostnamen gedacht.&lt;br /&gt;
&lt;br /&gt;
===Apache konfigurieren===&lt;br /&gt;
Im Apache-VirtualHost für HTTPS (unter Ubuntu z.B. in &amp;lt;code&amp;gt;/etc/apache2/sites-available/superx.conf&amp;lt;/code&amp;gt;) ergänzen Sie die Weiterleitung:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName superx.example.de&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/superx.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/superx.key&lt;br /&gt;
    ProxyRequests Off&lt;br /&gt;
    ProxyPass &amp;quot;/superx&amp;quot; &amp;quot;http://127.0.0.1:8080/superx&amp;quot;&lt;br /&gt;
    ProxyPassReverse &amp;quot;/superx&amp;quot; &amp;quot;http://127.0.0.1:8080/superx&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Zertifikatspfade sind Beispiele. Bestehende VirtualHosts werden entsprechend ergänzt; die SSL-Konfiguration muss nicht doppelt angelegt werden. &amp;lt;code&amp;gt;ProxyPass&amp;lt;/code&amp;gt; leitet die Anfragen an Tomcat weiter, &amp;lt;code&amp;gt;ProxyPassReverse&amp;lt;/code&amp;gt; passt bestimmte vom Backend gelieferte HTTP-Weiterleitungen an. URLs, die eine Webanwendung direkt in HTML erzeugt, werden dadurch nicht automatisch korrigiert.&lt;br /&gt;
Nach den Änderungen prüfen Sie die Konfiguration und starten die Dienste neu:&lt;br /&gt;
 apache2ctl configtest&lt;br /&gt;
 systemctl restart tomcat10&lt;br /&gt;
 systemctl reload apache2&lt;br /&gt;
Der Dienstname muss gegebenenfalls an die eigene Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
===Falsche localhost-Adressen in DBForms bzw. HTML-Ausgaben===&lt;br /&gt;
Wenn die öffentliche SuperX-Adresse über HTTPS aufgerufen wird, Tomcat intern aber nur den HTTP-Aufruf über &amp;lt;code&amp;gt;localhost:8080&amp;lt;/code&amp;gt; erkennt, können Webanwendungen fehlerhafte absolute URLs erzeugen. Das kann z.B. bei DBForms zu einem solchen HTML-Eintrag führen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;base href=&amp;quot;http://localhost:8080/superx/&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Der Browser des Anwenders versucht dann, Ressourcen von seinem eigenen Rechner (&amp;lt;code&amp;gt;localhost&amp;lt;/code&amp;gt;) zu laden. Bilder, Skripte oder Verweise funktionieren deshalb gegebenenfalls nicht. Mit den oben beschriebenen Connector-Attributen &amp;lt;code&amp;gt;proxyName&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;proxyPort&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scheme&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;secure&amp;lt;/code&amp;gt; kann Tomcat den korrekten öffentlichen Servernamen und das HTTPS-Schema an die Webanwendung melden.&lt;br /&gt;
{{Hinweis|Das Element &amp;lt;code&amp;gt;&amp;amp;lt;Host name=&amp;quot;localhost&amp;quot;&amp;amp;gt;&amp;lt;/code&amp;gt; in der Tomcat-&amp;lt;code&amp;gt;server.xml&amp;lt;/code&amp;gt; bezeichnet einen virtuellen Tomcat-Host und muss dafür nicht in den öffentlichen DNS-Namen umbenannt werden. Entscheidend sind die für den Proxy verwendeten Connector-Einstellungen.}}&lt;br /&gt;
Wenn mehrere öffentliche Hostnamen oder unterschiedliche Zugriffsschemata benötigt werden, reicht ein fest eingetragener &amp;lt;code&amp;gt;proxyName&amp;lt;/code&amp;gt; gegebenenfalls nicht aus. Dann kann eine Konfiguration mit vertrauenswürdigen Proxy-Headern und der Tomcat-&amp;lt;code&amp;gt;RemoteIpValve&amp;lt;/code&amp;gt; sinnvoll sein. Der Proxy muss solche Header kontrolliert setzen; unkontrolliert vom Client übernommene Header sind aus Sicherheitsgründen ungeeignet.&lt;br /&gt;
&lt;br /&gt;
==ProxyPass über AJP (Port 8009)==&lt;br /&gt;
Alternativ kann die Verbindung über das AJP-Protokoll erfolgen. Dafür benötigen Sie beim Apache das Modul &amp;lt;code&amp;gt;mod_proxy_ajp&amp;lt;/code&amp;gt; und auf Tomcat-Seite einen AJP-Connector. AJP ist weiterhin unterstützt, sollte aber nur in einem vertrauenswürdigen Netzwerk oder lokal verwendet werden. Das Secret schützt vor unberechtigten AJP-Verbindungen, verschlüsselt die Übertragung jedoch nicht.&lt;br /&gt;
Unter Ubuntu aktivieren Sie das Modul mit&lt;br /&gt;
 a2enmod proxy proxy_ajp&lt;br /&gt;
In der Tomcat-&amp;lt;code&amp;gt;server.xml&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Connector protocol=&amp;quot;AJP/1.3&amp;quot;&lt;br /&gt;
           address=&amp;quot;127.0.0.1&amp;quot;&lt;br /&gt;
           port=&amp;quot;8009&amp;quot;&lt;br /&gt;
           secretRequired=&amp;quot;true&amp;quot;&lt;br /&gt;
           secret=&amp;quot;HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN&amp;quot;&lt;br /&gt;
           URIEncoding=&amp;quot;UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Im Apache-VirtualHost wird anstelle der HTTP-Weiterleitung die AJP-Weiterleitung verwendet:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
ProxyPass &amp;quot;/superx&amp;quot; &amp;quot;ajp://127.0.0.1:8009/superx&amp;quot; secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Beide Secrets müssen übereinstimmen und dürfen nicht als öffentliche Beispielwerte übernommen werden. Der Parameter &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt; bei &amp;lt;code&amp;gt;ProxyPass&amp;lt;/code&amp;gt; ist ab Apache 2.4.42 verfügbar. Auf beiden Seiten sollte die Konfiguration vor unberechtigtem Zugriff geschützt werden. Eine parallele HTTP- und AJP-Weiterleitung für denselben Pfad ist nicht erforderlich.&lt;br /&gt;
Wenn Apache auf einem separaten Server läuft, muss statt &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt; die geeignete interne IP-Adresse des Tomcat-Servers verwendet werden. Zusätzlich müssen Firewall und Netzabsicherung passend konfiguriert werden.&lt;br /&gt;
Weitere Details siehe [https://tomcat.apache.org/tomcat-10.1-doc/config/ajp.html Tomcat AJP Connector].&lt;br /&gt;
&lt;br /&gt;
==Mod-JK==&lt;br /&gt;
Das Apache-Modul &amp;lt;code&amp;gt;mod_jk&amp;lt;/code&amp;gt; wird weiterhin für bestehende AJP-Installationen unterstützt. Für neue SuperX-Installationen empfehlen wir jedoch die oben beschriebene Anbindung über &amp;lt;code&amp;gt;ProxyPass&amp;lt;/code&amp;gt;. Unter Ubuntu können Sie Mod-JK bei Bedarf installieren und aktivieren mit&lt;br /&gt;
 apt-get install -y libapache2-mod-jk&lt;br /&gt;
 a2enmod jk&lt;br /&gt;
Der AJP-Connector in Tomcat benötigt dieselben Sicherheitsvorgaben wie bei &amp;lt;code&amp;gt;mod_proxy_ajp&amp;lt;/code&amp;gt;. In der &amp;lt;code&amp;gt;workers.properties&amp;lt;/code&amp;gt; wird der Worker z.B. so eingerichtet:&lt;br /&gt;
 worker.list=superx_tomcat&lt;br /&gt;
 worker.superx_tomcat.type=ajp13&lt;br /&gt;
 worker.superx_tomcat.host=127.0.0.1&lt;br /&gt;
 worker.superx_tomcat.port=8009&lt;br /&gt;
 worker.superx_tomcat.secret=HIER_EIN_LANGES_ZUFAELLIGES_SECRET_EINTRAGEN&lt;br /&gt;
Die Weiterleitung kann in der Apache-Konfiguration so erfolgen:&lt;br /&gt;
 JkMount /superx/* superx_tomcat&lt;br /&gt;
 JkMount /superx superx_tomcat&lt;br /&gt;
{{Hinweis|Falls bereits eine Mod-JK-Konfiguration aus dem SuperX-Kernmodul verwendet wird, können Sie diese weiter pflegen. Alte Beispielkonfigurationen mit einem ungeschützten AJP-Port oder unnötigen Apache-Dateisystem-Aliases sollten jedoch nicht unverändert übernommen werden.}}&lt;br /&gt;
&lt;br /&gt;
==Apache und Tomcat Sicherheit==&lt;br /&gt;
Für den Produktivbetrieb empfehlen wir folgende Grundeinstellungen:&lt;br /&gt;
* HTTPS wird nach außen am Apache bereitgestellt. Die internen Ports 8080 bzw. 8009 werden nicht über die öffentliche Firewall freigegeben.&lt;br /&gt;
* Bei Betrieb auf demselben Server werden die Tomcat-Connectoren an &amp;lt;code&amp;gt;127.0.0.1&amp;lt;/code&amp;gt; gebunden.&lt;br /&gt;
* Nicht benötigte Connectoren werden in der &amp;lt;code&amp;gt;server.xml&amp;lt;/code&amp;gt; deaktiviert.&lt;br /&gt;
* Bei AJP wird ein eigenes, langes Secret verwendet; AJP sollte nicht über ungeschützte Netze betrieben werden.&lt;br /&gt;
* Der Tomcat-Dienst läuft ohne Root-Rechte. Konfigurationsdateien und die Webanwendung erhalten nur die benötigten Dateirechte.&lt;br /&gt;
* Apache, Tomcat und Java werden regelmäßig mit Sicherheitsupdates versorgt.&lt;br /&gt;
* Bei SELinux-bedingten Verbindungsproblemen oder Problemen mit systemd-Shell-Skripten siehe [[Kern_Installation_Upgrade#SELinux_(Security-Enhanced_Linux)|SELinux (Security-Enhanced Linux) im SuperX-Installationshandbuch]].&lt;br /&gt;
Weitere Tipps zur Tomcat-Sicherheit siehe [https://tomcat.apache.org/tomcat-10.1-doc/security-howto.html Tomcat Security How-To].&lt;br /&gt;
&lt;br /&gt;
=Einrichtung SSL=&lt;br /&gt;
==SSL Varianten==&lt;br /&gt;
Sie können SSL/TLS direkt in Tomcat einrichten, normalerweise wird die Verschlüsselung aber im [[#SSL_im_Webserver|Webserver]] konfiguriert. Bei einer Apache-Tomcat-Anbindung empfehlen wir, HTTPS beim Apache zu beenden und den internen Tomcat-Connector nur lokal erreichbar zu machen.&lt;br /&gt;
&lt;br /&gt;
==SSL im Webserver==&lt;br /&gt;
Unter Ubuntu benötigen Sie das Apache-Modul &amp;lt;code&amp;gt;ssl&amp;lt;/code&amp;gt;. Es kann aktiviert werden mit&lt;br /&gt;
 a2enmod ssl&lt;br /&gt;
Im HTTPS-VirtualHost wird das Zertifikat eingebunden, z.B.:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
    ServerName superx.example.de&lt;br /&gt;
    SSLEngine on&lt;br /&gt;
    SSLCertificateFile /etc/ssl/certs/superx.crt&lt;br /&gt;
    SSLCertificateKeyFile /etc/ssl/private/superx.key&lt;br /&gt;
    # Weitere Einstellungen, z.B. die ProxyPass-Anbindung, siehe oben.&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Zertifikat und Schlüssel müssen zum öffentlichen Hostnamen passen. Die Datei mit dem privaten Schlüssel darf nur von berechtigten Systembenutzern gelesen werden. Die tatsächlich verwendeten Pfade richten sich nach der Zertifikatsverwaltung vor Ort.&lt;br /&gt;
Wenn zusätzlich Zugriffe auf Port 80 auf HTTPS umgeleitet werden sollen, kann ein eigener VirtualHost verwendet werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerName superx.example.de&lt;br /&gt;
    Redirect permanent / https://superx.example.de/&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Die Apache-Konfiguration prüfen und neu laden:&lt;br /&gt;
 apache2ctl configtest&lt;br /&gt;
 systemctl reload apache2&lt;br /&gt;
&lt;br /&gt;
===Zertifikate mit Let&#039;s Encrypt===&lt;br /&gt;
Wenn der Server die Voraussetzungen für eine öffentliche ACME-Zertifikatsprüfung erfüllt, können Sie z.B. Let&#039;s Encrypt in Verbindung mit Certbot verwenden. Unter Ubuntu stehen dafür passende Pakete bereit:&lt;br /&gt;
 apt-get install -y certbot python3-certbot-apache&lt;br /&gt;
Die konkrete Ausstellung, Einrichtung und automatische Verlängerung hängen davon ab, ob der Webserver öffentlich erreichbar ist und welche Zertifikatsverwaltung die Hochschule einsetzt. Weitere Informationen siehe [https://certbot.eff.org/ Certbot] und [https://letsencrypt.org/de/ Let&#039;s Encrypt].&lt;br /&gt;
&lt;br /&gt;
==SSL im Tomcat==&lt;br /&gt;
Falls kein vorgeschalteter Apache-Webserver vorhanden ist, kann Tomcat HTTPS auch direkt bereitstellen. In Tomcat 10.1 wird die TLS-Konfiguration über &amp;lt;code&amp;gt;SSLHostConfig&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;Certificate&amp;lt;/code&amp;gt; vorgenommen. Beispiel mit vorhandenem PKCS12-Keystore:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Connector port=&amp;quot;8443&amp;quot; protocol=&amp;quot;HTTP/1.1&amp;quot; SSLEnabled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;SSLHostConfig&amp;gt;&lt;br /&gt;
        &amp;lt;Certificate certificateKeystoreFile=&amp;quot;/home/superx/tomcat-keystore.p12&amp;quot;&lt;br /&gt;
                     certificateKeystoreType=&amp;quot;PKCS12&amp;quot;&lt;br /&gt;
                     certificateKeystorePassword=&amp;quot;HIER_DAS_KEYSTORE_PASSWORT&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SSLHostConfig&amp;gt;&lt;br /&gt;
&amp;lt;/Connector&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Der Keystore muss ein zum öffentlichen Hostnamen passendes Zertifikat und den privaten Schlüssel enthalten. Das Passwort im Beispiel muss durch einen eigenen sicheren Wert ersetzt und entsprechend geschützt werden. Bei direkt von außen erreichbarem Tomcat muss außerdem Port 8443 entsprechend abgesichert werden.&lt;br /&gt;
Eine ausführliche Anleitung zum Erzeugen bzw. Einbinden von Zertifikaten steht in der [https://tomcat.apache.org/tomcat-10.1-doc/ssl-howto.html offiziellen Tomcat-10.1-Dokumentation].&lt;br /&gt;
&lt;br /&gt;
=Wechsel von Tomcat 9 auf Tomcat 10=&lt;br /&gt;
Mit Tomcat 10 wurden die Java-EE-Schnittstellen auf Jakarta EE umgestellt. Insbesondere wurden viele Paketnamen von &amp;lt;code&amp;gt;javax.*&amp;lt;/code&amp;gt; nach &amp;lt;code&amp;gt;jakarta.*&amp;lt;/code&amp;gt; geändert. Eine für Tomcat 9 bereitgestellte Webanwendung kann deshalb nicht ohne Weiteres mit Tomcat 10 verwendet werden. Für das SuperX-Kernmodul 6.0 empfehlen wir Tomcat 10.1 und Java 21.&lt;br /&gt;
Für den Versionswechsel muss insbesondere geprüft werden, ob die SuperX-Webanwendung und zusätzlich eingesetzte Bibliotheken für Tomcat 10 geeignet sind. Die Konfiguration der neuen Tomcat-Version sollte als Grundlage verwendet werden; die bisherigen Konfigurationsdateien sollten nicht vollständig übernommen werden. Auch bestehende Java-Optionen sowie die Apache-Anbindung müssen geprüft werden.&lt;br /&gt;
{{Hinweis|Der Wechsel von Tomcat 9 auf Tomcat 10 wird wegen der umfangreicheren Umstellung in einem separaten Migrationsleitfaden behandelt. Bis dahin siehe [https://tomcat.apache.org/migration.html offizielle Tomcat-Migrationshinweise].}}&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16838</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16838"/>
		<updated>2026-10-02T06:21:12Z</updated>

		<summary type="html">&lt;p&gt;Andrek: SuperX Pfade angepasst&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&lt;br /&gt;
[[image:logobutton_maintenance2b.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==Ziel und Überblick==&lt;br /&gt;
Die hier bereitgestellten Skripte ermöglichen es, in der BI-Umgebung von HISinOne und in Zukunft auch von SuperX (aktuell können die Scripte in SuperX leider noch nicht verwendet werden) Modul-Updates und -Upgrades zuverlässig über die Shell auszuführen – automatisiert per Cronjob oder manuell.  Sie orientieren sich bewusst am bisherigen Vorgehen aus SuperX, wurden jedoch erweitert:&lt;br /&gt;
&lt;br /&gt;
* Ausführung der BI-Modul-Updates/-Upgrades über Java (&#039;&#039;ComponentAdminCLI&#039;&#039;).&lt;br /&gt;
* Vollständige Protokollierung in Logdateien.&lt;br /&gt;
* Optional: Protokollierung der Läufe in der Tabelle &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Automatischer Mailversand über ein konfigurierbares Mailprogramm.&lt;br /&gt;
* Optional: Erkennen interner Fehler im Batch-Job (auch wenn Java Exitcode 0 liefert).&lt;br /&gt;
* Möglichkeit, Logdateien automatisch an Mails anzuhängen (erfolgreiche und fehlerhafte Module).&lt;br /&gt;
&lt;br /&gt;
==Installation aus dem git Repository==&lt;br /&gt;
&lt;br /&gt;
Führen Sie folgenden Shell-Befehl aus:&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
&lt;br /&gt;
Die weitere Konfiguration wird im Folgenden beschrieben. Alle Einstellungen erfolgen zentral in der Datei &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;, die als Template &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; ausgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
==Umgebungsvariablen in der BI_ENV==&lt;br /&gt;
&lt;br /&gt;
===BI_ENV.sam – Template und lokale BI_ENV===&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; wird als Muster ausgeliefert. &lt;br /&gt;
&lt;br /&gt;
Sie muss vor Ort:&lt;br /&gt;
&lt;br /&gt;
# in &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; kopiert/umbenannt werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp BI_ENV.sam BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# an die lokalen Gegebenheiten angepasst werden (Pfade, Module, Mailadressen usw.).&lt;br /&gt;
# mit restriktiven Rechten versehen werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Skripte binden diese Datei später mit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /home/superx/git/BI_Maintenance/env/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Bedeutung der Variablen===&lt;br /&gt;
Im Folgenden die wichtigsten Variablen, die angepasst werden müssen.&lt;br /&gt;
&lt;br /&gt;
====Java-Konfiguration====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
export JAVA_HOME&lt;br /&gt;
&lt;br /&gt;
JRE_HOME=$JAVA_HOME&lt;br /&gt;
export JRE_HOME&lt;br /&gt;
&lt;br /&gt;
PATH=$JAVA_HOME/bin:$PATH&lt;br /&gt;
export PATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Variablen stellen sicher, dass die BI-Jobs mit dem vorgesehenen Java (empfohlen: Java 17) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Java-Optionen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;-Xmx1520M -Djava.awt.headless=true ... --add-opens ...&amp;quot;&lt;br /&gt;
export JAVA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pfade zur SuperX-BI-Installation====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/home/superx/webapps/superx&lt;br /&gt;
export WEBAPP&lt;br /&gt;
&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
export SUPERX_DIR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Pfade müssen an lokale Tomcat-Installation und SuperX-Verzeichnisstruktur angepasst werden.&lt;br /&gt;
&lt;br /&gt;
====Modulsteuerung====&lt;br /&gt;
Für die Update- und Upgrade-Skripte werden die zu bearbeitenden Module festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export BI_UPDATE_MODULES=&amp;quot;sos kenn zul&amp;quot;&lt;br /&gt;
export BI_UPGRADE_MODULES=&amp;quot;kenn&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis:  &lt;br /&gt;
Die Modulkürzel müssen klein geschrieben sein (z. B. &amp;lt;code&amp;gt;sos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kenn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;zul&amp;lt;/code&amp;gt;) und mit Leerzeichen getrennt aufgelistet werden.&lt;br /&gt;
&lt;br /&gt;
====Logging====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LOGPFAD=$WEBAPP/WEB-INF/logs&lt;br /&gt;
export LOGPFAD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Logpfad werden u. a. folgende Dateien erzeugt:&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_update.log&amp;lt;/code&amp;gt; – Sammellog des Updates&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_upgrade.log&amp;lt;/code&amp;gt; – Sammellog des Upgrades&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_update.log&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_upgrade.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Java-Batch-Jobs erzeugen ergänzende Logs in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Mailversand====&lt;br /&gt;
Folgende Variablen steuern Empfänger und Format der Benachrichtigungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export ERRORMAIL=&amp;quot;admin@hs.de&amp;quot;&lt;br /&gt;
export LOGMAIL=&amp;quot;$ERRORMAIL&amp;quot;&lt;br /&gt;
#export LOGMAIL=&amp;quot;admin@hs.de kollege@hs.de&amp;quot;   # mehrere Empfänger möglich&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ERRORMAIL&amp;lt;/code&amp;gt; – Empfänger für Fehlermails  &lt;br /&gt;
* &amp;lt;code&amp;gt;LOGMAIL&amp;lt;/code&amp;gt; – Empfänger für Erfolgs- und Statusmails  &lt;br /&gt;
Mehrere Adressen werden per Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Mailprogramm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAILPROG=&amp;quot;s-nail --account=test1 -S ttycharset=utf-8 -S sendcharset=utf-8&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Betreffzeilen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAIL_BETREFF_UPDATE=&amp;quot;BI Job Update&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_UPGRADE=&amp;quot;BI Job Upgrade&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_ERFOLGREICH=&amp;quot; - Erfolgreich&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_FEHLER=&amp;quot; - Fehler&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Datei:Kernmodul Regelbetrieb Mailversand.png|rand|links]]&lt;br /&gt;
&lt;br /&gt;
So könnten die Mails aussehen.&lt;br /&gt;
&lt;br /&gt;
====Steuerung der Log-Anhänge====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# error  = Logs nur bei Fehlern anhängen&lt;br /&gt;
# always = Logs immer anhängen (Erfolg + Fehler)&lt;br /&gt;
export MAIL_ATTACH_LOGS_MODE=&amp;quot;error&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optionale Prüfung der Modul-Logs====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# true  = zusätzlich Modul-Log auf interne Fehler prüfen&lt;br /&gt;
# false = nur Exitcode des Java-Calls verwenden&lt;br /&gt;
export CHECK_JOBLOG_FOR_ERRORS=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gerade bei dem Java Aufruf von ComponentAdminCLI empfehlenswert, da dieser aktuell noch trotz &amp;lt;code&amp;gt;status: FAILED&amp;lt;/code&amp;gt; oft Exitcode 0 liefert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Updates=&lt;br /&gt;
&lt;br /&gt;
==modules_update.sh – Hauptskript==&lt;br /&gt;
Dieses Skript führt alle Module aus &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; nacheinander aus.&lt;br /&gt;
&lt;br /&gt;
Ablauf:&lt;br /&gt;
&lt;br /&gt;
# Startcheck: Sind &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LOGPFAD&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; gesetzt?&lt;br /&gt;
# Falls verfügbar: DB-Protokollierung via &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Für jedes Modul:&lt;br /&gt;
## Logdatei anlegen&lt;br /&gt;
## Start in &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt; protokollieren (update_id = -10000)&lt;br /&gt;
## Java-Update starten:  &lt;br /&gt;
   &amp;lt;code&amp;gt;ComponentAdminCLI -e &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
## Optional: Modul-Logdatei nach internen Fehlern durchsuchen&lt;br /&gt;
## Erfolg:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;SUCCESS_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10000)&lt;br /&gt;
## Fehler:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;ERROR_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10001)&lt;br /&gt;
## Zuletzt: Java-Joblogs aus &amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt; ermitteln&lt;br /&gt;
&lt;br /&gt;
# Nach Abschluss aller Module:&lt;br /&gt;
## Erfolgs- oder Fehlermail versenden&lt;br /&gt;
## Anhänge abhängig von &amp;lt;code&amp;gt;MAIL_ATTACH_LOGS_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==modules_update_cron.sh – Wrapper für die automatische Ausführung==&lt;br /&gt;
Damit Updates regelmäßig durchgeführt werden können, existiert ein einfaches Wrapper-Skript. Dieses kann sowohl über einen klassischen Cronjob als auch über einen systemd-Service gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Vorgehen:&lt;br /&gt;
&lt;br /&gt;
# Beispieldatei kopieren:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp modules_update_cron.sh.sam modules_update_cron.sh&lt;br /&gt;
chmod +x modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Pfade zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;, zum Update-Skript und zur Logdatei anpassen.&lt;br /&gt;
&lt;br /&gt;
Inhaltlich:&lt;br /&gt;
* Laden der &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
* Start des Skripts &amp;lt;code&amp;gt;modules_update.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Umleitung der Ausgabe in die konfigurierte Logdatei&lt;br /&gt;
&lt;br /&gt;
===Ausführung über Cron===&lt;br /&gt;
Für die regelmäßige Ausführung kann beispielsweise ein Cronjob eingerichtet werden, der das Update werktags um 18 Uhr startet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
0 18 * * 1-5 /home/superx/git/BI_Maintenance/update/modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Cronjob sollte unter dem Benutzer ausgeführt werden, unter dem auch die BI-Installation betrieben wird, üblicherweise &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Ausführung über systemd===&lt;br /&gt;
Alternativ zum klassischen Cronjob kann die Laderoutine über einen systemd-Service und einen systemd-Timer ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
update/systemd/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden hierfür die beiden Beispieldateien&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
superx_update.service&lt;br /&gt;
superx_update.timer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Der Service führt das Wrapper-Skript &amp;lt;code&amp;gt;modules_update_cron.sh&amp;lt;/code&amp;gt; unter dem Benutzer &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
&lt;br /&gt;
Beispiel &amp;lt;code&amp;gt;superx_update.service&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=SuperX BI Laderoutine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
User=superx&lt;br /&gt;
Group=superx&lt;br /&gt;
WorkingDirectory=/home/superx&lt;br /&gt;
ExecStart=/bin/bash /home/superx/git/BI_Maintenance/update/modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Pfade sowie Benutzer und Gruppe müssen bei Bedarf an die lokale Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Durch den expliziten Aufruf über &amp;lt;code&amp;gt;/bin/bash&amp;lt;/code&amp;gt; können insbesondere auf Systemen mit SELinux Probleme bei der direkten Ausführung von Skripten aus Benutzerverzeichnissen vermieden werden.&lt;br /&gt;
&lt;br /&gt;
Der zugehörige Timer legt fest, wann der Service gestartet wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel &amp;lt;code&amp;gt;superx_update.timer&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Timer für SuperX BI Laderoutine&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=Mon..Fri *-*-* 18:00:00&lt;br /&gt;
Unit=superx_update.service&lt;br /&gt;
&lt;br /&gt;
# Optional:&lt;br /&gt;
# Verpassten Lauf nach Server-Neustart nachholen:&lt;br /&gt;
# Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Beispiel wird die Laderoutine montags bis freitags jeweils um 18 Uhr ausgeführt. Der Zeitplan kann über &amp;lt;code&amp;gt;OnCalendar&amp;lt;/code&amp;gt; an die lokalen Anforderungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Die beiden Dateien werden nach &amp;lt;code&amp;gt;/etc/systemd/system&amp;lt;/code&amp;gt; kopiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp systemd/superx_update.service /etc/systemd/system/&lt;br /&gt;
cp systemd/superx_update.timer /etc/systemd/system/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die systemd-Konfiguration neu eingelesen und der Timer aktiviert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now superx_update.timer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Status des Timers und die nächste geplante Ausführung können anschließend geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status superx_update.timer&lt;br /&gt;
systemctl list-timers --all | grep superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service kann unabhängig vom Timer auch manuell gestartet und geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start superx_update.service&lt;br /&gt;
systemctl status superx_update.service&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;lt;code&amp;gt;superx_update.service&amp;lt;/code&amp;gt; selbst muss nicht mit &amp;lt;code&amp;gt;systemctl enable&amp;lt;/code&amp;gt; aktiviert werden. Er wird bei Bedarf durch den Timer gestartet.&lt;br /&gt;
&lt;br /&gt;
Optional kann im Timer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Persistent=true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gesetzt werden. In diesem Fall holt systemd einen verpassten Lauf nach, beispielsweise wenn der Server zum geplanten Ausführungszeitpunkt ausgeschaltet war. Ob dieses Verhalten gewünscht ist, sollte für die jeweilige Installation entschieden werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Upgrades=&lt;br /&gt;
&lt;br /&gt;
==modules_upgrade.sh – Hauptskript==&lt;br /&gt;
Das Upgrade-Skript entspricht dem Update-Skript, unterscheidet sich aber in folgenden Punkten:&lt;br /&gt;
&lt;br /&gt;
* Es wird **manuell** ausgeführt – kein Cronjob vorgesehen.&lt;br /&gt;
* Es verwendet &amp;lt;code&amp;gt;BI_UPGRADE_MODULES&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Das eigentliche Upgrade erfolgt über:  &lt;br /&gt;
  &amp;lt;code&amp;gt;ComponentAdminCLI -u &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nach Abschluss des Upgrades erfolgt ein Mailversand analog zum Update-Skript.&lt;br /&gt;
&lt;br /&gt;
Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /home/superx/git/BI_Maintenance/upgrade&lt;br /&gt;
./modules_upgrade.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorher muss zu Beginn des Skripts der Pfad zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; eingetragen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /home/superx/git/BI_Maintenance/env/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Modulverwaltung=&lt;br /&gt;
&lt;br /&gt;
==Modulkürzel==&lt;br /&gt;
Die folgenden Modulkürzel sind in einer typischen BI-Installation relevant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 kuerzel |                         name                          &lt;br /&gt;
---------+-------------------------------------------------------&lt;br /&gt;
 astat   | Amtliche Statistik                                &lt;br /&gt;
 bau     | Gebäude, Räume, Flächen                           &lt;br /&gt;
 cob     | Kostenrechnung                                    &lt;br /&gt;
 erfolg  | Studienverlauf                                    &lt;br /&gt;
 fin     | Finanzrechnung                                    &lt;br /&gt;
 gang    | Studiengänge                                      &lt;br /&gt;
 ivs     | Inventar                                          &lt;br /&gt;
 kenn    | Kennzahlen                                        &lt;br /&gt;
 kern    | Administration                                    &lt;br /&gt;
 lm      | Leistungsmonitoring                               &lt;br /&gt;
 man     | Management                                        &lt;br /&gt;
 prom    | Promovierende                                     &lt;br /&gt;
 res     | Forschung                                         &lt;br /&gt;
 sos     | Studierende, Prüfungen                            &lt;br /&gt;
 sva     | Personal, Stellen                                 &lt;br /&gt;
 zul     | Bewerbung, Zulassung                              &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die aktiven Module der eigenen Installation können mit folgendem SQL abgefragt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT V.his_system AS kuerzel,&lt;br /&gt;
       S.name&lt;br /&gt;
  FROM db_version V&lt;br /&gt;
  JOIN systeminfo S&lt;br /&gt;
    ON S.tid = V.systeminfo_id&lt;br /&gt;
 ORDER BY 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
Das bereitgestellte Migrationsskript ermöglicht die Umstellung einer bestehenden SuperX-Installation auf die empfohlene Webapp-Struktur.&lt;br /&gt;
&lt;br /&gt;
Dabei können sowohl klassische Installationen mit separatem DB-Verzeichnis als auch bestehende Webapp-Installationen migriert werden. Die Migration kann je nach Anwendungsfall vollständig oder ausschließlich für das DB-Verzeichnis durchgeführt werden.&lt;br /&gt;
Hier eine Anleitung &amp;quot;in short&amp;quot;, wenn Sie bisher das &amp;quot;klasssische&amp;quot; Layout genutzt haben (also Unix Benutzer &amp;quot;superx&amp;quot;, Installation in &amp;quot;/home/superx&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
 #Script ausführen und neues ENV laden:&lt;br /&gt;
 cd BI_Maintenance/webapps_migration&lt;br /&gt;
 ./migrate_superx_webapp.sh&lt;br /&gt;
&lt;br /&gt;
Das Skript liest die bestehende Installation anhand der vorhandenen SQL_ENV-Datei ein und erzeugt daraus die gewünschte Zielstruktur. Details können in der Konfigurationsdatei &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
konfiguriert, siehe folgende Dokumentation.&lt;br /&gt;
&lt;br /&gt;
==Zielstruktur==&lt;br /&gt;
&lt;br /&gt;
Die Webapp wird standardmäßig nicht direkt im Tomcat-Webapp-Verzeichnis abgelegt, sondern unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch bleibt die Installation unabhängig von der verwendeten Tomcat-Distribution und kann einfacher per Git, rsync oder Modulupdate gepflegt werden.&lt;br /&gt;
&lt;br /&gt;
Die zugehörige DB-Struktur befindet sich anschließend unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx/WEB-INF/conf/edustore/db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Anbindung==&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff des Tomcat-Servers auf die Webapp gibt es grundsätzlich zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* Verwendung eines symbolischen Links vom Tomcat-Webapp-Verzeichnis auf die eigentliche Webapp.&lt;br /&gt;
* Anpassung der Tomcat-Konfiguration (z. B. appBase oder Context-Konfiguration).&lt;br /&gt;
&lt;br /&gt;
Empfohlen wird die Verwendung eines symbolischen Links.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/srv/tomcat/webapps/superx&lt;br /&gt;
 -&amp;gt; /home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wichtige Variablen==&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen erfolgen in der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TARGET_WEBAPP===&lt;br /&gt;
&lt;br /&gt;
Definiert das Zielverzeichnis der Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Owner: superx&lt;br /&gt;
Group: tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE===&lt;br /&gt;
&lt;br /&gt;
Steuert die Art der Migration.&lt;br /&gt;
&lt;br /&gt;
Vollständige Migration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur Migration des DB-Verzeichnisses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Migration des DB-Verzeichnisses==&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis kann entweder kopiert oder verschoben werden.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=copy===&lt;br /&gt;
&lt;br /&gt;
Das bestehende DB-Verzeichnis bleibt erhalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür rsync verwendet.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=move===&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis wird verschoben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür mv verwendet. Ist das Zielverzeichnis bereits vorhanden und&lt;br /&gt;
&amp;lt;code&amp;gt;ALLOW_EXISTING_TARGET_DB=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; gesetzt, wird das vorhandene Ziel-DB-Verzeichnis vor dem Verschieben vollständig ersetzt. Damit verbleiben keine alten Dateien im Ziel.&lt;br /&gt;
&lt;br /&gt;
Dies ist der empfohlene Standard für die Migration klassischer SuperX-Installationen und vermeidet unnötigen zusätzlichen Speicherbedarf.&lt;br /&gt;
&lt;br /&gt;
==Automatische Anpassung der SQL_ENV==&lt;br /&gt;
&lt;br /&gt;
Nach der Migration kann die SQL_ENV-Datei automatisch angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden insbesondere folgende Variablen aktualisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_DIR&lt;br /&gt;
WEBAPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird sichergestellt, dass folgende Einstellung vorhanden ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umask 002&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor der Änderung wird automatisch eine Sicherungskopie der SQL_ENV-Datei angelegt.&lt;br /&gt;
&lt;br /&gt;
==Benutzer und Gruppen==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Variablen steuern, welchem Benutzer und welcher Gruppe die Ziel-Webapp nach der Migration zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle Dateien und Verzeichnisse der Ziel-Webapp werden diesem Benutzer zugeordnet, sofern die Rechteverwaltung aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Gruppe wird für alle Dateien und Verzeichnisse der Ziel-Webapp verwendet.&lt;br /&gt;
&lt;br /&gt;
Durch das gesetzte setgid-Bit auf den Verzeichnissen erben neu angelegte Dateien und Unterverzeichnisse automatisch diese Gruppe.&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Migration kann sowohl als root als auch – unter bestimmten Voraussetzungen – direkt als Anwendungsbenutzer ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=auto===&lt;br /&gt;
&lt;br /&gt;
Dies ist die empfohlene Standardeinstellung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript entscheidet abhängig vom aktuellen Benutzer automatisch, ob ein Besitzerwechsel erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als root====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript als root ausgeführt, werden Besitzer und Gruppe der Ziel-Webapp auf die konfigurierten Werte gesetzt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $WEBAPP_USER:$WEBAPP_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird auch das übergeordnete Verzeichnis der Webapp (z. B. /home/superx/webapps) auf die gleichen Besitz- und Gruppenrechte gesetzt.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als WEBAPP_USER====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript direkt als der konfigurierte WEBAPP_USER ausgeführt und ist dieser Benutzer Mitglied der konfigurierten WEBAPP_GROUP, wird kein chown ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Stattdessen verwendet das Skript bei Bedarf ein chgrp, um die Gruppenzugehörigkeit der Dateien anzupassen.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall kann die Migration häufig vollständig ohne root-Rechte durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als anderer Benutzer====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript weder als root noch als WEBAPP_USER mit passender Gruppenmitgliedschaft ausgeführt, bricht das Skript mit einer entsprechenden Fehlermeldung ab.&lt;br /&gt;
&lt;br /&gt;
===ADD_WEBAPP_USER_TO_GROUP===&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript die Gruppenmitgliedschaft des Zielbenutzers automatisch anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ADD_WEBAPP_USER_TO_GROUP=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierfür sind root-Rechte erforderlich.&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Symlink==&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript den Symlink für den Tomcat automatisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
===CREATE_TOMCAT_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_WEBAPPS_DIR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_WEBAPPS_DIR=&amp;quot;/srv/tomcat/webapps&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_CONTEXT_NAME===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_CONTEXT_NAME=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===REPLACE_EXISTING_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
Bestehende Symlinks können bei Bedarf automatisch ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPLACE_EXISTING_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normale Dateien oder Verzeichnisse werden dabei niemals automatisch gelöscht.&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsprüfungen==&lt;br /&gt;
&lt;br /&gt;
Vor Beginn der Migration werden verschiedene Sicherheitsprüfungen durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Unter anderem wird geprüft:&lt;br /&gt;
&lt;br /&gt;
* Existiert die SQL_ENV-Datei?&lt;br /&gt;
* Existiert der konfigurierte Benutzer?&lt;br /&gt;
* Existiert die konfigurierte Gruppe?&lt;br /&gt;
* Sind Quell- und Zielverzeichnis identisch?&lt;br /&gt;
* Würde eine Verzeichnisverschachtelung entstehen?&lt;br /&gt;
* Befindet sich SUPERX_DIR bereits innerhalb von WEBAPP?&lt;br /&gt;
&lt;br /&gt;
Wird erkannt, dass die Installation bereits der neuen Struktur entspricht, bricht das Skript standardmäßig ab.&lt;br /&gt;
&lt;br /&gt;
===FORCE_ALREADY_MIGRATED===&lt;br /&gt;
&lt;br /&gt;
In Ausnahmefällen kann diese Prüfung übersteuert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FORCE_ALREADY_MIGRATED=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte nur verwendet werden, wenn die Auswirkungen bekannt sind.&lt;br /&gt;
&lt;br /&gt;
==Typischer Ablauf==&lt;br /&gt;
&lt;br /&gt;
# Laden der migrate_superx.conf&lt;br /&gt;
# Laden der bestehenden SQL_ENV&lt;br /&gt;
# Ermitteln von SUPERX_DIR, WEBAPP und DB-Verzeichnis&lt;br /&gt;
# Sicherheitsprüfungen&lt;br /&gt;
# Optionales Stoppen des Tomcat-Dienstes&lt;br /&gt;
# Kopieren der Webapp&lt;br /&gt;
# Kopieren oder Verschieben des DB-Verzeichnisses&lt;br /&gt;
# Anpassen der SQL_ENV&lt;br /&gt;
# Setzen von Besitzern, Gruppen und Rechten&lt;br /&gt;
# Optionales Erzeugen des Tomcat-Symlinks&lt;br /&gt;
# Optionales Starten des Tomcat-Dienstes&lt;br /&gt;
&lt;br /&gt;
==Empfohlene Standardkonfiguration==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
* Standardziel ist /home/superx/webapps/superx.&lt;br /&gt;
* Die Tomcat-Anbindung kann über einen Symlink erfolgen.&lt;br /&gt;
* Bei WEBAPP_USER=superx und WEBAPP_GROUP=tomcat kann die Migration häufig ohne root erfolgen, sofern der Benutzer Mitglied der Gruppe tomcat ist.&lt;br /&gt;
* Root wird nur benötigt, wenn Besitzer geändert, Benutzer oder Gruppen angepasst oder Systemkonfigurationen verändert werden müssen.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16837</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16837"/>
		<updated>2026-10-01T15:11:55Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Module Updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&lt;br /&gt;
[[image:logobutton_maintenance2b.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==Ziel und Überblick==&lt;br /&gt;
Die hier bereitgestellten Skripte ermöglichen es, in der BI-Umgebung von HISinOne und in Zukunft auch von SuperX (aktuell können die Scripte in SuperX leider noch nicht verwendet werden) Modul-Updates und -Upgrades zuverlässig über die Shell auszuführen – automatisiert per Cronjob oder manuell.  Sie orientieren sich bewusst am bisherigen Vorgehen aus SuperX, wurden jedoch erweitert:&lt;br /&gt;
&lt;br /&gt;
* Ausführung der BI-Modul-Updates/-Upgrades über Java (&#039;&#039;ComponentAdminCLI&#039;&#039;).&lt;br /&gt;
* Vollständige Protokollierung in Logdateien.&lt;br /&gt;
* Optional: Protokollierung der Läufe in der Tabelle &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Automatischer Mailversand über ein konfigurierbares Mailprogramm.&lt;br /&gt;
* Optional: Erkennen interner Fehler im Batch-Job (auch wenn Java Exitcode 0 liefert).&lt;br /&gt;
* Möglichkeit, Logdateien automatisch an Mails anzuhängen (erfolgreiche und fehlerhafte Module).&lt;br /&gt;
&lt;br /&gt;
==Installation aus dem git Repository==&lt;br /&gt;
&lt;br /&gt;
Führen Sie folgenden Shell-Befehl aus:&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
&lt;br /&gt;
Die weitere Konfiguration wird im Folgenden beschrieben. Alle Einstellungen erfolgen zentral in der Datei &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;, die als Template &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; ausgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
==Umgebungsvariablen in der BI_ENV==&lt;br /&gt;
&lt;br /&gt;
===BI_ENV.sam – Template und lokale BI_ENV===&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; wird als Muster ausgeliefert. &lt;br /&gt;
&lt;br /&gt;
Sie muss vor Ort:&lt;br /&gt;
&lt;br /&gt;
# in &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; kopiert/umbenannt werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp BI_ENV.sam BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# an die lokalen Gegebenheiten angepasst werden (Pfade, Module, Mailadressen usw.).&lt;br /&gt;
# mit restriktiven Rechten versehen werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Skripte binden diese Datei später mit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /pfad/zu/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Bedeutung der Variablen===&lt;br /&gt;
Im Folgenden die wichtigsten Variablen, die angepasst werden müssen.&lt;br /&gt;
&lt;br /&gt;
====Java-Konfiguration====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
export JAVA_HOME&lt;br /&gt;
&lt;br /&gt;
JRE_HOME=$JAVA_HOME&lt;br /&gt;
export JRE_HOME&lt;br /&gt;
&lt;br /&gt;
PATH=$JAVA_HOME/bin:$PATH&lt;br /&gt;
export PATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Variablen stellen sicher, dass die BI-Jobs mit dem vorgesehenen Java (empfohlen: Java 17) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Java-Optionen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;-Xmx1520M -Djava.awt.headless=true ... --add-opens ...&amp;quot;&lt;br /&gt;
export JAVA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pfade zur SuperX-BI-Installation====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
export WEBAPP&lt;br /&gt;
&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
export SUPERX_DIR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Pfade müssen an lokale Tomcat-Installation und SuperX-Verzeichnisstruktur angepasst werden.&lt;br /&gt;
&lt;br /&gt;
====Modulsteuerung====&lt;br /&gt;
Für die Update- und Upgrade-Skripte werden die zu bearbeitenden Module festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export BI_UPDATE_MODULES=&amp;quot;sos kenn zul&amp;quot;&lt;br /&gt;
export BI_UPGRADE_MODULES=&amp;quot;kenn&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis:  &lt;br /&gt;
Die Modulkürzel müssen klein geschrieben sein (z. B. &amp;lt;code&amp;gt;sos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kenn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;zul&amp;lt;/code&amp;gt;) und mit Leerzeichen getrennt aufgelistet werden.&lt;br /&gt;
&lt;br /&gt;
====Logging====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LOGPFAD=$WEBAPP/WEB-INF/logs&lt;br /&gt;
export LOGPFAD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Logpfad werden u. a. folgende Dateien erzeugt:&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_update.log&amp;lt;/code&amp;gt; – Sammellog des Updates&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_upgrade.log&amp;lt;/code&amp;gt; – Sammellog des Upgrades&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_update.log&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_upgrade.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Java-Batch-Jobs erzeugen ergänzende Logs in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Mailversand====&lt;br /&gt;
Folgende Variablen steuern Empfänger und Format der Benachrichtigungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export ERRORMAIL=&amp;quot;admin@hs.de&amp;quot;&lt;br /&gt;
export LOGMAIL=&amp;quot;$ERRORMAIL&amp;quot;&lt;br /&gt;
#export LOGMAIL=&amp;quot;admin@hs.de kollege@hs.de&amp;quot;   # mehrere Empfänger möglich&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ERRORMAIL&amp;lt;/code&amp;gt; – Empfänger für Fehlermails  &lt;br /&gt;
* &amp;lt;code&amp;gt;LOGMAIL&amp;lt;/code&amp;gt; – Empfänger für Erfolgs- und Statusmails  &lt;br /&gt;
Mehrere Adressen werden per Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Mailprogramm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAILPROG=&amp;quot;s-nail --account=test1 -S ttycharset=utf-8 -S sendcharset=utf-8&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Betreffzeilen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAIL_BETREFF_UPDATE=&amp;quot;BI Job Update&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_UPGRADE=&amp;quot;BI Job Upgrade&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_ERFOLGREICH=&amp;quot; - Erfolgreich&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_FEHLER=&amp;quot; - Fehler&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Datei:Kernmodul Regelbetrieb Mailversand.png|rand|links]]&lt;br /&gt;
&lt;br /&gt;
So könnten die Mails aussehen.&lt;br /&gt;
&lt;br /&gt;
====Steuerung der Log-Anhänge====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# error  = Logs nur bei Fehlern anhängen&lt;br /&gt;
# always = Logs immer anhängen (Erfolg + Fehler)&lt;br /&gt;
export MAIL_ATTACH_LOGS_MODE=&amp;quot;error&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optionale Prüfung der Modul-Logs====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# true  = zusätzlich Modul-Log auf interne Fehler prüfen&lt;br /&gt;
# false = nur Exitcode des Java-Calls verwenden&lt;br /&gt;
export CHECK_JOBLOG_FOR_ERRORS=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gerade bei dem Java Aufruf von ComponentAdminCLI empfehlenswert, da dieser aktuell noch trotz &amp;lt;code&amp;gt;status: FAILED&amp;lt;/code&amp;gt; oft Exitcode 0 liefert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Updates=&lt;br /&gt;
&lt;br /&gt;
==modules_update.sh – Hauptskript==&lt;br /&gt;
Dieses Skript führt alle Module aus &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; nacheinander aus.&lt;br /&gt;
&lt;br /&gt;
Ablauf:&lt;br /&gt;
&lt;br /&gt;
# Startcheck: Sind &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LOGPFAD&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; gesetzt?&lt;br /&gt;
# Falls verfügbar: DB-Protokollierung via &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Für jedes Modul:&lt;br /&gt;
## Logdatei anlegen&lt;br /&gt;
## Start in &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt; protokollieren (update_id = -10000)&lt;br /&gt;
## Java-Update starten:  &lt;br /&gt;
   &amp;lt;code&amp;gt;ComponentAdminCLI -e &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
## Optional: Modul-Logdatei nach internen Fehlern durchsuchen&lt;br /&gt;
## Erfolg:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;SUCCESS_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10000)&lt;br /&gt;
## Fehler:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;ERROR_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10001)&lt;br /&gt;
## Zuletzt: Java-Joblogs aus &amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt; ermitteln&lt;br /&gt;
&lt;br /&gt;
# Nach Abschluss aller Module:&lt;br /&gt;
## Erfolgs- oder Fehlermail versenden&lt;br /&gt;
## Anhänge abhängig von &amp;lt;code&amp;gt;MAIL_ATTACH_LOGS_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==modules_update_cron.sh – Wrapper für die automatische Ausführung==&lt;br /&gt;
Damit Updates regelmäßig durchgeführt werden können, existiert ein einfaches Wrapper-Skript. Dieses kann sowohl über einen klassischen Cronjob als auch über einen systemd-Service gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Vorgehen:&lt;br /&gt;
&lt;br /&gt;
# Beispieldatei kopieren:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp modules_update_cron.sh.sam modules_update_cron.sh&lt;br /&gt;
chmod +x modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Pfade zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;, zum Update-Skript und zur Logdatei anpassen.&lt;br /&gt;
&lt;br /&gt;
Inhaltlich:&lt;br /&gt;
* Laden der &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
* Start des Skripts &amp;lt;code&amp;gt;modules_update.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
* Umleitung der Ausgabe in die konfigurierte Logdatei&lt;br /&gt;
&lt;br /&gt;
===Ausführung über Cron===&lt;br /&gt;
Für die regelmäßige Ausführung kann beispielsweise ein Cronjob eingerichtet werden, der das Update werktags um 18 Uhr startet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
0 18 * * 1-5 /pfad/zu/modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Cronjob sollte unter dem Benutzer ausgeführt werden, unter dem auch die BI-Installation betrieben wird, üblicherweise &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Ausführung über systemd===&lt;br /&gt;
Alternativ zum klassischen Cronjob kann die Laderoutine über einen systemd-Service und einen systemd-Timer ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Im Verzeichnis&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
update/systemd/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
werden hierfür die beiden Beispieldateien&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
superx_update.service&lt;br /&gt;
superx_update.timer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bereitgestellt.&lt;br /&gt;
&lt;br /&gt;
Der Service führt das Wrapper-Skript &amp;lt;code&amp;gt;modules_update_cron.sh&amp;lt;/code&amp;gt; unter dem Benutzer &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; aus.&lt;br /&gt;
&lt;br /&gt;
Beispiel &amp;lt;code&amp;gt;superx_update.service&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=SuperX BI Laderoutine&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
User=superx&lt;br /&gt;
Group=superx&lt;br /&gt;
WorkingDirectory=/home/superx&lt;br /&gt;
ExecStart=/bin/bash /var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/update/modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Pfade sowie Benutzer und Gruppe müssen bei Bedarf an die lokale Installation angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Durch den expliziten Aufruf über &amp;lt;code&amp;gt;/bin/bash&amp;lt;/code&amp;gt; können insbesondere auf Systemen mit SELinux Probleme bei der direkten Ausführung von Skripten aus Benutzerverzeichnissen vermieden werden.&lt;br /&gt;
&lt;br /&gt;
Der zugehörige Timer legt fest, wann der Service gestartet wird.&lt;br /&gt;
&lt;br /&gt;
Beispiel &amp;lt;code&amp;gt;superx_update.timer&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Timer für SuperX BI Laderoutine&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=Mon..Fri *-*-* 18:00:00&lt;br /&gt;
Unit=superx_update.service&lt;br /&gt;
&lt;br /&gt;
# Optional:&lt;br /&gt;
# Verpassten Lauf nach Server-Neustart nachholen:&lt;br /&gt;
# Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Beispiel wird die Laderoutine montags bis freitags jeweils um 18 Uhr ausgeführt. Der Zeitplan kann über &amp;lt;code&amp;gt;OnCalendar&amp;lt;/code&amp;gt; an die lokalen Anforderungen angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Die beiden Dateien werden nach &amp;lt;code&amp;gt;/etc/systemd/system&amp;lt;/code&amp;gt; kopiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp systemd/superx_update.service /etc/systemd/system/&lt;br /&gt;
cp systemd/superx_update.timer /etc/systemd/system/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend wird die systemd-Konfiguration neu eingelesen und der Timer aktiviert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl enable --now superx_update.timer&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Status des Timers und die nächste geplante Ausführung können anschließend geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl status superx_update.timer&lt;br /&gt;
systemctl list-timers --all | grep superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Service kann unabhängig vom Timer auch manuell gestartet und geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start superx_update.service&lt;br /&gt;
systemctl status superx_update.service&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;lt;code&amp;gt;superx_update.service&amp;lt;/code&amp;gt; selbst muss nicht mit &amp;lt;code&amp;gt;systemctl enable&amp;lt;/code&amp;gt; aktiviert werden. Er wird bei Bedarf durch den Timer gestartet.&lt;br /&gt;
&lt;br /&gt;
Optional kann im Timer&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
Persistent=true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gesetzt werden. In diesem Fall holt systemd einen verpassten Lauf nach, beispielsweise wenn der Server zum geplanten Ausführungszeitpunkt ausgeschaltet war. Ob dieses Verhalten gewünscht ist, sollte für die jeweilige Installation entschieden werden.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Upgrades=&lt;br /&gt;
&lt;br /&gt;
==modules_upgrade.sh – Hauptskript==&lt;br /&gt;
Das Upgrade-Skript entspricht dem Update-Skript, unterscheidet sich aber in folgenden Punkten:&lt;br /&gt;
&lt;br /&gt;
* Es wird **manuell** ausgeführt – kein Cronjob vorgesehen.&lt;br /&gt;
* Es verwendet &amp;lt;code&amp;gt;BI_UPGRADE_MODULES&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Das eigentliche Upgrade erfolgt über:  &lt;br /&gt;
  &amp;lt;code&amp;gt;ComponentAdminCLI -u &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nach Abschluss des Upgrades erfolgt ein Mailversand analog zum Update-Skript.&lt;br /&gt;
&lt;br /&gt;
Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/update&lt;br /&gt;
./modules_upgrade.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorher muss zu Beginn des Skripts der Pfad zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; eingetragen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /pfad/zur/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Modulverwaltung=&lt;br /&gt;
&lt;br /&gt;
==Modulkürzel==&lt;br /&gt;
Die folgenden Modulkürzel sind in einer typischen BI-Installation relevant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 kuerzel |                         name                          &lt;br /&gt;
---------+-------------------------------------------------------&lt;br /&gt;
 astat   | Amtliche Statistik                                &lt;br /&gt;
 bau     | Gebäude, Räume, Flächen                           &lt;br /&gt;
 cob     | Kostenrechnung                                    &lt;br /&gt;
 erfolg  | Studienverlauf                                    &lt;br /&gt;
 fin     | Finanzrechnung                                    &lt;br /&gt;
 gang    | Studiengänge                                      &lt;br /&gt;
 ivs     | Inventar                                          &lt;br /&gt;
 kenn    | Kennzahlen                                        &lt;br /&gt;
 kern    | Administration                                    &lt;br /&gt;
 lm      | Leistungsmonitoring                               &lt;br /&gt;
 man     | Management                                        &lt;br /&gt;
 prom    | Promovierende                                     &lt;br /&gt;
 res     | Forschung                                         &lt;br /&gt;
 sos     | Studierende, Prüfungen                            &lt;br /&gt;
 sva     | Personal, Stellen                                 &lt;br /&gt;
 zul     | Bewerbung, Zulassung                              &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die aktiven Module der eigenen Installation können mit folgendem SQL abgefragt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT V.his_system AS kuerzel,&lt;br /&gt;
       S.name&lt;br /&gt;
  FROM db_version V&lt;br /&gt;
  JOIN systeminfo S&lt;br /&gt;
    ON S.tid = V.systeminfo_id&lt;br /&gt;
 ORDER BY 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
Das bereitgestellte Migrationsskript ermöglicht die Umstellung einer bestehenden SuperX-Installation auf die empfohlene Webapp-Struktur.&lt;br /&gt;
&lt;br /&gt;
Dabei können sowohl klassische Installationen mit separatem DB-Verzeichnis als auch bestehende Webapp-Installationen migriert werden. Die Migration kann je nach Anwendungsfall vollständig oder ausschließlich für das DB-Verzeichnis durchgeführt werden.&lt;br /&gt;
Hier eine Anleitung &amp;quot;in short&amp;quot;, wenn Sie bisher das &amp;quot;klasssische&amp;quot; Layout genutzt haben (also Unix Benutzer &amp;quot;superx&amp;quot;, Installation in &amp;quot;/home/superx&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
 #Script ausführen und neues ENV laden:&lt;br /&gt;
 cd BI_Maintenance/webapps_migration&lt;br /&gt;
 ./migrate_superx_webapp.sh&lt;br /&gt;
&lt;br /&gt;
Das Skript liest die bestehende Installation anhand der vorhandenen SQL_ENV-Datei ein und erzeugt daraus die gewünschte Zielstruktur. Details können in der Konfigurationsdatei &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
konfiguriert, siehe folgende Dokumentation.&lt;br /&gt;
&lt;br /&gt;
==Zielstruktur==&lt;br /&gt;
&lt;br /&gt;
Die Webapp wird standardmäßig nicht direkt im Tomcat-Webapp-Verzeichnis abgelegt, sondern unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch bleibt die Installation unabhängig von der verwendeten Tomcat-Distribution und kann einfacher per Git, rsync oder Modulupdate gepflegt werden.&lt;br /&gt;
&lt;br /&gt;
Die zugehörige DB-Struktur befindet sich anschließend unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx/WEB-INF/conf/edustore/db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Anbindung==&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff des Tomcat-Servers auf die Webapp gibt es grundsätzlich zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* Verwendung eines symbolischen Links vom Tomcat-Webapp-Verzeichnis auf die eigentliche Webapp.&lt;br /&gt;
* Anpassung der Tomcat-Konfiguration (z. B. appBase oder Context-Konfiguration).&lt;br /&gt;
&lt;br /&gt;
Empfohlen wird die Verwendung eines symbolischen Links.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/srv/tomcat/webapps/superx&lt;br /&gt;
 -&amp;gt; /home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wichtige Variablen==&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen erfolgen in der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TARGET_WEBAPP===&lt;br /&gt;
&lt;br /&gt;
Definiert das Zielverzeichnis der Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Owner: superx&lt;br /&gt;
Group: tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE===&lt;br /&gt;
&lt;br /&gt;
Steuert die Art der Migration.&lt;br /&gt;
&lt;br /&gt;
Vollständige Migration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur Migration des DB-Verzeichnisses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Migration des DB-Verzeichnisses==&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis kann entweder kopiert oder verschoben werden.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=copy===&lt;br /&gt;
&lt;br /&gt;
Das bestehende DB-Verzeichnis bleibt erhalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür rsync verwendet.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=move===&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis wird verschoben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür mv verwendet. Ist das Zielverzeichnis bereits vorhanden und&lt;br /&gt;
&amp;lt;code&amp;gt;ALLOW_EXISTING_TARGET_DB=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; gesetzt, wird das vorhandene Ziel-DB-Verzeichnis vor dem Verschieben vollständig ersetzt. Damit verbleiben keine alten Dateien im Ziel.&lt;br /&gt;
&lt;br /&gt;
Dies ist der empfohlene Standard für die Migration klassischer SuperX-Installationen und vermeidet unnötigen zusätzlichen Speicherbedarf.&lt;br /&gt;
&lt;br /&gt;
==Automatische Anpassung der SQL_ENV==&lt;br /&gt;
&lt;br /&gt;
Nach der Migration kann die SQL_ENV-Datei automatisch angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden insbesondere folgende Variablen aktualisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_DIR&lt;br /&gt;
WEBAPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird sichergestellt, dass folgende Einstellung vorhanden ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umask 002&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor der Änderung wird automatisch eine Sicherungskopie der SQL_ENV-Datei angelegt.&lt;br /&gt;
&lt;br /&gt;
==Benutzer und Gruppen==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Variablen steuern, welchem Benutzer und welcher Gruppe die Ziel-Webapp nach der Migration zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle Dateien und Verzeichnisse der Ziel-Webapp werden diesem Benutzer zugeordnet, sofern die Rechteverwaltung aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Gruppe wird für alle Dateien und Verzeichnisse der Ziel-Webapp verwendet.&lt;br /&gt;
&lt;br /&gt;
Durch das gesetzte setgid-Bit auf den Verzeichnissen erben neu angelegte Dateien und Unterverzeichnisse automatisch diese Gruppe.&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Migration kann sowohl als root als auch – unter bestimmten Voraussetzungen – direkt als Anwendungsbenutzer ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=auto===&lt;br /&gt;
&lt;br /&gt;
Dies ist die empfohlene Standardeinstellung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript entscheidet abhängig vom aktuellen Benutzer automatisch, ob ein Besitzerwechsel erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als root====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript als root ausgeführt, werden Besitzer und Gruppe der Ziel-Webapp auf die konfigurierten Werte gesetzt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $WEBAPP_USER:$WEBAPP_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird auch das übergeordnete Verzeichnis der Webapp (z. B. /home/superx/webapps) auf die gleichen Besitz- und Gruppenrechte gesetzt.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als WEBAPP_USER====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript direkt als der konfigurierte WEBAPP_USER ausgeführt und ist dieser Benutzer Mitglied der konfigurierten WEBAPP_GROUP, wird kein chown ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Stattdessen verwendet das Skript bei Bedarf ein chgrp, um die Gruppenzugehörigkeit der Dateien anzupassen.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall kann die Migration häufig vollständig ohne root-Rechte durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als anderer Benutzer====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript weder als root noch als WEBAPP_USER mit passender Gruppenmitgliedschaft ausgeführt, bricht das Skript mit einer entsprechenden Fehlermeldung ab.&lt;br /&gt;
&lt;br /&gt;
===ADD_WEBAPP_USER_TO_GROUP===&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript die Gruppenmitgliedschaft des Zielbenutzers automatisch anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ADD_WEBAPP_USER_TO_GROUP=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierfür sind root-Rechte erforderlich.&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Symlink==&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript den Symlink für den Tomcat automatisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
===CREATE_TOMCAT_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_WEBAPPS_DIR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_WEBAPPS_DIR=&amp;quot;/srv/tomcat/webapps&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_CONTEXT_NAME===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_CONTEXT_NAME=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===REPLACE_EXISTING_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
Bestehende Symlinks können bei Bedarf automatisch ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPLACE_EXISTING_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normale Dateien oder Verzeichnisse werden dabei niemals automatisch gelöscht.&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsprüfungen==&lt;br /&gt;
&lt;br /&gt;
Vor Beginn der Migration werden verschiedene Sicherheitsprüfungen durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Unter anderem wird geprüft:&lt;br /&gt;
&lt;br /&gt;
* Existiert die SQL_ENV-Datei?&lt;br /&gt;
* Existiert der konfigurierte Benutzer?&lt;br /&gt;
* Existiert die konfigurierte Gruppe?&lt;br /&gt;
* Sind Quell- und Zielverzeichnis identisch?&lt;br /&gt;
* Würde eine Verzeichnisverschachtelung entstehen?&lt;br /&gt;
* Befindet sich SUPERX_DIR bereits innerhalb von WEBAPP?&lt;br /&gt;
&lt;br /&gt;
Wird erkannt, dass die Installation bereits der neuen Struktur entspricht, bricht das Skript standardmäßig ab.&lt;br /&gt;
&lt;br /&gt;
===FORCE_ALREADY_MIGRATED===&lt;br /&gt;
&lt;br /&gt;
In Ausnahmefällen kann diese Prüfung übersteuert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FORCE_ALREADY_MIGRATED=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte nur verwendet werden, wenn die Auswirkungen bekannt sind.&lt;br /&gt;
&lt;br /&gt;
==Typischer Ablauf==&lt;br /&gt;
&lt;br /&gt;
# Laden der migrate_superx.conf&lt;br /&gt;
# Laden der bestehenden SQL_ENV&lt;br /&gt;
# Ermitteln von SUPERX_DIR, WEBAPP und DB-Verzeichnis&lt;br /&gt;
# Sicherheitsprüfungen&lt;br /&gt;
# Optionales Stoppen des Tomcat-Dienstes&lt;br /&gt;
# Kopieren der Webapp&lt;br /&gt;
# Kopieren oder Verschieben des DB-Verzeichnisses&lt;br /&gt;
# Anpassen der SQL_ENV&lt;br /&gt;
# Setzen von Besitzern, Gruppen und Rechten&lt;br /&gt;
# Optionales Erzeugen des Tomcat-Symlinks&lt;br /&gt;
# Optionales Starten des Tomcat-Dienstes&lt;br /&gt;
&lt;br /&gt;
==Empfohlene Standardkonfiguration==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
* Standardziel ist /home/superx/webapps/superx.&lt;br /&gt;
* Die Tomcat-Anbindung kann über einen Symlink erfolgen.&lt;br /&gt;
* Bei WEBAPP_USER=superx und WEBAPP_GROUP=tomcat kann die Migration häufig ohne root erfolgen, sofern der Benutzer Mitglied der Gruppe tomcat ist.&lt;br /&gt;
* Root wird nur benötigt, wenn Besitzer geändert, Benutzer oder Gruppen angepasst oder Systemkonfigurationen verändert werden müssen.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=SuperX_REST_Schnittstelle&amp;diff=16667</id>
		<title>SuperX REST Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=SuperX_REST_Schnittstelle&amp;diff=16667"/>
		<updated>2026-09-22T08:15:50Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Übersicht der wichtigsten Masken- und Berichtsaufrufe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=REST-Schnittstelle=&lt;br /&gt;
&lt;br /&gt;
Ab dem SuperX-Kernmodul 6.0 steht eine REST-Schnittstelle zur Verfügung, über die zentrale Funktionen von SuperX auch über Weboberflächen, Skripte und externe Anwendungen angesprochen werden können.&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle ergänzt die bestehenden SuperX-Funktionen. Vorhandene ETL-, Batch- und Maskenprozesse werden dabei nicht ersetzt, sondern über HTTP-Endpunkte zusätzlich erreichbar gemacht.&lt;br /&gt;
&lt;br /&gt;
Zu den wichtigsten Einsatzbereichen gehören:&lt;br /&gt;
&lt;br /&gt;
* Komponentenverwaltung und ETL-Jobs&lt;br /&gt;
* Status- und Protokollabfragen&lt;br /&gt;
* SuperX-Masken und deren Eingabefelder&lt;br /&gt;
* Ausführung von Masken und Abruf der Ergebnistabellen&lt;br /&gt;
* Export von Berichtsergebnissen&lt;br /&gt;
* Einbindung von SuperX-Funktionen in eigene Weboberflächen&lt;br /&gt;
&lt;br /&gt;
In den folgenden Beispielen wird diese Beispielinstallation verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einer eigenen Installation müssen lediglich Domain und gegebenenfalls der Kontextpfad angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlagen==&lt;br /&gt;
&lt;br /&gt;
Die REST-Endpunkte befinden sich unterhalb von:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Schnittstelle liefert überwiegend JSON zurück. Lesende Aufrufe werden in der Regel mit HTTP GET ausgeführt. Einige Funktionen benötigen HTTP POST, insbesondere das Ausführen von SuperX-Masken.&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle verwendet die normale SuperX-Authentifizierung. Wird sie aus einer bereits angemeldeten Browser-Sitzung aufgerufen, kann die vorhandene Session verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einrichtung und Voraussetzungen==&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle ist Bestandteil des Kernmoduls 6.0 und der SuperX-Webapp. Eine separate REST-Anwendung muss nicht installiert werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist zunächst eine grundsätzlich funktionierende SuperX-Installation:&lt;br /&gt;
&lt;br /&gt;
* die SuperX-Webapp ist über Tomcat erreichbar,&lt;br /&gt;
* die Datenbankverbindung funktioniert,&lt;br /&gt;
* ein aktueller Kernstand ist installiert,&lt;br /&gt;
* die benötigten Modulverzeichnisse sind eingebunden,&lt;br /&gt;
* die ETL- und Jobdefinitionen wurden eingelesen.&lt;br /&gt;
&lt;br /&gt;
===Aktuelles Kernpaket verwenden===&lt;br /&gt;
&lt;br /&gt;
Für die REST-Schnittstelle und die Komponentenverwaltung sollte ein aktuelles Kernpaket ab Kern 6.0 verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://super-ics.de/superx/dist/kern6.0b_superx_utf8_POSTGRES_patch.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einem Kern-Upgrade sollte darauf geachtet werden, dass keine veralteten Bibliotheken aus einem älteren Kernstand in &amp;lt;code&amp;gt;WEB-INF/lib&amp;lt;/code&amp;gt; liegen bleiben.&lt;br /&gt;
&lt;br /&gt;
Vor Änderungen sollten lokale Anpassungen und projektspezifische Konfigurationen gesichert werden.&lt;br /&gt;
&lt;br /&gt;
Nach einem Upgrade sollten insbesondere folgende Dateien geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/classes/spring-batch.properties&lt;br /&gt;
WEB-INF/classes/hikari.properties&lt;br /&gt;
WEB-INF/classes/quartz.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datenbankverbindung prüfen===&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle verwendet die Datenbankverbindung der Webapp. In der &amp;lt;code&amp;gt;dbforms-config.xml&amp;lt;/code&amp;gt; sollte der &amp;lt;code&amp;gt;SpringBeanConnectionProvider&amp;lt;/code&amp;gt; verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dbconnection connectionProviderClass=&amp;quot;de.superx.db.SpringBeanConnectionProvider&amp;quot;&lt;br /&gt;
              default=&amp;quot;true&amp;quot;&lt;br /&gt;
              id=&amp;quot;datasourceBean&amp;quot;&lt;br /&gt;
              isJndi=&amp;quot;false&amp;quot;&lt;br /&gt;
              isPow2=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn hier noch eine ältere oder projektspezifische Verbindungsdefinition verwendet wird, kann die REST-Schnittstelle zwar grundsätzlich erreichbar sein, aber beim Zugriff auf Komponenten, Jobs oder Masken fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
===module_ignore.properties prüfen===&lt;br /&gt;
&lt;br /&gt;
Für die Komponentenverwaltung muss folgende Datei vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/module_ignore.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielinhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ignore.modules=kennx,gxstage,bil&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlt die Datei, können beim Einlesen der Komponenten oder beim Aufruf der Komponentenliste Fehler auftreten.&lt;br /&gt;
&lt;br /&gt;
===Modulverzeichnisse bereitstellen===&lt;br /&gt;
&lt;br /&gt;
Die Komponentenverwaltung liest verfügbare Komponenten und ETL-Jobs aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modulverzeichnisse können direkt dort abgelegt oder per symbolischem Link eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP/WEB-INF/conf/edustore/db/module&lt;br /&gt;
ln -s $MODUL_VERZEICHNIS .&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Kern-ETL-Dateien prüfen===&lt;br /&gt;
&lt;br /&gt;
Für einzelne Funktionen der Komponentenverwaltung werden zusätzliche ETL-Dateien benötigt, insbesondere für das Entladen und Wiedereinspielen von Konfigurationen.&lt;br /&gt;
&lt;br /&gt;
Quellverzeichnis im SuperX-Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_GIT/superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zielverzeichnis in der Webapp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
$WEBAPP/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benötigte Dateien:&lt;br /&gt;
&lt;br /&gt;
* edustore_kern_man_unload_config_ids.xml&lt;br /&gt;
* edustore_kern_man_unload_config_pg.xml&lt;br /&gt;
* edustore_kern_man_upload_config_ids.xml&lt;br /&gt;
* edustore_kern_man_upload_config_pg.xml&lt;br /&gt;
&lt;br /&gt;
Falls diese Dateien im verwendeten Kernpaket noch fehlen, müssen sie aus dem SuperX-Git ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
===ETL-Steuerdaten einlesen===&lt;br /&gt;
&lt;br /&gt;
Nach Änderungen an Kern, Modulverzeichnissen oder Jobdefinitionen müssen die ETL-Steuerdaten neu eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP&lt;br /&gt;
java -classpath &amp;quot;./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*&amp;quot; \&lt;br /&gt;
  &amp;quot;de.superx.bin.ComponentAdminCLI&amp;quot; -r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; liest die Komponenten- und Jobdefinitionen neu ein.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann dafür auch der entsprechende REST-Endpunkt verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Einzelnen Job über die CLI testen===&lt;br /&gt;
&lt;br /&gt;
Wenn unklar ist, ob ein Fehler in der REST-Schnittstelle oder bereits in der ETL-Konfiguration liegt, kann ein einzelner Job testweise direkt über die CLI gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP&lt;br /&gt;
java -classpath &amp;quot;./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*&amp;quot; \&lt;br /&gt;
  &amp;quot;de.superx.bin.ComponentAdminCLI&amp;quot; -e hrstage_load_and_transform&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktioniert der Job bereits über die CLI nicht, sollten zunächst Moduldateien, Pfade, Datenbanktabellen und ETL-Konfiguration geprüft werden.&lt;br /&gt;
&lt;br /&gt;
===Tomcat neu starten===&lt;br /&gt;
&lt;br /&gt;
Nach Änderungen an Bibliotheken, Klassen, Spring-Konfigurationen oder Moduldateien sollte Tomcat neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart tomcat10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach Installation kann der Dienst auch anders heißen.&lt;br /&gt;
&lt;br /&gt;
===REST-Schnittstelle prüfen===&lt;br /&gt;
&lt;br /&gt;
Nach der Einrichtung sollten zunächst einfache Listenaufrufe getestet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/job/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn beide Aufrufe JSON zurückliefern, ist die REST-Schnittstelle für die Komponentenverwaltung grundsätzlich erreichbar.&lt;br /&gt;
&lt;br /&gt;
Für Masken kann zusätzlich ein einfacher Formularaufruf getestet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/form/71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fehlersuche bei der Einrichtung===&lt;br /&gt;
&lt;br /&gt;
Bei Problemen sollten insbesondere folgende Punkte geprüft werden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Problem!!Prüfung&lt;br /&gt;
|-&lt;br /&gt;
|REST-Endpunkt liefert HTTP 500&lt;br /&gt;
|Tomcat-Log prüfen, Datenbankverbindung und Spring-Konfiguration kontrollieren.&lt;br /&gt;
|-&lt;br /&gt;
|Komponentenliste ist leer oder fehlerhaft&lt;br /&gt;
|Modulverzeichnis und &amp;lt;code&amp;gt;module_ignore.properties&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|Jobs fehlen&lt;br /&gt;
|ETL-Steuerdaten mit &amp;lt;code&amp;gt;ComponentAdminCLI -r&amp;lt;/code&amp;gt; oder über &amp;lt;code&amp;gt;/etl/job/writeJobsToDb&amp;lt;/code&amp;gt; neu einlesen.&lt;br /&gt;
|-&lt;br /&gt;
|Job funktioniert über REST nicht&lt;br /&gt;
|Denselben Job testweise über die CLI starten und Tomcat-Log prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|Spezialjobs fehlen&lt;br /&gt;
|Zusätzliche ETL-XML-Dateien im Verzeichnis &amp;lt;code&amp;gt;edustore_update&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|REST-Aufruf funktioniert nach einem Upgrade nicht&lt;br /&gt;
|Bibliotheken in &amp;lt;code&amp;gt;WEB-INF/lib&amp;lt;/code&amp;gt; sowie &amp;lt;code&amp;gt;spring-batch.properties&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hikari.properties&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;quartz.properties&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|POST auf eine Maske liefert &amp;quot;Required request body is missing&amp;quot;&lt;br /&gt;
|Einen JSON-Body mitsenden, mindestens &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|POST liefert &amp;quot;application/octet-stream is not supported&amp;quot;&lt;br /&gt;
|Header &amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In einzelnen Testumgebungen kann es beim Einlesen der ETL-Steps außerdem zu Konflikten mit vorhandenen Datenbankindizes kommen. Ein solcher Eingriff sollte nur vorgenommen werden, wenn die konkrete Fehlermeldung darauf verweist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Komponentenverwaltung und ETL==&lt;br /&gt;
&lt;br /&gt;
Über die ETL-Schnittstelle können Komponenten angezeigt, Jobs ermittelt und Verarbeitungsläufe gestartet oder überwacht werden.&lt;br /&gt;
&lt;br /&gt;
Der Basis-Pfad lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Übersicht der wichtigsten ETL-Aufrufe===&lt;br /&gt;
&lt;br /&gt;
Die in der Tabelle angegebenen Aufrufe sind relativ zu der Basis-URL. Ein vollständiger Aufruf sieht zum Beispiel so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!Methode&lt;br /&gt;
!Aufruf&lt;br /&gt;
!Zweck&lt;br /&gt;
|-&lt;br /&gt;
|Komponenten anzeigen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die bekannten beziehungsweise installierten SuperX-Komponenten mit technischen Informationen.&lt;br /&gt;
|-&lt;br /&gt;
|Installierbare Komponenten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/installables/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt Komponenten, die grundsätzlich installiert werden können.&lt;br /&gt;
|-&lt;br /&gt;
|Alle ETL-Jobs&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert alle bekannten ETL- und Batch-Jobs.&lt;br /&gt;
|-&lt;br /&gt;
|Jobs einer Komponente&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/list/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt nur die Jobs einer bestimmten Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Jobdetails&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/hrstage_load_and_transform&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert technische Informationen zu einem bestimmten Job.&lt;br /&gt;
|-&lt;br /&gt;
|Jobdefinitionen neu einlesen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/writeJobsToDb&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liest die vorhandenen Jobdefinitionen erneut in die Datenbank ein.&lt;br /&gt;
|-&lt;br /&gt;
|Job starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/execute/eduetl/hrstage_load_and_transform&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet einen bestimmten Job und liefert eine JobExecutionId zurück.&lt;br /&gt;
|-&lt;br /&gt;
|Installation starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/install/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Installation einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Upgrade starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/upgrade/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet ein Upgrade einer installierten Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Alle Upgrades starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/upgrade_all&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet beziehungsweise verarbeitet anstehende Upgrades mehrerer Komponenten.&lt;br /&gt;
|-&lt;br /&gt;
|Komponente deinstallieren&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/uninstall/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Deinstallation einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Unload starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/unload/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet den Unload einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Transform starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/transform/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Transformation bereits vorhandener Daten.&lt;br /&gt;
|-&lt;br /&gt;
|Complete starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/complete/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet modulabhängige Abschlussarbeiten.&lt;br /&gt;
|-&lt;br /&gt;
|Installationsfunktionen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/installFunctions/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt zusätzliche Installationsfunktionen einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Laufende Jobs&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/running&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt aktuell laufende Jobs.&lt;br /&gt;
|-&lt;br /&gt;
|Jobstatus&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/jobExecutionStatus/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den aktuellen Status einer Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Joblog&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/jobLog/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert das Protokoll einer Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Jobausführungen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/jobExecutionInfos&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert Informationen zu Jobausführungen.&lt;br /&gt;
|-&lt;br /&gt;
|Job stoppen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/stop/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Stoppt eine bestimmte Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Job starten oder fortsetzen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/start/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Spricht eine vorhandene Jobausführung erneut an.&lt;br /&gt;
|-&lt;br /&gt;
|Alle Jobs stoppen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/stopAll&amp;lt;/code&amp;gt;&lt;br /&gt;
|Stoppt alle laufenden Jobs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Typischer ETL-Ablauf===&lt;br /&gt;
&lt;br /&gt;
Eine Anwendung sollte die verfügbaren Jobs möglichst nicht fest hinterlegen, sondern dynamisch über die REST-Schnittstelle ermitteln.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Ablauf für ein Modulupdate ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1. Komponenten laden&lt;br /&gt;
   /etl/list&lt;br /&gt;
&lt;br /&gt;
2. Jobs des Moduls laden&lt;br /&gt;
   /etl/job/list/hrstage&lt;br /&gt;
&lt;br /&gt;
3. Gewünschten Job starten&lt;br /&gt;
   /etl/job/execute/eduetl/hrstage_unload_load_transform&lt;br /&gt;
&lt;br /&gt;
4. Jobstatus abfragen&lt;br /&gt;
   /etl/jobExecutionStatus/12345&lt;br /&gt;
&lt;br /&gt;
5. Jobprotokoll anzeigen&lt;br /&gt;
   /etl/jobLog/12345&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Start eines Jobs liefert normalerweise eine JobExecutionId. Diese ID wird anschließend für Status- und Logabfragen verwendet.&lt;br /&gt;
&lt;br /&gt;
Spezialjobs wie beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kern_unload_config_special&lt;br /&gt;
kern_upload_config_special&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
können ebenfalls über den generischen Execute-Endpunkt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SuperX-Masken und Berichte==&lt;br /&gt;
&lt;br /&gt;
Auch SuperX-Masken können über die REST-Schnittstelle angesprochen werden. Dadurch lassen sich Maskendefinitionen, Eingabefelder und Ergebnisdaten unabhängig von der klassischen SuperX-Oberfläche verwenden.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel wird im Folgenden die Maske mit der TID 71030 verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Übersicht der wichtigsten Masken- und Berichtsaufrufe===&lt;br /&gt;
&lt;br /&gt;
Die in der Tabelle angegebenen Aufrufe sind relativ zu der Basis-URL. Ein vollständiger Aufruf sieht zum Beispiel so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/form/71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!Methode&lt;br /&gt;
!Aufruf&lt;br /&gt;
!Zweck&lt;br /&gt;
|-&lt;br /&gt;
|Maskenaufbau laden&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/form/71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die Eingabefelder der Maske mit Feldtypen, Defaultwerten, Auswahllisten und weiteren Eigenschaften.&lt;br /&gt;
|-&lt;br /&gt;
|Abhängige Felder aktualisieren&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/form/71030/inputupdate&amp;lt;/code&amp;gt;&lt;br /&gt;
|Berechnet abhängige Maskenfelder nach Änderung eines Eingabefeldes neu.&lt;br /&gt;
|-&lt;br /&gt;
|Informationen zur Maske&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/report?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert Metadaten der Maske wie TID, Name, Beschreibung und Sachgebiet.&lt;br /&gt;
|-&lt;br /&gt;
|Maske ausführen&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/report?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Führt die Maske aus und liefert die Ergebnistabelle als JSON.&lt;br /&gt;
|-&lt;br /&gt;
|Ergebnis-Stylesheets&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/report/stylesheets?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt die für die Maske verfügbaren Ergebnis-Stylesheets.&lt;br /&gt;
|-&lt;br /&gt;
|Sichten eines Feldes&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/report/views?tid=71030&amp;amp;amp;fieldName=Institution&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die verfügbaren Sichten beziehungsweise Hierarchien eines Maskenfeldes.&lt;br /&gt;
|-&lt;br /&gt;
|Inhalt einer Sicht&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/report/view?tid=71030&amp;amp;amp;fieldName=Institution&amp;amp;amp;viewId=...&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den Inhalt einer bestimmten Sicht.&lt;br /&gt;
|-&lt;br /&gt;
|Bericht herunterladen&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/report/download?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Erzeugt einen Export des Berichtsergebnisses.&lt;br /&gt;
|-&lt;br /&gt;
|Themenbaum&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/menu/tree&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den für den angemeldeten Benutzer sichtbaren SuperX-Themenbaum.&lt;br /&gt;
|-&lt;br /&gt;
|Teil des Themenbaums&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/menu?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert einen bestimmten Bereich des Themenbaums.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Masken verwenden===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/form/71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
liefert unter anderem:&lt;br /&gt;
&lt;br /&gt;
* Namen der Eingabefelder&lt;br /&gt;
* Feldtypen&lt;br /&gt;
* Beschriftungen&lt;br /&gt;
* Pflichtfelder&lt;br /&gt;
* Defaultwerte&lt;br /&gt;
* Auswahllisten&lt;br /&gt;
* Baum- beziehungsweise TreeSelect-Inhalte&lt;br /&gt;
* verfügbare Stylesheets&lt;br /&gt;
&lt;br /&gt;
Damit kann eine eigene Oberfläche die Eingabemaske dynamisch aufbauen.&lt;br /&gt;
&lt;br /&gt;
Zum eigentlichen Ausführen einer Maske wird der Report-Endpunkt mit HTTP POST verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
POST https://demo.superx-testserver.de/superx/ds/api/report?tid=71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Request benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch wenn keine Maskenparameter gesetzt werden sollen, muss ein gültiger JSON-Body mitgegeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Felder gesetzt werden, werden diese über den JSON-Body übergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Kennung&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
  &amp;quot;Gruppe&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;Institution&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Antwort enthält die Ergebnistabelle als JSON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===POST-Aufruf im Browser testen===&lt;br /&gt;
&lt;br /&gt;
GET-Aufrufe können direkt über die Adresszeile des Browsers getestet werden.&lt;br /&gt;
&lt;br /&gt;
Für POST-Aufrufe kann beispielsweise in Firefox die Netzwerkanalyse verwendet werden:&lt;br /&gt;
&lt;br /&gt;
# Entwicklertools mit F12 öffnen.&lt;br /&gt;
# &#039;&#039;Netzwerkanalyse&#039;&#039; auswählen.&lt;br /&gt;
# Einen REST-Aufruf markieren und &#039;&#039;Bearbeiten und erneut senden&#039;&#039; auswählen.&lt;br /&gt;
# Methode von GET auf POST ändern.&lt;br /&gt;
# Header ergänzen:&lt;br /&gt;
#:&amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Unter &#039;&#039;Inhalt&#039;&#039; mindestens folgenden JSON-Body eintragen:&lt;br /&gt;
#:&amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;&lt;br /&gt;
# Anfrage senden.&lt;br /&gt;
&lt;br /&gt;
Ein korrekt übertragener leerer JSON-Body führt beispielsweise zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
Content-Length: 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typische Fehler:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Fehler!!Ursache!!Lösung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Required request body is missing&amp;lt;/code&amp;gt;&lt;br /&gt;
|Der POST-Request enthält keinen Body.&lt;br /&gt;
|Mindestens &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; als Inhalt mitsenden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Content-Type &#039;application/octet-stream&#039; is not supported&amp;lt;/code&amp;gt;&lt;br /&gt;
|Der Body wird ohne passenden Content-Type übertragen.&lt;br /&gt;
|&amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hinweise zur Verwendung==&lt;br /&gt;
&lt;br /&gt;
REST-Endpunkte können abhängig von ihrer Funktion Daten verändern oder umfangreiche Verarbeitungsläufe starten. Insbesondere Installation, Upgrade, Deinstallation und ETL-Jobs sollten daher nur für entsprechend berechtigte Benutzer verfügbar sein.&lt;br /&gt;
&lt;br /&gt;
Für eigene Weboberflächen empfiehlt es sich, Komponenten, Jobs und Masken dynamisch über die REST-Schnittstelle zu ermitteln. Dadurch müssen neue Module, Spezialjobs oder zusätzliche Masken nicht fest in der Oberfläche hinterlegt werden.&lt;br /&gt;
&lt;br /&gt;
Für die Komponentenverwaltung sind insbesondere die Kombinationen aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etl/list&lt;br /&gt;
/etl/job/list/{component}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und für Masken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/form/{tid}&lt;br /&gt;
/report?tid={tid}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
relevant.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=SuperX_REST_Schnittstelle&amp;diff=16666</id>
		<title>SuperX REST Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=SuperX_REST_Schnittstelle&amp;diff=16666"/>
		<updated>2026-09-22T08:14:11Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Übersicht der wichtigsten ETL-Aufrufe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=REST-Schnittstelle=&lt;br /&gt;
&lt;br /&gt;
Ab dem SuperX-Kernmodul 6.0 steht eine REST-Schnittstelle zur Verfügung, über die zentrale Funktionen von SuperX auch über Weboberflächen, Skripte und externe Anwendungen angesprochen werden können.&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle ergänzt die bestehenden SuperX-Funktionen. Vorhandene ETL-, Batch- und Maskenprozesse werden dabei nicht ersetzt, sondern über HTTP-Endpunkte zusätzlich erreichbar gemacht.&lt;br /&gt;
&lt;br /&gt;
Zu den wichtigsten Einsatzbereichen gehören:&lt;br /&gt;
&lt;br /&gt;
* Komponentenverwaltung und ETL-Jobs&lt;br /&gt;
* Status- und Protokollabfragen&lt;br /&gt;
* SuperX-Masken und deren Eingabefelder&lt;br /&gt;
* Ausführung von Masken und Abruf der Ergebnistabellen&lt;br /&gt;
* Export von Berichtsergebnissen&lt;br /&gt;
* Einbindung von SuperX-Funktionen in eigene Weboberflächen&lt;br /&gt;
&lt;br /&gt;
In den folgenden Beispielen wird diese Beispielinstallation verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einer eigenen Installation müssen lediglich Domain und gegebenenfalls der Kontextpfad angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlagen==&lt;br /&gt;
&lt;br /&gt;
Die REST-Endpunkte befinden sich unterhalb von:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Schnittstelle liefert überwiegend JSON zurück. Lesende Aufrufe werden in der Regel mit HTTP GET ausgeführt. Einige Funktionen benötigen HTTP POST, insbesondere das Ausführen von SuperX-Masken.&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle verwendet die normale SuperX-Authentifizierung. Wird sie aus einer bereits angemeldeten Browser-Sitzung aufgerufen, kann die vorhandene Session verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einrichtung und Voraussetzungen==&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle ist Bestandteil des Kernmoduls 6.0 und der SuperX-Webapp. Eine separate REST-Anwendung muss nicht installiert werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist zunächst eine grundsätzlich funktionierende SuperX-Installation:&lt;br /&gt;
&lt;br /&gt;
* die SuperX-Webapp ist über Tomcat erreichbar,&lt;br /&gt;
* die Datenbankverbindung funktioniert,&lt;br /&gt;
* ein aktueller Kernstand ist installiert,&lt;br /&gt;
* die benötigten Modulverzeichnisse sind eingebunden,&lt;br /&gt;
* die ETL- und Jobdefinitionen wurden eingelesen.&lt;br /&gt;
&lt;br /&gt;
===Aktuelles Kernpaket verwenden===&lt;br /&gt;
&lt;br /&gt;
Für die REST-Schnittstelle und die Komponentenverwaltung sollte ein aktuelles Kernpaket ab Kern 6.0 verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://super-ics.de/superx/dist/kern6.0b_superx_utf8_POSTGRES_patch.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einem Kern-Upgrade sollte darauf geachtet werden, dass keine veralteten Bibliotheken aus einem älteren Kernstand in &amp;lt;code&amp;gt;WEB-INF/lib&amp;lt;/code&amp;gt; liegen bleiben.&lt;br /&gt;
&lt;br /&gt;
Vor Änderungen sollten lokale Anpassungen und projektspezifische Konfigurationen gesichert werden.&lt;br /&gt;
&lt;br /&gt;
Nach einem Upgrade sollten insbesondere folgende Dateien geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/classes/spring-batch.properties&lt;br /&gt;
WEB-INF/classes/hikari.properties&lt;br /&gt;
WEB-INF/classes/quartz.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datenbankverbindung prüfen===&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle verwendet die Datenbankverbindung der Webapp. In der &amp;lt;code&amp;gt;dbforms-config.xml&amp;lt;/code&amp;gt; sollte der &amp;lt;code&amp;gt;SpringBeanConnectionProvider&amp;lt;/code&amp;gt; verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dbconnection connectionProviderClass=&amp;quot;de.superx.db.SpringBeanConnectionProvider&amp;quot;&lt;br /&gt;
              default=&amp;quot;true&amp;quot;&lt;br /&gt;
              id=&amp;quot;datasourceBean&amp;quot;&lt;br /&gt;
              isJndi=&amp;quot;false&amp;quot;&lt;br /&gt;
              isPow2=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn hier noch eine ältere oder projektspezifische Verbindungsdefinition verwendet wird, kann die REST-Schnittstelle zwar grundsätzlich erreichbar sein, aber beim Zugriff auf Komponenten, Jobs oder Masken fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
===module_ignore.properties prüfen===&lt;br /&gt;
&lt;br /&gt;
Für die Komponentenverwaltung muss folgende Datei vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/module_ignore.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielinhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ignore.modules=kennx,gxstage,bil&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlt die Datei, können beim Einlesen der Komponenten oder beim Aufruf der Komponentenliste Fehler auftreten.&lt;br /&gt;
&lt;br /&gt;
===Modulverzeichnisse bereitstellen===&lt;br /&gt;
&lt;br /&gt;
Die Komponentenverwaltung liest verfügbare Komponenten und ETL-Jobs aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modulverzeichnisse können direkt dort abgelegt oder per symbolischem Link eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP/WEB-INF/conf/edustore/db/module&lt;br /&gt;
ln -s $MODUL_VERZEICHNIS .&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Kern-ETL-Dateien prüfen===&lt;br /&gt;
&lt;br /&gt;
Für einzelne Funktionen der Komponentenverwaltung werden zusätzliche ETL-Dateien benötigt, insbesondere für das Entladen und Wiedereinspielen von Konfigurationen.&lt;br /&gt;
&lt;br /&gt;
Quellverzeichnis im SuperX-Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_GIT/superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zielverzeichnis in der Webapp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
$WEBAPP/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benötigte Dateien:&lt;br /&gt;
&lt;br /&gt;
* edustore_kern_man_unload_config_ids.xml&lt;br /&gt;
* edustore_kern_man_unload_config_pg.xml&lt;br /&gt;
* edustore_kern_man_upload_config_ids.xml&lt;br /&gt;
* edustore_kern_man_upload_config_pg.xml&lt;br /&gt;
&lt;br /&gt;
Falls diese Dateien im verwendeten Kernpaket noch fehlen, müssen sie aus dem SuperX-Git ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
===ETL-Steuerdaten einlesen===&lt;br /&gt;
&lt;br /&gt;
Nach Änderungen an Kern, Modulverzeichnissen oder Jobdefinitionen müssen die ETL-Steuerdaten neu eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP&lt;br /&gt;
java -classpath &amp;quot;./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*&amp;quot; \&lt;br /&gt;
  &amp;quot;de.superx.bin.ComponentAdminCLI&amp;quot; -r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; liest die Komponenten- und Jobdefinitionen neu ein.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann dafür auch der entsprechende REST-Endpunkt verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Einzelnen Job über die CLI testen===&lt;br /&gt;
&lt;br /&gt;
Wenn unklar ist, ob ein Fehler in der REST-Schnittstelle oder bereits in der ETL-Konfiguration liegt, kann ein einzelner Job testweise direkt über die CLI gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP&lt;br /&gt;
java -classpath &amp;quot;./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*&amp;quot; \&lt;br /&gt;
  &amp;quot;de.superx.bin.ComponentAdminCLI&amp;quot; -e hrstage_load_and_transform&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktioniert der Job bereits über die CLI nicht, sollten zunächst Moduldateien, Pfade, Datenbanktabellen und ETL-Konfiguration geprüft werden.&lt;br /&gt;
&lt;br /&gt;
===Tomcat neu starten===&lt;br /&gt;
&lt;br /&gt;
Nach Änderungen an Bibliotheken, Klassen, Spring-Konfigurationen oder Moduldateien sollte Tomcat neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart tomcat10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach Installation kann der Dienst auch anders heißen.&lt;br /&gt;
&lt;br /&gt;
===REST-Schnittstelle prüfen===&lt;br /&gt;
&lt;br /&gt;
Nach der Einrichtung sollten zunächst einfache Listenaufrufe getestet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/job/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn beide Aufrufe JSON zurückliefern, ist die REST-Schnittstelle für die Komponentenverwaltung grundsätzlich erreichbar.&lt;br /&gt;
&lt;br /&gt;
Für Masken kann zusätzlich ein einfacher Formularaufruf getestet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/form/71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fehlersuche bei der Einrichtung===&lt;br /&gt;
&lt;br /&gt;
Bei Problemen sollten insbesondere folgende Punkte geprüft werden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Problem!!Prüfung&lt;br /&gt;
|-&lt;br /&gt;
|REST-Endpunkt liefert HTTP 500&lt;br /&gt;
|Tomcat-Log prüfen, Datenbankverbindung und Spring-Konfiguration kontrollieren.&lt;br /&gt;
|-&lt;br /&gt;
|Komponentenliste ist leer oder fehlerhaft&lt;br /&gt;
|Modulverzeichnis und &amp;lt;code&amp;gt;module_ignore.properties&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|Jobs fehlen&lt;br /&gt;
|ETL-Steuerdaten mit &amp;lt;code&amp;gt;ComponentAdminCLI -r&amp;lt;/code&amp;gt; oder über &amp;lt;code&amp;gt;/etl/job/writeJobsToDb&amp;lt;/code&amp;gt; neu einlesen.&lt;br /&gt;
|-&lt;br /&gt;
|Job funktioniert über REST nicht&lt;br /&gt;
|Denselben Job testweise über die CLI starten und Tomcat-Log prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|Spezialjobs fehlen&lt;br /&gt;
|Zusätzliche ETL-XML-Dateien im Verzeichnis &amp;lt;code&amp;gt;edustore_update&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|REST-Aufruf funktioniert nach einem Upgrade nicht&lt;br /&gt;
|Bibliotheken in &amp;lt;code&amp;gt;WEB-INF/lib&amp;lt;/code&amp;gt; sowie &amp;lt;code&amp;gt;spring-batch.properties&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hikari.properties&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;quartz.properties&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|POST auf eine Maske liefert &amp;quot;Required request body is missing&amp;quot;&lt;br /&gt;
|Einen JSON-Body mitsenden, mindestens &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|POST liefert &amp;quot;application/octet-stream is not supported&amp;quot;&lt;br /&gt;
|Header &amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In einzelnen Testumgebungen kann es beim Einlesen der ETL-Steps außerdem zu Konflikten mit vorhandenen Datenbankindizes kommen. Ein solcher Eingriff sollte nur vorgenommen werden, wenn die konkrete Fehlermeldung darauf verweist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Komponentenverwaltung und ETL==&lt;br /&gt;
&lt;br /&gt;
Über die ETL-Schnittstelle können Komponenten angezeigt, Jobs ermittelt und Verarbeitungsläufe gestartet oder überwacht werden.&lt;br /&gt;
&lt;br /&gt;
Der Basis-Pfad lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Übersicht der wichtigsten ETL-Aufrufe===&lt;br /&gt;
&lt;br /&gt;
Die in der Tabelle angegebenen Aufrufe sind relativ zu der Basis-URL. Ein vollständiger Aufruf sieht zum Beispiel so aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!Methode&lt;br /&gt;
!Aufruf&lt;br /&gt;
!Zweck&lt;br /&gt;
|-&lt;br /&gt;
|Komponenten anzeigen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die bekannten beziehungsweise installierten SuperX-Komponenten mit technischen Informationen.&lt;br /&gt;
|-&lt;br /&gt;
|Installierbare Komponenten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/installables/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt Komponenten, die grundsätzlich installiert werden können.&lt;br /&gt;
|-&lt;br /&gt;
|Alle ETL-Jobs&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert alle bekannten ETL- und Batch-Jobs.&lt;br /&gt;
|-&lt;br /&gt;
|Jobs einer Komponente&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/list/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt nur die Jobs einer bestimmten Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Jobdetails&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/hrstage_load_and_transform&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert technische Informationen zu einem bestimmten Job.&lt;br /&gt;
|-&lt;br /&gt;
|Jobdefinitionen neu einlesen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/writeJobsToDb&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liest die vorhandenen Jobdefinitionen erneut in die Datenbank ein.&lt;br /&gt;
|-&lt;br /&gt;
|Job starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/execute/eduetl/hrstage_load_and_transform&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet einen bestimmten Job und liefert eine JobExecutionId zurück.&lt;br /&gt;
|-&lt;br /&gt;
|Installation starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/install/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Installation einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Upgrade starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/upgrade/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet ein Upgrade einer installierten Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Alle Upgrades starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/upgrade_all&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet beziehungsweise verarbeitet anstehende Upgrades mehrerer Komponenten.&lt;br /&gt;
|-&lt;br /&gt;
|Komponente deinstallieren&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/uninstall/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Deinstallation einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Unload starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/unload/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet den Unload einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Transform starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/transform/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Transformation bereits vorhandener Daten.&lt;br /&gt;
|-&lt;br /&gt;
|Complete starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/complete/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet modulabhängige Abschlussarbeiten.&lt;br /&gt;
|-&lt;br /&gt;
|Installationsfunktionen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/installFunctions/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt zusätzliche Installationsfunktionen einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Laufende Jobs&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/running&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt aktuell laufende Jobs.&lt;br /&gt;
|-&lt;br /&gt;
|Jobstatus&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/jobExecutionStatus/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den aktuellen Status einer Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Joblog&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/jobLog/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert das Protokoll einer Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Jobausführungen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/jobExecutionInfos&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert Informationen zu Jobausführungen.&lt;br /&gt;
|-&lt;br /&gt;
|Job stoppen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/stop/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Stoppt eine bestimmte Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Job starten oder fortsetzen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/start/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Spricht eine vorhandene Jobausführung erneut an.&lt;br /&gt;
|-&lt;br /&gt;
|Alle Jobs stoppen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;ds/api/etl/job/stopAll&amp;lt;/code&amp;gt;&lt;br /&gt;
|Stoppt alle laufenden Jobs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Typischer ETL-Ablauf===&lt;br /&gt;
&lt;br /&gt;
Eine Anwendung sollte die verfügbaren Jobs möglichst nicht fest hinterlegen, sondern dynamisch über die REST-Schnittstelle ermitteln.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Ablauf für ein Modulupdate ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1. Komponenten laden&lt;br /&gt;
   /etl/list&lt;br /&gt;
&lt;br /&gt;
2. Jobs des Moduls laden&lt;br /&gt;
   /etl/job/list/hrstage&lt;br /&gt;
&lt;br /&gt;
3. Gewünschten Job starten&lt;br /&gt;
   /etl/job/execute/eduetl/hrstage_unload_load_transform&lt;br /&gt;
&lt;br /&gt;
4. Jobstatus abfragen&lt;br /&gt;
   /etl/jobExecutionStatus/12345&lt;br /&gt;
&lt;br /&gt;
5. Jobprotokoll anzeigen&lt;br /&gt;
   /etl/jobLog/12345&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Start eines Jobs liefert normalerweise eine JobExecutionId. Diese ID wird anschließend für Status- und Logabfragen verwendet.&lt;br /&gt;
&lt;br /&gt;
Spezialjobs wie beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kern_unload_config_special&lt;br /&gt;
kern_upload_config_special&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
können ebenfalls über den generischen Execute-Endpunkt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SuperX-Masken und Berichte==&lt;br /&gt;
&lt;br /&gt;
Auch SuperX-Masken können über die REST-Schnittstelle angesprochen werden. Dadurch lassen sich Maskendefinitionen, Eingabefelder und Ergebnisdaten unabhängig von der klassischen SuperX-Oberfläche verwenden.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel wird im Folgenden die Maske mit der TID 71030 verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Übersicht der wichtigsten Masken- und Berichtsaufrufe===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!Methode&lt;br /&gt;
!Beispiel&lt;br /&gt;
!Zweck&lt;br /&gt;
|-&lt;br /&gt;
|Maskenaufbau laden&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/form/71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die Eingabefelder der Maske mit Feldtypen, Defaultwerten, Auswahllisten und weiteren Eigenschaften.&lt;br /&gt;
|-&lt;br /&gt;
|Abhängige Felder aktualisieren&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/form/71030/inputupdate&amp;lt;/code&amp;gt;&lt;br /&gt;
|Berechnet abhängige Maskenfelder nach Änderung eines Eingabefeldes neu.&lt;br /&gt;
|-&lt;br /&gt;
|Informationen zur Maske&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert Metadaten der Maske wie TID, Name, Beschreibung und Sachgebiet.&lt;br /&gt;
|-&lt;br /&gt;
|Maske ausführen&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Führt die Maske aus und liefert die Ergebnistabelle als JSON.&lt;br /&gt;
|-&lt;br /&gt;
|Ergebnis-Stylesheets&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/stylesheets?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt die für die Maske verfügbaren Ergebnis-Stylesheets.&lt;br /&gt;
|-&lt;br /&gt;
|Sichten eines Feldes&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/views?tid=71030&amp;amp;amp;fieldName=Institution&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die verfügbaren Sichten beziehungsweise Hierarchien eines Maskenfeldes.&lt;br /&gt;
|-&lt;br /&gt;
|Inhalt einer Sicht&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/view?tid=71030&amp;amp;amp;fieldName=Institution&amp;amp;amp;viewId=...&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den Inhalt einer bestimmten Sicht.&lt;br /&gt;
|-&lt;br /&gt;
|Bericht herunterladen&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/download?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Erzeugt einen Export des Berichtsergebnisses.&lt;br /&gt;
|-&lt;br /&gt;
|Themenbaum&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/menu/tree&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den für den angemeldeten Benutzer sichtbaren SuperX-Themenbaum.&lt;br /&gt;
|-&lt;br /&gt;
|Teil des Themenbaums&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/menu?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert einen bestimmten Bereich des Themenbaums.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Masken verwenden===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/form/71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
liefert unter anderem:&lt;br /&gt;
&lt;br /&gt;
* Namen der Eingabefelder&lt;br /&gt;
* Feldtypen&lt;br /&gt;
* Beschriftungen&lt;br /&gt;
* Pflichtfelder&lt;br /&gt;
* Defaultwerte&lt;br /&gt;
* Auswahllisten&lt;br /&gt;
* Baum- beziehungsweise TreeSelect-Inhalte&lt;br /&gt;
* verfügbare Stylesheets&lt;br /&gt;
&lt;br /&gt;
Damit kann eine eigene Oberfläche die Eingabemaske dynamisch aufbauen.&lt;br /&gt;
&lt;br /&gt;
Zum eigentlichen Ausführen einer Maske wird der Report-Endpunkt mit HTTP POST verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
POST https://demo.superx-testserver.de/superx/ds/api/report?tid=71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Request benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch wenn keine Maskenparameter gesetzt werden sollen, muss ein gültiger JSON-Body mitgegeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Felder gesetzt werden, werden diese über den JSON-Body übergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Kennung&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
  &amp;quot;Gruppe&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;Institution&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Antwort enthält die Ergebnistabelle als JSON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===POST-Aufruf im Browser testen===&lt;br /&gt;
&lt;br /&gt;
GET-Aufrufe können direkt über die Adresszeile des Browsers getestet werden.&lt;br /&gt;
&lt;br /&gt;
Für POST-Aufrufe kann beispielsweise in Firefox die Netzwerkanalyse verwendet werden:&lt;br /&gt;
&lt;br /&gt;
# Entwicklertools mit F12 öffnen.&lt;br /&gt;
# &#039;&#039;Netzwerkanalyse&#039;&#039; auswählen.&lt;br /&gt;
# Einen REST-Aufruf markieren und &#039;&#039;Bearbeiten und erneut senden&#039;&#039; auswählen.&lt;br /&gt;
# Methode von GET auf POST ändern.&lt;br /&gt;
# Header ergänzen:&lt;br /&gt;
#:&amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Unter &#039;&#039;Inhalt&#039;&#039; mindestens folgenden JSON-Body eintragen:&lt;br /&gt;
#:&amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;&lt;br /&gt;
# Anfrage senden.&lt;br /&gt;
&lt;br /&gt;
Ein korrekt übertragener leerer JSON-Body führt beispielsweise zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
Content-Length: 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typische Fehler:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Fehler!!Ursache!!Lösung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Required request body is missing&amp;lt;/code&amp;gt;&lt;br /&gt;
|Der POST-Request enthält keinen Body.&lt;br /&gt;
|Mindestens &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; als Inhalt mitsenden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Content-Type &#039;application/octet-stream&#039; is not supported&amp;lt;/code&amp;gt;&lt;br /&gt;
|Der Body wird ohne passenden Content-Type übertragen.&lt;br /&gt;
|&amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hinweise zur Verwendung==&lt;br /&gt;
&lt;br /&gt;
REST-Endpunkte können abhängig von ihrer Funktion Daten verändern oder umfangreiche Verarbeitungsläufe starten. Insbesondere Installation, Upgrade, Deinstallation und ETL-Jobs sollten daher nur für entsprechend berechtigte Benutzer verfügbar sein.&lt;br /&gt;
&lt;br /&gt;
Für eigene Weboberflächen empfiehlt es sich, Komponenten, Jobs und Masken dynamisch über die REST-Schnittstelle zu ermitteln. Dadurch müssen neue Module, Spezialjobs oder zusätzliche Masken nicht fest in der Oberfläche hinterlegt werden.&lt;br /&gt;
&lt;br /&gt;
Für die Komponentenverwaltung sind insbesondere die Kombinationen aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etl/list&lt;br /&gt;
/etl/job/list/{component}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und für Masken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/form/{tid}&lt;br /&gt;
/report?tid={tid}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
relevant.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=SuperX_REST_Schnittstelle&amp;diff=16665</id>
		<title>SuperX REST Schnittstelle</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=SuperX_REST_Schnittstelle&amp;diff=16665"/>
		<updated>2026-09-22T08:09:57Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=REST-Schnittstelle=&lt;br /&gt;
&lt;br /&gt;
Ab dem SuperX-Kernmodul 6.0 steht eine REST-Schnittstelle zur Verfügung, über die zentrale Funktionen von SuperX auch über Weboberflächen, Skripte und externe Anwendungen angesprochen werden können.&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle ergänzt die bestehenden SuperX-Funktionen. Vorhandene ETL-, Batch- und Maskenprozesse werden dabei nicht ersetzt, sondern über HTTP-Endpunkte zusätzlich erreichbar gemacht.&lt;br /&gt;
&lt;br /&gt;
Zu den wichtigsten Einsatzbereichen gehören:&lt;br /&gt;
&lt;br /&gt;
* Komponentenverwaltung und ETL-Jobs&lt;br /&gt;
* Status- und Protokollabfragen&lt;br /&gt;
* SuperX-Masken und deren Eingabefelder&lt;br /&gt;
* Ausführung von Masken und Abruf der Ergebnistabellen&lt;br /&gt;
* Export von Berichtsergebnissen&lt;br /&gt;
* Einbindung von SuperX-Funktionen in eigene Weboberflächen&lt;br /&gt;
&lt;br /&gt;
In den folgenden Beispielen wird diese Beispielinstallation verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einer eigenen Installation müssen lediglich Domain und gegebenenfalls der Kontextpfad angepasst werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlagen==&lt;br /&gt;
&lt;br /&gt;
Die REST-Endpunkte befinden sich unterhalb von:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Schnittstelle liefert überwiegend JSON zurück. Lesende Aufrufe werden in der Regel mit HTTP GET ausgeführt. Einige Funktionen benötigen HTTP POST, insbesondere das Ausführen von SuperX-Masken.&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle verwendet die normale SuperX-Authentifizierung. Wird sie aus einer bereits angemeldeten Browser-Sitzung aufgerufen, kann die vorhandene Session verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einrichtung und Voraussetzungen==&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle ist Bestandteil des Kernmoduls 6.0 und der SuperX-Webapp. Eine separate REST-Anwendung muss nicht installiert werden.&lt;br /&gt;
&lt;br /&gt;
Voraussetzung ist zunächst eine grundsätzlich funktionierende SuperX-Installation:&lt;br /&gt;
&lt;br /&gt;
* die SuperX-Webapp ist über Tomcat erreichbar,&lt;br /&gt;
* die Datenbankverbindung funktioniert,&lt;br /&gt;
* ein aktueller Kernstand ist installiert,&lt;br /&gt;
* die benötigten Modulverzeichnisse sind eingebunden,&lt;br /&gt;
* die ETL- und Jobdefinitionen wurden eingelesen.&lt;br /&gt;
&lt;br /&gt;
===Aktuelles Kernpaket verwenden===&lt;br /&gt;
&lt;br /&gt;
Für die REST-Schnittstelle und die Komponentenverwaltung sollte ein aktuelles Kernpaket ab Kern 6.0 verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://super-ics.de/superx/dist/kern6.0b_superx_utf8_POSTGRES_patch.tar.gz&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einem Kern-Upgrade sollte darauf geachtet werden, dass keine veralteten Bibliotheken aus einem älteren Kernstand in &amp;lt;code&amp;gt;WEB-INF/lib&amp;lt;/code&amp;gt; liegen bleiben.&lt;br /&gt;
&lt;br /&gt;
Vor Änderungen sollten lokale Anpassungen und projektspezifische Konfigurationen gesichert werden.&lt;br /&gt;
&lt;br /&gt;
Nach einem Upgrade sollten insbesondere folgende Dateien geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/classes/spring-batch.properties&lt;br /&gt;
WEB-INF/classes/hikari.properties&lt;br /&gt;
WEB-INF/classes/quartz.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Datenbankverbindung prüfen===&lt;br /&gt;
&lt;br /&gt;
Die REST-Schnittstelle verwendet die Datenbankverbindung der Webapp. In der &amp;lt;code&amp;gt;dbforms-config.xml&amp;lt;/code&amp;gt; sollte der &amp;lt;code&amp;gt;SpringBeanConnectionProvider&amp;lt;/code&amp;gt; verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;dbconnection connectionProviderClass=&amp;quot;de.superx.db.SpringBeanConnectionProvider&amp;quot;&lt;br /&gt;
              default=&amp;quot;true&amp;quot;&lt;br /&gt;
              id=&amp;quot;datasourceBean&amp;quot;&lt;br /&gt;
              isJndi=&amp;quot;false&amp;quot;&lt;br /&gt;
              isPow2=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn hier noch eine ältere oder projektspezifische Verbindungsdefinition verwendet wird, kann die REST-Schnittstelle zwar grundsätzlich erreichbar sein, aber beim Zugriff auf Komponenten, Jobs oder Masken fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
===module_ignore.properties prüfen===&lt;br /&gt;
&lt;br /&gt;
Für die Komponentenverwaltung muss folgende Datei vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/module_ignore.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielinhalt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
ignore.modules=kennx,gxstage,bil&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fehlt die Datei, können beim Einlesen der Komponenten oder beim Aufruf der Komponentenliste Fehler auftreten.&lt;br /&gt;
&lt;br /&gt;
===Modulverzeichnisse bereitstellen===&lt;br /&gt;
&lt;br /&gt;
Die Komponentenverwaltung liest verfügbare Komponenten und ETL-Jobs aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modulverzeichnisse können direkt dort abgelegt oder per symbolischem Link eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP/WEB-INF/conf/edustore/db/module&lt;br /&gt;
ln -s $MODUL_VERZEICHNIS .&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Zusätzliche Kern-ETL-Dateien prüfen===&lt;br /&gt;
&lt;br /&gt;
Für einzelne Funktionen der Komponentenverwaltung werden zusätzliche ETL-Dateien benötigt, insbesondere für das Entladen und Wiedereinspielen von Konfigurationen.&lt;br /&gt;
&lt;br /&gt;
Quellverzeichnis im SuperX-Git:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_GIT/superx/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zielverzeichnis in der Webapp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
$WEBAPP/WEB-INF/conf/edustore/db/install/conf/his1/edustore_update&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Benötigte Dateien:&lt;br /&gt;
&lt;br /&gt;
* edustore_kern_man_unload_config_ids.xml&lt;br /&gt;
* edustore_kern_man_unload_config_pg.xml&lt;br /&gt;
* edustore_kern_man_upload_config_ids.xml&lt;br /&gt;
* edustore_kern_man_upload_config_pg.xml&lt;br /&gt;
&lt;br /&gt;
Falls diese Dateien im verwendeten Kernpaket noch fehlen, müssen sie aus dem SuperX-Git ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
===ETL-Steuerdaten einlesen===&lt;br /&gt;
&lt;br /&gt;
Nach Änderungen an Kern, Modulverzeichnissen oder Jobdefinitionen müssen die ETL-Steuerdaten neu eingelesen werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP&lt;br /&gt;
java -classpath &amp;quot;./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*&amp;quot; \&lt;br /&gt;
  &amp;quot;de.superx.bin.ComponentAdminCLI&amp;quot; -r&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Parameter &amp;lt;code&amp;gt;-r&amp;lt;/code&amp;gt; liest die Komponenten- und Jobdefinitionen neu ein.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann dafür auch der entsprechende REST-Endpunkt verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Einzelnen Job über die CLI testen===&lt;br /&gt;
&lt;br /&gt;
Wenn unklar ist, ob ein Fehler in der REST-Schnittstelle oder bereits in der ETL-Konfiguration liegt, kann ein einzelner Job testweise direkt über die CLI gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP&lt;br /&gt;
java -classpath &amp;quot;./superx/WEB-INF/classes/:./superx/WEB-INF/lib/*:./superx/WEB-INF/lib_ext/*&amp;quot; \&lt;br /&gt;
  &amp;quot;de.superx.bin.ComponentAdminCLI&amp;quot; -e hrstage_load_and_transform&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Funktioniert der Job bereits über die CLI nicht, sollten zunächst Moduldateien, Pfade, Datenbanktabellen und ETL-Konfiguration geprüft werden.&lt;br /&gt;
&lt;br /&gt;
===Tomcat neu starten===&lt;br /&gt;
&lt;br /&gt;
Nach Änderungen an Bibliotheken, Klassen, Spring-Konfigurationen oder Moduldateien sollte Tomcat neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl restart tomcat10&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach Installation kann der Dienst auch anders heißen.&lt;br /&gt;
&lt;br /&gt;
===REST-Schnittstelle prüfen===&lt;br /&gt;
&lt;br /&gt;
Nach der Einrichtung sollten zunächst einfache Listenaufrufe getestet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl/job/list&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn beide Aufrufe JSON zurückliefern, ist die REST-Schnittstelle für die Komponentenverwaltung grundsätzlich erreichbar.&lt;br /&gt;
&lt;br /&gt;
Für Masken kann zusätzlich ein einfacher Formularaufruf getestet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/form/71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Fehlersuche bei der Einrichtung===&lt;br /&gt;
&lt;br /&gt;
Bei Problemen sollten insbesondere folgende Punkte geprüft werden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Problem!!Prüfung&lt;br /&gt;
|-&lt;br /&gt;
|REST-Endpunkt liefert HTTP 500&lt;br /&gt;
|Tomcat-Log prüfen, Datenbankverbindung und Spring-Konfiguration kontrollieren.&lt;br /&gt;
|-&lt;br /&gt;
|Komponentenliste ist leer oder fehlerhaft&lt;br /&gt;
|Modulverzeichnis und &amp;lt;code&amp;gt;module_ignore.properties&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|Jobs fehlen&lt;br /&gt;
|ETL-Steuerdaten mit &amp;lt;code&amp;gt;ComponentAdminCLI -r&amp;lt;/code&amp;gt; oder über &amp;lt;code&amp;gt;/etl/job/writeJobsToDb&amp;lt;/code&amp;gt; neu einlesen.&lt;br /&gt;
|-&lt;br /&gt;
|Job funktioniert über REST nicht&lt;br /&gt;
|Denselben Job testweise über die CLI starten und Tomcat-Log prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|Spezialjobs fehlen&lt;br /&gt;
|Zusätzliche ETL-XML-Dateien im Verzeichnis &amp;lt;code&amp;gt;edustore_update&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|REST-Aufruf funktioniert nach einem Upgrade nicht&lt;br /&gt;
|Bibliotheken in &amp;lt;code&amp;gt;WEB-INF/lib&amp;lt;/code&amp;gt; sowie &amp;lt;code&amp;gt;spring-batch.properties&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;hikari.properties&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;quartz.properties&amp;lt;/code&amp;gt; prüfen.&lt;br /&gt;
|-&lt;br /&gt;
|POST auf eine Maske liefert &amp;quot;Required request body is missing&amp;quot;&lt;br /&gt;
|Einen JSON-Body mitsenden, mindestens &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|POST liefert &amp;quot;application/octet-stream is not supported&amp;quot;&lt;br /&gt;
|Header &amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In einzelnen Testumgebungen kann es beim Einlesen der ETL-Steps außerdem zu Konflikten mit vorhandenen Datenbankindizes kommen. Ein solcher Eingriff sollte nur vorgenommen werden, wenn die konkrete Fehlermeldung darauf verweist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Komponentenverwaltung und ETL==&lt;br /&gt;
&lt;br /&gt;
Über die ETL-Schnittstelle können Komponenten angezeigt, Jobs ermittelt und Verarbeitungsläufe gestartet oder überwacht werden.&lt;br /&gt;
&lt;br /&gt;
Der Basis-Pfad lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/etl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Übersicht der wichtigsten ETL-Aufrufe===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!Methode&lt;br /&gt;
!Beispiel&lt;br /&gt;
!Zweck&lt;br /&gt;
|-&lt;br /&gt;
|Komponenten anzeigen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die bekannten beziehungsweise installierten SuperX-Komponenten mit technischen Informationen.&lt;br /&gt;
|-&lt;br /&gt;
|Installierbare Komponenten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/installables/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt Komponenten, die grundsätzlich installiert werden können.&lt;br /&gt;
|-&lt;br /&gt;
|Alle ETL-Jobs&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/list&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert alle bekannten ETL- und Batch-Jobs.&lt;br /&gt;
|-&lt;br /&gt;
|Jobs einer Komponente&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/list/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt nur die Jobs einer bestimmten Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Jobdetails&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/hrstage_load_and_transform&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert technische Informationen zu einem bestimmten Job.&lt;br /&gt;
|-&lt;br /&gt;
|Jobdefinitionen neu einlesen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/writeJobsToDb&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liest die vorhandenen Jobdefinitionen erneut in die Datenbank ein.&lt;br /&gt;
|-&lt;br /&gt;
|Job starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/execute/eduetl/hrstage_load_and_transform&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet einen bestimmten Job und liefert eine JobExecutionId zurück.&lt;br /&gt;
|-&lt;br /&gt;
|Installation starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/install/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Installation einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Upgrade starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/upgrade/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet ein Upgrade einer installierten Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Alle Upgrades starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/upgrade_all&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet beziehungsweise verarbeitet anstehende Upgrades mehrerer Komponenten.&lt;br /&gt;
|-&lt;br /&gt;
|Komponente deinstallieren&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/uninstall/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Deinstallation einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Unload starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/unload/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet den Unload einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Transform starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/transform/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet die Transformation bereits vorhandener Daten.&lt;br /&gt;
|-&lt;br /&gt;
|Complete starten&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/complete/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Startet modulabhängige Abschlussarbeiten.&lt;br /&gt;
|-&lt;br /&gt;
|Installationsfunktionen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/installFunctions/hrstage&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt zusätzliche Installationsfunktionen einer Komponente.&lt;br /&gt;
|-&lt;br /&gt;
|Laufende Jobs&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/running&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt aktuell laufende Jobs.&lt;br /&gt;
|-&lt;br /&gt;
|Jobstatus&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/jobExecutionStatus/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den aktuellen Status einer Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Joblog&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/jobLog/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert das Protokoll einer Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Jobausführungen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/jobExecutionInfos&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert Informationen zu Jobausführungen.&lt;br /&gt;
|-&lt;br /&gt;
|Job stoppen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/stop/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Stoppt eine bestimmte Jobausführung.&lt;br /&gt;
|-&lt;br /&gt;
|Job starten oder fortsetzen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/start/12345&amp;lt;/code&amp;gt;&lt;br /&gt;
|Spricht eine vorhandene Jobausführung erneut an.&lt;br /&gt;
|-&lt;br /&gt;
|Alle Jobs stoppen&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/etl/job/stopAll&amp;lt;/code&amp;gt;&lt;br /&gt;
|Stoppt alle laufenden Jobs.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Typischer ETL-Ablauf===&lt;br /&gt;
&lt;br /&gt;
Eine Anwendung sollte die verfügbaren Jobs möglichst nicht fest hinterlegen, sondern dynamisch über die REST-Schnittstelle ermitteln.&lt;br /&gt;
&lt;br /&gt;
Ein typischer Ablauf für ein Modulupdate ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
1. Komponenten laden&lt;br /&gt;
   /etl/list&lt;br /&gt;
&lt;br /&gt;
2. Jobs des Moduls laden&lt;br /&gt;
   /etl/job/list/hrstage&lt;br /&gt;
&lt;br /&gt;
3. Gewünschten Job starten&lt;br /&gt;
   /etl/job/execute/eduetl/hrstage_unload_load_transform&lt;br /&gt;
&lt;br /&gt;
4. Jobstatus abfragen&lt;br /&gt;
   /etl/jobExecutionStatus/12345&lt;br /&gt;
&lt;br /&gt;
5. Jobprotokoll anzeigen&lt;br /&gt;
   /etl/jobLog/12345&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Start eines Jobs liefert normalerweise eine JobExecutionId. Diese ID wird anschließend für Status- und Logabfragen verwendet.&lt;br /&gt;
&lt;br /&gt;
Spezialjobs wie beispielsweise&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kern_unload_config_special&lt;br /&gt;
kern_upload_config_special&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
können ebenfalls über den generischen Execute-Endpunkt gestartet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SuperX-Masken und Berichte==&lt;br /&gt;
&lt;br /&gt;
Auch SuperX-Masken können über die REST-Schnittstelle angesprochen werden. Dadurch lassen sich Maskendefinitionen, Eingabefelder und Ergebnisdaten unabhängig von der klassischen SuperX-Oberfläche verwenden.&lt;br /&gt;
&lt;br /&gt;
Als Beispiel wird im Folgenden die Maske mit der TID 71030 verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Übersicht der wichtigsten Masken- und Berichtsaufrufe===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!Methode&lt;br /&gt;
!Beispiel&lt;br /&gt;
!Zweck&lt;br /&gt;
|-&lt;br /&gt;
|Maskenaufbau laden&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/form/71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die Eingabefelder der Maske mit Feldtypen, Defaultwerten, Auswahllisten und weiteren Eigenschaften.&lt;br /&gt;
|-&lt;br /&gt;
|Abhängige Felder aktualisieren&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/form/71030/inputupdate&amp;lt;/code&amp;gt;&lt;br /&gt;
|Berechnet abhängige Maskenfelder nach Änderung eines Eingabefeldes neu.&lt;br /&gt;
|-&lt;br /&gt;
|Informationen zur Maske&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert Metadaten der Maske wie TID, Name, Beschreibung und Sachgebiet.&lt;br /&gt;
|-&lt;br /&gt;
|Maske ausführen&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Führt die Maske aus und liefert die Ergebnistabelle als JSON.&lt;br /&gt;
|-&lt;br /&gt;
|Ergebnis-Stylesheets&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/stylesheets?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Zeigt die für die Maske verfügbaren Ergebnis-Stylesheets.&lt;br /&gt;
|-&lt;br /&gt;
|Sichten eines Feldes&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/views?tid=71030&amp;amp;amp;fieldName=Institution&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert die verfügbaren Sichten beziehungsweise Hierarchien eines Maskenfeldes.&lt;br /&gt;
|-&lt;br /&gt;
|Inhalt einer Sicht&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/view?tid=71030&amp;amp;amp;fieldName=Institution&amp;amp;amp;viewId=...&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den Inhalt einer bestimmten Sicht.&lt;br /&gt;
|-&lt;br /&gt;
|Bericht herunterladen&lt;br /&gt;
|POST&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/report/download?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Erzeugt einen Export des Berichtsergebnisses.&lt;br /&gt;
|-&lt;br /&gt;
|Themenbaum&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/menu/tree&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert den für den angemeldeten Benutzer sichtbaren SuperX-Themenbaum.&lt;br /&gt;
|-&lt;br /&gt;
|Teil des Themenbaums&lt;br /&gt;
|GET&lt;br /&gt;
|&amp;lt;code&amp;gt;https://demo.superx-testserver.de/superx/ds/api/menu?tid=71030&amp;lt;/code&amp;gt;&lt;br /&gt;
|Liefert einen bestimmten Bereich des Themenbaums.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Masken verwenden===&lt;br /&gt;
&lt;br /&gt;
Der Aufruf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://demo.superx-testserver.de/superx/ds/api/form/71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
liefert unter anderem:&lt;br /&gt;
&lt;br /&gt;
* Namen der Eingabefelder&lt;br /&gt;
* Feldtypen&lt;br /&gt;
* Beschriftungen&lt;br /&gt;
* Pflichtfelder&lt;br /&gt;
* Defaultwerte&lt;br /&gt;
* Auswahllisten&lt;br /&gt;
* Baum- beziehungsweise TreeSelect-Inhalte&lt;br /&gt;
* verfügbare Stylesheets&lt;br /&gt;
&lt;br /&gt;
Damit kann eine eigene Oberfläche die Eingabemaske dynamisch aufbauen.&lt;br /&gt;
&lt;br /&gt;
Zum eigentlichen Ausführen einer Maske wird der Report-Endpunkt mit HTTP POST verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
POST https://demo.superx-testserver.de/superx/ds/api/report?tid=71030&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Request benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Auch wenn keine Maskenparameter gesetzt werden sollen, muss ein gültiger JSON-Body mitgegeben werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sollen Felder gesetzt werden, werden diese über den JSON-Body übergeben.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;Kennung&amp;quot;: &amp;quot;admin&amp;quot;,&lt;br /&gt;
  &amp;quot;Gruppe&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;Name&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
  &amp;quot;Institution&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Antwort enthält die Ergebnistabelle als JSON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===POST-Aufruf im Browser testen===&lt;br /&gt;
&lt;br /&gt;
GET-Aufrufe können direkt über die Adresszeile des Browsers getestet werden.&lt;br /&gt;
&lt;br /&gt;
Für POST-Aufrufe kann beispielsweise in Firefox die Netzwerkanalyse verwendet werden:&lt;br /&gt;
&lt;br /&gt;
# Entwicklertools mit F12 öffnen.&lt;br /&gt;
# &#039;&#039;Netzwerkanalyse&#039;&#039; auswählen.&lt;br /&gt;
# Einen REST-Aufruf markieren und &#039;&#039;Bearbeiten und erneut senden&#039;&#039; auswählen.&lt;br /&gt;
# Methode von GET auf POST ändern.&lt;br /&gt;
# Header ergänzen:&lt;br /&gt;
#:&amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
# Unter &#039;&#039;Inhalt&#039;&#039; mindestens folgenden JSON-Body eintragen:&lt;br /&gt;
#:&amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt;&lt;br /&gt;
# Anfrage senden.&lt;br /&gt;
&lt;br /&gt;
Ein korrekt übertragener leerer JSON-Body führt beispielsweise zu:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Content-Type: application/json&lt;br /&gt;
Content-Length: 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typische Fehler:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Fehler!!Ursache!!Lösung&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Required request body is missing&amp;lt;/code&amp;gt;&lt;br /&gt;
|Der POST-Request enthält keinen Body.&lt;br /&gt;
|Mindestens &amp;lt;code&amp;gt;{}&amp;lt;/code&amp;gt; als Inhalt mitsenden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;Content-Type &#039;application/octet-stream&#039; is not supported&amp;lt;/code&amp;gt;&lt;br /&gt;
|Der Body wird ohne passenden Content-Type übertragen.&lt;br /&gt;
|&amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; setzen.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hinweise zur Verwendung==&lt;br /&gt;
&lt;br /&gt;
REST-Endpunkte können abhängig von ihrer Funktion Daten verändern oder umfangreiche Verarbeitungsläufe starten. Insbesondere Installation, Upgrade, Deinstallation und ETL-Jobs sollten daher nur für entsprechend berechtigte Benutzer verfügbar sein.&lt;br /&gt;
&lt;br /&gt;
Für eigene Weboberflächen empfiehlt es sich, Komponenten, Jobs und Masken dynamisch über die REST-Schnittstelle zu ermitteln. Dadurch müssen neue Module, Spezialjobs oder zusätzliche Masken nicht fest in der Oberfläche hinterlegt werden.&lt;br /&gt;
&lt;br /&gt;
Für die Komponentenverwaltung sind insbesondere die Kombinationen aus&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/etl/list&lt;br /&gt;
/etl/job/list/{component}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und für Masken&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/form/{tid}&lt;br /&gt;
/report?tid={tid}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
relevant.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:BI_Konnektoren.png&amp;diff=16658</id>
		<title>Datei:BI Konnektoren.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:BI_Konnektoren.png&amp;diff=16658"/>
		<updated>2026-09-21T13:37:47Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Uebersicht.png&amp;diff=16647</id>
		<title>Datei:SuperX ETL Manager Uebersicht.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Uebersicht.png&amp;diff=16647"/>
		<updated>2026-09-21T11:47:22Z</updated>

		<summary type="html">&lt;p&gt;Andrek: (Benutzername entfernt) (Logbucheinzelheiten entfernt)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Sonderladeroutinen&amp;diff=16619</id>
		<title>Kernmodul Sonderladeroutinen</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Sonderladeroutinen&amp;diff=16619"/>
		<updated>2026-09-16T09:28:02Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Die Seite wurde neu angelegt: „=Sonderladeroutinen in SuperX=  Sonderladeroutinen ermöglichen es, zusätzliche Lade- und Verarbeitungsschritte in SuperX abzubilden, ohne dafür eine reguläre Modulladeroutine verändern zu müssen.  Eine Sonderladeroutine besteht aus einem ETL-Job mit mehreren ETL-Schritten. Die einzelnen Schritte können beispielsweise Daten aus einer Datenbank entladen, UNL-Dateien in Tabellen laden, SQL-Befehle ausführen oder vorhandene SQL-Skripte starten.  Damit…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Sonderladeroutinen in SuperX=&lt;br /&gt;
&lt;br /&gt;
Sonderladeroutinen ermöglichen es, zusätzliche Lade- und Verarbeitungsschritte in SuperX abzubilden, ohne dafür eine reguläre Modulladeroutine verändern zu müssen.&lt;br /&gt;
&lt;br /&gt;
Eine Sonderladeroutine besteht aus einem ETL-Job mit mehreren ETL-Schritten. Die einzelnen Schritte können beispielsweise Daten aus einer Datenbank entladen, UNL-Dateien in Tabellen laden, SQL-Befehle ausführen oder vorhandene SQL-Skripte starten.&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich sowohl kleine Datenübernahmen als auch umfangreichere und komplexere Ladeprozesse individuell zusammenstellen.&lt;br /&gt;
&lt;br /&gt;
==Aufbau der Definitionsdatei==&lt;br /&gt;
&lt;br /&gt;
Am Anfang der Definitionsdatei befinden sich die FreeMarker-Definitionen der Sonderladeroutine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
etl_jobs&lt;br /&gt;
etl_job_params&lt;br /&gt;
etl_steps&lt;br /&gt;
etl_step_properties&lt;br /&gt;
testfaelle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser obere Bereich wird bei der Erstellung oder Anpassung einer Sonderladeroutine bearbeitet.&lt;br /&gt;
&lt;br /&gt;
Darunter beginnt das erste Makro, beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#macro etl_steps_def_check&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ab diesem ersten Makro sollte die Datei nicht mehr verändert werden.&lt;br /&gt;
&lt;br /&gt;
Für eine neue Sonderladeroutine wird daher am besten eine vorhandene Vorlage kopiert und ausschließlich der Definitionsbereich am Anfang der Datei angepasst.&lt;br /&gt;
&lt;br /&gt;
Am Ende der Datei wird die Verarbeitung mit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;@ETL_STEPS_FUELLEN/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gestartet.&lt;br /&gt;
&lt;br /&gt;
==ETL-Job==&lt;br /&gt;
&lt;br /&gt;
In &amp;lt;code&amp;gt;etl_jobs&amp;lt;/code&amp;gt; wird der eigentliche Ladejob definiert.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign etl_jobs = [&lt;br /&gt;
{&amp;quot;uniquename&amp;quot;:&amp;quot;kern_special_demo_special&amp;quot;,&lt;br /&gt;
 &amp;quot;name&amp;quot;:&amp;quot;Demo Sonderladeroutine&amp;quot;,&lt;br /&gt;
 &amp;quot;systeminfo_id&amp;quot;:9,&lt;br /&gt;
 &amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Angaben sind:&lt;br /&gt;
&lt;br /&gt;
===uniquename===&lt;br /&gt;
&lt;br /&gt;
Technisch eindeutiger Name des Jobs.&lt;br /&gt;
&lt;br /&gt;
Bei einer Sonderladeroutine muss der &amp;lt;code&amp;gt;uniquename&amp;lt;/code&amp;gt; auf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
_special&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
enden.&lt;br /&gt;
&lt;br /&gt;
Nur dann wird der Job in SuperX als Sonderladeroutine erkannt und entsprechend angezeigt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
kern_special_demo_special&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Namen der einzelnen ETL-Schritte müssen dagegen nicht auf &amp;lt;code&amp;gt;_special&amp;lt;/code&amp;gt; enden.&lt;br /&gt;
&lt;br /&gt;
===name===&lt;br /&gt;
&lt;br /&gt;
Bezeichnung des Jobs, die in der Oberfläche angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
===systeminfo_id===&lt;br /&gt;
&lt;br /&gt;
Komponente beziehungsweise SuperX-Modul, zu dem die Sonderladeroutine gehört.&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul ist dies beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===logfile===&lt;br /&gt;
&lt;br /&gt;
Optionales Feld für eine Logdatei. Für normale Sonderladeroutinen kann dieser Wert leer bleiben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;quot;logfile&amp;quot;:&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die bei der Ausführung erzeugten Jobprotokolle befinden sich normalerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
webapps/superx/WEB-INF/logs/jobs/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für einen Job wird dort eine Logdatei nach dem Schema&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
JOBNAME.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
erzeugt.&lt;br /&gt;
&lt;br /&gt;
Für die Demo-Sonderladeroutine wäre dies beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
webapps/superx/WEB-INF/logs/jobs/kern_special_demo_special.log&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Jobprotokoll ist insbesondere bei Fehlern hilfreich, da dort die Ausführung der einzelnen ETL-Schritte und mögliche Fehlermeldungen protokolliert werden.&lt;br /&gt;
&lt;br /&gt;
==Datenbankverbindungen==&lt;br /&gt;
&lt;br /&gt;
Bei einer Sonderladeroutine können unterschiedliche Datenbankverbindungen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Step-Typ heißen die entsprechenden Properties beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
datasource&lt;br /&gt;
dataSource&lt;br /&gt;
database&lt;br /&gt;
sqlVarSource&lt;br /&gt;
sqlVarDataSource&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtig ist dabei, dass hier nicht zwingend der physische Name der Datenbank angegeben wird.&lt;br /&gt;
&lt;br /&gt;
Verwendet wird der in SuperX konfigurierte Name der Datenbankverbindung.&lt;br /&gt;
&lt;br /&gt;
Die Datenbankverbindungen werden in&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
webapps/superx/WEB-INF/conf/his1_databases.properties&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
konfiguriert.&lt;br /&gt;
&lt;br /&gt;
Dort kann beispielsweise eine Verbindung unter dem Namen&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
eduetl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
definiert sein.&lt;br /&gt;
&lt;br /&gt;
Dieser Name wird dann auch in der Sonderladeroutine verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
oder bei einem LOAD-Schritt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der physische Datenbankname kann davon abweichen.&lt;br /&gt;
&lt;br /&gt;
Für die Sonderladeroutine ist daher der in &amp;lt;code&amp;gt;his1_databases.properties&amp;lt;/code&amp;gt; vergebene Name der Datenbankverbindung maßgeblich.&lt;br /&gt;
&lt;br /&gt;
Die genaue Konfiguration der Datei &amp;lt;code&amp;gt;his1_databases.properties&amp;lt;/code&amp;gt; wird separat beschrieben.&lt;br /&gt;
&lt;br /&gt;
==ETL-Jobparameter==&lt;br /&gt;
&lt;br /&gt;
Über &amp;lt;code&amp;gt;etl_job_params&amp;lt;/code&amp;gt; können Parameter für einen Ladejob definiert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn keine Parameter benötigt werden, bleibt die Definition leer:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign etl_job_params = [&lt;br /&gt;
] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Parameter besitzt drei wesentliche Angaben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
param_name&lt;br /&gt;
name&lt;br /&gt;
param_default&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign etl_job_params = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;kern_special_demo_special&amp;quot;,&lt;br /&gt;
 &amp;quot;param_name&amp;quot;:&amp;quot;semester&amp;quot;,&lt;br /&gt;
 &amp;quot;name&amp;quot;:&amp;quot;Semester&amp;quot;,&lt;br /&gt;
 &amp;quot;param_default&amp;quot;:&amp;quot;20262&amp;quot;}&lt;br /&gt;
] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei bedeutet:&lt;br /&gt;
&lt;br /&gt;
;etl_job&lt;br /&gt;
:Der Job, zu dem der Parameter gehört.&lt;br /&gt;
&lt;br /&gt;
;param_name&lt;br /&gt;
:Technischer Name des Parameters, im Beispiel &amp;lt;code&amp;gt;semester&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;name&lt;br /&gt;
:Bezeichnung des Parameters, im Beispiel &amp;lt;code&amp;gt;Semester&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;param_default&lt;br /&gt;
:Defaultwert, der verwendet beziehungsweise bei der Ausführung vorbelegt werden kann, im Beispiel &amp;lt;code&amp;gt;20262&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Weitere denkbare Parameter wären beispielsweise:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
startdatum&lt;br /&gt;
dateiname&lt;br /&gt;
nur_pruefen&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mit Defaultwerten wie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2026-01-01&lt;br /&gt;
daten.unl&lt;br /&gt;
false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit können Werte, die sich zwischen einzelnen Jobausführungen ändern sollen, als Jobparameter definiert werden, anstatt sie fest in der Laderoutine zu hinterlegen.&lt;br /&gt;
&lt;br /&gt;
Welche Parameter tatsächlich sinnvoll sind und wie sie innerhalb eines konkreten ETL-Schrittes verwendet werden, hängt vom jeweiligen Step-Typ und dessen Handler ab.&lt;br /&gt;
&lt;br /&gt;
Für einfache Sonderladeroutinen werden Jobparameter normalerweise nicht benötigt.&lt;br /&gt;
&lt;br /&gt;
==ETL-Schritte==&lt;br /&gt;
&lt;br /&gt;
Die einzelnen Verarbeitungsschritte werden in &amp;lt;code&amp;gt;etl_steps&amp;lt;/code&amp;gt; definiert.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign etl_steps = [&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;kern_special_demo_special&amp;quot;,&lt;br /&gt;
 &amp;quot;uniquename&amp;quot;:&amp;quot;kern_special_demo_unload&amp;quot;,&lt;br /&gt;
 &amp;quot;name&amp;quot;:&amp;quot;Demo-Daten entladen&amp;quot;,&lt;br /&gt;
 &amp;quot;type&amp;quot;:&amp;quot;UNLOAD&amp;quot;,&lt;br /&gt;
 &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;kern_special_demo_special&amp;quot;,&lt;br /&gt;
 &amp;quot;uniquename&amp;quot;:&amp;quot;kern_special_demo_create&amp;quot;,&lt;br /&gt;
 &amp;quot;name&amp;quot;:&amp;quot;Demo-Zieltabelle anlegen&amp;quot;,&lt;br /&gt;
 &amp;quot;type&amp;quot;:&amp;quot;DOQUERY&amp;quot;,&lt;br /&gt;
 &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_job&amp;quot;:&amp;quot;kern_special_demo_special&amp;quot;,&lt;br /&gt;
 &amp;quot;uniquename&amp;quot;:&amp;quot;kern_special_demo_load&amp;quot;,&lt;br /&gt;
 &amp;quot;name&amp;quot;:&amp;quot;Demo-Daten laden&amp;quot;,&lt;br /&gt;
 &amp;quot;type&amp;quot;:&amp;quot;LOAD&amp;quot;,&lt;br /&gt;
 &amp;quot;parent&amp;quot;:&amp;quot;&amp;quot;}&lt;br /&gt;
] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Angaben sind:&lt;br /&gt;
&lt;br /&gt;
;etl_job&lt;br /&gt;
:Technischer Name des Jobs, zu dem der Step gehört.&lt;br /&gt;
&lt;br /&gt;
;uniquename&lt;br /&gt;
:Technisch eindeutiger Name des ETL-Schrittes.&lt;br /&gt;
&lt;br /&gt;
;name&lt;br /&gt;
:Bezeichnung des Schrittes.&lt;br /&gt;
&lt;br /&gt;
;type&lt;br /&gt;
:Art des auszuführenden ETL-Schrittes.&lt;br /&gt;
&lt;br /&gt;
;parent&lt;br /&gt;
:Optionaler übergeordneter Step. Bei einem einfachen linearen Ablauf bleibt dieser Wert leer.&lt;br /&gt;
&lt;br /&gt;
Die Reihenfolge der Einträge in &amp;lt;code&amp;gt;etl_steps&amp;lt;/code&amp;gt; bestimmt die Ausführungsreihenfolge.&lt;br /&gt;
&lt;br /&gt;
==Verfügbare Step-Typen==&lt;br /&gt;
&lt;br /&gt;
Das Template unterstützt folgende Step-Typen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Typ&lt;br /&gt;
!Funktion&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;UNLOAD&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ergebnis einer SQL-Abfrage in eine Datei schreiben&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt;&lt;br /&gt;
|Datei in eine Datenbanktabelle laden&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;&lt;br /&gt;
|SQL-Befehl direkt ausführen&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DOSQL&amp;lt;/code&amp;gt;&lt;br /&gt;
|SQL-Skriptdatei ausführen&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;MSG&amp;lt;/code&amp;gt;&lt;br /&gt;
|Ausgabe beziehungsweise Nachricht innerhalb der Verarbeitung&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Für typische Sonderladeroutinen werden insbesondere &amp;lt;code&amp;gt;UNLOAD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;DOSQL&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
&lt;br /&gt;
==Step-Properties==&lt;br /&gt;
&lt;br /&gt;
Die Eigenschaften der einzelnen ETL-Schritte werden über &amp;lt;code&amp;gt;etl_step_properties&amp;lt;/code&amp;gt; definiert.&lt;br /&gt;
&lt;br /&gt;
Der allgemeine Aufbau lautet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;NAME_DES_SCHRITTES&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;PROPERTY&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;WERT&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;etl_step&amp;lt;/code&amp;gt; verweist dabei auf den &amp;lt;code&amp;gt;uniquename&amp;lt;/code&amp;gt; eines zuvor definierten ETL-Schrittes.&lt;br /&gt;
&lt;br /&gt;
Je nach Step-Typ stehen unterschiedliche Properties zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
==UNLOAD==&lt;br /&gt;
&lt;br /&gt;
Ein &amp;lt;code&amp;gt;UNLOAD&amp;lt;/code&amp;gt;-Schritt führt eine SQL-Abfrage auf einer Datenbank aus und schreibt deren Ergebnis in eine Datei.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_unload&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;datasource&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_unload&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarSource&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_unload&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;select 1 as id, &#039;&#039;Demo&#039;&#039; as name&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_unload&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;unlFile&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;$KERN_LOAD_PFAD/unl/kern_special_demo.unl&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtige Properties:&lt;br /&gt;
&lt;br /&gt;
;datasource&lt;br /&gt;
:Datenbankverbindung, auf der die SQL-Abfrage ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
;sqlVarSource&lt;br /&gt;
:Datenbankverbindung für die Verarbeitung von SQL-Variablen. In der Regel wird hier dieselbe Datenbankverbindung wie bei &amp;lt;code&amp;gt;datasource&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
&lt;br /&gt;
;sql&lt;br /&gt;
:SQL-Abfrage, deren Ergebnis entladen werden soll.&lt;br /&gt;
&lt;br /&gt;
;unlFile&lt;br /&gt;
:Datei, in die das Ergebnis geschrieben wird.&lt;br /&gt;
&lt;br /&gt;
;sourceVersions&lt;br /&gt;
:Optionale Einschränkung nach Versionen des Vorsystems.&lt;br /&gt;
&lt;br /&gt;
==DOQUERY==&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt; kann ein SQL-Befehl direkt ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_create&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_create&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_create&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;create table if not exists tmp_kern_special_demo (id integer, name varchar(20))&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtige Properties:&lt;br /&gt;
&lt;br /&gt;
;dataSource&lt;br /&gt;
:Datenbankverbindung, auf der der SQL-Befehl ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
;sqlVarDataSource&lt;br /&gt;
:Datenbankverbindung für die Verarbeitung von SQL-Variablen.&lt;br /&gt;
&lt;br /&gt;
;sql&lt;br /&gt;
:Auszuführender SQL-Befehl.&lt;br /&gt;
&lt;br /&gt;
;databaseSystem&lt;br /&gt;
:Verwendetes Datenbanksystem, standardmäßig &amp;lt;code&amp;gt;postgres&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;sourceVersions&lt;br /&gt;
:Optionale Einschränkung nach Quellversionen.&lt;br /&gt;
&lt;br /&gt;
Für kurze SQL-Anweisungen ist &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt; meist die einfachste Möglichkeit.&lt;br /&gt;
&lt;br /&gt;
==LOAD==&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt; wird eine Datei in eine Datenbanktabelle geladen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_load&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;database&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_load&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;unlFilePath&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;$KERN_LOAD_PFAD/unl/kern_special_demo.unl&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_load&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;tableName&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;tmp_kern_special_demo&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtige Properties:&lt;br /&gt;
&lt;br /&gt;
;database&lt;br /&gt;
:Datenbankverbindung der Zieltabelle.&lt;br /&gt;
&lt;br /&gt;
;unlFilePath&lt;br /&gt;
:Pfad der einzulesenden Datei.&lt;br /&gt;
&lt;br /&gt;
;tableName&lt;br /&gt;
:Zieltabelle.&lt;br /&gt;
&lt;br /&gt;
;delimiter&lt;br /&gt;
:Feldtrenner. Standard ist &amp;lt;code&amp;gt;^&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;header&lt;br /&gt;
:Gibt an, ob die Datei eine Kopfzeile enthält. Standard ist &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;refresh&lt;br /&gt;
:Legt fest, ob die Tabelle vor dem Laden geleert wird. Standard ist &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
;usePostgresCopyApi&lt;br /&gt;
:Verwendet bei PostgreSQL die COPY-basierte Ladefunktion. Standard ist &amp;lt;code&amp;gt;true&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Anzahl und Reihenfolge der Felder in der Datei müssen zur Zieltabelle passen.&lt;br /&gt;
&lt;br /&gt;
==DOSQL==&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;DOSQL&amp;lt;/code&amp;gt; wird eine vorhandene SQL-Skriptdatei ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Dies ist sinnvoll, wenn die Verarbeitung umfangreicher ist oder bereits ein SQL-Skript vorhanden ist.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;mein_update&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;sqlScriptPath&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;$KERN_PFAD/schluesseltabellen/mein_update.sql&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;mein_update&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;dataSource&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;},&lt;br /&gt;
&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;mein_update&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;sqlVarDataSource&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;eduetl&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wichtige Properties sind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
sqlScriptPath&lt;br /&gt;
dataSource&lt;br /&gt;
sqlVarDataSource&lt;br /&gt;
databaseSystem&lt;br /&gt;
limitDebugStmts&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kurze SQL-Befehle können direkt über &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt; definiert werden. Umfangreichere SQL-Verarbeitungen können mit &amp;lt;code&amp;gt;DOSQL&amp;lt;/code&amp;gt; in eine eigene Datei ausgelagert werden.&lt;br /&gt;
&lt;br /&gt;
==Unterschiedliche Datenbank-Properties==&lt;br /&gt;
&lt;br /&gt;
Je nach Step-Typ wird für die Datenbankverbindung ein unterschiedlicher Property-Name verwendet.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!Step-Typ&lt;br /&gt;
!Datenbank-Property&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;UNLOAD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;datasource&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;dataSource&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;DOSQL&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;dataSource&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt;&lt;br /&gt;
|&amp;lt;code&amp;gt;database&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Groß- und Kleinschreibung sollte exakt übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich gibt es für die SQL-Variablenverarbeitung &amp;lt;code&amp;gt;sqlVarSource&amp;lt;/code&amp;gt; beziehungsweise &amp;lt;code&amp;gt;sqlVarDataSource&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Automatische Standardwerte==&lt;br /&gt;
&lt;br /&gt;
Das Template ergänzt verschiedene Properties automatisch, wenn sie nicht ausdrücklich definiert wurden.&lt;br /&gt;
&lt;br /&gt;
Für alle Steps werden unter anderem folgende Werte gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
systemInfoId&lt;br /&gt;
active = true&lt;br /&gt;
custom = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je nach Step-Typ werden weitere Standardwerte ergänzt.&lt;br /&gt;
&lt;br /&gt;
Beispielsweise bei &amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
database           = eduetl&lt;br /&gt;
delimiter          = ^&lt;br /&gt;
header             = false&lt;br /&gt;
refresh            = true&lt;br /&gt;
usePostgresCopyApi = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt; werden unter anderem verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
databaseSystem   = postgres&lt;br /&gt;
dataSource       = eduetl&lt;br /&gt;
sqlVarDataSource = eduetl&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Damit können einfache Sonderladeroutinen relativ kompakt definiert werden.&lt;br /&gt;
&lt;br /&gt;
Wenn vom Standard abgewichen werden soll, wird das entsprechende Property ausdrücklich in &amp;lt;code&amp;gt;etl_step_properties&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
&lt;br /&gt;
==Pfade==&lt;br /&gt;
&lt;br /&gt;
Bei Dateien sollten möglichst die vorhandenen SuperX- beziehungsweise Modulvariablen verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Beispiele:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
$KERN_LOAD_PFAD/unl/datei.unl&lt;br /&gt;
$SVA_LOAD_PFAD/unl/datei.unl&lt;br /&gt;
$SVA_PFAD/schluesseltabellen/script.sql&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch müssen keine absoluten Installationspfade in der Sonderladeroutine hinterlegt werden.&lt;br /&gt;
&lt;br /&gt;
==SQL innerhalb von prop_value==&lt;br /&gt;
&lt;br /&gt;
SQL-Anweisungen werden innerhalb eines FreeMarker-Strings definiert.&lt;br /&gt;
&lt;br /&gt;
Enthält das SQL selbst einfache Hochkommata, müssen diese verdoppelt werden.&lt;br /&gt;
&lt;br /&gt;
Statt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
select 1, &#039;Demo&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wird innerhalb von &amp;lt;code&amp;gt;prop_value&amp;lt;/code&amp;gt; geschrieben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
select 1, &#039;&#039;Demo&#039;&#039;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
{&amp;quot;etl_step&amp;quot;:&amp;quot;kern_special_demo_unload&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_name&amp;quot;:&amp;quot;sql&amp;quot;,&lt;br /&gt;
 &amp;quot;prop_value&amp;quot;:&amp;quot;select 1 as id, &#039;&#039;Demo&#039;&#039; as name&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testfälle==&lt;br /&gt;
&lt;br /&gt;
Die Definitionsdatei bietet zusätzlich die Möglichkeit, einfache Testfälle anzugeben.&lt;br /&gt;
&lt;br /&gt;
Wenn keine Tests benötigt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign testfaelle = [&lt;br /&gt;
] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein Testfall besteht aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
testcase&lt;br /&gt;
assertion&lt;br /&gt;
sql&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;testcase&lt;br /&gt;
:Name des Testfalls.&lt;br /&gt;
&lt;br /&gt;
;assertion&lt;br /&gt;
:Erwarteter Wert.&lt;br /&gt;
&lt;br /&gt;
;sql&lt;br /&gt;
:SQL-Abfrage, die einen einzelnen Vergleichswert zurückliefert.&lt;br /&gt;
&lt;br /&gt;
Ein einfacher Test kann beispielsweise prüfen, ob der definierte ETL-Job nach dem Einspielen vorhanden ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#assign testfaelle = [&lt;br /&gt;
{&amp;quot;testcase&amp;quot;:&amp;quot;Demo-Job wurde angelegt&amp;quot;,&lt;br /&gt;
 &amp;quot;assertion&amp;quot;:&amp;quot;1&amp;quot;,&lt;br /&gt;
 &amp;quot;sql&amp;quot;:&amp;quot;select count(*) from etl_job where uniquename=&#039;kern_special_demo_special&#039;&amp;quot;}&lt;br /&gt;
] /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Template vergleicht den erwarteten Wert mit dem Ergebnis der SQL-Abfrage.&lt;br /&gt;
&lt;br /&gt;
Diese Testfälle werden beim Einspielen der Definitionsdatei ausgeführt. Sie testen damit die Installation beziehungsweise den Zustand unmittelbar nach dem Einspielen der Definition und nicht automatisch das Ergebnis einer späteren Ausführung des ETL-Jobs.&lt;br /&gt;
&lt;br /&gt;
==Bereich unterhalb der Definitionen==&lt;br /&gt;
&lt;br /&gt;
Unterhalb der FreeMarker-Definitionen beginnen die allgemeinen Makros der Vorlage.&lt;br /&gt;
&lt;br /&gt;
Ab dem ersten&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;#macro ...&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sollte die Datei nicht mehr bearbeitet werden.&lt;br /&gt;
&lt;br /&gt;
Für eine eigene Sonderladeroutine reicht es aus, die FreeMarker-Definitionen am Anfang der Datei anzupassen.&lt;br /&gt;
&lt;br /&gt;
==Einspielen der Sonderladeroutine==&lt;br /&gt;
&lt;br /&gt;
Die fertige Definitionsdatei wird in einer geladenen SuperX-Umgebung mit &amp;lt;code&amp;gt;DOSQL&amp;lt;/code&amp;gt; eingespielt.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DOSQL kern_sonderladeroutine_demo.sql&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden Job, ETL-Steps, Properties, Jobparameter und die Beziehungen zwischen den Steps erzeugt beziehungsweise aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Anschließend steht der Job als Sonderladeroutine zur Verfügung, wenn sein &amp;lt;code&amp;gt;uniquename&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;_special&amp;lt;/code&amp;gt; endet.&lt;br /&gt;
&lt;br /&gt;
==Demo-Sonderladeroutine==&lt;br /&gt;
&lt;br /&gt;
Als Vorlage steht eine bewusst klein gehaltene Demo-Sonderladeroutine zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
Die Demo-Datei befindet sich im Git-Repository:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
BI_Maintenance&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sie kann als Ausgangspunkt für eigene Sonderladeroutinen verwendet werden. Dabei sollte nur der Definitionsbereich am Anfang der Datei angepasst werden. Der darunterliegende Makrobereich bleibt unverändert.&lt;br /&gt;
&lt;br /&gt;
Die Demo zeigt einen möglichst kleinen vollständigen Ablauf.&lt;br /&gt;
&lt;br /&gt;
Der erste Step entlädt einen einfachen Datensatz:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
select 1 as id, &#039;Demo&#039; as name;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Ergebnis wird in eine UNL-Datei geschrieben.&lt;br /&gt;
&lt;br /&gt;
Anschließend erzeugt ein &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;-Step eine kleine Zieltabelle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
create table if not exists tmp_kern_special_demo&lt;br /&gt;
(&lt;br /&gt;
    id integer,&lt;br /&gt;
    name varchar(20)&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der abschließende &amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt;-Step lädt die zuvor erzeugte UNL-Datei in diese Tabelle.&lt;br /&gt;
&lt;br /&gt;
Der Ablauf ist damit:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Datenbank&lt;br /&gt;
  ↓&lt;br /&gt;
UNLOAD&lt;br /&gt;
  ↓&lt;br /&gt;
UNL-Datei&lt;br /&gt;
  ↓&lt;br /&gt;
LOAD&lt;br /&gt;
  ↓&lt;br /&gt;
Zieltabelle&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Demo zeigt damit die grundlegende Arbeitsweise einer Sonderladeroutine, ohne dass komplexes SQL vom Aufbau der ETL-Schritte ablenkt.&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
*Eine vorhandene Vorlage kopieren.&lt;br /&gt;
*Nur die FreeMarker-Definitionen am Anfang der Datei bearbeiten.&lt;br /&gt;
*Ab dem ersten Makro den Inhalt der Vorlage unverändert lassen.&lt;br /&gt;
*Der &amp;lt;code&amp;gt;uniquename&amp;lt;/code&amp;gt; des ETL-Jobs muss auf &amp;lt;code&amp;gt;_special&amp;lt;/code&amp;gt; enden.&lt;br /&gt;
*Für Datenbanken den in &amp;lt;code&amp;gt;his1_databases.properties&amp;lt;/code&amp;gt; definierten Verbindungsnamen verwenden.&lt;br /&gt;
*Der Verbindungsname muss nicht mit dem physischen Datenbanknamen übereinstimmen.&lt;br /&gt;
*Die Property-Namen einschließlich Groß- und Kleinschreibung exakt übernehmen.&lt;br /&gt;
*Bei SQL innerhalb von &amp;lt;code&amp;gt;prop_value&amp;lt;/code&amp;gt; einfache Hochkommata verdoppeln.&lt;br /&gt;
*Bei &amp;lt;code&amp;gt;LOAD&amp;lt;/code&amp;gt; darauf achten, dass Aufbau der Datei und Aufbau der Zieltabelle zusammenpassen.&lt;br /&gt;
*Für kurze SQL-Befehle eignet sich &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;, für umfangreichere vorhandene SQL-Dateien &amp;lt;code&amp;gt;DOSQL&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Bei Problemen das Jobprotokoll unter &amp;lt;code&amp;gt;WEB-INF/logs/jobs/JOBNAME.log&amp;lt;/code&amp;gt; prüfen.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Moduldokumentation&amp;diff=16618</id>
		<title>Moduldokumentation</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Moduldokumentation&amp;diff=16618"/>
		<updated>2026-09-16T09:22:16Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* SuperX.Kern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=SuperX.Nummernkreise=&lt;br /&gt;
* [[Nummernkreise|Nummernkreise Masken]]&lt;br /&gt;
* [[Nummernkreise Sachgebiete und Komponenten]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Kern=&lt;br /&gt;
* [[Moduldokumentation Kernmodul|Kernmodul]]&lt;br /&gt;
* [[Kern_Installation_Upgrade|Installation / Upgrade]]&lt;br /&gt;
* [[Kernmodul_Tomcat-Einrichtung|Tomcat-Einrichtung]]&lt;br /&gt;
* [[Kernmodul_LDAP-Einrichtung|LDAP-Einrichtung (obsolet?)]]&lt;br /&gt;
* [[Kern_Konfiguration|Konfiguration]]&lt;br /&gt;
* [[Kern_Oberflaeche|Anpassung der Oberfläche]]&lt;br /&gt;
* [[Kernmodul_Komponentenverwaltung|Komponentenverwaltung]]&lt;br /&gt;
* [[Kernmodul_Sonderladeroutinen|Sonderladeroutinen]]&lt;br /&gt;
* [[Kernmodul_Regelbetrieb|BI Regelbetrieb]]&lt;br /&gt;
* [[Kernmodul_Shellscripte|Shellscripte]]&lt;br /&gt;
* [[Kern_Bestandteile|Bestandteile]]&lt;br /&gt;
* [[Kern_Clientwerkzeuge|Client-Werkzeuge]]&lt;br /&gt;
* [https://wiki.his.de/mediawiki/index.php/Administration_-_HISinOne-BI Administrationsmasken (HISWIKI)]&lt;br /&gt;
* [[Kern_Benutzerverwaltung|Benutzerverwaltung]]&lt;br /&gt;
&lt;br /&gt;
=SuperX-Entwicklung=&lt;br /&gt;
* [[SuperX-Entwicklung|Übersicht]]&lt;br /&gt;
* [[Masken-Tutorial]]&lt;br /&gt;
* [[Erweiterte Maskenprogrammierung: Freemarker Templates]]&lt;br /&gt;
* [[Masken- und Tabellengestaltung]]&lt;br /&gt;
* [[Masken für das XML-Frontend vorbereiten]] (obsolet)&lt;br /&gt;
* [[Masken für externe Datenbanken (operatives Berichtswesen)]]&lt;br /&gt;
* [[Hochschuleigene Laderoutinen]]&lt;br /&gt;
* [[Abfragemakros (einschl. Schleifen u. Grafiken)]]&lt;br /&gt;
* [https://wiki.his.de/mediawiki/index.php/SXimport_zur_Maskengestaltung_verwerden-HISinOne-BI Teile aus anderen Masken oder externen Tabellen importieren]&lt;br /&gt;
* [[Neue Layouts in SuperX 5.1]] (obsolet)&lt;br /&gt;
* [[Neue Layouts in SuperX 5.2]]&lt;br /&gt;
* [[Entwicklerschulung]]&lt;br /&gt;
* HISWIKI&lt;br /&gt;
** [https://wiki.his.de/mediawiki/index.php/Entwicklerdokumentation_HISinOne Leitfäden für Entwickler]&lt;br /&gt;
** [https://wiki.his.de/mediawiki/index.php/Leitf%C3%A4den_f%C3%BCr_Entwickler_der_HISinOne-BI Leitfäden für Entwickler (BI)]&lt;br /&gt;
* [[Maschinenlesbare Schnittstellen für Ergebnistabellen]]&lt;br /&gt;
* [[Kettle-Grundlagen]]&lt;br /&gt;
* [[Kettle Kurs Teil 2]]&lt;br /&gt;
* [[Kettle Automat. Berichtsausführung und Mailversand]]&lt;br /&gt;
* [[LM-Modul validieren (Abgleich mit EXA)]]&lt;br /&gt;
* [[Dashboards erstellen]]&lt;br /&gt;
* [[Entwicklerhandbuch_xcube]]&lt;br /&gt;
* [[Gxstage-Standalone]]&lt;br /&gt;
* [[SuperX REST Schnittstelle]]&lt;br /&gt;
* [[Berichtsdesign mit JasperReports]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Campus-Management=&lt;br /&gt;
&lt;br /&gt;
* [[Moduldokumentation Bewerbung_Zulassung|Bewerbungen, Zulassungen]]&lt;br /&gt;
** [[Leitfaden Bewerberstammdaten]]&lt;br /&gt;
** [[Auswertungsuebersicht_Bereich_Bewerbung_Zulassung | Auswertungsübersicht]]&lt;br /&gt;
** [[Anwendungshandbuch Bewerbung, Zulassung]]&lt;br /&gt;
** [[Konfigurationshandbuch Bewerbung, Zulassung]]&lt;br /&gt;
* [[Moduldokumentation Studierende_Pruefungen|Studierende, Prüfungen]]&lt;br /&gt;
** [[Auswertungsuebersicht_Bereich_Studierende_Pruefungen | Auswertungsübersicht]]&lt;br /&gt;
** [[Anwendungshandbuch Studierende]]&lt;br /&gt;
** [[Anwendungshandbuch Pruefungen|Anwendungshandbuch Prüfungen]]&lt;br /&gt;
** [[Konfigurationshandbuch Studierenden-Komponente|Konfigurationshandbuch Studierende]]&lt;br /&gt;
** [[Konfiguration Studierende, Pruefungen|Konfiguration Studierende, Prüfungen]]&lt;br /&gt;
** [[Konfiguration Studierende_Pruefungen_Stichtage|Konfiguration Studierende, Prüfungen Stichtage]]&lt;br /&gt;
* [[Moduldokumentation Studienerfolg|Studienerfolg]]&lt;br /&gt;
** [[Studienerfolg_Akkreditierungsberichte|Akkreditierungsberichte]]&lt;br /&gt;
** [[Studienerfolg Bachelor-Master Übergang|Bachelor-Master Übergang]]&lt;br /&gt;
** [[Anwendungshandbuch_Studienverlauf|Anwendungshandbuch Studienverlauf]]&lt;br /&gt;
** [[Konfigurationshandbuch_Studienverlauf|Konfigurationshandbuch Studienverlauf]]&lt;br /&gt;
* [[Moduldokumentation Leistungsmonitoring|Leistungsmonitoring]]&lt;br /&gt;
** [[Konfigurationshanbuch Leistungsmonitoring|Konfigurationshandbuch]]&lt;br /&gt;
** [[Nutzungshandbuch Leistungsmonitoring|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Studiengaenge|Studiengänge]]&lt;br /&gt;
** [[Konfigurationshandbuch Studiengaenge|Konfigurationshandbuch]]&lt;br /&gt;
** [[Anwendungshandbuch_Studiengaenge|Anwendungshandbuch Studiengänge]]&lt;br /&gt;
* [[Moduldokumentation COSTAGE| COStage (TU Graz CampusOnline)]]&lt;br /&gt;
** [[Modul_COSTAGE_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_COSTAGE_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
** [[COSTAGE_in_Deutschland|COStage in Deutschland]]&lt;br /&gt;
* [[Moduldokumentation Mehrfachstudiengaenge| Mehrfachstudiengänge]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Ressourcen-Management=&lt;br /&gt;
* [[Moduldokumentation Personal, Stellen|Personal, Stellen]]&lt;br /&gt;
** [[Konfigurationshandbuch Personal und Stellen|Konfigurationshandbuch]]&lt;br /&gt;
&amp;lt;!--** [[Nutzungshandbuch Personal und Stellen|Nutzungshandbuch]]--&amp;gt;&lt;br /&gt;
** Benutzungshandbücher&lt;br /&gt;
*** Personal im [http://www.superx-projekt.de/doku/sva_modul/benutzer/pers/main.htm html]/[http://www.superx-projekt.de/doku/sva_modul/benutzer/pers/main.pdf pdf]-Format.&lt;br /&gt;
*** Stellen im [http://www.superx-projekt.de/doku/sva_modul/benutzer/stell/main.htm html]/[http://www.superx-projekt.de/doku/sva_modul/benutzer/stell/main.pdf pdf]-Format.&lt;br /&gt;
*** Besetzung im [http://www.superx-projekt.de/doku/sva_modul/benutzer/bes/main.htm html]/[http://www.superx-projekt.de/doku/sva_modul/benutzer/bes/main.pdf pdf]-Format.&lt;br /&gt;
* [[Moduldokumentation Finanzrechnung|Finanzen]]&lt;br /&gt;
* [[Moduldokumentation Kostenrechnung|Kostenrechnung]]&lt;br /&gt;
* [[Moduldokumentation Inventar|Inventar]]&lt;br /&gt;
* [[Moduldokumentation Bau|Flächen, Räume]]&lt;br /&gt;
* [[Moduldokumentation GXStage|GXStage]]&lt;br /&gt;
** [[Modul_GXStage_Konfigurationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_GXStage_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
** [[Modul_GXStage_Nutzungshandbuch_KI|Nutzungshandbuch von KI]]&lt;br /&gt;
* [[Moduldokumentation HRStage|HRStage]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Campus-Ressourcen-Übergreifend=&lt;br /&gt;
* [[Moduldokumentation Managementkennzahlen|Managementkennzahlen (MAN)]]&lt;br /&gt;
**[[Modul_Managementkennzahlen_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
**[[Modul_Managementkennzahlen_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Grunddaten und Kennzahlen|Landeskennzahlen (KENN/KENNX)]]&lt;br /&gt;
** [[Modul_KENN_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[SuperX-Connect|SuperX-Connect (SXC)]]&lt;br /&gt;
** [[Modul_SuperXConnect_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_SuperXConnect_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Wissensbasis|Wissensbasis (KB)]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Technologie und Qualitätssicherung=&lt;br /&gt;
* [[Heartbeat|Moduldokumentation Heartbeat]]&lt;br /&gt;
* [[Moduldokumentation Laderoutinen| Moduldokumentation Laderoutinen (ETL)]]&lt;br /&gt;
**[[Modul_ETL_Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
**[[Modul_ETL_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
* [[Moduldokumentation Qualitätssicherung |Moduldokumentation Qualitätssicherung (QA)]]&lt;br /&gt;
** [[Modul_Qualitätssicherung Administrationshandbuch|Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Qualitätssicherung Benutzerhandbuch|Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_Visualisierung|Moduldokumentation Visualisierung (VIZ)]]&lt;br /&gt;
** [[Modul_Visualisierung_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Visualisierung_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_xCube|Moduldokumentation Kreuztabellen (Xcube)]]&lt;br /&gt;
** [[Modul_xCube_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_xCube_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
**[[Entwicklerhandbuch_xcube|Entwicklerhandbuch]]&lt;br /&gt;
*[[Modul_Berichtsassistent|Moduldokumentation Berichtsassistent (RPTA)]]&lt;br /&gt;
** [[Modul_Berichtsassistent_Konfigurationshandbuch| Konfigurationshandbuch]]&lt;br /&gt;
** [[Modul_Berichtsassistent_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
** [[RPTA_TODOs|TODOs (Intern)]]&lt;br /&gt;
*[[Modul_Nutzungsantraege|Moduldokumentation Nutzungsanträge (USERANTRAG)]]&lt;br /&gt;
**[[Modul_Nutzungsantraege_Nutzungshandbuch|Nutzungshandbuch]]&lt;br /&gt;
*[[Modul_Portalkonfiguration|Moduldokumentation Portalkonfiguration (PORTAL)]]&lt;br /&gt;
** [[Modul_Portalkonfiguration_Nutzungshandbuch| Nutzungshandbuch]]&lt;br /&gt;
&lt;br /&gt;
=SuperX.Bedienung=&lt;br /&gt;
* [[SuperX-Benutzungshandbuch_Basics|SuperX-Benutzungshandbuch: Basics]]&lt;br /&gt;
* [[SuperX_barrierefrei | SuperX barrierefrei?]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Shellscripte&amp;diff=16611</id>
		<title>Kernmodul Shellscripte</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Shellscripte&amp;diff=16611"/>
		<updated>2026-09-09T14:23:02Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Propadmin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= SuperX-spezifische Scripte: Übersicht =&lt;br /&gt;
Für die Administration des DataWarehouse sind Shellscripte vorbereitet, die flexible Werkzeuge zur Datenbankadministration bereitstellen. Die Shellscripte werden in den Update-Scripten aufgerufen, können aber auch zur manuellen Administration benutzt werden. Die wichtigsten Bereiche sind die Masken-Verwaltung und die Ladescripte im Umgang mit Tabellen sowie allgemeine Scripte.&lt;br /&gt;
Alle Scripte befinden sich unter $SUPERX_DIR/db/bin, deshalb muss dieser Pfad in der Umgebungsvariable PATH enthalten sein. Die Scripte wurden unter UNIX entwickelt (ohne Endung oder Endung .x), einige davon sind auch nach DOS portiert worden (erkennbar an der Endung .bat). &lt;br /&gt;
Einige Scripte lauten &amp;quot;sx_auto_&amp;quot;..., dies bedeutet, dass die Scripte ohne Sicherheitsabfrage ausgeführt werden. &lt;br /&gt;
Voraussetzung für den Ablauf der Scripte ist die Eintragung der korrekten Umgebungsvariablen in $SUPERX_DIR/db/bin/SQL_ENV bzw. $SUPERX_DIR\db\bin\sql_env.bat. Wenn der Client jdbc verwendet wird, muss ausserdem die korrekte [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
=Die Umgebungssteuerung SQL_ENV =&lt;br /&gt;
&lt;br /&gt;
Das Script $SUPERX_DIR/db/bin/SQL_ENV steuert die Umgebung und ist für den Betrieb der Kernmodul-Scripte unverzichtbar. Bei einem Update des SuperX-Kernmoduls wird die vorhandene SQL_ENV nicht überschrieben. Änderungen der ausgelieferten SQL_ENV.sam müssen deshalb geprüft und bei Bedarf manuell in die produktive SQL_ENV übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Ab Kernmodul 6.0 liegt $SUPERX_DIR innerhalb der SuperX-Webanwendung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
export WEBAPP SUPERX_DIR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Variablen müssen geprüft und passend zur Installation gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
| WEBAPP&lt;br /&gt;
| Wurzelverzeichnis der SuperX-Webanwendung&lt;br /&gt;
|-&lt;br /&gt;
| SUPERX_DIR&lt;br /&gt;
| Datenbank- und Modulbereich unter $WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
|-&lt;br /&gt;
| DATABASE&lt;br /&gt;
| Datenbanksystem; für SuperX ist POSTGRES einzutragen&lt;br /&gt;
|-&lt;br /&gt;
| DBNAME&lt;br /&gt;
| Name der SuperX-Datenbank, standardmäßig superx&lt;br /&gt;
|-&lt;br /&gt;
| SX_CLIENT&lt;br /&gt;
| Verwendeter Datenbankclient; möglich sind psql oder jdbc&lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|db.properties]], standardmäßig $WEBAPP/WEB-INF/db.properties&lt;br /&gt;
|-&lt;br /&gt;
| JAVA_HOME&lt;br /&gt;
| Installationspfad der Java-Runtime; für Kernmodul 6.0 wird OpenJDK 17 verwendet&lt;br /&gt;
|-&lt;br /&gt;
| JAVA_OPTS&lt;br /&gt;
| Java-Optionen für Kernmodul-Shellscripte wie DOSQL, DOQUERY und die Upgrade-Scripte&lt;br /&gt;
|-&lt;br /&gt;
| CATALINA_OPTS&lt;br /&gt;
| Java-Optionen für einen manuell installierten oder mit SuperX betriebenen Tomcat&lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Mailprogramm unter UNIX, beispielsweise s-nail oder mailx&lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL/ERRORMAIL&lt;br /&gt;
| Mailadressen für Log- und Fehlermeldungen der ETL-Scripte&lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Logging-Konfiguration des JDBC-Clients&lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname des PostgreSQL-Servers&lt;br /&gt;
|-&lt;br /&gt;
| DBDELIMITER&lt;br /&gt;
| Trennzeichen für Unload-Dateien, standardmäßig ^&lt;br /&gt;
|-&lt;br /&gt;
| JDBC_CLASSPATH&lt;br /&gt;
| Classpath der JDBC-Treiber, Klassen und benötigten Jakarta-Bibliotheken&lt;br /&gt;
|-&lt;br /&gt;
| XML_CLASSPATH&lt;br /&gt;
| Classpath der XML-Werkzeuge&lt;br /&gt;
|-&lt;br /&gt;
| FM_DEBUG&lt;br /&gt;
| Wenn FM_DEBUG=true gesetzt wird, bleiben die von DOSQL erzeugten temporären SQL-Dateien zur Fehlersuche erhalten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Java-Optionen für Kernmodul 6.0 ==&lt;br /&gt;
&lt;br /&gt;
Die Java-Optionen werden an dieser Stelle zentral dokumentiert. Andere Artikel sollen auf diesen Abschnitt verweisen, damit die Konfiguration nicht mehrfach gepflegt werden muss.&lt;br /&gt;
&lt;br /&gt;
Tragen Sie folgenden vollständigen Block in die SQL_ENV ein. Bei einem Tomcat aus den Ubuntu- oder Debian-Paketen wird derselbe Block in /etc/default/tomcat10 verwendet. Passen Sie die Speicherwerte an die Größe des Servers an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
JAVA_OPTS=&amp;quot;-Xms1024M -Xmx2520M -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Duser.country=DE -Duser.language=de -Duser.region=DE -Duser.timezone=Europe/Berlin -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -DSuperX-DB-PROPERTIES-SET=true -DMODULE_PFAD=$SUPERX_DIR/db/module -DSUPERX_DIR=$SUPERX_DIR -Djava.locale.providers=COMPAT,CLDR -XX:+UseG1GC --add-opens java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-opens java.base/javax.crypto=ALL-UNNAMED --add-opens java.base/java.util.stream=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED&amp;quot;&lt;br /&gt;
export WEBAPP SUPERX_DIR JAVA_HOME JAVA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der eigene Tomcat CATALINA_OPTS verwendet, tragen Sie stattdessen folgenden vollständigen Block in dessen Startumgebung ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
CATALINA_OPTS=&amp;quot;-Xms1024M -Xmx2520M -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Duser.country=DE -Duser.language=de -Duser.region=DE -Duser.timezone=Europe/Berlin -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -DSuperX-DB-PROPERTIES-SET=true -DMODULE_PFAD=$SUPERX_DIR/db/module -DSUPERX_DIR=$SUPERX_DIR -Djava.locale.providers=COMPAT,CLDR -XX:+UseG1GC --add-opens java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-opens java.base/javax.crypto=ALL-UNNAMED --add-opens java.base/java.util.stream=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED&amp;quot;&lt;br /&gt;
export WEBAPP SUPERX_DIR JAVA_HOME CATALINA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzliche Optionen für JMX, eigene Truststores oder besondere LDAP-Konfigurationen werden nur bei Bedarf ergänzt. Ungeschützte JMX-Ports und die Deaktivierung von Sicherheitsprüfungen gehören nicht in die allgemeine Standardkonfiguration.&lt;br /&gt;
&lt;br /&gt;
==JDBC-Classpath für Tomcat 10 ==&lt;br /&gt;
&lt;br /&gt;
Tomcat 10 verwendet die Jakarta-Servlet-API. Der JDBC_CLASSPATH muss deshalb die Jakarta-Bibliothek und $WEBAPP/WEB-INF/classes enthalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JDBC_CLASSPATH=&amp;quot;$WEBAPP/WEB-INF/lib_ext/jakarta.servlet-api-6.0.0.jar:$WEBAPP/WEB-INF/classes&amp;quot;&lt;br /&gt;
for i in $LIB_PATH/*.jar; do JDBC_CLASSPATH=&amp;quot;$JDBC_CLASSPATH:$i&amp;quot;; done&lt;br /&gt;
XML_CLASSPATH=$JDBC_CLASSPATH&lt;br /&gt;
export JDBC_CLASSPATH XML_CLASSPATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein alter Classpath mit servlet-api.jar kann zu java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpServlet führen.&lt;br /&gt;
&lt;br /&gt;
Die SQL_ENV sollte in jeder Shell geladen werden, in der Kernmodul-Scripte ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. $SUPERX_DIR/db/bin/SQL_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf kann beispielsweise in ~/.bashrc oder ~/.profile eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
==Nutzung der SQL_ENV unter HISinOne-BI ==&lt;br /&gt;
&lt;br /&gt;
Die SuperX-Shellscripte lassen sich auch in HISinOne-BI unter Linux nutzen. Eine Beispielkonfiguration befindet sich unter $WEBAPP/WEB-INF/conf/edustore/db/bin/SQL_ENV_his1.sam. Setzen Sie auch dort WEBAPP, SUPERX_DIR, JAVA_HOME, DB_PROPERTIES und den Jakarta-Classpath entsprechend der tatsächlichen Installation.&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird für HISinOne-BI der JDBC-Client verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SX_CLIENT=jdbc&lt;br /&gt;
export SX_CLIENT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Datei muss nicht SQL_ENV heißen. Für eine spezielle Konfiguration kann ein ergänzender Name wie SQL_ENV_FHDO verwendet werden.}}&lt;br /&gt;
&lt;br /&gt;
= Datenbank- und SQL-Scripte =&lt;br /&gt;
== PropAdmin ==&lt;br /&gt;
&lt;br /&gt;
Der PropAdmin ist ein kleines Werkzeug, um den Zugriff auf JDBC-Datenbanken zu testen und die [[#dbProperties|&#039;&#039;Verbindungsparameter&#039;&#039;]] in einer Properties-Datei zu speichern.&lt;br /&gt;
&lt;br /&gt;
Eine Musterdatei für PostgreSQL liegt unter&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;$WEBAPP/WEB-INF/db-postgres.properties&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für den Aufruf unter Linux wird die zu bearbeitende Properties-Datei über die Umgebungsvariable &amp;lt;code&amp;gt;PROPFILE&amp;lt;/code&amp;gt; festgelegt.&lt;br /&gt;
&lt;br /&gt;
=== Aufruf unter Linux ===&lt;br /&gt;
&lt;br /&gt;
Wechseln Sie zunächst in das &amp;lt;code&amp;gt;WEB-INF&amp;lt;/code&amp;gt;-Verzeichnis der SuperX-Webanwendung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP/WEB-INF&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend setzen Sie die zu bearbeitende Properties-Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export PROPFILE=db_test.properties&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn &amp;lt;code&amp;gt;PROPFILE&amp;lt;/code&amp;gt; nicht gesetzt ist, verwendet &amp;lt;code&amp;gt;propadmin.x&amp;lt;/code&amp;gt; die Umgebungsvariable &amp;lt;code&amp;gt;DB_PROPERTIES&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Danach wird der PropAdmin aufgerufen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./conf/edustore/db/bin/propadmin.x&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Dateipfad zur Properties-Datei wird dabei &#039;&#039;&#039;nicht&#039;&#039;&#039; als Parameter an &amp;lt;code&amp;gt;propadmin.x&amp;lt;/code&amp;gt; übergeben, sondern über &amp;lt;code&amp;gt;PROPFILE&amp;lt;/code&amp;gt; bzw. alternativ &amp;lt;code&amp;gt;DB_PROPERTIES&amp;lt;/code&amp;gt; festgelegt.&lt;br /&gt;
&lt;br /&gt;
Beim Aufruf können die Verbindungsparameter wie&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;driverName&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;connectionURL&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;connectionName&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
bestätigt oder geändert werden. Anschließend kann das Passwort eingegeben und die Datenbankverbindung getestet werden.&lt;br /&gt;
&lt;br /&gt;
Der benötigte &amp;lt;code&amp;gt;JDBC_CLASSPATH&amp;lt;/code&amp;gt; ist normalerweise bereits über die SuperX-SQL-Umgebung gesetzt. Falls dies nicht der Fall ist oder beim Aufruf Klassen wie der JDBC-Treiber nicht gefunden werden, kann er beispielsweise folgendermaßen gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export JDBC_CLASSPATH=&amp;quot;$WEBAPP/WEB-INF/classes:$WEBAPP/WEB-INF/lib/*&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Passwort direkt mit CryptUtils verschlüsseln ===&lt;br /&gt;
&lt;br /&gt;
Soll lediglich ein Passwort im von SuperX verwendeten Format &amp;lt;code&amp;gt;sx_des...&amp;lt;/code&amp;gt; erzeugt werden, ist dafür kein vollständiger PropAdmin-Aufruf notwendig. Das Passwort kann direkt über &amp;lt;code&amp;gt;de.memtext.util.CryptUtils&amp;lt;/code&amp;gt; verschlüsselt werden.&lt;br /&gt;
&lt;br /&gt;
Je nach Umgebung unterscheidet sich der benötigte Classpath.&lt;br /&gt;
&lt;br /&gt;
==== HISinOne ====&lt;br /&gt;
&lt;br /&gt;
In einer HISinOne-Umgebung wechseln Sie in das Verzeichnis&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;$WEBAPP/WEB-INF/classes&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP/WEB-INF/classes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Da sich die kompilierte Klasse &amp;lt;code&amp;gt;de.memtext.util.CryptUtils&amp;lt;/code&amp;gt; unterhalb dieses Verzeichnisses befindet, kann als Classpath einfach &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; verwendet werden.&lt;br /&gt;
&lt;br /&gt;
==== SuperX ====&lt;br /&gt;
&lt;br /&gt;
In einer SuperX-Umgebung wechseln Sie dagegen in das Verzeichnis&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;$WEBAPP/WEB-INF/lib&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd $WEBAPP/WEB-INF/lib&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Als Classpath wird die SuperX-JAR der installierten Version angegeben, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
superx6.0.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Passwort direkt im Befehl angeben ====&lt;br /&gt;
&lt;br /&gt;
Für HISinOne:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
printf &#039;%s\n&#039; &#039;System.out.println(&amp;quot;sx_des&amp;quot; + de.memtext.util.CryptUtils.encryptStringDES(&amp;quot;anfang12&amp;quot;));&#039; &#039;/exit&#039; | jshell -q --class-path .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für SuperX, beispielsweise mit Version 6.0:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
printf &#039;%s\n&#039; &#039;System.out.println(&amp;quot;sx_des&amp;quot; + de.memtext.util.CryptUtils.encryptStringDES(&amp;quot;anfang12&amp;quot;));&#039; &#039;/exit&#039; | jshell -q --class-path superx6.0.jar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Ausgabe enthält das verschlüsselte Passwort, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sx_des#-107#-62#90#114#112#-9#-73#86#116#120#-97#-28#-54#-55#11#8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der komplette Wert einschließlich &amp;lt;code&amp;gt;sx_des&amp;lt;/code&amp;gt; kann anschließend beispielsweise als&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
connectionPassword=sx_des#...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in eine Properties-Datei eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Achtung:&#039;&#039;&#039; Bei dieser Variante steht das Klartextpasswort direkt im Shell-Befehl und kann dadurch in der Shell-History gespeichert werden.&lt;br /&gt;
&lt;br /&gt;
==== Passwort verdeckt einlesen ====&lt;br /&gt;
&lt;br /&gt;
Um zu vermeiden, dass das Klartextpasswort im Befehl bzw. in der Shell-History erscheint, kann es zunächst verdeckt eingelesen werden:&lt;br /&gt;
&lt;br /&gt;
Für HISinOne:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
read -rsp &#039;Passwort: &#039; PW; echo&lt;br /&gt;
printf &#039;%s\n&#039; &#039;System.out.println(&amp;quot;sx_des&amp;quot; + de.memtext.util.CryptUtils.encryptStringDES(System.getenv(&amp;quot;PW&amp;quot;)));&#039; &#039;/exit&#039; \&lt;br /&gt;
  | PW=&amp;quot;$PW&amp;quot; jshell -q --class-path .&lt;br /&gt;
unset PW&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für SuperX, beispielsweise mit Version 6.0:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
read -rsp &#039;Passwort: &#039; PW; echo&lt;br /&gt;
printf &#039;%s\n&#039; &#039;System.out.println(&amp;quot;sx_des&amp;quot; + de.memtext.util.CryptUtils.encryptStringDES(System.getenv(&amp;quot;PW&amp;quot;)));&#039; &#039;/exit&#039; \&lt;br /&gt;
  | PW=&amp;quot;$PW&amp;quot; jshell -q --class-path superx6.0.jar&lt;br /&gt;
unset PW&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Passwort wird bei der Eingabe nicht auf dem Bildschirm angezeigt. In der Shell-History wird lediglich der Aufruf von &amp;lt;code&amp;gt;read&amp;lt;/code&amp;gt; gespeichert, nicht das eingegebene Passwort.&lt;br /&gt;
&lt;br /&gt;
Auch hier wird als Ergebnis das vollständig verschlüsselte Passwort einschließlich des Präfixes &amp;lt;code&amp;gt;sx_des&amp;lt;/code&amp;gt; ausgegeben.&lt;br /&gt;
&lt;br /&gt;
=== Zeichencodierung ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Default-Dateiencodierung der aktiven Locale nicht ausreicht, kann eine entsprechende Fehlermeldung ausgegeben werden. Unter Windows / DOS ist die Vorbelegung Cp1252 bei deutscher Codepage in der Regel ausreichend; unter Unix wird die deutsche [[Kern_Installation_Upgrade#Zeichencodierung|Locale]] benötigt.&lt;br /&gt;
&lt;br /&gt;
==DOSQL ==&lt;br /&gt;
Zum Absetzen beliebiger SQL-Kommandos werden die Befehle DOSQL und DOQUERY genutzt. &lt;br /&gt;
DOSQL kann SQL-Anweisung(en) in der der Datei (als Parameter) in der SuperX-Datenbank ausfuehren.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| DOSQL &amp;quot;Dateiname mit sql-Anweisung(en)&amp;quot; header (true,false)(optional) Ausgabedatei(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| DOSQL &amp;quot;/home/superx/db/isql/test.sql&amp;quot; false &amp;quot;^&amp;quot; output.txt&lt;br /&gt;
|}&lt;br /&gt;
Das Ergebnis kann mit Feldüberschriften (header=true) in eine Datei Ausgabedatei ausgegeben werden.&lt;br /&gt;
Wenn &lt;br /&gt;
 FM_DEBUG = true &lt;br /&gt;
 export FM_DEBUG&lt;br /&gt;
gesetzt wird, werden bei Freemarker Scripten von DOSQL die *.tmp.sql-Dateien nicht gelöscht.&lt;br /&gt;
&lt;br /&gt;
==DOQUERY ==&lt;br /&gt;
Shellvariablen setzen und eingegebene SQL-Anweisung (als Parameter) in der SuperX-Datenbank ausfuehren.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| DOQUERY &amp;quot;sql-Anweisung&amp;quot; header (true,false)(optional) Delimiter(optional) Ausgabedatei(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| DOQUERY &amp;quot;select name from userinfo&amp;quot; false &amp;quot;^&amp;quot; output.txt&lt;br /&gt;
|}&lt;br /&gt;
Das Ergebnis kann mit Feldüberschriften (header=true) in eine Datei Ausgabedatei ausgegeben werden.&lt;br /&gt;
=XML-Scripte=&lt;br /&gt;
==sx_transform.x ==&lt;br /&gt;
Transformiert eine xml-Datei mit einer übergebenen XSL-Datei und gibt das Ergebnis in einen Ausgabekanal aus (stdout oder Datei). Dabei wird der in SuperX integrierte XML-Parser Xerces und der XSL-Prozessor Saxon benutzt. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_transform.x -IN:xml-Datei -XSL:xsl-Datei -OUT:Ausgabedatei -method:Ausgabeformat (text, xml,html,rtf,pdf) (optional) -params:Parameter(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_transform.x -IN:myxml.xml -XSL:myxsl.xsl -OUT:output.htm -method:html &lt;br /&gt;
|}&lt;br /&gt;
Als Parameter &amp;quot;method&amp;quot; kann ein spezielles Ausgabeformat gewählt werden, z.B. text (siehe Xalan-Doku). Bei rtf wird der RTF-Construktor Jfor aufgerufen, bei pdf wird FOP aufgerufen. Die *.fo-Datei wird nach tmp.fo geschrieben und dann nach pdf transformiert. Wir gehen also nicht davon aus, dass .fo-Dateien die Eingabequelle darstellen.&lt;br /&gt;
&lt;br /&gt;
Stylesheet Parameter werden mit &amp;quot;,&amp;quot; getrennt optional angefügt, z.B. &lt;br /&gt;
&lt;br /&gt;
 sx_transform.x -IN:myxml.xml -XSL:myxsl.xsl -OUT:output.htm -method:html  &amp;quot;-params:Jahr=2020,Monat=12&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==saxon_transform.x==&lt;br /&gt;
Wie sx_transform.x transformiert das Script XML via XSLT, hier werden allerdings Saxon-spezifische Parameter ermöglicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| saxon_transform.x xml-Datei xsl-Datei Ausgabeformat (text, xml,html) (optional) Ausgabedatei (optional) Parameter (optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_transform.x myxml.xml myxsl.xsl output.htm html &lt;br /&gt;
|}&lt;br /&gt;
Bei pdf wird FOP aufgerufen. Die *.fo-Datei wird nach tmp.fo geschrieben und dann nach pdf transformiert.&lt;br /&gt;
&lt;br /&gt;
Wenn ein XSL-Script mehrere Ausgabedateien erzeugen soll, kann dieses Script ggü. sx_transform.x Vorteile haben.&lt;br /&gt;
==show_fop_fontlist.x==&lt;br /&gt;
Zeigt die installierten Fonts für PDF Erzeugung mit XSL-FO an.&lt;br /&gt;
Das Script hat keine Argumente.&lt;br /&gt;
==sx_validate.x==&lt;br /&gt;
sx_validate.x validiert eine XML-Datei&lt;br /&gt;
*ob sie wohlgeform ist&lt;br /&gt;
*ob sie zu einem optional übergebenen Schema (XSD-Datei) valide ist.&lt;br /&gt;
 sx_validate.x XML-Datei SCHEMA-Datei (optional)&lt;br /&gt;
==sx_xmlfileappender.x==&lt;br /&gt;
Das Script &#039;&#039;sx_xmlfileappender.x&#039;&#039; faßt mehrere XML-Dateien in einem übergebenen Pfad zu eine rDatei mit einem neuen root-Knoten &amp;quot;artificalroot&amp;quot; zusammen.&lt;br /&gt;
&lt;br /&gt;
Aufruf: &lt;br /&gt;
 sx_xmlfileappender.x Path file(regex oder Dateiname mehrere mit , getrennt) Outputfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Codierung in ISO und UTF-8=&lt;br /&gt;
Ältere Systeme arbeiten in der Regel mit der Zeichencodierung ISO-8859-1 bis ISO-8859-9. Dieser Zeichensatz wird auch LATIN-1 genannt. Die UNIX-Locale de_DE@euro entspricht z.B. ISO-8859-9 und enthält das EUR-Symbol. &lt;br /&gt;
&lt;br /&gt;
Aktuelle SuperX-Installationen arbeiten in der Regel mit der UTF-8 Codierung, dies wird bei der  [[Kern_Installation_Upgrade#Zeichencodierung|Installation]] gesetzt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Wechsel von ISO-Codierung zu UTF8 bleibt oft der Bedarf bestehen, Dateien hin- und herzucodieren. Sei es, weil beim Entladen aus einer entfernten Datenbank noch das ISO-System genutzt wird, oder bei der Migration eines Systems. Nach unserer Erfahrung sollten Umlaute in Dateinamen unbedingt vermieden werden. &lt;br /&gt;
SuperX bietet unter UNIX Shellscripte zur Erfassung und Änderung der Zeichencodierung (Verzeichnis $SUPERX_DIR/db/bin). Im Wesentlichen werden dabei die Unix-Kommandos file und recode genutzt, die Shellscripte machen den Umgang mit umfangreichen Dateilisten komfortabler. Bei der Verarbeitung von Dateilisten sollte man die Scripte sehr vorsichtig einsetzen, es finden keine Sicherheitsüberprüfungen statt.&lt;br /&gt;
{{Achtung| Die Scripte wurden bisher nur unter Linux mit bash getestet, andere UNIXe wie BSD verhalten sich ggf. anders als erwartet. Daher bitte mit Vorsicht benutzen.}}&lt;br /&gt;
&lt;br /&gt;
==sx_show_encoding.x ==&lt;br /&gt;
Das Script zeigt die Encodierung einer Datei an.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_show_encoding.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_show_encoding.x $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/web.xml &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| /home/superx/webserver/tomcat/webapps/superx/WEB-INF/web.xml: XML&lt;br /&gt;
ISO&lt;br /&gt;
|}&lt;br /&gt;
Das Script nutzt verschiedene UNIX-Tools, je nach System kann die Ausgabe variieren. Bei XML-Dateien wird auch der Dateiinhalt (XML-Header) ausgewertet.&lt;br /&gt;
==sx_recode_iso2utf.x ==&lt;br /&gt;
Das Script ändert die Encodierung einer Datei von ISO nach UTF-8:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_iso2utf.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_recode_iso2utf.x $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/web.xml &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --keine--&lt;br /&gt;
|}&lt;br /&gt;
Das Script nutzt das UNIX-Kommando recode. Darüberhinaus werden bei XML-Dateien auch die XML-Header &amp;quot;encoding=...&amp;quot; geändert, so wird z.B. aus&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
der Header&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &lt;br /&gt;
Andere Inhalte der Datei unterhalb der ersten Zeile werden keinesfalls geändert.&lt;br /&gt;
==sx_recode_utf2iso.x ==&lt;br /&gt;
Das Script ändert die Encodierung einer Datei von ISO nach UTF-8:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_utf2iso.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_recode_utf2iso.x $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/web.xml &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --keine--&lt;br /&gt;
|}&lt;br /&gt;
Das Script nutzt das UNIX-Kommando recode. Darüberhinaus werden bei XML-Dateien auch die XML-Header &amp;quot;encoding=...&amp;quot; geändert, so wird z.B. aus&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
der Header&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt; &lt;br /&gt;
Andere Inhalte der Datei unterhalb der ersten Zeile werden keinesfalls geändert.&lt;br /&gt;
==sx_list_isofiles.x ==&lt;br /&gt;
Das Script listet alle ISO-Dateien im übergebenen Verzeichnis auf (inkl. Unterverzeichnisse).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_list_isofiles.x &amp;lt;Pfad&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_list_isofiles.x webserver/tomcat/webapps/superx/WEB-INF &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| webserver/tomcat/webapps/superx/WEB-INF/lib/LocalStrings_de.properties&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/lib/hierhin_den_informix_treiber_kopieren.txt&lt;br /&gt;
[...]&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/db.properties&lt;br /&gt;
|}&lt;br /&gt;
Die Ausgabe kann in eine Datei umgeleitet werden, welche wiederum für das Script [[#sxrecodeisofilesx|&#039;&#039;sx_recode_isofiles.x&#039;&#039;]] als Eingabedatei genutzt werden.&lt;br /&gt;
sx_list_isofiles.x webserver/tomcat/webapps/superx/WEB-INF &amp;gt;iso.txt&lt;br /&gt;
==sx_recode_isofiles.x ==&lt;br /&gt;
Das Script konvertiert alle Dateien in der übergebenen Dateiliste von ISO nach UTF-8:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_isofiles.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_list_isofiles.x iso.txt &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --Keine--&lt;br /&gt;
|}&lt;br /&gt;
Die Eingabedatei ist in der Regel die Ausgabe des Scriptes [[#sxlistisofilesx|&#039;&#039;&#039;&#039;sx_list_isofiles.x&#039;&#039;&#039;&#039;]]. &lt;br /&gt;
==sx_list_utf8files.x ==&lt;br /&gt;
Das Script listet alle UTF-8-Dateien im übergebenen Verzeichnis auf (inkl. Unterverzeichnisse).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_list_utf8files.x &amp;lt;Pfad&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_list_utf8files.x webserver/tomcat/webapps/superx/WEB-INF &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| webserver/tomcat/webapps/superx/WEB-INF/lib/LocalStrings_de.properties&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/lib/hierhin_den_informix_treiber_kopieren.txt&lt;br /&gt;
[...]&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/db.properties&lt;br /&gt;
|}&lt;br /&gt;
Die Ausgabe kann in eine Datei umgeleitet werden, welche wiederum für das Script [[#sxrecodeutffilesx|&#039;&#039;sx_recode_utf8files.x&#039;&#039;]] als Eingabedatei genutzt werden.&lt;br /&gt;
sx_list_isofiles.x webserver/tomcat/webapps/superx/WEB-INF &amp;gt;utf.txt&lt;br /&gt;
==sx_recode_utf8files.x ==&lt;br /&gt;
Das Script konvertiert alle UTF-8 Dateien in der übergebenen Dateiliste von UTF-8 nach ISO:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_utf8files.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_recode_utf8files.x utf.txt &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --Keine--&lt;br /&gt;
|}&lt;br /&gt;
Die Eingabedatei ist in der Regel die Ausgabe des Scriptes [[Kernmodul_Shellscripte#sx_list_utf8files.x|sx_list_utf8files.x]].&lt;br /&gt;
&lt;br /&gt;
=Umgang mit Tabellen =&lt;br /&gt;
In SuperX werden ständig Tabellen erstellt / geladen / entladen. Zu diesem Zweck wurden Shellscripte entwickelt.&lt;br /&gt;
==sx_unload_table.x ==&lt;br /&gt;
Entlädt die Inhalte der Tabelle nach &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional) oder &amp;lt;&amp;lt;name&amp;gt;&amp;gt;.unl&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_unload_table.x &amp;lt;&amp;lt;name&amp;gt;&amp;gt; &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_unload_table.x userinfo &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==sx_upload_table.x ==&lt;br /&gt;
Löscht die Inhalte der Tabelle &amp;lt;&amp;lt;name&amp;gt;&amp;gt;, und lädt die Inhalte einer Datei in die Tabelle mit [[#sxuploadrecords|&#039;&#039;sx_upload_records&#039;&#039;]]. Wenn kein Dateiname übergeben wurde, wird als Name &amp;lt;&amp;lt;name&amp;gt;&amp;gt;.unl angenommen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_upload_table.x &amp;lt;&amp;lt;name&amp;gt;&amp;gt; &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_upload_table.x userinfo &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==sx_upload_records.x ==&lt;br /&gt;
Lädt die Inhalte einer Datei in die Tabelle, ohne vorherige Inhalte zu löschen. Wenn kein Dateiname übergeben wurde, wird als Name &amp;lt;&amp;lt;name&amp;gt;&amp;gt;.unl angenommen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_upload_records.x &amp;lt;&amp;lt;name&amp;gt;&amp;gt; &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_upload_records.x userinfo &lt;br /&gt;
|}&lt;br /&gt;
Bei Postgres als DB-System wird eine Java-Klasse (de.superx.bin.UnlFileConverter) aufgerufen, die die Unload-Datei entsprechend einer Spezifikation aufbereitet (siehe $SUPERX_DIR/db/conf/unldescr*).&lt;br /&gt;
Wenn der jdbc-Client benutzt wird, können umfangreiche Parameter übergeben werden (Import mit Spaltenüberschriften, Ausgabe von Fehlerprotokollen). Vergleichen Sie die Kommentare im Script.&lt;br /&gt;
==sx_schema.x ==&lt;br /&gt;
Entlädt das Schema einer Tabelle in einem vorgegebenen Format. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_schema.x Tabelle format (pg|ids|ansi|xml|HIS)) (optional) Ausgabedatei (optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_schema.x userinfo ids myschema.sql&lt;br /&gt;
|-&lt;br /&gt;
| Die Formate&lt;br /&gt;
| Die Formate sind SQL für PostgreSQL oder ANSI sowie XML beziehungsweise ein XML-Format in Anlehnung an die Datenbank-DTD der HIS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Modulverwaltung =&lt;br /&gt;
Die Verwaltung der Module, einschließlich Installation, Aktualisierung, Sicherung und Logdateien, erfolgt über zentrale Shellscripte in $SUPERX_DIR/db/bin. Die Shellscripte bilden die operativen Hüllen um die eigentlichen SQL-Scripte. Diese werden zum Teil manuell und zum Teil automatisch aus einer zentralen Steuerdatei erzeugt:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;/conf/&amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;.xml&lt;br /&gt;
Für PostgreSQL werden daraus die benötigten Installations- und Aktualisierungsscripte erzeugt.&lt;br /&gt;
&lt;br /&gt;
== module_scripts_create.x ==&lt;br /&gt;
Das Script erzeugt die Installationsdateien für ein Modul nach dem Schema&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Scriptaktion&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Kürzel für Datenbanksystem&amp;gt;&amp;gt;.sql&lt;br /&gt;
Beispielsweise wird für das BAU-Modul aus der Datei $BAU_PFAD/conf/bau.xml das Script bau_load_pg.sql erzeugt, das die Rohdaten unter PostgreSQL lädt.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_scripts_create.x -Modulkürzel- -Modulpfad- -Datenbanksystem-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_scripts_create.x bau $BAU_PFAD POSTGRES&lt;br /&gt;
|}&lt;br /&gt;
Im Grunde handelt es sich um XML-Transformationen. Die Stylesheets für dieses Script befinden sich im Verzeichnis $SUPERX_DIR/db/conf, und die XML-Datei für das Module in $SUPERX_DIR/db/module/-Modulname-/conf. Wenn die Datei nicht gefunden wird, bricht das Script ab.&lt;br /&gt;
&lt;br /&gt;
== module_install.x ==&lt;br /&gt;
Installiert ein Modul -Modulname- in der Datenbank, wobei die Installationsdateien sich im -Modulpfad- befinden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_install.x -Modulkürzel- -Modulpfad-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_install.x bau $BAU_PFAD &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== module_drop.x ==&lt;br /&gt;
Löscht die Komponenten eines Moduls -Modulname- in der Datenbank, wobei die Installationsdateien sich im -Modulpfad- befinden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_drop.x -Modulkürzel- -Modulpfad-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_drop.x bau $BAU_PFAD &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Entladen ==&lt;br /&gt;
Das Entladescript lautet $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_unload.x. Die Entladeparameter werden in folgender Datei festgelegt:&amp;lt;br /&amp;gt;&lt;br /&gt;
$SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_ENV&lt;br /&gt;
Entladeroutine bei mandantenfähigen Installationen:&lt;br /&gt;
$SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten&amp;lt;&amp;lt;Mandantid&amp;gt;&amp;gt;/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_ENV&lt;br /&gt;
Dokumentation zu den jew. Parametern finden Sie in den jeweiligen Administrationshandbüchern der Module. Meist kann man Start-Semester oder -Jahre für das Entladen festlegen. Immer muß man auch das Datenbank-Vorsystem festlegen (Hostname, Kennung etc) sowie, bei HIS-Systemen, die Versionsnummer.&lt;br /&gt;
== module_etl.x ==&lt;br /&gt;
Aktualisiert ein Modul -Modulname- in der Datenbank, wobei die Installationsdateien sich im -Modulpfad- befinden. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_etl.x -Modulname- -Modulpfad-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_etl.x bau $BAU_PFAD &lt;br /&gt;
|}&lt;br /&gt;
Die folgende Abbildung zeigt, wie die Komponenten zusammenhängen (klicken Sie auf die Grafik, um sie zu vergrößern):&lt;br /&gt;
&lt;br /&gt;
Zunächst werden die Rohdaten geladen, die Daten vorbereitet, transformiert, und nachbereitet. Danach werden die Hilfstabellen erzeugt und, bei erfolgreichem durchlaufen, das Standdatum aktualisiert. &lt;br /&gt;
&lt;br /&gt;
[[Bild:etl.png|417x313px]]&lt;br /&gt;
&lt;br /&gt;
Bei Fehlern im ETL-Prozeß wird die Sicherung wiederhergestellt, und eine Mail an die Administrator_in  verschickt. Außerdem werden die übernommenen Daten überprüft; wenn z.B. Schlüssel fehlen oder Rohdaten falsch zu sein scheinen, wird dies als Attachment an die Log- oder Fehlermail angehängt.&lt;br /&gt;
In der Praxis wird dieses Script nicht direkt von Cronjobs ausgeführt, sondern von einem Shellscript, das vorher die Umgebung einrichtet. Das folgende Beispiel zeigt ein Update-Script für das BAU-Modul:&lt;br /&gt;
 bau_update.x&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 . /home/superx/webserver/tomcat/webapps/superx/WEB-INF/conf/edustore/db/bin/SQL_ENV&lt;br /&gt;
 ERRORMAIL=&amp;quot;bau-admin@hochschule.de&amp;quot;&lt;br /&gt;
 export ERRORMAIL&lt;br /&gt;
 LOGMAIL=$ERRORMAIL&lt;br /&gt;
 export LOGMAIL&lt;br /&gt;
 module_etl.x bau $BAU_PFAD &amp;gt;$BAU_ERRORDAT 2&amp;gt;&amp;amp;amp;1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wie Sie sehen ist es möglich, für jedes Modul unterschiedliche Mailadressen zuzuweisen. Die Mailadressen werden systemweit in der [Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]] eingetragen.&lt;br /&gt;
Im allgemeinen ETL-Prozeß wird standardmäßig auch die Tabelle protokoll in einem festzulegendem Rhythmus (Konstante Löschung Protokoll (Tage)) gelöscht. Beim Vorgabewert 90 werden bei jeder ETL-Routine Einträge, die älter als 90 Tage sind, gelöscht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hochschulspezifische Transformationen im ETL-Prozess ===&lt;br /&gt;
&lt;br /&gt;
Zusätzlich lassen sich im ETL-Prozeß hochschulspezifische Scripte ausführen (und überwachen). Dazu müssen Dateien mit einem gewissen Namensschema im Stammverzeichnis des Moduls vorhanden sein. Es gibt einen vereinfachten und einen erweiterten Modus für hochschulspezifische Transformationen.&lt;br /&gt;
*Einfacher Modus&lt;br /&gt;
**Wenn im Modulpfad die Datei &amp;quot;preparation.sql&amp;quot; existiert, wird sie nach dem LOAD-Schritt ausgeführt. &lt;br /&gt;
**Wenn im Modulpfad die Datei &amp;quot;finalize.sql&amp;quot; existiert, wird sie nach dem TRANS-Schritt ausgeführt. &lt;br /&gt;
* Erweiterter Modus / mandantenspezifische Scripte&lt;br /&gt;
**Wenn im Modulpfad Dateien nach dem Schema &amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;ETL-Schritt&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Mandatennr.&amp;gt;&amp;gt;.sql exisitieren, werden diese jeweils nach dem &amp;quot;normalen&amp;quot; ETL-Schritt ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn also z.B. die Datei&lt;br /&gt;
 $COB_PFAD/cob_trans_70.sql&lt;br /&gt;
existiert und in der SQL_ENV die Umgebungsvariable $MANDANTID auf &amp;quot;70&amp;quot; steht, dann wird das Script nach dem normalen Trans-Schritt ausgeführt und nach &lt;br /&gt;
 L_cob_trans_mandant_70.log &lt;br /&gt;
geloggt. &lt;br /&gt;
&lt;br /&gt;
Der erweiterte Modus erlaubt die beliebige Anpassung eines Modus an eigene Bedürfnisse, z.B. Schlüsselumsetzung o.ä. Gleichzeitig erlaubt er einen echten mandentenfähigen Betrieb der ETL-Scripte.&lt;br /&gt;
&lt;br /&gt;
===Logging der Shellscripte ===&lt;br /&gt;
Hinweis: bei mandantenfähigen Installationen steht vor der Endung .log immer die MandantID.&lt;br /&gt;
&lt;br /&gt;
==== Installation / Upgrade ====&lt;br /&gt;
Fürs Kernmodul lauten die Dateien bei der Installation:&lt;br /&gt;
 $SUPERX_DIR/db/install/L_*.log&lt;br /&gt;
Beim Upgrade:&lt;br /&gt;
 $SUPERX_DIR/db/install/upgrade/upgrade.log&lt;br /&gt;
Für alle anderen Komponenten:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/L_&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Installationsschritt&amp;gt;&amp;gt;.log&lt;br /&gt;
==== Laderoutinen ====&lt;br /&gt;
Für alle Module sind die Dateien wie folgt benannt:&lt;br /&gt;
Entladeroutine:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_unload.err&lt;br /&gt;
Entladeroutine bei mandantenfähigen Installationen:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten&amp;lt;&amp;lt;Mandantid&amp;gt;&amp;gt;/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_unload.err&lt;br /&gt;
&lt;br /&gt;
Laderoutine:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/L_&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;.log&lt;br /&gt;
wobei &amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt; wie folgt aufgebaut ist:&lt;br /&gt;
# Unload (Entladen aus Vorsystem)&lt;br /&gt;
# Load (CSV-Upload)&lt;br /&gt;
# Transformation (Schlüsselharmonisierung, Prüfroutinen)&lt;br /&gt;
# Aggregation (Aufbau der Hilfstabellen)&lt;br /&gt;
# System (Ladedatum aktualisieren, Datenbank-Wartung)&lt;br /&gt;
Wenn die Laderoutine erfolgreich ist, werden alle Schritte hintereinander ausgeführt und geloggt. Wenn nicht, dann wird der jew. Schritt zuende geführt, und dann die Laderoutine gestoppt. Wenn also z.B. beim LOAD ein Fehler auftritt, dann wird der Schritt &amp;quot;Transformation&amp;quot; gar nicht erst begonnen. So ist sichergestellt daß die Auswertungen trotz Fehler laufen.&lt;br /&gt;
&lt;br /&gt;
=== Debugging von Freemarker Scripten ===&lt;br /&gt;
Da die Laderoutinen oft mit Freemarker Scripten arbeiten, werden diverse SQL-Scripte nur zur Laufzeit generiert und ausgeführt, und danach wieder gelöscht. Um die Laderoutinen transparenter &amp;quot;beobachten&amp;quot; zu können, können Sie die die Löschung der Scripte mit dem Parameter &lt;br /&gt;
 FM_DEBUG=&amp;quot;true&amp;quot;&lt;br /&gt;
 export FM_DEBUG&lt;br /&gt;
Wenn FM_DEBUG = true gesetzt wird, werden bei Freemarker Scripten von [[Kernmodul_Shellscripte#DOSQL|DOSQL]] die *.tmp.sql-Dateien nicht gelöscht. Sie können den Parameter in der aktuellen Shell setzen, oder permanent in der [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]].&lt;br /&gt;
&lt;br /&gt;
==Kettle-Jobs starten==&lt;br /&gt;
Da Kettle in der Webanwendung integriert ist, können Sie Kettle Jobs auch ohne die PDI-Standalone-Installation per Kommandozeile ausführen. Wenn die [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]] eingerichtet und geladen ist, geben Sie z.B. einfach ein:&lt;br /&gt;
&lt;br /&gt;
  sx_kitchen.x -file &amp;quot;sospos_res1.kjb&amp;quot; -norep&lt;br /&gt;
Die Parameter werden direkt an die Java Anwendung &amp;quot;kitchen&amp;quot; weitergereicht, d.h. weitere Dokumentation finden Sie in unserem [[Kettle_Kurs_Teil_2#Kitchen|Kettle-Kurs]].&lt;br /&gt;
&lt;br /&gt;
=Installation und Wartung=&lt;br /&gt;
==Patch einspielen==&lt;br /&gt;
Für SuperX können spezielle Patch-Dateien per Kommandozeile installiert werden. Vorbedingung ist, dass die bash und das Paket unzip installiert sind.&lt;br /&gt;
 patch_apply.x &lt;br /&gt;
Das Script entpackt eine übergebene Patch-Datei (zip-File), und installiert die Dateien und DB-Operationen für die jeweils installierten und zum Patch passenden Module. Sie starten es direkt aus dem Patchordner, in dem der zu installierende Patch liegt:&lt;br /&gt;
 patch_apply.x -PatchFile-&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
 patch_apply.x patch_2011-06-01_superx_iso.zip&lt;br /&gt;
Dabei wird in dem Verzeichnis der Patch entpackt und ausgeführt. Je nach Patch muss auch ein Tomcat Neustart erfolgen, ein entsprechender Hinweis befindet sich in der Patch-Dokumentation.&lt;br /&gt;
Wenn ein Patch auch Dateien unterhalb von webapps/superx enthält, müssen Sie im Falle von Tomcat Clusterbetrieb den Patch auf alle Tomcat Hosts übertragen, entweder direkt oder mit git / rsync.&lt;br /&gt;
Weitere Hinweise zum Script finden Sie im [[Kern_Installation_Upgrade#Patch_einspielen|Installationshandbuch]].&lt;br /&gt;
{{Hinweis|Bei HISinOne-BI funktioniert das patch-apply Script nicht, der Patch mit dem Kürzel &amp;quot;webapps&amp;quot; im Dateinamen wird einfach in webapps/superx entpackt, und in der Regel sollten die jew. Module geupgradet werden. Weitere Hinweise finden Sie in der jew. Patch-Readme.}}&lt;br /&gt;
==JasperReports kompilieren==&lt;br /&gt;
Wenn Sie mit Unterberichten arbeiten, müssen Sie kompilierte .jasper-Dateien einbinden und ausliefern. Da dieser Dateityp normalerweise (und richtigerweise) im &amp;quot;.gitignore&amp;quot; ist, d.h. nicht über git ausgeliefert werden kann, können Sie die Dateien auch direkt auf dem Applikationsserver mit der exakt passenden JR-Version erzeugen. Typischerweise führen Sie das Script im Ordner WEB-INF/reports aus. Der Aufruf:&lt;br /&gt;
 cd $WEBAPP/WEB-INF/reports&lt;br /&gt;
 java $JAVA_OPTS -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; de.superx.bin.SxJasperCompiler &amp;lt;JRXML-Datei&amp;gt;&lt;br /&gt;
Der Workflow ist wie folgt:&lt;br /&gt;
* Die Quelldatei.jrxml ist die XML-Beschreibungsdatei des Berichts&lt;br /&gt;
* Der compile erzeugt aus der Quelldatei.jrxml eine Datei Quelldatei.jasper im gleichen Verzeichnis&lt;br /&gt;
* Die Quelldatei.jasper ist kompilierte Beschreibungsdatei für den Bericht, und wird in Unterberichten und Booklets genutzt. Weitere Details siehe unser [https://www.superx-projekt.de/doku/entwicklung/iReport-Handbuch/f_AufbaudesHauptberichts.htm JR-Handbuch].&lt;br /&gt;
==LDAP User deaktivieren==&lt;br /&gt;
Ausschließlich für SuperX-Standalone-Anwender können wir im System eine Gültigkeit von UserAccounts und automatisiertes Sperren von LDAP-Usern mit Sperr-Merkmal einbauen.&lt;br /&gt;
Die Tabelle userinfo und das entsprechende Formular zum Userbearbeiten hat die Merkmale Beginn Gültigkeit (gueltig_von) und Ende Gültigkeit (gueltig_bis), so dass SuperX-Standalone Hochschulen z.B. für befristete Mitarbeiter_innen in der Userverwaltung direkt eintragen können, dass ein Mitarbeiter sich z.B. nach dem 31.12.2024 nicht mehr anmelden können soll.&lt;br /&gt;
Wenn die Hochschule eine Passwortkontrolle via LDAP macht, kann diese per Script User mit einem entsprechenden Merkmal wie userLocked=true automatisiert zu sperren.&lt;br /&gt;
Hierfür setzt das Script den Eintrag userinfo.maxVersuch (also die maximal erlaubten Anmeldeversuche) auf 0 gesetzt, als &amp;quot;Ende Gültigkeit&amp;quot; wird das Vortagsdatum eingetragen sowie die Spalte &#039;&#039;password_sha&#039;&#039; (verschlüsseltes SuperX-Passwort) geleert.&lt;br /&gt;
&lt;br /&gt;
Aufruf:&lt;br /&gt;
 sx_ldap_lockout.x Pfad/zu/db.properties pfad/zu/superx_standalone_ldap.properties&lt;br /&gt;
Das Script kann nächtlich ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Masken-Verwaltung =&lt;br /&gt;
Die Masken-Verwaltung ist detailliert im [[Masken-Tutorial|Entwicklerhandbuch SuperX]] beschrieben. Hier nur ein paar Hinweise zur Verwaltung der Masken. Zum Erzeugen und Verändern von Masken gibt es unter UNIX eine Kommandoschnittstelle, die auf dem Gebrauch folgender Skripte beruht. Die Skripte stehen unter dem Verzeichnis&lt;br /&gt;
 $SUPERX_DIR/db/bin&lt;br /&gt;
und erzeugen oder verwenden Dateien in dem gegenwärtigen Arbeitsverzeichnis. Nach dem Einspielen der Datenbank sollten Sie darauf achten, den Dateien Ausführungsberechtigung (chmod 750 *) zu geben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Eine Maske suchen ==&lt;br /&gt;
Wenn Sie eine Maske suchen, sollten die die Felder tid oder name in der Tabelle maskeninfo durchsuchen. Das folgende Script macht dies automatisch:&lt;br /&gt;
sx_search_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
|  sx_search_mask &amp;lt;String&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion:&lt;br /&gt;
|  sx_search_mask sucht die Masken, deren Name &amp;lt;String&amp;gt; enthält&lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe: . &lt;br /&gt;
| tid, name der gefundenen Masken&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Eine Maske sichern und entladen ==&lt;br /&gt;
Um eine Maske zu sichern, müssen Sie die entsprechenden Einträge in den Tabellen&lt;br /&gt;
# felderinfo,&lt;br /&gt;
#  masken_felder_bez,&lt;br /&gt;
#  maskeninfo, &lt;br /&gt;
# sachgeb_maske_bez,&lt;br /&gt;
# maske_system_bez&lt;br /&gt;
selektieren und sichern. Für dies gibt es das Script sx_select_mask.&lt;br /&gt;
sx_select_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf: &lt;br /&gt;
| sx_select_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_select_mask entlädt alle Metadaten aus den Tabellen maskeninfo, felderinfo, masken_felder_bez, sachgeb_maske_bez, maske_system_bez zur Maske mit tid = &amp;lt;TID&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe:&lt;br /&gt;
| Fünf Dateien:&lt;br /&gt;
# &amp;lt;TID&amp;gt;_felderinfo.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_masken_felder_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maskeninfo.unl, &lt;br /&gt;
# &amp;lt;TID&amp;gt;_sachgeb_maske_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maske_system_bez.unl&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eine Maske neu einfügen =====&lt;br /&gt;
Um eine Maske neu einzufügen, müssen Sie die entsprechenden Einträge in den Tabellen&lt;br /&gt;
#  felderinfo,&lt;br /&gt;
#  masken_felder_bez,&lt;br /&gt;
#  maskeninfo, &lt;br /&gt;
# sachgeb_maske_bez,&lt;br /&gt;
# maske_system_bez&lt;br /&gt;
einfügen. Dafür gibt es das Script sx_insert_mask.&lt;br /&gt;
&lt;br /&gt;
sx_insert_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
|  sx_insert_mask &amp;lt;TID&amp;gt; [&amp;lt;neue TID&amp;gt;] [j]&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_insert_mask lädt den Inhalt der fünf Dateien&lt;br /&gt;
# &amp;lt;TID&amp;gt;_felderinfo.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_masken_felder_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maskeninfo.unl, &lt;br /&gt;
# &amp;lt;TID&amp;gt;_sachgeb_maske_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maske_system_bez.unl&lt;br /&gt;
in die jeweiligen Tabellen der SuperX-Datenbank. Mit &amp;quot;j&amp;quot; wird die Sicherheitsabfrage umgangen.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Falls &amp;lt;neue TID&amp;gt; nicht angegeben wird, werden die Metadaten wieder mit der alten TID in die Datenbank eingespielt (=Update).&lt;br /&gt;
Falls &amp;lt;neue TID&amp;gt; angegeben wird, werden die Metadaten mit der neuen TID in die Datenbank eingespielt (=Insert). Dabei werden alle TIDs in den abhängigen Tabellen angepasst. So können Masken sehr einfach kopiert werden. Eine neue TID bekommt man durch die Wahl der nächsten Zehnerzahl, die größer als die größte vorkommende Nummer ist. Die größte vorkommende Nummer erhält man durch Ausführung des folgenden SQL-Ausdrucks mit Hilfe des Kommandos DBACCESS:&lt;br /&gt;
select max(tid) from maskeninfo;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| !&lt;br /&gt;
| Um den Austausch von Abfragen innerhalb der Hochschulen zu erleichtern (&amp;quot;&amp;lt;span id=&amp;quot;anchor-44&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Abfragen-Pooling&amp;quot; über die SuperX-Website), sollten die Masken immer im Nummernkreis xxxx0000 bis xxxx9990 liegen, wobei xxxx der von der HIS verwandten Hochschulnummer entspricht. Die Zehnerschritte ergeben sich daraus, dass die dazwischen liegenden Nummern für die Maskenfelder (Tabelle felderinfo) reserviert sind&amp;lt;sup&amp;gt;&amp;lt;ref&amp;gt;&amp;lt;blockquote&amp;gt; Aus historischen Gründen liegen die Nummern aus Karlsruhe im Bereich 0-9990, aus Duisburg im Bereich 10000-19990.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wie im Abschnitt [[Kern_Benutzerverwaltung|Userverwaltung]] beschrieben, kann die neue Maske Benutzern oder Gruppen zugänglich gemacht werden.&lt;br /&gt;
&lt;br /&gt;
== Eine Maske löschen ==&lt;br /&gt;
Um eine Maske zu löschen, müssen Sie die Einträge in den oben genannten Tabellen entfernen. Dafür gibt es das Script sx_delete_mask&lt;br /&gt;
sx_delete_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
| sx_delete_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_delete_mask löscht alle Metadaten aus den Tabellen maskeninfo, felderinfo, masken_felder_bez, sachgeb_maske_bez und maske_system_bez zur Maske mit tid = &amp;lt;TID&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Änderungen an einer Maske vornehmen ==&lt;br /&gt;
1. Selektieren der Metadaten der betreffenden Maske: sx_select_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
2. Editieren der fünf Metadaten-Dateien ,,&amp;lt;TID&amp;gt;_...&amp;quot;&lt;br /&gt;
3. Abspeichern der neuen Metadaten: sx_insert_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
==Masken per Kommandozeile==&lt;br /&gt;
In diversen Szenarien kann es sinnvoll sein, Masken nicht nur im Browser über die Webanwendung auszuführen, sondern über Kommandozeile, also ohne laufenden Tomcat:&lt;br /&gt;
* Für Entwicklungszwecke kann es praktisch sein, wenn man keinen laufenden Tomcat braucht, und Masken z.B. in Eclipse ausführt und debuggen kann&lt;br /&gt;
* Große Ergebnisdateien lassen sich leichter erzeugen, weil man von der Webanwendung unabhängig ist und z.B. dem Kommandozeilenaufruf mehr Arbeitsspeicher zuteilt.&lt;br /&gt;
* Für die Verteilung von Downloads kann es sinnvoll sein, Berichtsergebnisse in Dateiform zu generieren und im [[Kern_Konfiguration#Downloads_einrichten_und_verteilen|Download-Bereich]] zu verlinken. &lt;br /&gt;
&lt;br /&gt;
Masken können bei eingerichteter Kommandozeilenumgebung direkt ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
* Unter SuperX: [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]]&lt;br /&gt;
* Unter HISinOne-BI: [[Kernmodul_Shellscripte#Nutzung_der_SQL_ENV_unter_HISinOne-BI|Nutzung der SQL_ENV unter HISinOne-BI]], oder Einrichtung einer HISinOne-Umgebung unter Eclipse: https://wiki.his.de/mediawiki/index.php/Einrichtung_einer_HISinOne-Arbeitsumgebung&lt;br /&gt;
&lt;br /&gt;
Damit der Aufruf unter Kernmodul 6.0 funktioniert, muss der zentral unter [[#JDBC-Classpath_für_Tomcat_10|JDBC-Classpath für Tomcat 10]] dokumentierte Jakarta-Classpath geladen sein.&lt;br /&gt;
&lt;br /&gt;
Der Kommandozeilenaufruf sieht unter Linux wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:Maskennummer -out:Ausgabedatei -user:Benutzerkennung &amp;quot;-params:Parameter...&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für den Aufruf der Maske &amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;quot; (tid=16000) als Admin-User  und deren Ausgabe in die Datei &amp;quot;test.htm&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.htm -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Das Beispiel läßt sich fortführen für andere Ausgabeformate, hier z.B. für PDF: &lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.pdf -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;stylesheet=tabelle_fo_pdf.xsl&amp;amp;amp;contenttype=application/pdf&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Das Beispiel zeigt daß über das Params-Argument beliebige Ausgabeformate übergeben werden können, z.B. auch Excel (xlsx):&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.xlsx -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;stylesheet=tabelle_xls.xsl&amp;amp;amp;contenttype=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&amp;lt;!--oder das alte Excel-Format:&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.xls -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;stylesheet=tabelle_xls.xsl&amp;amp;amp;contenttype=application/vnd.ms-excel&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties--&amp;gt;&lt;br /&gt;
oder als CSV Export:&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.csv -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;contenttype=text/csv&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Über den &amp;quot;Deep-Link&amp;quot;-Button lassen sich beliebige Parameter-Zeichenketten erzeugen und nutzen. Auch Aufrufe von JasperReports sind damit möglich, z.B. ein Studierendenbericht als Excel-Report:&lt;br /&gt;
&lt;br /&gt;
 java -cp $JDBC_CLASSPATH $JAVA_OPTS -Xmx2048m de.superx.bin.ExecuteMask -tid:160440 -out:$OUTFILE &amp;quot;-params:maxoffset=1000000&amp;amp;amp;stylesheet=tabelle_160440_semester_geschlecht.jrxml&amp;amp;amp;tablestylesheet=tabelle_160440_semester_geschlecht.jrxml&amp;amp;amp;contenttype=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;quot; -user:superx -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Bei Datenblattberichten sollte auch der Parameter tablestylesheet übergeben werden.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse sieht der Aufruf für das erste Beispiel (Ausgabe nach html) so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:execute_mask_eclipse1.png|680px]]&lt;br /&gt;
&lt;br /&gt;
Und hier die Parameter: &lt;br /&gt;
&lt;br /&gt;
[[Bild:execute_mask_eclipse2.png|680px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Beispiel lässt sich leicht auf andere Plattformen (DOS, Netbeans) übertragen. &lt;br /&gt;
&lt;br /&gt;
Sie können auch Parameter bewußt leer übergeben, indem Sie den Parameter ohne Wert übergeben, hier z.B. den Parameter „Sprache“:&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:70170 -out:test.htm -user:admin &amp;quot;-params:Stichwort=REPORT&amp;amp;amp;Sprache=&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
==Ausführen von JasperReports ==&lt;br /&gt;
Neben der Ausführung im Browser gibt es eine &amp;quot;Kommandozeilenversion&amp;quot; des Aufrufs: sx_jasper.x&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
| sx_jasper.x -JRXML:&amp;lt;JRXML-Datei&amp;gt; -XML:&amp;lt;Datei mit XML-Datenquelle&amp;gt; -db_properties:Pfad_zur_db.properties -IGNORE_PAGINATION:&amp;lt;true oder false&amp;gt; und optional -JASPER:&amp;lt;Jasper-Datei&amp;gt; -JRPRINT:&amp;lt;Jrprint-Datei&amp;gt; -OUT:&amp;lt;Ausgabedatei&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_jasper.x führt einen JasperReports-Task aus. Die Datenquelle kann entweder xml sein (Parameter -XML), oder eine Datenbankverbindung in der Datei db.properties. Das Ergebnis wird in eine Datei &amp;lt;Ausgabedatei&amp;gt; ausgegeben.&lt;br /&gt;
Wenn keine Ausgabedatei angegeben wird, wird der jrxml-Dateiname verwendet, und eine PDF-Ausgabe erzeugt.&lt;br /&gt;
|}&lt;br /&gt;
Sie können es mit einer Maskenausführung kombinieren, oder zum Entwickeln. Bei der Maskenausführung können Sie aber im Script [[Kernmodul_Shellscripte#Masken_per_Kommandozeile|ExecuteMask]] direkt JasperReports aufrufen.&lt;br /&gt;
&lt;br /&gt;
= Mailversand =&lt;br /&gt;
Für den Mailversand empfehlen wir die Unix Anwendung s-nail. Installation unter Ubuntu mit&lt;br /&gt;
 apt-get install -y s-nail&lt;br /&gt;
Unter RedHat&lt;br /&gt;
 yum install s-nail&lt;br /&gt;
== Einrichtung .mailrc ==&lt;br /&gt;
Das s-nail in Ubuntu 22.04 (Version 14.9.23) bietet die Möglichkeit, in der Shell mails für verschiedene Accounts zu verschicken. Zur Konfiguration wird die Datei $HOME/.mailrc genutzt. &lt;br /&gt;
&lt;br /&gt;
alt:&lt;br /&gt;
 set smtp=&amp;quot;smtp://smtp.variomedia.de:587&amp;quot;&lt;br /&gt;
 set from=&amp;quot;mail@memtext.de&amp;quot;&lt;br /&gt;
 set smtp-auth=login&lt;br /&gt;
 set smtp-auth-user=&amp;quot;noreply@superx-projekt.de&amp;quot;&lt;br /&gt;
 set smtp-auth-password=securepw1234&lt;br /&gt;
&lt;br /&gt;
neu:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
set v15-compat&lt;br /&gt;
account test {&lt;br /&gt;
    set from=&amp;quot;Memtext &amp;lt;mail@memtext.de&amp;gt;&amp;quot;&lt;br /&gt;
    set mta=smtp://noreply%40superx-projekt.de:securepw1234@smtp.variomedia.de:587&lt;br /&gt;
    set smtp-use-starttls&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Sollte nur für den Benutzer lesbar sein. Es ist nicht sicher, das Passwort direkt in der Konfigurationsdatei zu speichern. Eine sicherere Variante wäre, pass oder gnome-keyring zu nutzen.}}&lt;br /&gt;
&lt;br /&gt;
== Mail verschicken über die bash ==&lt;br /&gt;
Zum Verschicken einer Testmail schreiben Sie z.B.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;test&amp;quot; | s-nail --account=test -s &amp;quot;test&amp;quot; support@superx-projekt.de support1@superx-projekt.de support2@superx-projekt.de&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Das CLI von s-nail verhält sich etwas UNIX-untypisch: Beachten Sie dass mehrere Mailadressat_innen mit Leerzeichen getrennt hinten angefügt werden - ohne Anführungszeichen um alle Mailadressen.&lt;br /&gt;
&lt;br /&gt;
Mit dem zusätzlichen Parameter -v können detaillierte Debug-Informationen ausgegeben werden:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;test&amp;quot; | s-nail -v --account=test -s &amp;quot;test&amp;quot; support@superx-projekt.de support1@superx-projekt.de support2@superx-projekt.de&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit lässt sich dann prüfen, ob der Versand verschlüsselt (mit set smtp-use-starttls) oder unverschlüsselt stattgefunden hat.&lt;br /&gt;
Unverschlüsselt sähe dann z.B. so aus:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Testmail&amp;quot; | s-nail -v --account=test-ohne-starttls -s &amp;quot;Testmail&amp;quot; support@superx-projekt.de&lt;br /&gt;
s-nail: P(seudo)R(andom)N(umber)G(enerator): *TLS RAND_*&lt;br /&gt;
s-nail: Resolving host smtp.superx-projekt.de:587 ... done&lt;br /&gt;
s-nail: Connecting to 81.28.224.28:587 ... connected.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und verschlüsselt so:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 echo &amp;quot;Testmail&amp;quot; | s-nail -v --account=test-starttls -s &amp;quot;Testmail&amp;quot; support@superx-projekt.de&lt;br /&gt;
s-nail: P(seudo)R(andom)N(umber)G(enerator): *TLS RAND_*&lt;br /&gt;
s-nail: Resolving host smtp.superx-projekt.de:587 ... done&lt;br /&gt;
s-nail: Connecting to 81.28.224.28:587 ... connected.&lt;br /&gt;
s-nail:  Certificate depth 2&lt;br /&gt;
s-nail:   subject = /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority&lt;br /&gt;
s-nail:   notBefore = Feb  1 00:00:00 2010 GMT&lt;br /&gt;
s-nail:   notAfter = Jan 18 23:59:59 2038 GMT&lt;br /&gt;
s-nail:   issuer = /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority&lt;br /&gt;
s-nail:  Certificate depth 1&lt;br /&gt;
s-nail:   subject = /C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Organization Validation Secure Server CA&lt;br /&gt;
s-nail:   notBefore = Nov  2 00:00:00 2018 GMT&lt;br /&gt;
s-nail:   notAfter = Dec 31 23:59:59 2030 GMT&lt;br /&gt;
s-nail:   issuer = /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority&lt;br /&gt;
s-nail:  Certificate depth 0&lt;br /&gt;
s-nail:   subject = /C=DE/ST=Brandenburg/O=Memtext AG/CN=*.superx-projekt.de&lt;br /&gt;
s-nail:   notBefore = Feb  8 00:00:00 2024 GMT&lt;br /&gt;
s-nail:   notAfter = Mar 10 23:59:59 2025 GMT&lt;br /&gt;
s-nail:   issuer = /C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Organization Validation Secure Server CA&lt;br /&gt;
s-nail: Comparing subject_alt_name: need&amp;lt;smtp.superx-projekt.de&amp;gt; is&amp;lt;*.superx-projekt.de&amp;gt;&lt;br /&gt;
s-nail: TLS certificate ok&lt;br /&gt;
s-nail: TLS BLAKE2s256 fingerprint: 7A:0A:D3...&lt;br /&gt;
s-nail: TLS connection using TLSv1.3 / TLS_AES_256_GCM_SHA384&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL_ENV mit s-nail ==&lt;br /&gt;
In der [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]] für die neue Konfig-Syntax am besten die Variable MAILPROG mit z.B. &lt;br /&gt;
 MAILPROG=&amp;quot;s-nail --account=test&amp;quot; &lt;br /&gt;
angeben.&lt;br /&gt;
=Shellscripte in der HISinOne-BI=&lt;br /&gt;
Die Shellscripte von superX sind auch in der HISinOne-BI nutzbar, sofern Linux als Betriebssystem genutzt wird. Vorbedingung ist&lt;br /&gt;
* die Einrichtung der [[Kernmodul_Shellscripte#Nutzung_der_SQL_ENV_unter_HISinOne-BI|SQL_ENV]]&lt;br /&gt;
* Machen Sie alle Shellscripte im Ordner .../webapps/superx/WEB-INF/conf/edustore/db/bin ausführbar&lt;br /&gt;
 chmod +x .../webapps/superx/WEB-INF/conf/edustore/db/bin/*&lt;br /&gt;
* Nützlich ist auch die Installation von psql, also mindestens das Paket postgresql-client&lt;br /&gt;
Im folgenden Beispiel wird ein HISinOne-BI-spezifisches Modul eingerichtet. &lt;br /&gt;
&lt;br /&gt;
==Shellscripte zur Verwaltung von RES==&lt;br /&gt;
Das Forschungsmodul RES der HIS e.G. ist ein Beispiel für ein Nicht-SuperX-Modul, das aber auch mit Shellscripten verwaltet werden kann. Hier das Vorgehen:&lt;br /&gt;
*Entpacken Sie die ZIP-Datei H1-CS-CM-RM_&amp;lt;&amp;lt;Version&amp;gt;&amp;gt;.zip in einem Ordner Ihrer Wahl.&lt;br /&gt;
*Setzen Sie in der [[Kernmodul_Shellscripte#Nutzung_der_SQL_ENV_unter_HISinOne-BI|SQL_ENV]] die Pfade und Variablen:&lt;br /&gt;
 RES_PFAD=.../webapps/superx/WEB-INF/conf/edustore/db/module/res; export RES_PFAD&lt;br /&gt;
 RES_ERRORDAT=$RES_PFAD/res_load.err; export RES_ERRORDAT&lt;br /&gt;
 RES_LOAD_PFAD=$RES_PFAD/rohdaten; export RES_LOAD_PFAD&lt;br /&gt;
 RES_ERRORMAIL=$ERRORMAIL; export RES_ERRORMAIL&lt;br /&gt;
 RES_LOGMAIL=$LOGMAIL; export RES_LOGMAIL&lt;br /&gt;
* Machen Sie die Shellscripte in $RES_PFAD und $RES_LOAD_PFAD ausführbar:&lt;br /&gt;
 chmod +x $RES_PFAD/*.x&lt;br /&gt;
 chmod +x $RES_PFAD/rohdaten/*.x&lt;br /&gt;
 chmod +x $RES_PFAD/upgrade/*.x&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Modul installieren mit&lt;br /&gt;
 cd $RES_PFAD&lt;br /&gt;
 module_install.x res .&lt;br /&gt;
&lt;br /&gt;
Dann entladen Sie aus H1, indem Sie in $RES_LOAD_PFAD die Datei RES_ENV analog einrichten wie Sie z.B. die ZUL_ENV oder SOS_ENV eingerichtet haben&lt;br /&gt;
&lt;br /&gt;
 cd $RES_LOAD_PFAD&lt;br /&gt;
 res_unload.x&lt;br /&gt;
&lt;br /&gt;
Dann starten Sie den Update:&lt;br /&gt;
&lt;br /&gt;
 cd $RES_PFAD&lt;br /&gt;
 module_etl.x res .&lt;br /&gt;
&lt;br /&gt;
Es kann Probleme geben, wenn das Kernmodul nicht zu der ZIP Datei von HIS paßt. Fehler bzgl. &amp;quot;dim_bp_apnr&amp;quot;... können Sie ignorieren.&lt;br /&gt;
&lt;br /&gt;
Eine Datenbank-Dokumentation befindet sich hier:&lt;br /&gt;
 .../webapps/superx/WEB-INF/conf/edustore/db/module/res/conf/res.html&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kern_Benutzerverwaltung&amp;diff=16494</id>
		<title>Kern Benutzerverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kern_Benutzerverwaltung&amp;diff=16494"/>
		<updated>2026-08-31T06:58:21Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Gastzugang&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Einzelne Benutzer verwalten =&lt;br /&gt;
&lt;br /&gt;
Wenn Sie im Bereich Administration den Bereich &#039;&#039;Benutzer verwalten&#039;&#039; wählen, sehen Sie folgende Oberfläche:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=menue_admin_user.png|width=600px|caption=Themenbaum-Menü zur Userverwaltung}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die jeweiligen Masken sind im Folgenden beschrieben.&lt;br /&gt;
&lt;br /&gt;
==Neuer Benutzer ==&lt;br /&gt;
&lt;br /&gt;
Wenn Sie eine neue Benutzerkennung einrichten wollen, klicken Sie auf &#039;&#039;User einrichten&#039;&#039;. Anschließend werden Sie nach Angaben zur Kennung für den neuen Benutzer gefragt: &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=user_edit.png|width=600px|caption=Maske User einrichten}}&lt;br /&gt;
&lt;br /&gt;
Die User-tid wird automatisch hochgezählt. Die Benutzerkennung ist der Login-Text, und eine Gruppe kann ausgewählt werden. Der Name der Person muss angegeben werden. Wenn Sie das Feld &amp;quot;Inst-Rechte&amp;quot; leer lassen, hat die Kennung Rechte auf alle Institutionen.&lt;br /&gt;
&lt;br /&gt;
Die Gültigkeit der Kennung sowie der Zugehörigkeit zu einer Institution kann ebenfalls eingeschränkt werden. Das Klappmenü &amp;quot;nur Lehre&amp;quot; wird bei den Organigramm-Rechten ausgewertet (obsolet mit 3.0). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klicken Sie zum Abschluss auf &amp;quot;Abschicken&amp;quot;. Der Benutzer wird dann mit dem verschlüsselten Passwort angelegt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Benutzer löschen ==&lt;br /&gt;
Wenn Sie einen Benutzer löschen wollen, wählen Sie im Themenbaum die Abfrage &amp;quot;User löschen&amp;quot; und dort die Kennung in dem Klappmenü.&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=user_loeschen.png|width=400px|caption=Maske User entfernen}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bestätigen Sie Ihre Auswahl einmal, indem Sie die Kennung eintippen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Benutzer bearbeiten ==&lt;br /&gt;
&lt;br /&gt;
Im Formular &#039;&#039;&#039;User suchen&#039;&#039;&#039; erhalten Sie je nach Einschränkung eine Liste mit Benutzern. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=user_suchen_maske.png|width=800px|caption=Maske User suchen}}&lt;br /&gt;
&lt;br /&gt;
Wir schränken z.B. ein auf die Gruppe Administratoren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=user_suchen_tabelle.png|width=800px|caption=Ergebnis Maske User suchen}}&lt;br /&gt;
&lt;br /&gt;
Es erscheinen zwei User, die voreingestellten Administratoren. Sie können sich Details zur Person ansehen, oder die Person bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=user_bearbeiten1.png|width=800px|caption=Maske User bearbeiten}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Bearbeitungsmaske können Sie Kennung und Namen ändern, sowie das [[Kern_Benutzerverwaltung#Passwort_vergessen_oder_Account_gesperrt|Passwort ändern]]. Danach müssen Sie oben rechts auf die Diskette zum Speichern klicken.&lt;br /&gt;
Sie können die Gruppenzugehörigkeit zuordnen, und sie können dem User Rechte auf einzelne Sachgebiete, Masken, Institutionen, Sichten und ganze Sichtarten geben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Bei Institutionen gibt es eine spezielle Institutionsnr. 0, die Rechte auf alle Institutionen beinhaltet. Ebenso gibt die Gruppe Administration Recht auf alle Masken.}}&lt;br /&gt;
&lt;br /&gt;
Bei den Gruppen, Sachgebiete, Masken, Institutionen, Sichten und Sichtarten handelt es sich um Unterformulare, d.h. Sie brauchen Änderungen hier nicht mit dem Diskettensymbol oben rechts zu speichern.&lt;br /&gt;
&lt;br /&gt;
==Passwort vergessen oder Account gesperrt==&lt;br /&gt;
Wenn Benutzer_innen sich nicht mehr anmelden können, kann das zwei Ursachen haben:&lt;br /&gt;
* Es gab zu viele fehlerhafte Login-Versuche, dann ist kein Login mehr möglich, weil der Account gesperrt wird.&lt;br /&gt;
* Benutzer_innen haben ihr Passwort vergessen &lt;br /&gt;
&lt;br /&gt;
Sie können als Administrator_in den Account wieder öffnen und/oder das Passwort zurücksetzen.&lt;br /&gt;
* Account öffnen:&lt;br /&gt;
{{ImagePara |imgsrc=user_pw_aendern2.png|width=800px|caption=Maske User bearbeiten entsperren}}&lt;br /&gt;
Setzen Sie das Feld &amp;quot;Akt_versuch&amp;quot; auf einen Werte kleiner als &amp;quot;Max_versuch&amp;quot;.&lt;br /&gt;
* Passwort ändern:&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=user_pw_aendern1.png|width=800px|caption=Maske User bearbeiten Passwort}}&lt;br /&gt;
&lt;br /&gt;
Gehen Sie zunächst auf den Button &amp;quot;ändern&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=user_pw_aendern3.png|width=800px|caption=Maske User bearbeiten Passwort 2}}&lt;br /&gt;
Danach geben sie das neue Passwort rechts daneben im Passwort Feld ein, und klicken danach auf &amp;quot;Verschlüsseln&amp;quot;. Es wird dann im linken Feld ersetzt. Danach klicken Sie rechts oben auf &amp;quot;Speichern&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==Zum Häkchen Administration ==&lt;br /&gt;
&lt;br /&gt;
Das Häkchen Administrator/in hat keinen Effekt auf die sichtbaren Sachgebiete und Masken im Themenbaum. Es bewirkt folgendes:&lt;br /&gt;
&lt;br /&gt;
* Lese- und Schreibzugriff für alle DBFORMS&lt;br /&gt;
* Leserecht für alle Sichten&lt;br /&gt;
* Ausführungsrecht für Administrationsmasken im Kernmodul, z.B. User löschen&lt;br /&gt;
* Recht, im Webanwendung Manager den Cache zu leeren und die SQL-Protokollierung anzuzeigen&lt;br /&gt;
* Recht, JasperReports-Templates zu generieren&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Für die Gruppen Administratoren und Bearbeiter musste bei Einsatz des SuperX-Kernmoduls 3.0 immer das Häkchen bei &amp;quot;Administration&amp;quot; gesetzt werden, denn nur diese Personen durften im Kernmodul 3.0 die DBForms überhaupt nutzen. Im Kernmodul 3.5 oder höher ist dies nicht mehr notwendig, da reicht es aus wenn die User der Gruppe &amp;quot;Administratoren&amp;quot; (Name darf nicht geändert werden) angehören, bzw. im GANG-Modul den Gruppen &#039;&#039;&#039;GANG Bearbeiter&#039;&#039;&#039; oder &#039;&#039;&#039;GANG Administratoren&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Gruppen verwalten =&lt;br /&gt;
&lt;br /&gt;
Im Bereich &#039;&#039;Gruppenverwaltung &#039;&#039;erhält man die Möglichkeit, Gruppen zu löschen, neue Gruppen anzulegen und Stammdaten zu ändern.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Neue Gruppe anlegen ==&lt;br /&gt;
&lt;br /&gt;
Wenn man eine neue Gruppe einrichten will, wählt man im Menü Administration-&amp;amp;gt;Benutzer-&amp;amp;gt;Gruppe einrichten. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=gruppe_einrichten.png|width=800px|caption=Maske Gruppe einrichten }}&lt;br /&gt;
&lt;br /&gt;
Sie können eine Nummer vergeben, den Namen festlegen (darf nicht bereits existieren), die zugehörigen Mitglieder auswählen, und Rechte für Sachgebiete und Masken vergeben. &lt;br /&gt;
&lt;br /&gt;
Mit &#039;&#039;&#039;Abschicken&#039;&#039;&#039; werden die Tabellen gefüllt.&lt;br /&gt;
&lt;br /&gt;
==Gruppe bearbeiten ==&lt;br /&gt;
&lt;br /&gt;
Im Formular &#039;&#039;&#039;&#039;&#039;&#039;Gruppe suchen&#039;&#039;&#039;&#039;&#039;&#039; erhalten Sie je nach Einschränkung eine Liste mit Gruppen. &lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=gruppe_suchen.png|width=600px|caption=Maske Gruppe suchen}}&lt;br /&gt;
Wir schränken z.B. ein auf die Gruppe(n) des Users &#039;&#039;&#039;superx&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=gruppe_suchen_tabelle.png|width=600px|caption=Tabelle Gruppe suchen}}&lt;br /&gt;
&lt;br /&gt;
Es erscheint ein Eintrag mit der Gruppe Administratoren, die zwei User enthält. Sie können die Gruppe mit dem Stift-Icon bearbeiten.&lt;br /&gt;
&lt;br /&gt;
{{ImagePara |imgsrc=gruppe_bearbeiten1.png|width=600px|caption=Gruppe bearbeiten}}&lt;br /&gt;
&lt;br /&gt;
In der Bearbeitungsmaske können Sie den Namen der Gruppe ändern. Danach müssen Sie unten &amp;quot;Speichern&amp;quot; anklicken.&lt;br /&gt;
&lt;br /&gt;
Sie können die Gruppenzugehörigkeit zuordnen, und sie können der Gruppe Rechte auf einzelne Masken, Sichten und Sichtarten geben.&lt;br /&gt;
&lt;br /&gt;
Außerdem können Sie der Gruppe weitere User zufügen / enfernen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Bei den Gruppen, Masken, Sichten, Sichtarten und Usern handelt es sich um Unterformulare, d.h. Sie brauchen Änderungen hier nicht mit dem Diskettensymbol oben rechts zu speichern.}}&lt;br /&gt;
&lt;br /&gt;
==Gruppe löschen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im XML-Frontend im Menü Administration -&amp;amp;gt; Benutzer -&amp;amp;gt; Gruppe löschen können Sie eine Gruppe löschen und die jeweiligen Rechte für Sachgebiete und Masken entfernen. Auch die Zuordnungen von Usern zur Gruppe (nicht aber die User selbst) werden gelöscht.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Sie müssen lediglich den Namen der Gruppe auswählen und einmal zur Sicherheit bestätigen, indem Sie den Namen eintippen.&amp;lt;br /&amp;gt;&lt;br /&gt;
Mit &#039;&#039;&#039;Abschicken&#039;&#039;&#039; werden die Einträge entfernt.&lt;br /&gt;
| [[Bild:gruppe_loeschen.png|400x240px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Maskenrechte vergeben =&lt;br /&gt;
&lt;br /&gt;
Einzelne Berichte/Masken Benutzern oder Gruppen zuzuordnen verschafft mehr Kontrolle als die Berichte über Sachgebietsrechte zu vergeben. Dabei muss aber beachtet werden, dass eventuelle Rechte auf Sichten extra vergeben werden müssen und ist damit auch etwas aufwendiger. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen Bericht frei geben, rufen Sie diesen als Administrator ein mal auf. Die Auswahlfelder, welche als Buttons angezeigt werden können Sichten sein. Z.B. in dem Bericht „Alter der Studierenden“ die Buttons Studiengang, Fächer und Abschluss. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_01.png|604x423px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn Sie auf einen Button wie Studiengang klicken, sehen Sie in der Box oben, dass Sie die Sicht ändern können. Dies ist daher ein Button der Rechte auf eine Sicht benötigt. Das gleiche auch bei dem Button Fächer. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_03.png|549x389px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bei dem Button Abschluss fehlt die Auswahl der Sicht. Dies ist nur eine Liste und keine Sicht. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_04.png|604x437px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie müssen also für die Buttons Studiengang und Fächer dem Benutzer, dem Sie explizit diese Maske zuordnen rechte auf die verwendeten Sichten geben. Wenn Sie unter Administration → Masken → Felder → Feld suchen bei „Feld der Maske“ „Alter der Studierenden“ raus suchen und abschicken, Sehen Sie die Felder der Maske „Alter der Studierenden“. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_05.png|531x317px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_06.png|604x165px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_07.png|302x684px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Klicken Sie hier jeweils für Studiengang und Fächer auf Bearbeiten. In dem neuen Fenster sehen Sie unter „Relation“ den verwendeten SQL und auch die Sichtarten. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_08.png|604x385px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_alter_der_studierenden_09.png|604x383px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie müssen dem Benutzer auf mindestens eine Sicht oder besser noch auf die ganze Sichtart das Recht vergeben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Sichten und Sichtarten zuordnen =&lt;br /&gt;
&lt;br /&gt;
Wie unter Maskenrechte vergeben beschrieben, können Sie die benötigten Sichtarten für Masken herausfinden. Sie können nun einfach die Sichtart in dem entsprechenden Berechtigungsfeld raus suchen und dazu das Recht vergeben. Sie können aber auch nur das Recht auf eine spezielle Sicht dieser Sichtart vergeben. Um heraus zu finden welche Sichten sich hinter einer Sichtart verstecken gehen Sie auf Administration → Masken → Sicht suchen. Dort wählen Sie die Sichtart aus und klicken auf Abschicken. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_suchen_01.png|604x215px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Ergebnistabelle zeigt alle Sichten der angegebenen Sichtart an. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:sichten_suchen_02.png|604x399px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sie können daraus nun auch speziell eine Sicht aussuchen und in der Rechtevergabe das Rechte auf eine einzelne Sichten vergeben. Dazu merken Sie sich einfach die Nummer. Das hat dann den Effekt, dass in manchen Berichten im Ergebnis nach dem Baum dieser Sicht aufgebaut wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Benutzer Info =&lt;br /&gt;
&lt;br /&gt;
Unter der Benutzer Info befinden sich Berichte, die ausführliche Informationen für die Benutzer und Gruppenverwaltung ausgeben. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bericht: Benutzer – Abfragen ==&lt;br /&gt;
&lt;br /&gt;
In diesem Bericht erfahren Sie auf welche Berichte bestimmte Benutzer zugreifen dürfen. Es werden auch Berichte angezeigt, welche über Gruppen- oder Sachgebietsrechte erteilt worden sind.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_benutzer_abfragen_maske.png|680x236px]]&lt;br /&gt;
&lt;br /&gt;
In dem Bericht können Sie ein oder mehrere Benutzer wählen und bei bedarf die Ausgabe auf eine Gruppe und/oder ein Sachgebiet begrenzen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_benutzer_abfragen_tabelle.png|680x319px]]&lt;br /&gt;
&lt;br /&gt;
So würde dann z.B. das Ergebnis aussehen. Dem testuser aus diesem Beispiel wurde ein Bericht direkt zugeordnet und hat Rechte auf 6 weitere über das Sachgebiet Masken-Verwaltung. Wie Sie sehen erfahren Sie hier die Berechtigungen der Benutzer auf Berichte recht einfach und Übersichtlich.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bericht: Benutzer – Institutionen ==&lt;br /&gt;
&lt;br /&gt;
In diesem Bericht erfahren Sie welche Institutionsrechte die Benutzer haben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_benutzer_institution_maske.png|680x185px]]&lt;br /&gt;
&lt;br /&gt;
In dem Bericht gibt es nur die Auswahl des Benutzers.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_benutzer_institution_tabelle.png|680x143px]]&lt;br /&gt;
&lt;br /&gt;
Als Ergebnis erhalten Sie alle Institutionen auf die der Benutzer Rechte besitzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bericht: Benutzer - Sichten ==&lt;br /&gt;
&lt;br /&gt;
In diesem Bericht erfahren Sie auf welche Sichten die Benutzer Rechte haben.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_benutzer_sichten_maske.png|680x243px]]&lt;br /&gt;
&lt;br /&gt;
In dem Bericht können Sie ein oder mehrere Benutzer wählen und bei bedarf die Ausgabe auf eine Gruppe und/oder ein Sachgebiet begrenzen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_benutzer_sichten_tabelle.png|680x233px]]&lt;br /&gt;
&lt;br /&gt;
Als Ergebnis erhalten Sie alle Sichten auf die der Benutzer Rechte besitzt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bericht: Gruppen – Benutzer ==&lt;br /&gt;
&lt;br /&gt;
In diesem Bericht können Sie in Erfahrung bringen, in welchen Gruppen ein Benutzer ist oder welche Benutzer in einer Gruppe ist. In dem folgenden Beispiel wurde eine Gruppe gewählt und es wird nach den zugeordneten Benutzern gesucht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_gruppen_benutzer_maske.png|680x222px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Als Ergebnis erhalten Sie dann die Zuordnung Gruppe – Benutzer.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_gruppen_benutzer_tabelle.png|680x166px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bericht: Gruppen – Sachgebiete ==&lt;br /&gt;
&lt;br /&gt;
In diesem Bericht werden die Sachgebiete aufgelistet, dessen Rechte einer Gruppe zugeordnet wurden.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_gruppen_sachgebiete_maske.png|680x190px]]&lt;br /&gt;
&lt;br /&gt;
Als Ausgabe erhalten Sie eine Tabelle mit Gruppe – Sachgebiet.&lt;br /&gt;
&lt;br /&gt;
[[Bild:bericht_gruppen_sachgebiete_tabelle.png|680x140px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Rechte für Downloads=&lt;br /&gt;
Diese Funktion ist im [[Kern_Konfiguration#User-_und_Gruppenrechte_auf_Downloads|Konfigurationsleitfaden Downloads]] beschrieben.&lt;br /&gt;
=Rechte für DBFORMS =&lt;br /&gt;
&lt;br /&gt;
Die DBFORMS dienen der Dateneingabe in SuperX, z.B. für die Konfiguration. Alle DBFORMS lassen sich direkt aus einer Maske aufrufen und sind daher nur für die Personen sichtbar, die auch das jeweilige Maskenrecht haben. &lt;br /&gt;
&lt;br /&gt;
Wenn die User das Recht auf das Sachgebiet des jeweiligen DBFORMS haben (Tabelle sachgeb_dbform_bez), bekommen sie Leserecht, sofern das DBFORM &amp;quot;stand-alone&amp;quot; arbeitet, d.h. nicht mit Pflichtparameter aus einer Maske aufgerufen wird, sondern direkt über die Maske &amp;quot;Tabelle suchen&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn die User einer Gruppe zugeordnet sind, die Rechte auf Sachgebiete mit dem Namen &amp;quot;Administration*&amp;quot; oder &amp;quot;Bearbeitung*&amp;quot; haben, bzw. wenn sie als Einzeluser Recht auf ein solches Sachgebiet haben, bzw. wenn sie das [[Kern_Benutzerverwaltung#Zum_H.C3.A4kchen_Administration|Admin-Häkchen]] haben, bekommen sie auch Schreibrecht (Daten einfügen, löschen, neu erzeugen). Beim Modul GANG sind das z.B. die Sachgebiete &amp;quot;Administration GANG&amp;quot; und &amp;quot;Bearbeitung GANG&amp;quot;.&lt;br /&gt;
= Gastzugang einrichten =&lt;br /&gt;
Ab Kernmodul 5.0 / HisInOne 2022.06 ist es möglich Gastzugänge einzurichten, um Berichte anzuzeigen, für die man sich nicht authentifizieren muss,z.B. Studierendenzahlen, wenn dies vom Datenschutz genehmigt wurde. &lt;br /&gt;
{{Hinweis|Bei Nutzung in HISinOne-BI ist die Menüführung etwas anders, siehe [https://wiki.his.de/mediawiki/index.php/BI-Gastzugang_einrichten Leitfaden].}}&lt;br /&gt;
&lt;br /&gt;
Zum Einrichten einer Gastkennung gehen Sie auf Administration |  Gastzugang einrichten. &lt;br /&gt;
Als Gastkennung wird &amp;quot;gast&amp;quot; vorgeschlagen. Es kann aber auch mit mehreren Gastkennungen gearbeitet werden, z.B. gast1, gast2, gast3 für verschiedene Zwecke. Wichtig ist nur, dass die Kennung mit &amp;quot;gast&amp;quot; anfängt.&lt;br /&gt;
&lt;br /&gt;
Geben Sie auf der Auswahlmaske der Gastkennung Instititions-Rechte, Rechte auf Masken und dafür benötigte Sichtarten.&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Eine Gastkennung verhält sich bzgl. Rechten wie eine &amp;quot;normale&amp;quot; Kennung, es entfällt aber die Passworteingabe. Bitte daher mit Vorsicht verwenden. Außerdem sollten Sie bei der Nutzung von mehreren Gastkennungen, die jeweils im gleichen Browser mit unterschiedlichen Deeplinks genutzt werden, über User- und Gruppenrechte einstellen, dass jeweils beide Menüpunkte berechtigt sind. }}&lt;br /&gt;
&lt;br /&gt;
Im folgenden Beispiel lege wir eine Kennung &amp;quot;gast1&amp;quot; an, mit Rechten auf eine Studierenden-Zeitreihe aus rein fachlicher (d.h. keine Fakultäten/  Fachbereiche)  Sicht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:gastzugang_maske1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Nach dem Abschicken sehen Sie ein Ergebnis der Neuanlage:&lt;br /&gt;
&lt;br /&gt;
[[Bild:gastzugang_tabelle1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Das resultierende Bearbeitungsformular ist das normale Formular:&lt;br /&gt;
&lt;br /&gt;
[[Bild:gastzugang_tabelle2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Hier können Sie weitere Rechte wie [[Kern_Benutzerverwaltung#Benutzer_bearbeiten|gewohnt]] anpassen. Wenn Sie Gastuser manuell bearbeiten, muss das verschlüsselte Passwort &amp;quot;notsecret&amp;quot; sein.&lt;br /&gt;
&lt;br /&gt;
== Manuelle Einrichtung / ältere Installationen ==&lt;br /&gt;
&lt;br /&gt;
Bei älteren Installationen kann ein Gastzugang auch über die normale Benutzerverwaltung eingerichtet werden. Tragen Sie dafür für eine beliebige Userkennung (z.B. public, gast, anonym o.ä) das Passwort „notsecret“ (ohne Anführungszeichen) ein. Das Passwort wird verschlüsselt in der Datenbanktabelle „userinfo.passwd_sha“ abgelegt.&lt;br /&gt;
&lt;br /&gt;
Sie können dann Links wie z.B.&lt;br /&gt;
&lt;br /&gt;
[http://localhost:8080/superx/servlet/SuperXmlMaske?tid=71190&amp;amp;navi=true&amp;amp;kennung=public http://localhost:8080/superx/servlet/SuperXmlTabelle?tid=71190&amp;amp;amp;navi=true&amp;amp;amp;kennung=public]&lt;br /&gt;
&lt;br /&gt;
erstellen, die Authentifizierung erfolgt mit dem internen Passwort „notsecret“.&lt;br /&gt;
&lt;br /&gt;
Falls Sie sonst standardmäßig LDAP für die Anmeldung verwenden, können Sie ab kern4.9.1 den Parameter login=superx ergänzen, dann erfolgt die Anmeldung nicht über LDAP, sondern eben mit „notsecret“ gegen die SuperX-Datenbanktabelle userinfo. Beispiel:&lt;br /&gt;
&lt;br /&gt;
[http://localhost:8080/superx/servlet/SuperXmlMaske?tid=71190&amp;amp;navi=true&amp;amp;kennung=public&amp;amp;login=superx http://localhost:8080/superx/servlet/SuperXmlTabelle?tid=71190&amp;amp;amp;navi=true&amp;amp;amp;kennung=public&amp;amp;amp;login=superx] &lt;br /&gt;
&lt;br /&gt;
Der Aufruf des normalen Themenbaums für Gastuser ist auch möglich mit,z.B. &lt;br /&gt;
&lt;br /&gt;
http://localhost:8080/superx/servlet/SuperXmlAnmeldung?kennung=public &lt;br /&gt;
&lt;br /&gt;
== Gastzugang verwenden ==&lt;br /&gt;
&lt;br /&gt;
Es gibt drei Möglichkeiten, die Gastkennung zu nutzen, passen Sie die Beispiellinks an Ihre Server an:&lt;br /&gt;
* Themenbaum anzeigen http://localhost:8080/superx/servlet/SuperXmlAnmeldung?kennung=gast1&lt;br /&gt;
&lt;br /&gt;
[[Bild:gastzugang_menue2.png|500px]]&lt;br /&gt;
&lt;br /&gt;
* Eine Berichtsmaske anzeigen http://localhost:8080/superx/servlet/SuperXmlMaske?tid=16340&amp;amp;kennung=gast1&lt;br /&gt;
&lt;br /&gt;
[[Bild:gastzugang_menue4.png|500px]]&lt;br /&gt;
&lt;br /&gt;
* Eine Ergebnistabelle anzeigen http://localhost:8080/superx/servlet/SuperXmlTabelle?tid=16340&amp;amp;kennung=gast1&lt;br /&gt;
&lt;br /&gt;
[[Bild:gastzugang_menue5.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Mit den Möglichkeiten der Lesezeichen- bzw. DeepLinks-Erzeugung können Sie weitere Parameter hinzufügen. Wichtig ist der Parameter kennung=gast bzw. bei mehreren Gastkennungen z.B. kennung=gast3.&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Noch ein Fallstrick beim Testen: Sie sollten beim Testen der Gastkennung einen anderen Browser als Ihren normalen, bzw. in einem privaten Fenster testen, denn sonst bekommen Sie selbst beim Aufruf der Gastseite die Gastkennung, wo aber kein Logout möglich ist. Alternativ leeren Sie die Cookies zum Server.}}&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Proxmox&amp;diff=16447</id>
		<title>Proxmox</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Proxmox&amp;diff=16447"/>
		<updated>2026-08-21T06:52:32Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Download und Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Download und Installation=&lt;br /&gt;
==Installation aus ISO-Image==&lt;br /&gt;
https://www.proxmox.com/de/proxmox-ve/erste-schritte&lt;br /&gt;
ISO auf USB-Stick:&lt;br /&gt;
 dd bs=1M conv=fdatasync if=./proxmox-ve_7.2-1.iso of=/dev/sda&lt;br /&gt;
&lt;br /&gt;
Dann Installation mit ext4, swap 4-8 GB RAM&lt;br /&gt;
&lt;br /&gt;
Bei FQDN muss man &amp;quot;jolly.fritz.box&amp;quot; angeben&lt;br /&gt;
&lt;br /&gt;
Repositories: In der Server Ansicht auf &amp;quot;Repositories&amp;quot; gehen, dort dann ein neues Hinzufügen von dem Typ &amp;quot;No-Repositories&amp;quot;.&lt;br /&gt;
Damit bekommt man immerhin Updates.&lt;br /&gt;
&lt;br /&gt;
=CT-Image nutzen=&lt;br /&gt;
Man kann unter Datacenter -&amp;gt; Local verschiedene Container-Images herunterladen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:proxmox_template.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Diese kann man dann installieren. Gemeinhin sind diese performanter als VM-Images.&lt;br /&gt;
&lt;br /&gt;
=VM-Image hochladen=&lt;br /&gt;
Zum Hochladen eines ISO Image in die Storage Ansicht wechseln, und bei &amp;quot;local&amp;quot; auf &amp;quot;ISO-Images&amp;quot; gehen. dort kann man dann eine ISO Datei hochladen.&lt;br /&gt;
Erst habe ich probiert, die ISO-Images direkt zu kopieren nach /var/lib/vz/images, aber das erschien dann nicht. &lt;br /&gt;
&lt;br /&gt;
root shell:&lt;br /&gt;
&lt;br /&gt;
 pveam update&lt;br /&gt;
 pveam available | grep ubuntu&lt;br /&gt;
 pveam download local ubuntu-24.04-standard_24.04-2_amd64.tar.z&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Betriebssystem=&lt;br /&gt;
Deutsche Locale installieren:&lt;br /&gt;
-in /etc/locale.gen die Zeile de_DE.utf8 ent-kommentieren&lt;br /&gt;
-locale-gen de_DE.utf8&lt;br /&gt;
==IP Nummer des Proxmox Host==&lt;br /&gt;
Um Ändern der IP des PROXMOX-Hosts muss man sich auf der Debian-Konsole aals root anmelden, und dann:&lt;br /&gt;
* in /etc/network/interfaces die neue IP und Gateway eintragen&lt;br /&gt;
* /in /etc/hosts die neue IP eintragen&lt;br /&gt;
* Debian 11:&lt;br /&gt;
**  in /etc/resolv.conf den &lt;br /&gt;
 nameserver 192.168.0.1&lt;br /&gt;
** eintragen&lt;br /&gt;
* Debian 12:&lt;br /&gt;
* In /etc/systemd/resolved.conf&lt;br /&gt;
[Resolve]&lt;br /&gt;
DNS=192.168.0.1&lt;br /&gt;
&lt;br /&gt;
Danach reboot.&lt;br /&gt;
=VM Erstellen=&lt;br /&gt;
==LX container==&lt;br /&gt;
Wichtig: die statische IP muss das Format z.B. 192.168.0.220/24 haben&lt;br /&gt;
&lt;br /&gt;
==VM restore==&lt;br /&gt;
Beispiel Andres Wekan:&lt;br /&gt;
&lt;br /&gt;
 qmrestore vzdump-qemu-109-2025_04_17-15_28_56.vma.zst --force=true 108&lt;br /&gt;
&lt;br /&gt;
Container:&lt;br /&gt;
Beispiel restore auf local-lmv mit 16 GB Festplatte:&lt;br /&gt;
&lt;br /&gt;
 pct restore 101 ./vzdump-lxc-101-2025_09_07-16_40_19.tar.zst --rootfs local-lvm:16&lt;br /&gt;
&lt;br /&gt;
=System-Konfiguration=&lt;br /&gt;
==SSH-USer einrichten==&lt;br /&gt;
&lt;br /&gt;
useradd -g users --create-home -d /home/superx -s /bin/bash superx&lt;br /&gt;
&lt;br /&gt;
==Subscription ändern==&lt;br /&gt;
Nach dem Anmelden kommt eine Warnung, dass man keinen Wartungsvertrag hat. Man kann das entfernen, indem man im Knoten auf Updates -&amp;gt; Repositories geht und dort die Repos&lt;br /&gt;
-ceph&lt;br /&gt;
-pve-enterprise &lt;br /&gt;
deaktiviert.&lt;br /&gt;
Danach geht man auf &amp;quot;Add&amp;quot;, und fügt das Repository &amp;quot;No-subscription&amp;quot; hinzu.&lt;br /&gt;
Danach geht man im Menü auf Updates -&amp;gt; Refresh und dann -&amp;gt; Upgrade.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==CT Klonen==&lt;br /&gt;
Man wählt das Template sxdemo, und erzeugt einen Klon.&lt;br /&gt;
Wichtig: man muss direkt im Netzwerk auf &amp;quot;disconnected&amp;quot;=true stellen, und dann eine neue Netzwerk-IP vergeben, und wieder auf &amp;quot;disconnected&amp;quot;=false&lt;br /&gt;
Die vorhandene Festplatte mit 30 GB kann man nicht ändern, man kann aber eine weitere Partition in /mnt anlegen, in beliebiger Größe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Lokales Netz abschotten==&lt;br /&gt;
Noch nicht getestet: IP des Containers ist privates Netz&lt;br /&gt;
&lt;br /&gt;
If it is desirable for the container to be publicly accessible, there are a few ways to go about it. One is to use iptables to forward host ports to the container, for instance&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 587 -j DNAT --to-destination 10.0.3.100:587&lt;br /&gt;
&lt;br /&gt;
=Kommandozeilentools=&lt;br /&gt;
==Environment==&lt;br /&gt;
Das Perl-Script qm benötigt die Locale&lt;br /&gt;
&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
-&amp;gt;Installation de_DE.utf8&lt;br /&gt;
-&amp;gt; locale-gen de_DE.utf8&lt;br /&gt;
&lt;br /&gt;
==Container verwalten==&lt;br /&gt;
&lt;br /&gt;
 pct list&lt;br /&gt;
zeigt die installierten Container an&lt;br /&gt;
&lt;br /&gt;
Container stoppen:&lt;br /&gt;
 pct shutdown &amp;lt;vmid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Status: &lt;br /&gt;
 pct status &amp;lt;vmid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start: &lt;br /&gt;
 pct start &amp;lt;vmid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==VMs verwalten==&lt;br /&gt;
Status einer VM:&lt;br /&gt;
&lt;br /&gt;
 qm status &amp;lt;&amp;lt;VM-ID&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===VM Backup===&lt;br /&gt;
Beispiel:&lt;br /&gt;
 vzdump 104 --mode stop --prune-backups &#039;keep-last=3&#039; --compress gzip --dumpdir /var/backups/proxmox_vms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===VM root-Passwort resetten===&lt;br /&gt;
Zuerst bootet man von einer Rettungs-ISO, z.B: gparted&lt;br /&gt;
-Dann mountet man die root Partition , mit &lt;br /&gt;
fdisk -l&lt;br /&gt;
sieht man die Partitionen. Achtung: Proxmox nutzt LVM, man kann also niocht direkt &amp;quot;/dev/sd*&amp;quot; mounten, sondern man muss die Partition darunter&lt;br /&gt;
mount /dev/mapper/ubuntu--vg* /mnt&lt;br /&gt;
&lt;br /&gt;
Dann :&lt;br /&gt;
&lt;br /&gt;
 mount --bind /dev /mnt/dev &lt;br /&gt;
 mount --bind /dev/pts /mnt/dev/pts &lt;br /&gt;
 mount --bind /proc /mnt/proc &lt;br /&gt;
 mount --bind /sys /mnt/sys &lt;br /&gt;
 chroot /mnt&lt;br /&gt;
&lt;br /&gt;
Dort kann man dann &lt;br /&gt;
 passwd&lt;br /&gt;
aufrufen und ein neues PW vergeben. Dann mit exit den chroot verlassen&lt;br /&gt;
&lt;br /&gt;
Danach muss man in der umgekehrten Reihenfolge unmounten:&lt;br /&gt;
 umount /mnt/sys&lt;br /&gt;
 umount /mnt/proc&lt;br /&gt;
 umount /mnt/dev/pts&lt;br /&gt;
 umount /mnt/dev&lt;br /&gt;
&lt;br /&gt;
und dann rebooten&lt;br /&gt;
&lt;br /&gt;
=Siehe auch=&lt;br /&gt;
https://decatec.de/home-server/proxmox-ve-installation-und-grundkonfiguration/&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Shellscripte&amp;diff=16390</id>
		<title>Kernmodul Shellscripte</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Shellscripte&amp;diff=16390"/>
		<updated>2026-08-14T09:30:57Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= SuperX-spezifische Scripte: Übersicht =&lt;br /&gt;
Für die Administration des DataWarehouse sind Shellscripte vorbereitet, die flexible Werkzeuge zur Datenbankadministration bereitstellen. Die Shellscripte werden in den Update-Scripten aufgerufen, können aber auch zur manuellen Administration benutzt werden. Die wichtigsten Bereiche sind die Masken-Verwaltung und die Ladescripte im Umgang mit Tabellen sowie allgemeine Scripte.&lt;br /&gt;
Alle Scripte befinden sich unter $SUPERX_DIR/db/bin, deshalb muss dieser Pfad in der Umgebungsvariable PATH enthalten sein. Die Scripte wurden unter UNIX entwickelt (ohne Endung oder Endung .x), einige davon sind auch nach DOS portiert worden (erkennbar an der Endung .bat). &lt;br /&gt;
Einige Scripte lauten &amp;quot;sx_auto_&amp;quot;..., dies bedeutet, dass die Scripte ohne Sicherheitsabfrage ausgeführt werden. &lt;br /&gt;
Voraussetzung für den Ablauf der Scripte ist die Eintragung der korrekten Umgebungsvariablen in $SUPERX_DIR/db/bin/SQL_ENV bzw. $SUPERX_DIR\db\bin\sql_env.bat. Wenn der Client jdbc verwendet wird, muss ausserdem die korrekte [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] gesetzt sein.&lt;br /&gt;
&lt;br /&gt;
=Die Umgebungssteuerung SQL_ENV =&lt;br /&gt;
&lt;br /&gt;
Das Script $SUPERX_DIR/db/bin/SQL_ENV steuert die Umgebung und ist für den Betrieb der Kernmodul-Scripte unverzichtbar. Bei einem Update des SuperX-Kernmoduls wird die vorhandene SQL_ENV nicht überschrieben. Änderungen der ausgelieferten SQL_ENV.sam müssen deshalb geprüft und bei Bedarf manuell in die produktive SQL_ENV übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Ab Kernmodul 6.0 liegt $SUPERX_DIR innerhalb der SuperX-Webanwendung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
export WEBAPP SUPERX_DIR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Folgende Variablen müssen geprüft und passend zur Installation gesetzt werden:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
| WEBAPP&lt;br /&gt;
| Wurzelverzeichnis der SuperX-Webanwendung&lt;br /&gt;
|-&lt;br /&gt;
| SUPERX_DIR&lt;br /&gt;
| Datenbank- und Modulbereich unter $WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
|-&lt;br /&gt;
| DATABASE&lt;br /&gt;
| Datenbanksystem; für SuperX ist POSTGRES einzutragen&lt;br /&gt;
|-&lt;br /&gt;
| DBNAME&lt;br /&gt;
| Name der SuperX-Datenbank, standardmäßig superx&lt;br /&gt;
|-&lt;br /&gt;
| SX_CLIENT&lt;br /&gt;
| Verwendeter Datenbankclient; möglich sind psql oder jdbc&lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|db.properties]], standardmäßig $WEBAPP/WEB-INF/db.properties&lt;br /&gt;
|-&lt;br /&gt;
| JAVA_HOME&lt;br /&gt;
| Installationspfad der Java-Runtime; für Kernmodul 6.0 wird OpenJDK 17 verwendet&lt;br /&gt;
|-&lt;br /&gt;
| JAVA_OPTS&lt;br /&gt;
| Java-Optionen für Kernmodul-Shellscripte wie DOSQL, DOQUERY und die Upgrade-Scripte&lt;br /&gt;
|-&lt;br /&gt;
| CATALINA_OPTS&lt;br /&gt;
| Java-Optionen für einen manuell installierten oder mit SuperX betriebenen Tomcat&lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Mailprogramm unter UNIX, beispielsweise s-nail oder mailx&lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL/ERRORMAIL&lt;br /&gt;
| Mailadressen für Log- und Fehlermeldungen der ETL-Scripte&lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Logging-Konfiguration des JDBC-Clients&lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname des PostgreSQL-Servers&lt;br /&gt;
|-&lt;br /&gt;
| DBDELIMITER&lt;br /&gt;
| Trennzeichen für Unload-Dateien, standardmäßig ^&lt;br /&gt;
|-&lt;br /&gt;
| JDBC_CLASSPATH&lt;br /&gt;
| Classpath der JDBC-Treiber, Klassen und benötigten Jakarta-Bibliotheken&lt;br /&gt;
|-&lt;br /&gt;
| XML_CLASSPATH&lt;br /&gt;
| Classpath der XML-Werkzeuge&lt;br /&gt;
|-&lt;br /&gt;
| FM_DEBUG&lt;br /&gt;
| Wenn FM_DEBUG=true gesetzt wird, bleiben die von DOSQL erzeugten temporären SQL-Dateien zur Fehlersuche erhalten&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Java-Optionen für Kernmodul 6.0 ==&lt;br /&gt;
&lt;br /&gt;
Die Java-Optionen werden an dieser Stelle zentral dokumentiert. Andere Artikel sollen auf diesen Abschnitt verweisen, damit die Konfiguration nicht mehrfach gepflegt werden muss.&lt;br /&gt;
&lt;br /&gt;
Tragen Sie folgenden vollständigen Block in die SQL_ENV ein. Bei einem Tomcat aus den Ubuntu- oder Debian-Paketen wird derselbe Block in /etc/default/tomcat10 verwendet. Passen Sie die Speicherwerte an die Größe des Servers an:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
JAVA_OPTS=&amp;quot;-Xms1024M -Xmx2520M -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Duser.country=DE -Duser.language=de -Duser.region=DE -Duser.timezone=Europe/Berlin -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -DSuperX-DB-PROPERTIES-SET=true -DMODULE_PFAD=$SUPERX_DIR/db/module -DSUPERX_DIR=$SUPERX_DIR -Djava.locale.providers=COMPAT,CLDR -XX:+UseG1GC --add-opens java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-opens java.base/javax.crypto=ALL-UNNAMED --add-opens java.base/java.util.stream=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED&amp;quot;&lt;br /&gt;
export WEBAPP SUPERX_DIR JAVA_HOME JAVA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn der eigene Tomcat CATALINA_OPTS verwendet, tragen Sie stattdessen folgenden vollständigen Block in dessen Startumgebung ein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
CATALINA_OPTS=&amp;quot;-Xms1024M -Xmx2520M -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Duser.country=DE -Duser.language=de -Duser.region=DE -Duser.timezone=Europe/Berlin -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -DSuperX-DB-PROPERTIES-SET=true -DMODULE_PFAD=$SUPERX_DIR/db/module -DSUPERX_DIR=$SUPERX_DIR -Djava.locale.providers=COMPAT,CLDR -XX:+UseG1GC --add-opens java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-opens java.base/javax.crypto=ALL-UNNAMED --add-opens java.base/java.util.stream=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED&amp;quot;&lt;br /&gt;
export WEBAPP SUPERX_DIR JAVA_HOME CATALINA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzliche Optionen für JMX, eigene Truststores oder besondere LDAP-Konfigurationen werden nur bei Bedarf ergänzt. Ungeschützte JMX-Ports und die Deaktivierung von Sicherheitsprüfungen gehören nicht in die allgemeine Standardkonfiguration.&lt;br /&gt;
&lt;br /&gt;
==JDBC-Classpath für Tomcat 10 ==&lt;br /&gt;
&lt;br /&gt;
Tomcat 10 verwendet die Jakarta-Servlet-API. Der JDBC_CLASSPATH muss deshalb die Jakarta-Bibliothek und $WEBAPP/WEB-INF/classes enthalten:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JDBC_CLASSPATH=&amp;quot;$WEBAPP/WEB-INF/lib_ext/jakarta.servlet-api-6.0.0.jar:$WEBAPP/WEB-INF/classes&amp;quot;&lt;br /&gt;
for i in $LIB_PATH/*.jar; do JDBC_CLASSPATH=&amp;quot;$JDBC_CLASSPATH:$i&amp;quot;; done&lt;br /&gt;
XML_CLASSPATH=$JDBC_CLASSPATH&lt;br /&gt;
export JDBC_CLASSPATH XML_CLASSPATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein alter Classpath mit servlet-api.jar kann zu java.lang.NoClassDefFoundError: jakarta/servlet/http/HttpServlet führen.&lt;br /&gt;
&lt;br /&gt;
Die SQL_ENV sollte in jeder Shell geladen werden, in der Kernmodul-Scripte ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. $SUPERX_DIR/db/bin/SQL_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Aufruf kann beispielsweise in ~/.bashrc oder ~/.profile eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
==Nutzung der SQL_ENV unter HISinOne-BI ==&lt;br /&gt;
&lt;br /&gt;
Die SuperX-Shellscripte lassen sich auch in HISinOne-BI unter Linux nutzen. Eine Beispielkonfiguration befindet sich unter $WEBAPP/WEB-INF/conf/edustore/db/bin/SQL_ENV_his1.sam. Setzen Sie auch dort WEBAPP, SUPERX_DIR, JAVA_HOME, DB_PROPERTIES und den Jakarta-Classpath entsprechend der tatsächlichen Installation.&lt;br /&gt;
&lt;br /&gt;
Normalerweise wird für HISinOne-BI der JDBC-Client verwendet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SX_CLIENT=jdbc&lt;br /&gt;
export SX_CLIENT&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|Die Datei muss nicht SQL_ENV heißen. Für eine spezielle Konfiguration kann ein ergänzender Name wie SQL_ENV_FHDO verwendet werden.}}&lt;br /&gt;
&lt;br /&gt;
= Datenbank- und SQL-Scripte =&lt;br /&gt;
==Propadmin ==&lt;br /&gt;
Der PropAdmin ist ein kleines Werkzeug, um den Zugriff auf jdbc-Datenbanken zu testen und die [[#dbProperties|&#039;&#039;Verbindungsparameter&#039;&#039;]] in einer übergebenen properties-Datei zu sichern. Wenn keine graphische Umgebung eingerichtet ist, müssen Sie die alle Verbindungsparameter manuell in die db.properties eintragen. Nur das Passwort kann mit dem propadmin bearbeitet werden.&lt;br /&gt;
Eine Musterdatei für PostgreSQL liegt unter $WEBAPP/WEB-INF/db-postgres.properties. Wenn kein Dateiname als Parameter übergeben wird, wertet das Script die Umgebungsvariable DB_PROPERTIES aus.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax UNIX&lt;br /&gt;
| propadmin.x -nogui(optional) &amp;lt;Dateipfad zu db.properties&amp;gt;(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Syntax DOS&lt;br /&gt;
| propadmin.bat &amp;lt;Dateipfad zu db.properties&amp;gt;(optional)&lt;br /&gt;
|}&lt;br /&gt;
Wenn die Default-Dateiencodierung der aktiven Locale für die Passwort-Verschlüsselung nicht ausreicht, wird eine Fehlermeldung ausgegeben. Unter Windows / DOS ist die Vorbelegung Cp1252 bei deutscher Codepage ausreichend, unter Unix wird die deutsche [[Kern_Installation_Upgrade#Zeichencodierung|Locale]] benötigt.&lt;br /&gt;
&lt;br /&gt;
==DOSQL ==&lt;br /&gt;
Zum Absetzen beliebiger SQL-Kommandos werden die Befehle DOSQL und DOQUERY genutzt. &lt;br /&gt;
DOSQL kann SQL-Anweisung(en) in der der Datei (als Parameter) in der SuperX-Datenbank ausfuehren.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| DOSQL &amp;quot;Dateiname mit sql-Anweisung(en)&amp;quot; header (true,false)(optional) Ausgabedatei(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| DOSQL &amp;quot;/home/superx/db/isql/test.sql&amp;quot; false &amp;quot;^&amp;quot; output.txt&lt;br /&gt;
|}&lt;br /&gt;
Das Ergebnis kann mit Feldüberschriften (header=true) in eine Datei Ausgabedatei ausgegeben werden.&lt;br /&gt;
Wenn &lt;br /&gt;
 FM_DEBUG = true &lt;br /&gt;
 export FM_DEBUG&lt;br /&gt;
gesetzt wird, werden bei Freemarker Scripten von DOSQL die *.tmp.sql-Dateien nicht gelöscht.&lt;br /&gt;
&lt;br /&gt;
==DOQUERY ==&lt;br /&gt;
Shellvariablen setzen und eingegebene SQL-Anweisung (als Parameter) in der SuperX-Datenbank ausfuehren.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| DOQUERY &amp;quot;sql-Anweisung&amp;quot; header (true,false)(optional) Delimiter(optional) Ausgabedatei(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| DOQUERY &amp;quot;select name from userinfo&amp;quot; false &amp;quot;^&amp;quot; output.txt&lt;br /&gt;
|}&lt;br /&gt;
Das Ergebnis kann mit Feldüberschriften (header=true) in eine Datei Ausgabedatei ausgegeben werden.&lt;br /&gt;
=XML-Scripte=&lt;br /&gt;
==sx_transform.x ==&lt;br /&gt;
Transformiert eine xml-Datei mit einer übergebenen XSL-Datei und gibt das Ergebnis in einen Ausgabekanal aus (stdout oder Datei). Dabei wird der in SuperX integrierte XML-Parser Xerces und der XSL-Prozessor Saxon benutzt. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_transform.x -IN:xml-Datei -XSL:xsl-Datei -OUT:Ausgabedatei -method:Ausgabeformat (text, xml,html,rtf,pdf) (optional) -params:Parameter(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_transform.x -IN:myxml.xml -XSL:myxsl.xsl -OUT:output.htm -method:html &lt;br /&gt;
|}&lt;br /&gt;
Als Parameter &amp;quot;method&amp;quot; kann ein spezielles Ausgabeformat gewählt werden, z.B. text (siehe Xalan-Doku). Bei rtf wird der RTF-Construktor Jfor aufgerufen, bei pdf wird FOP aufgerufen. Die *.fo-Datei wird nach tmp.fo geschrieben und dann nach pdf transformiert. Wir gehen also nicht davon aus, dass .fo-Dateien die Eingabequelle darstellen.&lt;br /&gt;
&lt;br /&gt;
Stylesheet Parameter werden mit &amp;quot;,&amp;quot; getrennt optional angefügt, z.B. &lt;br /&gt;
&lt;br /&gt;
 sx_transform.x -IN:myxml.xml -XSL:myxsl.xsl -OUT:output.htm -method:html  &amp;quot;-params:Jahr=2020,Monat=12&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==saxon_transform.x==&lt;br /&gt;
Wie sx_transform.x transformiert das Script XML via XSLT, hier werden allerdings Saxon-spezifische Parameter ermöglicht.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| saxon_transform.x xml-Datei xsl-Datei Ausgabeformat (text, xml,html) (optional) Ausgabedatei (optional) Parameter (optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_transform.x myxml.xml myxsl.xsl output.htm html &lt;br /&gt;
|}&lt;br /&gt;
Bei pdf wird FOP aufgerufen. Die *.fo-Datei wird nach tmp.fo geschrieben und dann nach pdf transformiert.&lt;br /&gt;
&lt;br /&gt;
Wenn ein XSL-Script mehrere Ausgabedateien erzeugen soll, kann dieses Script ggü. sx_transform.x Vorteile haben.&lt;br /&gt;
==show_fop_fontlist.x==&lt;br /&gt;
Zeigt die installierten Fonts für PDF Erzeugung mit XSL-FO an.&lt;br /&gt;
Das Script hat keine Argumente.&lt;br /&gt;
==sx_validate.x==&lt;br /&gt;
sx_validate.x validiert eine XML-Datei&lt;br /&gt;
*ob sie wohlgeform ist&lt;br /&gt;
*ob sie zu einem optional übergebenen Schema (XSD-Datei) valide ist.&lt;br /&gt;
 sx_validate.x XML-Datei SCHEMA-Datei (optional)&lt;br /&gt;
==sx_xmlfileappender.x==&lt;br /&gt;
Das Script &#039;&#039;sx_xmlfileappender.x&#039;&#039; faßt mehrere XML-Dateien in einem übergebenen Pfad zu eine rDatei mit einem neuen root-Knoten &amp;quot;artificalroot&amp;quot; zusammen.&lt;br /&gt;
&lt;br /&gt;
Aufruf: &lt;br /&gt;
 sx_xmlfileappender.x Path file(regex oder Dateiname mehrere mit , getrennt) Outputfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Codierung in ISO und UTF-8=&lt;br /&gt;
Ältere Systeme arbeiten in der Regel mit der Zeichencodierung ISO-8859-1 bis ISO-8859-9. Dieser Zeichensatz wird auch LATIN-1 genannt. Die UNIX-Locale de_DE@euro entspricht z.B. ISO-8859-9 und enthält das EUR-Symbol. &lt;br /&gt;
&lt;br /&gt;
Aktuelle SuperX-Installationen arbeiten in der Regel mit der UTF-8 Codierung, dies wird bei der  [[Kern_Installation_Upgrade#Zeichencodierung|Installation]] gesetzt.&lt;br /&gt;
&lt;br /&gt;
Mit dem Wechsel von ISO-Codierung zu UTF8 bleibt oft der Bedarf bestehen, Dateien hin- und herzucodieren. Sei es, weil beim Entladen aus einer entfernten Datenbank noch das ISO-System genutzt wird, oder bei der Migration eines Systems. Nach unserer Erfahrung sollten Umlaute in Dateinamen unbedingt vermieden werden. &lt;br /&gt;
SuperX bietet unter UNIX Shellscripte zur Erfassung und Änderung der Zeichencodierung (Verzeichnis $SUPERX_DIR/db/bin). Im Wesentlichen werden dabei die Unix-Kommandos file und recode genutzt, die Shellscripte machen den Umgang mit umfangreichen Dateilisten komfortabler. Bei der Verarbeitung von Dateilisten sollte man die Scripte sehr vorsichtig einsetzen, es finden keine Sicherheitsüberprüfungen statt.&lt;br /&gt;
{{Achtung| Die Scripte wurden bisher nur unter Linux mit bash getestet, andere UNIXe wie BSD verhalten sich ggf. anders als erwartet. Daher bitte mit Vorsicht benutzen.}}&lt;br /&gt;
&lt;br /&gt;
==sx_show_encoding.x ==&lt;br /&gt;
Das Script zeigt die Encodierung einer Datei an.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_show_encoding.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_show_encoding.x $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/web.xml &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| /home/superx/webserver/tomcat/webapps/superx/WEB-INF/web.xml: XML&lt;br /&gt;
ISO&lt;br /&gt;
|}&lt;br /&gt;
Das Script nutzt verschiedene UNIX-Tools, je nach System kann die Ausgabe variieren. Bei XML-Dateien wird auch der Dateiinhalt (XML-Header) ausgewertet.&lt;br /&gt;
==sx_recode_iso2utf.x ==&lt;br /&gt;
Das Script ändert die Encodierung einer Datei von ISO nach UTF-8:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_iso2utf.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_recode_iso2utf.x $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/web.xml &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --keine--&lt;br /&gt;
|}&lt;br /&gt;
Das Script nutzt das UNIX-Kommando recode. Darüberhinaus werden bei XML-Dateien auch die XML-Header &amp;quot;encoding=...&amp;quot; geändert, so wird z.B. aus&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt;&lt;br /&gt;
der Header&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &lt;br /&gt;
Andere Inhalte der Datei unterhalb der ersten Zeile werden keinesfalls geändert.&lt;br /&gt;
==sx_recode_utf2iso.x ==&lt;br /&gt;
Das Script ändert die Encodierung einer Datei von ISO nach UTF-8:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_utf2iso.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_recode_utf2iso.x $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/web.xml &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --keine--&lt;br /&gt;
|}&lt;br /&gt;
Das Script nutzt das UNIX-Kommando recode. Darüberhinaus werden bei XML-Dateien auch die XML-Header &amp;quot;encoding=...&amp;quot; geändert, so wird z.B. aus&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
der Header&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt; &lt;br /&gt;
Andere Inhalte der Datei unterhalb der ersten Zeile werden keinesfalls geändert.&lt;br /&gt;
==sx_list_isofiles.x ==&lt;br /&gt;
Das Script listet alle ISO-Dateien im übergebenen Verzeichnis auf (inkl. Unterverzeichnisse).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_list_isofiles.x &amp;lt;Pfad&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_list_isofiles.x webserver/tomcat/webapps/superx/WEB-INF &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| webserver/tomcat/webapps/superx/WEB-INF/lib/LocalStrings_de.properties&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/lib/hierhin_den_informix_treiber_kopieren.txt&lt;br /&gt;
[...]&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/db.properties&lt;br /&gt;
|}&lt;br /&gt;
Die Ausgabe kann in eine Datei umgeleitet werden, welche wiederum für das Script [[#sxrecodeisofilesx|&#039;&#039;sx_recode_isofiles.x&#039;&#039;]] als Eingabedatei genutzt werden.&lt;br /&gt;
sx_list_isofiles.x webserver/tomcat/webapps/superx/WEB-INF &amp;gt;iso.txt&lt;br /&gt;
==sx_recode_isofiles.x ==&lt;br /&gt;
Das Script konvertiert alle Dateien in der übergebenen Dateiliste von ISO nach UTF-8:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_isofiles.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_list_isofiles.x iso.txt &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --Keine--&lt;br /&gt;
|}&lt;br /&gt;
Die Eingabedatei ist in der Regel die Ausgabe des Scriptes [[#sxlistisofilesx|&#039;&#039;&#039;&#039;sx_list_isofiles.x&#039;&#039;&#039;&#039;]]. &lt;br /&gt;
==sx_list_utf8files.x ==&lt;br /&gt;
Das Script listet alle UTF-8-Dateien im übergebenen Verzeichnis auf (inkl. Unterverzeichnisse).&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_list_utf8files.x &amp;lt;Pfad&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_list_utf8files.x webserver/tomcat/webapps/superx/WEB-INF &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| webserver/tomcat/webapps/superx/WEB-INF/lib/LocalStrings_de.properties&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/lib/hierhin_den_informix_treiber_kopieren.txt&lt;br /&gt;
[...]&lt;br /&gt;
webserver/tomcat/webapps/superx/WEB-INF/db.properties&lt;br /&gt;
|}&lt;br /&gt;
Die Ausgabe kann in eine Datei umgeleitet werden, welche wiederum für das Script [[#sxrecodeutffilesx|&#039;&#039;sx_recode_utf8files.x&#039;&#039;]] als Eingabedatei genutzt werden.&lt;br /&gt;
sx_list_isofiles.x webserver/tomcat/webapps/superx/WEB-INF &amp;gt;utf.txt&lt;br /&gt;
==sx_recode_utf8files.x ==&lt;br /&gt;
Das Script konvertiert alle UTF-8 Dateien in der übergebenen Dateiliste von UTF-8 nach ISO:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_recode_utf8files.x &amp;lt;Datei&amp;gt; &lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_recode_utf8files.x utf.txt &lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe&lt;br /&gt;
| --Keine--&lt;br /&gt;
|}&lt;br /&gt;
Die Eingabedatei ist in der Regel die Ausgabe des Scriptes [[Kernmodul_Shellscripte#sx_list_utf8files.x|sx_list_utf8files.x]].&lt;br /&gt;
&lt;br /&gt;
=Umgang mit Tabellen =&lt;br /&gt;
In SuperX werden ständig Tabellen erstellt / geladen / entladen. Zu diesem Zweck wurden Shellscripte entwickelt.&lt;br /&gt;
==sx_unload_table.x ==&lt;br /&gt;
Entlädt die Inhalte der Tabelle nach &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional) oder &amp;lt;&amp;lt;name&amp;gt;&amp;gt;.unl&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_unload_table.x &amp;lt;&amp;lt;name&amp;gt;&amp;gt; &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_unload_table.x userinfo &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==sx_upload_table.x ==&lt;br /&gt;
Löscht die Inhalte der Tabelle &amp;lt;&amp;lt;name&amp;gt;&amp;gt;, und lädt die Inhalte einer Datei in die Tabelle mit [[#sxuploadrecords|&#039;&#039;sx_upload_records&#039;&#039;]]. Wenn kein Dateiname übergeben wurde, wird als Name &amp;lt;&amp;lt;name&amp;gt;&amp;gt;.unl angenommen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_upload_table.x &amp;lt;&amp;lt;name&amp;gt;&amp;gt; &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_upload_table.x userinfo &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==sx_upload_records.x ==&lt;br /&gt;
Lädt die Inhalte einer Datei in die Tabelle, ohne vorherige Inhalte zu löschen. Wenn kein Dateiname übergeben wurde, wird als Name &amp;lt;&amp;lt;name&amp;gt;&amp;gt;.unl angenommen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_upload_records.x &amp;lt;&amp;lt;name&amp;gt;&amp;gt; &amp;lt;&amp;lt;Dateiname&amp;gt;&amp;gt;(optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_upload_records.x userinfo &lt;br /&gt;
|}&lt;br /&gt;
Bei Postgres als DB-System wird eine Java-Klasse (de.superx.bin.UnlFileConverter) aufgerufen, die die Unload-Datei entsprechend einer Spezifikation aufbereitet (siehe $SUPERX_DIR/db/conf/unldescr*).&lt;br /&gt;
Wenn der jdbc-Client benutzt wird, können umfangreiche Parameter übergeben werden (Import mit Spaltenüberschriften, Ausgabe von Fehlerprotokollen). Vergleichen Sie die Kommentare im Script.&lt;br /&gt;
==sx_schema.x ==&lt;br /&gt;
Entlädt das Schema einer Tabelle in einem vorgegebenen Format. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| sx_schema.x Tabelle format (pg|ids|ansi|xml|HIS)) (optional) Ausgabedatei (optional)&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| sx_schema.x userinfo ids myschema.sql&lt;br /&gt;
|-&lt;br /&gt;
| Die Formate&lt;br /&gt;
| Die Formate sind SQL für PostgreSQL oder ANSI sowie XML beziehungsweise ein XML-Format in Anlehnung an die Datenbank-DTD der HIS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Modulverwaltung =&lt;br /&gt;
Die Verwaltung der Module, einschließlich Installation, Aktualisierung, Sicherung und Logdateien, erfolgt über zentrale Shellscripte in $SUPERX_DIR/db/bin. Die Shellscripte bilden die operativen Hüllen um die eigentlichen SQL-Scripte. Diese werden zum Teil manuell und zum Teil automatisch aus einer zentralen Steuerdatei erzeugt:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;/conf/&amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;.xml&lt;br /&gt;
Für PostgreSQL werden daraus die benötigten Installations- und Aktualisierungsscripte erzeugt.&lt;br /&gt;
&lt;br /&gt;
== module_scripts_create.x ==&lt;br /&gt;
Das Script erzeugt die Installationsdateien für ein Modul nach dem Schema&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Scriptaktion&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Kürzel für Datenbanksystem&amp;gt;&amp;gt;.sql&lt;br /&gt;
Beispielsweise wird für das BAU-Modul aus der Datei $BAU_PFAD/conf/bau.xml das Script bau_load_pg.sql erzeugt, das die Rohdaten unter PostgreSQL lädt.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_scripts_create.x -Modulkürzel- -Modulpfad- -Datenbanksystem-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_scripts_create.x bau $BAU_PFAD POSTGRES&lt;br /&gt;
|}&lt;br /&gt;
Im Grunde handelt es sich um XML-Transformationen. Die Stylesheets für dieses Script befinden sich im Verzeichnis $SUPERX_DIR/db/conf, und die XML-Datei für das Module in $SUPERX_DIR/db/module/-Modulname-/conf. Wenn die Datei nicht gefunden wird, bricht das Script ab.&lt;br /&gt;
&lt;br /&gt;
== module_install.x ==&lt;br /&gt;
Installiert ein Modul -Modulname- in der Datenbank, wobei die Installationsdateien sich im -Modulpfad- befinden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_install.x -Modulkürzel- -Modulpfad-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_install.x bau $BAU_PFAD &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== module_drop.x ==&lt;br /&gt;
Löscht die Komponenten eines Moduls -Modulname- in der Datenbank, wobei die Installationsdateien sich im -Modulpfad- befinden. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_drop.x -Modulkürzel- -Modulpfad-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_drop.x bau $BAU_PFAD &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Entladen ==&lt;br /&gt;
Das Entladescript lautet $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_unload.x. Die Entladeparameter werden in folgender Datei festgelegt:&amp;lt;br /&amp;gt;&lt;br /&gt;
$SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_ENV&lt;br /&gt;
Entladeroutine bei mandantenfähigen Installationen:&lt;br /&gt;
$SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten&amp;lt;&amp;lt;Mandantid&amp;gt;&amp;gt;/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_ENV&lt;br /&gt;
Dokumentation zu den jew. Parametern finden Sie in den jeweiligen Administrationshandbüchern der Module. Meist kann man Start-Semester oder -Jahre für das Entladen festlegen. Immer muß man auch das Datenbank-Vorsystem festlegen (Hostname, Kennung etc) sowie, bei HIS-Systemen, die Versionsnummer.&lt;br /&gt;
== module_etl.x ==&lt;br /&gt;
Aktualisiert ein Modul -Modulname- in der Datenbank, wobei die Installationsdateien sich im -Modulpfad- befinden. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Syntax&lt;br /&gt;
| module_etl.x -Modulname- -Modulpfad-&lt;br /&gt;
|-&lt;br /&gt;
| Beispiel&lt;br /&gt;
| module_etl.x bau $BAU_PFAD &lt;br /&gt;
|}&lt;br /&gt;
Die folgende Abbildung zeigt, wie die Komponenten zusammenhängen (klicken Sie auf die Grafik, um sie zu vergrößern):&lt;br /&gt;
&lt;br /&gt;
Zunächst werden die Rohdaten geladen, die Daten vorbereitet, transformiert, und nachbereitet. Danach werden die Hilfstabellen erzeugt und, bei erfolgreichem durchlaufen, das Standdatum aktualisiert. &lt;br /&gt;
&lt;br /&gt;
[[Bild:etl.png|417x313px]]&lt;br /&gt;
&lt;br /&gt;
Bei Fehlern im ETL-Prozeß wird die Sicherung wiederhergestellt, und eine Mail an die Administrator_in  verschickt. Außerdem werden die übernommenen Daten überprüft; wenn z.B. Schlüssel fehlen oder Rohdaten falsch zu sein scheinen, wird dies als Attachment an die Log- oder Fehlermail angehängt.&lt;br /&gt;
In der Praxis wird dieses Script nicht direkt von Cronjobs ausgeführt, sondern von einem Shellscript, das vorher die Umgebung einrichtet. Das folgende Beispiel zeigt ein Update-Script für das BAU-Modul:&lt;br /&gt;
 bau_update.x&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 . /home/superx/webserver/tomcat/webapps/superx/WEB-INF/conf/edustore/db/bin/SQL_ENV&lt;br /&gt;
 ERRORMAIL=&amp;quot;bau-admin@hochschule.de&amp;quot;&lt;br /&gt;
 export ERRORMAIL&lt;br /&gt;
 LOGMAIL=$ERRORMAIL&lt;br /&gt;
 export LOGMAIL&lt;br /&gt;
 module_etl.x bau $BAU_PFAD &amp;gt;$BAU_ERRORDAT 2&amp;gt;&amp;amp;amp;1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Wie Sie sehen ist es möglich, für jedes Modul unterschiedliche Mailadressen zuzuweisen. Die Mailadressen werden systemweit in der [Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]] eingetragen.&lt;br /&gt;
Im allgemeinen ETL-Prozeß wird standardmäßig auch die Tabelle protokoll in einem festzulegendem Rhythmus (Konstante Löschung Protokoll (Tage)) gelöscht. Beim Vorgabewert 90 werden bei jeder ETL-Routine Einträge, die älter als 90 Tage sind, gelöscht.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Hochschulspezifische Transformationen im ETL-Prozess ===&lt;br /&gt;
&lt;br /&gt;
Zusätzlich lassen sich im ETL-Prozeß hochschulspezifische Scripte ausführen (und überwachen). Dazu müssen Dateien mit einem gewissen Namensschema im Stammverzeichnis des Moduls vorhanden sein. Es gibt einen vereinfachten und einen erweiterten Modus für hochschulspezifische Transformationen.&lt;br /&gt;
*Einfacher Modus&lt;br /&gt;
**Wenn im Modulpfad die Datei &amp;quot;preparation.sql&amp;quot; existiert, wird sie nach dem LOAD-Schritt ausgeführt. &lt;br /&gt;
**Wenn im Modulpfad die Datei &amp;quot;finalize.sql&amp;quot; existiert, wird sie nach dem TRANS-Schritt ausgeführt. &lt;br /&gt;
* Erweiterter Modus / mandantenspezifische Scripte&lt;br /&gt;
**Wenn im Modulpfad Dateien nach dem Schema &amp;lt;&amp;lt;Modulname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;ETL-Schritt&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Mandatennr.&amp;gt;&amp;gt;.sql exisitieren, werden diese jeweils nach dem &amp;quot;normalen&amp;quot; ETL-Schritt ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Wenn also z.B. die Datei&lt;br /&gt;
 $COB_PFAD/cob_trans_70.sql&lt;br /&gt;
existiert und in der SQL_ENV die Umgebungsvariable $MANDANTID auf &amp;quot;70&amp;quot; steht, dann wird das Script nach dem normalen Trans-Schritt ausgeführt und nach &lt;br /&gt;
 L_cob_trans_mandant_70.log &lt;br /&gt;
geloggt. &lt;br /&gt;
&lt;br /&gt;
Der erweiterte Modus erlaubt die beliebige Anpassung eines Modus an eigene Bedürfnisse, z.B. Schlüsselumsetzung o.ä. Gleichzeitig erlaubt er einen echten mandentenfähigen Betrieb der ETL-Scripte.&lt;br /&gt;
&lt;br /&gt;
===Logging der Shellscripte ===&lt;br /&gt;
Hinweis: bei mandantenfähigen Installationen steht vor der Endung .log immer die MandantID.&lt;br /&gt;
&lt;br /&gt;
==== Installation / Upgrade ====&lt;br /&gt;
Fürs Kernmodul lauten die Dateien bei der Installation:&lt;br /&gt;
 $SUPERX_DIR/db/install/L_*.log&lt;br /&gt;
Beim Upgrade:&lt;br /&gt;
 $SUPERX_DIR/db/install/upgrade/upgrade.log&lt;br /&gt;
Für alle anderen Komponenten:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/L_&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Installationsschritt&amp;gt;&amp;gt;.log&lt;br /&gt;
==== Laderoutinen ====&lt;br /&gt;
Für alle Module sind die Dateien wie folgt benannt:&lt;br /&gt;
Entladeroutine:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_unload.err&lt;br /&gt;
Entladeroutine bei mandantenfähigen Installationen:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/rohdaten&amp;lt;&amp;lt;Mandantid&amp;gt;&amp;gt;/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_unload.err&lt;br /&gt;
&lt;br /&gt;
Laderoutine:&lt;br /&gt;
 $SUPERX_DIR/db/module/&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;/L_&amp;lt;&amp;lt;Komponentenname&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;.log&lt;br /&gt;
wobei &amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt; wie folgt aufgebaut ist:&lt;br /&gt;
# Unload (Entladen aus Vorsystem)&lt;br /&gt;
# Load (CSV-Upload)&lt;br /&gt;
# Transformation (Schlüsselharmonisierung, Prüfroutinen)&lt;br /&gt;
# Aggregation (Aufbau der Hilfstabellen)&lt;br /&gt;
# System (Ladedatum aktualisieren, Datenbank-Wartung)&lt;br /&gt;
Wenn die Laderoutine erfolgreich ist, werden alle Schritte hintereinander ausgeführt und geloggt. Wenn nicht, dann wird der jew. Schritt zuende geführt, und dann die Laderoutine gestoppt. Wenn also z.B. beim LOAD ein Fehler auftritt, dann wird der Schritt &amp;quot;Transformation&amp;quot; gar nicht erst begonnen. So ist sichergestellt daß die Auswertungen trotz Fehler laufen.&lt;br /&gt;
&lt;br /&gt;
=== Debugging von Freemarker Scripten ===&lt;br /&gt;
Da die Laderoutinen oft mit Freemarker Scripten arbeiten, werden diverse SQL-Scripte nur zur Laufzeit generiert und ausgeführt, und danach wieder gelöscht. Um die Laderoutinen transparenter &amp;quot;beobachten&amp;quot; zu können, können Sie die die Löschung der Scripte mit dem Parameter &lt;br /&gt;
 FM_DEBUG=&amp;quot;true&amp;quot;&lt;br /&gt;
 export FM_DEBUG&lt;br /&gt;
Wenn FM_DEBUG = true gesetzt wird, werden bei Freemarker Scripten von [[Kernmodul_Shellscripte#DOSQL|DOSQL]] die *.tmp.sql-Dateien nicht gelöscht. Sie können den Parameter in der aktuellen Shell setzen, oder permanent in der [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]].&lt;br /&gt;
&lt;br /&gt;
==Kettle-Jobs starten==&lt;br /&gt;
Da Kettle in der Webanwendung integriert ist, können Sie Kettle Jobs auch ohne die PDI-Standalone-Installation per Kommandozeile ausführen. Wenn die [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]] eingerichtet und geladen ist, geben Sie z.B. einfach ein:&lt;br /&gt;
&lt;br /&gt;
  sx_kitchen.x -file &amp;quot;sospos_res1.kjb&amp;quot; -norep&lt;br /&gt;
Die Parameter werden direkt an die Java Anwendung &amp;quot;kitchen&amp;quot; weitergereicht, d.h. weitere Dokumentation finden Sie in unserem [[Kettle_Kurs_Teil_2#Kitchen|Kettle-Kurs]].&lt;br /&gt;
&lt;br /&gt;
=Installation und Wartung=&lt;br /&gt;
==Patch einspielen==&lt;br /&gt;
Für SuperX können spezielle Patch-Dateien per Kommandozeile installiert werden. Vorbedingung ist, dass die bash und das Paket unzip installiert sind.&lt;br /&gt;
 patch_apply.x &lt;br /&gt;
Das Script entpackt eine übergebene Patch-Datei (zip-File), und installiert die Dateien und DB-Operationen für die jeweils installierten und zum Patch passenden Module. Sie starten es direkt aus dem Patchordner, in dem der zu installierende Patch liegt:&lt;br /&gt;
 patch_apply.x -PatchFile-&lt;br /&gt;
Ein Beispiel:&lt;br /&gt;
 patch_apply.x patch_2011-06-01_superx_iso.zip&lt;br /&gt;
Dabei wird in dem Verzeichnis der Patch entpackt und ausgeführt. Je nach Patch muss auch ein Tomcat Neustart erfolgen, ein entsprechender Hinweis befindet sich in der Patch-Dokumentation.&lt;br /&gt;
Wenn ein Patch auch Dateien unterhalb von webapps/superx enthält, müssen Sie im Falle von Tomcat Clusterbetrieb den Patch auf alle Tomcat Hosts übertragen, entweder direkt oder mit git / rsync.&lt;br /&gt;
Weitere Hinweise zum Script finden Sie im [[Kern_Installation_Upgrade#Patch_einspielen|Installationshandbuch]].&lt;br /&gt;
{{Hinweis|Bei HISinOne-BI funktioniert das patch-apply Script nicht, der Patch mit dem Kürzel &amp;quot;webapps&amp;quot; im Dateinamen wird einfach in webapps/superx entpackt, und in der Regel sollten die jew. Module geupgradet werden. Weitere Hinweise finden Sie in der jew. Patch-Readme.}}&lt;br /&gt;
==JasperReports kompilieren==&lt;br /&gt;
Wenn Sie mit Unterberichten arbeiten, müssen Sie kompilierte .jasper-Dateien einbinden und ausliefern. Da dieser Dateityp normalerweise (und richtigerweise) im &amp;quot;.gitignore&amp;quot; ist, d.h. nicht über git ausgeliefert werden kann, können Sie die Dateien auch direkt auf dem Applikationsserver mit der exakt passenden JR-Version erzeugen. Typischerweise führen Sie das Script im Ordner WEB-INF/reports aus. Der Aufruf:&lt;br /&gt;
 cd $WEBAPP/WEB-INF/reports&lt;br /&gt;
 java $JAVA_OPTS -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; de.superx.bin.SxJasperCompiler &amp;lt;JRXML-Datei&amp;gt;&lt;br /&gt;
Der Workflow ist wie folgt:&lt;br /&gt;
* Die Quelldatei.jrxml ist die XML-Beschreibungsdatei des Berichts&lt;br /&gt;
* Der compile erzeugt aus der Quelldatei.jrxml eine Datei Quelldatei.jasper im gleichen Verzeichnis&lt;br /&gt;
* Die Quelldatei.jasper ist kompilierte Beschreibungsdatei für den Bericht, und wird in Unterberichten und Booklets genutzt. Weitere Details siehe unser [https://www.superx-projekt.de/doku/entwicklung/iReport-Handbuch/f_AufbaudesHauptberichts.htm JR-Handbuch].&lt;br /&gt;
==LDAP User deaktivieren==&lt;br /&gt;
Ausschließlich für SuperX-Standalone-Anwender können wir im System eine Gültigkeit von UserAccounts und automatisiertes Sperren von LDAP-Usern mit Sperr-Merkmal einbauen.&lt;br /&gt;
Die Tabelle userinfo und das entsprechende Formular zum Userbearbeiten hat die Merkmale Beginn Gültigkeit (gueltig_von) und Ende Gültigkeit (gueltig_bis), so dass SuperX-Standalone Hochschulen z.B. für befristete Mitarbeiter_innen in der Userverwaltung direkt eintragen können, dass ein Mitarbeiter sich z.B. nach dem 31.12.2024 nicht mehr anmelden können soll.&lt;br /&gt;
Wenn die Hochschule eine Passwortkontrolle via LDAP macht, kann diese per Script User mit einem entsprechenden Merkmal wie userLocked=true automatisiert zu sperren.&lt;br /&gt;
Hierfür setzt das Script den Eintrag userinfo.maxVersuch (also die maximal erlaubten Anmeldeversuche) auf 0 gesetzt, als &amp;quot;Ende Gültigkeit&amp;quot; wird das Vortagsdatum eingetragen sowie die Spalte &#039;&#039;password_sha&#039;&#039; (verschlüsseltes SuperX-Passwort) geleert.&lt;br /&gt;
&lt;br /&gt;
Aufruf:&lt;br /&gt;
 sx_ldap_lockout.x Pfad/zu/db.properties pfad/zu/superx_standalone_ldap.properties&lt;br /&gt;
Das Script kann nächtlich ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
= Masken-Verwaltung =&lt;br /&gt;
Die Masken-Verwaltung ist detailliert im [[Masken-Tutorial|Entwicklerhandbuch SuperX]] beschrieben. Hier nur ein paar Hinweise zur Verwaltung der Masken. Zum Erzeugen und Verändern von Masken gibt es unter UNIX eine Kommandoschnittstelle, die auf dem Gebrauch folgender Skripte beruht. Die Skripte stehen unter dem Verzeichnis&lt;br /&gt;
 $SUPERX_DIR/db/bin&lt;br /&gt;
und erzeugen oder verwenden Dateien in dem gegenwärtigen Arbeitsverzeichnis. Nach dem Einspielen der Datenbank sollten Sie darauf achten, den Dateien Ausführungsberechtigung (chmod 750 *) zu geben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Eine Maske suchen ==&lt;br /&gt;
Wenn Sie eine Maske suchen, sollten die die Felder tid oder name in der Tabelle maskeninfo durchsuchen. Das folgende Script macht dies automatisch:&lt;br /&gt;
sx_search_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
|  sx_search_mask &amp;lt;String&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion:&lt;br /&gt;
|  sx_search_mask sucht die Masken, deren Name &amp;lt;String&amp;gt; enthält&lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe: . &lt;br /&gt;
| tid, name der gefundenen Masken&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Eine Maske sichern und entladen ==&lt;br /&gt;
Um eine Maske zu sichern, müssen Sie die entsprechenden Einträge in den Tabellen&lt;br /&gt;
# felderinfo,&lt;br /&gt;
#  masken_felder_bez,&lt;br /&gt;
#  maskeninfo, &lt;br /&gt;
# sachgeb_maske_bez,&lt;br /&gt;
# maske_system_bez&lt;br /&gt;
selektieren und sichern. Für dies gibt es das Script sx_select_mask.&lt;br /&gt;
sx_select_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf: &lt;br /&gt;
| sx_select_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_select_mask entlädt alle Metadaten aus den Tabellen maskeninfo, felderinfo, masken_felder_bez, sachgeb_maske_bez, maske_system_bez zur Maske mit tid = &amp;lt;TID&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| Ausgabe:&lt;br /&gt;
| Fünf Dateien:&lt;br /&gt;
# &amp;lt;TID&amp;gt;_felderinfo.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_masken_felder_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maskeninfo.unl, &lt;br /&gt;
# &amp;lt;TID&amp;gt;_sachgeb_maske_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maske_system_bez.unl&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Eine Maske neu einfügen =====&lt;br /&gt;
Um eine Maske neu einzufügen, müssen Sie die entsprechenden Einträge in den Tabellen&lt;br /&gt;
#  felderinfo,&lt;br /&gt;
#  masken_felder_bez,&lt;br /&gt;
#  maskeninfo, &lt;br /&gt;
# sachgeb_maske_bez,&lt;br /&gt;
# maske_system_bez&lt;br /&gt;
einfügen. Dafür gibt es das Script sx_insert_mask.&lt;br /&gt;
&lt;br /&gt;
sx_insert_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
|  sx_insert_mask &amp;lt;TID&amp;gt; [&amp;lt;neue TID&amp;gt;] [j]&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_insert_mask lädt den Inhalt der fünf Dateien&lt;br /&gt;
# &amp;lt;TID&amp;gt;_felderinfo.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_masken_felder_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maskeninfo.unl, &lt;br /&gt;
# &amp;lt;TID&amp;gt;_sachgeb_maske_bez.unl,&lt;br /&gt;
# &amp;lt;TID&amp;gt;_maske_system_bez.unl&lt;br /&gt;
in die jeweiligen Tabellen der SuperX-Datenbank. Mit &amp;quot;j&amp;quot; wird die Sicherheitsabfrage umgangen.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Falls &amp;lt;neue TID&amp;gt; nicht angegeben wird, werden die Metadaten wieder mit der alten TID in die Datenbank eingespielt (=Update).&lt;br /&gt;
Falls &amp;lt;neue TID&amp;gt; angegeben wird, werden die Metadaten mit der neuen TID in die Datenbank eingespielt (=Insert). Dabei werden alle TIDs in den abhängigen Tabellen angepasst. So können Masken sehr einfach kopiert werden. Eine neue TID bekommt man durch die Wahl der nächsten Zehnerzahl, die größer als die größte vorkommende Nummer ist. Die größte vorkommende Nummer erhält man durch Ausführung des folgenden SQL-Ausdrucks mit Hilfe des Kommandos DBACCESS:&lt;br /&gt;
select max(tid) from maskeninfo;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| !&lt;br /&gt;
| Um den Austausch von Abfragen innerhalb der Hochschulen zu erleichtern (&amp;quot;&amp;lt;span id=&amp;quot;anchor-44&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;Abfragen-Pooling&amp;quot; über die SuperX-Website), sollten die Masken immer im Nummernkreis xxxx0000 bis xxxx9990 liegen, wobei xxxx der von der HIS verwandten Hochschulnummer entspricht. Die Zehnerschritte ergeben sich daraus, dass die dazwischen liegenden Nummern für die Maskenfelder (Tabelle felderinfo) reserviert sind&amp;lt;sup&amp;gt;&amp;lt;ref&amp;gt;&amp;lt;blockquote&amp;gt; Aus historischen Gründen liegen die Nummern aus Karlsruhe im Bereich 0-9990, aus Duisburg im Bereich 10000-19990.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&amp;lt;/ref&amp;gt;&amp;lt;/sup&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wie im Abschnitt [[Kern_Benutzerverwaltung|Userverwaltung]] beschrieben, kann die neue Maske Benutzern oder Gruppen zugänglich gemacht werden.&lt;br /&gt;
&lt;br /&gt;
== Eine Maske löschen ==&lt;br /&gt;
Um eine Maske zu löschen, müssen Sie die Einträge in den oben genannten Tabellen entfernen. Dafür gibt es das Script sx_delete_mask&lt;br /&gt;
sx_delete_mask&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
| sx_delete_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_delete_mask löscht alle Metadaten aus den Tabellen maskeninfo, felderinfo, masken_felder_bez, sachgeb_maske_bez und maske_system_bez zur Maske mit tid = &amp;lt;TID&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Änderungen an einer Maske vornehmen ==&lt;br /&gt;
1. Selektieren der Metadaten der betreffenden Maske: sx_select_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
2. Editieren der fünf Metadaten-Dateien ,,&amp;lt;TID&amp;gt;_...&amp;quot;&lt;br /&gt;
3. Abspeichern der neuen Metadaten: sx_insert_mask &amp;lt;TID&amp;gt;&lt;br /&gt;
==Masken per Kommandozeile==&lt;br /&gt;
In diversen Szenarien kann es sinnvoll sein, Masken nicht nur im Browser über die Webanwendung auszuführen, sondern über Kommandozeile, also ohne laufenden Tomcat:&lt;br /&gt;
* Für Entwicklungszwecke kann es praktisch sein, wenn man keinen laufenden Tomcat braucht, und Masken z.B. in Eclipse ausführt und debuggen kann&lt;br /&gt;
* Große Ergebnisdateien lassen sich leichter erzeugen, weil man von der Webanwendung unabhängig ist und z.B. dem Kommandozeilenaufruf mehr Arbeitsspeicher zuteilt.&lt;br /&gt;
* Für die Verteilung von Downloads kann es sinnvoll sein, Berichtsergebnisse in Dateiform zu generieren und im [[Kern_Konfiguration#Downloads_einrichten_und_verteilen|Download-Bereich]] zu verlinken. &lt;br /&gt;
&lt;br /&gt;
Masken können bei eingerichteter Kommandozeilenumgebung direkt ausgeführt werden:&lt;br /&gt;
&lt;br /&gt;
* Unter SuperX: [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]]&lt;br /&gt;
* Unter HISinOne-BI: [[Kernmodul_Shellscripte#Nutzung_der_SQL_ENV_unter_HISinOne-BI|Nutzung der SQL_ENV unter HISinOne-BI]], oder Einrichtung einer HISinOne-Umgebung unter Eclipse: https://wiki.his.de/mediawiki/index.php/Einrichtung_einer_HISinOne-Arbeitsumgebung&lt;br /&gt;
&lt;br /&gt;
Damit der Aufruf unter Kernmodul 6.0 funktioniert, muss der zentral unter [[#JDBC-Classpath_für_Tomcat_10|JDBC-Classpath für Tomcat 10]] dokumentierte Jakarta-Classpath geladen sein.&lt;br /&gt;
&lt;br /&gt;
Der Kommandozeilenaufruf sieht unter Linux wie folgt aus:&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:Maskennummer -out:Ausgabedatei -user:Benutzerkennung &amp;quot;-params:Parameter...&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Hier ein Beispiel für den Aufruf der Maske &amp;quot;Studierende und Studienanfänger (Zeitreihe)&amp;quot; (tid=16000) als Admin-User  und deren Ausgabe in die Datei &amp;quot;test.htm&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.htm -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Das Beispiel läßt sich fortführen für andere Ausgabeformate, hier z.B. für PDF: &lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.pdf -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;stylesheet=tabelle_fo_pdf.xsl&amp;amp;amp;contenttype=application/pdf&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Das Beispiel zeigt daß über das Params-Argument beliebige Ausgabeformate übergeben werden können, z.B. auch Excel (xlsx):&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.xlsx -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;stylesheet=tabelle_xls.xsl&amp;amp;amp;contenttype=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&amp;lt;!--oder das alte Excel-Format:&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.xls -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;stylesheet=tabelle_xls.xsl&amp;amp;amp;contenttype=application/vnd.ms-excel&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties--&amp;gt;&lt;br /&gt;
oder als CSV Export:&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:16000 -out:test.csv -user:admin &amp;quot;-params:Köpfe oder Fälle ?=1=1&amp;amp;amp;Stichtag=1&amp;amp;amp;contenttype=text/csv&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Über den &amp;quot;Deep-Link&amp;quot;-Button lassen sich beliebige Parameter-Zeichenketten erzeugen und nutzen. Auch Aufrufe von JasperReports sind damit möglich, z.B. ein Studierendenbericht als Excel-Report:&lt;br /&gt;
&lt;br /&gt;
 java -cp $JDBC_CLASSPATH $JAVA_OPTS -Xmx2048m de.superx.bin.ExecuteMask -tid:160440 -out:$OUTFILE &amp;quot;-params:maxoffset=1000000&amp;amp;amp;stylesheet=tabelle_160440_semester_geschlecht.jrxml&amp;amp;amp;tablestylesheet=tabelle_160440_semester_geschlecht.jrxml&amp;amp;amp;contenttype=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet&amp;quot; -user:superx -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
Bei Datenblattberichten sollte auch der Parameter tablestylesheet übergeben werden.&lt;br /&gt;
&lt;br /&gt;
Unter Eclipse sieht der Aufruf für das erste Beispiel (Ausgabe nach html) so aus:&lt;br /&gt;
&lt;br /&gt;
[[Bild:execute_mask_eclipse1.png|680px]]&lt;br /&gt;
&lt;br /&gt;
Und hier die Parameter: &lt;br /&gt;
&lt;br /&gt;
[[Bild:execute_mask_eclipse2.png|680px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Das Beispiel lässt sich leicht auf andere Plattformen (DOS, Netbeans) übertragen. &lt;br /&gt;
&lt;br /&gt;
Sie können auch Parameter bewußt leer übergeben, indem Sie den Parameter ohne Wert übergeben, hier z.B. den Parameter „Sprache“:&lt;br /&gt;
&lt;br /&gt;
 java -cp &amp;quot;$JDBC_CLASSPATH&amp;quot; $JAVA_OPTS de.superx.bin.ExecuteMask -tid:70170 -out:test.htm -user:admin &amp;quot;-params:Stichwort=REPORT&amp;amp;amp;Sprache=&amp;quot; -logger:$SUPERX_DIR/db/conf/logging.properties&lt;br /&gt;
&lt;br /&gt;
==Ausführen von JasperReports ==&lt;br /&gt;
Neben der Ausführung im Browser gibt es eine &amp;quot;Kommandozeilenversion&amp;quot; des Aufrufs: sx_jasper.x&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Aufruf:&lt;br /&gt;
| sx_jasper.x -JRXML:&amp;lt;JRXML-Datei&amp;gt; -XML:&amp;lt;Datei mit XML-Datenquelle&amp;gt; -db_properties:Pfad_zur_db.properties -IGNORE_PAGINATION:&amp;lt;true oder false&amp;gt; und optional -JASPER:&amp;lt;Jasper-Datei&amp;gt; -JRPRINT:&amp;lt;Jrprint-Datei&amp;gt; -OUT:&amp;lt;Ausgabedatei&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Aktion: &lt;br /&gt;
| sx_jasper.x führt einen JasperReports-Task aus. Die Datenquelle kann entweder xml sein (Parameter -XML), oder eine Datenbankverbindung in der Datei db.properties. Das Ergebnis wird in eine Datei &amp;lt;Ausgabedatei&amp;gt; ausgegeben.&lt;br /&gt;
Wenn keine Ausgabedatei angegeben wird, wird der jrxml-Dateiname verwendet, und eine PDF-Ausgabe erzeugt.&lt;br /&gt;
|}&lt;br /&gt;
Sie können es mit einer Maskenausführung kombinieren, oder zum Entwickeln. Bei der Maskenausführung können Sie aber im Script [[Kernmodul_Shellscripte#Masken_per_Kommandozeile|ExecuteMask]] direkt JasperReports aufrufen.&lt;br /&gt;
&lt;br /&gt;
= Mailversand =&lt;br /&gt;
Für den Mailversand empfehlen wir die Unix Anwendung s-nail. Installation unter Ubuntu mit&lt;br /&gt;
 apt-get install -y s-nail&lt;br /&gt;
Unter RedHat&lt;br /&gt;
 yum install s-nail&lt;br /&gt;
== Einrichtung .mailrc ==&lt;br /&gt;
Das s-nail in Ubuntu 22.04 (Version 14.9.23) bietet die Möglichkeit, in der Shell mails für verschiedene Accounts zu verschicken. Zur Konfiguration wird die Datei $HOME/.mailrc genutzt. &lt;br /&gt;
&lt;br /&gt;
alt:&lt;br /&gt;
 set smtp=&amp;quot;smtp://smtp.variomedia.de:587&amp;quot;&lt;br /&gt;
 set from=&amp;quot;mail@memtext.de&amp;quot;&lt;br /&gt;
 set smtp-auth=login&lt;br /&gt;
 set smtp-auth-user=&amp;quot;noreply@superx-projekt.de&amp;quot;&lt;br /&gt;
 set smtp-auth-password=securepw1234&lt;br /&gt;
&lt;br /&gt;
neu:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
set v15-compat&lt;br /&gt;
account test {&lt;br /&gt;
    set from=&amp;quot;Memtext &amp;lt;mail@memtext.de&amp;gt;&amp;quot;&lt;br /&gt;
    set mta=smtp://noreply%40superx-projekt.de:securepw1234@smtp.variomedia.de:587&lt;br /&gt;
    set smtp-use-starttls&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Achtung|Sollte nur für den Benutzer lesbar sein. Es ist nicht sicher, das Passwort direkt in der Konfigurationsdatei zu speichern. Eine sicherere Variante wäre, pass oder gnome-keyring zu nutzen.}}&lt;br /&gt;
&lt;br /&gt;
== Mail verschicken über die bash ==&lt;br /&gt;
Zum Verschicken einer Testmail schreiben Sie z.B.&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;test&amp;quot; | s-nail --account=test -s &amp;quot;test&amp;quot; support@superx-projekt.de support1@superx-projekt.de support2@superx-projekt.de&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Das CLI von s-nail verhält sich etwas UNIX-untypisch: Beachten Sie dass mehrere Mailadressat_innen mit Leerzeichen getrennt hinten angefügt werden - ohne Anführungszeichen um alle Mailadressen.&lt;br /&gt;
&lt;br /&gt;
Mit dem zusätzlichen Parameter -v können detaillierte Debug-Informationen ausgegeben werden:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;test&amp;quot; | s-nail -v --account=test -s &amp;quot;test&amp;quot; support@superx-projekt.de support1@superx-projekt.de support2@superx-projekt.de&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Damit lässt sich dann prüfen, ob der Versand verschlüsselt (mit set smtp-use-starttls) oder unverschlüsselt stattgefunden hat.&lt;br /&gt;
Unverschlüsselt sähe dann z.B. so aus:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Testmail&amp;quot; | s-nail -v --account=test-ohne-starttls -s &amp;quot;Testmail&amp;quot; support@superx-projekt.de&lt;br /&gt;
s-nail: P(seudo)R(andom)N(umber)G(enerator): *TLS RAND_*&lt;br /&gt;
s-nail: Resolving host smtp.superx-projekt.de:587 ... done&lt;br /&gt;
s-nail: Connecting to 81.28.224.28:587 ... connected.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Und verschlüsselt so:&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 echo &amp;quot;Testmail&amp;quot; | s-nail -v --account=test-starttls -s &amp;quot;Testmail&amp;quot; support@superx-projekt.de&lt;br /&gt;
s-nail: P(seudo)R(andom)N(umber)G(enerator): *TLS RAND_*&lt;br /&gt;
s-nail: Resolving host smtp.superx-projekt.de:587 ... done&lt;br /&gt;
s-nail: Connecting to 81.28.224.28:587 ... connected.&lt;br /&gt;
s-nail:  Certificate depth 2&lt;br /&gt;
s-nail:   subject = /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority&lt;br /&gt;
s-nail:   notBefore = Feb  1 00:00:00 2010 GMT&lt;br /&gt;
s-nail:   notAfter = Jan 18 23:59:59 2038 GMT&lt;br /&gt;
s-nail:   issuer = /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority&lt;br /&gt;
s-nail:  Certificate depth 1&lt;br /&gt;
s-nail:   subject = /C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Organization Validation Secure Server CA&lt;br /&gt;
s-nail:   notBefore = Nov  2 00:00:00 2018 GMT&lt;br /&gt;
s-nail:   notAfter = Dec 31 23:59:59 2030 GMT&lt;br /&gt;
s-nail:   issuer = /C=US/ST=New Jersey/L=Jersey City/O=The USERTRUST Network/CN=USERTrust RSA Certification Authority&lt;br /&gt;
s-nail:  Certificate depth 0&lt;br /&gt;
s-nail:   subject = /C=DE/ST=Brandenburg/O=Memtext AG/CN=*.superx-projekt.de&lt;br /&gt;
s-nail:   notBefore = Feb  8 00:00:00 2024 GMT&lt;br /&gt;
s-nail:   notAfter = Mar 10 23:59:59 2025 GMT&lt;br /&gt;
s-nail:   issuer = /C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Organization Validation Secure Server CA&lt;br /&gt;
s-nail: Comparing subject_alt_name: need&amp;lt;smtp.superx-projekt.de&amp;gt; is&amp;lt;*.superx-projekt.de&amp;gt;&lt;br /&gt;
s-nail: TLS certificate ok&lt;br /&gt;
s-nail: TLS BLAKE2s256 fingerprint: 7A:0A:D3...&lt;br /&gt;
s-nail: TLS connection using TLSv1.3 / TLS_AES_256_GCM_SHA384&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SQL_ENV mit s-nail ==&lt;br /&gt;
In der [[Kernmodul_Shellscripte#Die_Umgebungssteuerung_SQL_ENV|SQL_ENV]] für die neue Konfig-Syntax am besten die Variable MAILPROG mit z.B. &lt;br /&gt;
 MAILPROG=&amp;quot;s-nail --account=test&amp;quot; &lt;br /&gt;
angeben.&lt;br /&gt;
=Shellscripte in der HISinOne-BI=&lt;br /&gt;
Die Shellscripte von superX sind auch in der HISinOne-BI nutzbar, sofern Linux als Betriebssystem genutzt wird. Vorbedingung ist&lt;br /&gt;
* die Einrichtung der [[Kernmodul_Shellscripte#Nutzung_der_SQL_ENV_unter_HISinOne-BI|SQL_ENV]]&lt;br /&gt;
* Machen Sie alle Shellscripte im Ordner .../webapps/superx/WEB-INF/conf/edustore/db/bin ausführbar&lt;br /&gt;
 chmod +x .../webapps/superx/WEB-INF/conf/edustore/db/bin/*&lt;br /&gt;
* Nützlich ist auch die Installation von psql, also mindestens das Paket postgresql-client&lt;br /&gt;
Im folgenden Beispiel wird ein HISinOne-BI-spezifisches Modul eingerichtet. &lt;br /&gt;
&lt;br /&gt;
==Shellscripte zur Verwaltung von RES==&lt;br /&gt;
Das Forschungsmodul RES der HIS e.G. ist ein Beispiel für ein Nicht-SuperX-Modul, das aber auch mit Shellscripten verwaltet werden kann. Hier das Vorgehen:&lt;br /&gt;
*Entpacken Sie die ZIP-Datei H1-CS-CM-RM_&amp;lt;&amp;lt;Version&amp;gt;&amp;gt;.zip in einem Ordner Ihrer Wahl.&lt;br /&gt;
*Setzen Sie in der [[Kernmodul_Shellscripte#Nutzung_der_SQL_ENV_unter_HISinOne-BI|SQL_ENV]] die Pfade und Variablen:&lt;br /&gt;
 RES_PFAD=.../webapps/superx/WEB-INF/conf/edustore/db/module/res; export RES_PFAD&lt;br /&gt;
 RES_ERRORDAT=$RES_PFAD/res_load.err; export RES_ERRORDAT&lt;br /&gt;
 RES_LOAD_PFAD=$RES_PFAD/rohdaten; export RES_LOAD_PFAD&lt;br /&gt;
 RES_ERRORMAIL=$ERRORMAIL; export RES_ERRORMAIL&lt;br /&gt;
 RES_LOGMAIL=$LOGMAIL; export RES_LOGMAIL&lt;br /&gt;
* Machen Sie die Shellscripte in $RES_PFAD und $RES_LOAD_PFAD ausführbar:&lt;br /&gt;
 chmod +x $RES_PFAD/*.x&lt;br /&gt;
 chmod +x $RES_PFAD/rohdaten/*.x&lt;br /&gt;
 chmod +x $RES_PFAD/upgrade/*.x&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Modul installieren mit&lt;br /&gt;
 cd $RES_PFAD&lt;br /&gt;
 module_install.x res .&lt;br /&gt;
&lt;br /&gt;
Dann entladen Sie aus H1, indem Sie in $RES_LOAD_PFAD die Datei RES_ENV analog einrichten wie Sie z.B. die ZUL_ENV oder SOS_ENV eingerichtet haben&lt;br /&gt;
&lt;br /&gt;
 cd $RES_LOAD_PFAD&lt;br /&gt;
 res_unload.x&lt;br /&gt;
&lt;br /&gt;
Dann starten Sie den Update:&lt;br /&gt;
&lt;br /&gt;
 cd $RES_PFAD&lt;br /&gt;
 module_etl.x res .&lt;br /&gt;
&lt;br /&gt;
Es kann Probleme geben, wenn das Kernmodul nicht zu der ZIP Datei von HIS paßt. Fehler bzgl. &amp;quot;dim_bp_apnr&amp;quot;... können Sie ignorieren.&lt;br /&gt;
&lt;br /&gt;
Eine Datenbank-Dokumentation befindet sich hier:&lt;br /&gt;
 .../webapps/superx/WEB-INF/conf/edustore/db/module/res/conf/res.html&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16388</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=16388"/>
		<updated>2026-08-04T07:55:26Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&lt;br /&gt;
[[image:logobutton_maintenance2b.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==Ziel und Überblick==&lt;br /&gt;
Die hier bereitgestellten Skripte ermöglichen es, in der BI-Umgebung von HISinOne und in Zukunft auch von SuperX (aktuell können die Scripte in SuperX leider noch nicht verwendet werden) Modul-Updates und -Upgrades zuverlässig über die Shell auszuführen – automatisiert per Cronjob oder manuell.  Sie orientieren sich bewusst am bisherigen Vorgehen aus SuperX, wurden jedoch erweitert:&lt;br /&gt;
&lt;br /&gt;
* Ausführung der BI-Modul-Updates/-Upgrades über Java (&#039;&#039;ComponentAdminCLI&#039;&#039;).&lt;br /&gt;
* Vollständige Protokollierung in Logdateien.&lt;br /&gt;
* Optional: Protokollierung der Läufe in der Tabelle &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Automatischer Mailversand über ein konfigurierbares Mailprogramm.&lt;br /&gt;
* Optional: Erkennen interner Fehler im Batch-Job (auch wenn Java Exitcode 0 liefert).&lt;br /&gt;
* Möglichkeit, Logdateien automatisch an Mails anzuhängen (erfolgreiche und fehlerhafte Module).&lt;br /&gt;
&lt;br /&gt;
==Installation aus dem git Repository==&lt;br /&gt;
&lt;br /&gt;
Führen Sie folgenden Shell-Befehl aus:&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
&lt;br /&gt;
Die weitere Konfiguration wird im Folgenden beschrieben. Alle Einstellungen erfolgen zentral in der Datei &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;, die als Template &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; ausgeliefert wird.&lt;br /&gt;
&lt;br /&gt;
==Umgebungsvariablen in der BI_ENV==&lt;br /&gt;
&lt;br /&gt;
===BI_ENV.sam – Template und lokale BI_ENV===&lt;br /&gt;
Die Datei &amp;lt;code&amp;gt;BI_ENV.sam&amp;lt;/code&amp;gt; wird als Muster ausgeliefert. &lt;br /&gt;
&lt;br /&gt;
Sie muss vor Ort:&lt;br /&gt;
&lt;br /&gt;
# in &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; kopiert/umbenannt werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp BI_ENV.sam BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# an die lokalen Gegebenheiten angepasst werden (Pfade, Module, Mailadressen usw.).&lt;br /&gt;
# mit restriktiven Rechten versehen werden:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chmod 600 BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Skripte binden diese Datei später mit&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /pfad/zu/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
ein.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Bedeutung der Variablen===&lt;br /&gt;
Im Folgenden die wichtigsten Variablen, die angepasst werden müssen.&lt;br /&gt;
&lt;br /&gt;
====Java-Konfiguration====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64&lt;br /&gt;
export JAVA_HOME&lt;br /&gt;
&lt;br /&gt;
JRE_HOME=$JAVA_HOME&lt;br /&gt;
export JRE_HOME&lt;br /&gt;
&lt;br /&gt;
PATH=$JAVA_HOME/bin:$PATH&lt;br /&gt;
export PATH&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Variablen stellen sicher, dass die BI-Jobs mit dem vorgesehenen Java (empfohlen: Java 17) ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Java-Optionen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
JAVA_OPTS=&amp;quot;-Xmx1520M -Djava.awt.headless=true ... --add-opens ...&amp;quot;&lt;br /&gt;
export JAVA_OPTS&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Pfade zur SuperX-BI-Installation====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
export WEBAPP&lt;br /&gt;
&lt;br /&gt;
SUPERX_DIR=$WEBAPP/WEB-INF/conf/edustore&lt;br /&gt;
export SUPERX_DIR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Pfade müssen an lokale Tomcat-Installation und SuperX-Verzeichnisstruktur angepasst werden.&lt;br /&gt;
&lt;br /&gt;
====Modulsteuerung====&lt;br /&gt;
Für die Update- und Upgrade-Skripte werden die zu bearbeitenden Module festgelegt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export BI_UPDATE_MODULES=&amp;quot;sos kenn zul&amp;quot;&lt;br /&gt;
export BI_UPGRADE_MODULES=&amp;quot;kenn&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hinweis:  &lt;br /&gt;
Die Modulkürzel müssen klein geschrieben sein (z. B. &amp;lt;code&amp;gt;sos&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;kenn&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;zul&amp;lt;/code&amp;gt;) und mit Leerzeichen getrennt aufgelistet werden.&lt;br /&gt;
&lt;br /&gt;
====Logging====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
LOGPFAD=$WEBAPP/WEB-INF/logs&lt;br /&gt;
export LOGPFAD&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Logpfad werden u. a. folgende Dateien erzeugt:&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_update.log&amp;lt;/code&amp;gt; – Sammellog des Updates&lt;br /&gt;
* &amp;lt;code&amp;gt;bi_upgrade.log&amp;lt;/code&amp;gt; – Sammellog des Upgrades&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_update.log&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;modul&amp;amp;gt;_upgrade.log&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Java-Batch-Jobs erzeugen ergänzende Logs in:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Mailversand====&lt;br /&gt;
Folgende Variablen steuern Empfänger und Format der Benachrichtigungen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export ERRORMAIL=&amp;quot;admin@hs.de&amp;quot;&lt;br /&gt;
export LOGMAIL=&amp;quot;$ERRORMAIL&amp;quot;&lt;br /&gt;
#export LOGMAIL=&amp;quot;admin@hs.de kollege@hs.de&amp;quot;   # mehrere Empfänger möglich&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ERRORMAIL&amp;lt;/code&amp;gt; – Empfänger für Fehlermails  &lt;br /&gt;
* &amp;lt;code&amp;gt;LOGMAIL&amp;lt;/code&amp;gt; – Empfänger für Erfolgs- und Statusmails  &lt;br /&gt;
Mehrere Adressen werden per Leerzeichen getrennt.&lt;br /&gt;
&lt;br /&gt;
Mailprogramm:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAILPROG=&amp;quot;s-nail --account=test1 -S ttycharset=utf-8 -S sendcharset=utf-8&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Betreffzeilen:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export MAIL_BETREFF_UPDATE=&amp;quot;BI Job Update&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_UPGRADE=&amp;quot;BI Job Upgrade&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_ERFOLGREICH=&amp;quot; - Erfolgreich&amp;quot;&lt;br /&gt;
export MAIL_BETREFF_SUFFIX_FEHLER=&amp;quot; - Fehler&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Datei:Kernmodul Regelbetrieb Mailversand.png|rand|links]]&lt;br /&gt;
&lt;br /&gt;
So könnten die Mails aussehen.&lt;br /&gt;
&lt;br /&gt;
====Steuerung der Log-Anhänge====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# error  = Logs nur bei Fehlern anhängen&lt;br /&gt;
# always = Logs immer anhängen (Erfolg + Fehler)&lt;br /&gt;
export MAIL_ATTACH_LOGS_MODE=&amp;quot;error&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Optionale Prüfung der Modul-Logs====&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# true  = zusätzlich Modul-Log auf interne Fehler prüfen&lt;br /&gt;
# false = nur Exitcode des Java-Calls verwenden&lt;br /&gt;
export CHECK_JOBLOG_FOR_ERRORS=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Gerade bei dem Java Aufruf von ComponentAdminCLI empfehlenswert, da dieser aktuell noch trotz &amp;lt;code&amp;gt;status: FAILED&amp;lt;/code&amp;gt; oft Exitcode 0 liefert.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Updates=&lt;br /&gt;
&lt;br /&gt;
==modules_update.sh – Hauptskript==&lt;br /&gt;
Dieses Skript führt alle Module aus &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; nacheinander aus.&lt;br /&gt;
&lt;br /&gt;
Ablauf:&lt;br /&gt;
&lt;br /&gt;
# Startcheck: Sind &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;LOGPFAD&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;BI_UPDATE_MODULES&amp;lt;/code&amp;gt; gesetzt?&lt;br /&gt;
# Falls verfügbar: DB-Protokollierung via &amp;lt;code&amp;gt;DOQUERY&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Für jedes Modul:&lt;br /&gt;
## Logdatei anlegen&lt;br /&gt;
## Start in &amp;lt;code&amp;gt;update_prot&amp;lt;/code&amp;gt; protokollieren (update_id = -10000)&lt;br /&gt;
## Java-Update starten:  &lt;br /&gt;
   &amp;lt;code&amp;gt;ComponentAdminCLI -e &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
## Optional: Modul-Logdatei nach internen Fehlern durchsuchen&lt;br /&gt;
## Erfolg:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;SUCCESS_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10000)&lt;br /&gt;
## Fehler:&lt;br /&gt;
### Modul-Log in &amp;lt;code&amp;gt;ERROR_LOG_FILES&amp;lt;/code&amp;gt;&lt;br /&gt;
### DB-Update (update_id = -10001)&lt;br /&gt;
## Zuletzt: Java-Joblogs aus &amp;lt;code&amp;gt;$WEBAPP/WEB-INF/logs/jobs&amp;lt;/code&amp;gt; ermitteln&lt;br /&gt;
&lt;br /&gt;
# Nach Abschluss aller Module:&lt;br /&gt;
## Erfolgs- oder Fehlermail versenden&lt;br /&gt;
## Anhänge abhängig von &amp;lt;code&amp;gt;MAIL_ATTACH_LOGS_MODE&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==modules_update_cron.sh – Wrapper für Cron==&lt;br /&gt;
Damit Updates regelmäßig durchgeführt werden können, existiert ein einfaches Wrapper-Skript.&lt;br /&gt;
&lt;br /&gt;
Vorgehen:&lt;br /&gt;
&lt;br /&gt;
# Beispieldatei kopieren:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp modules_update_cron.sh.sam modules_update_cron.sh&lt;br /&gt;
chmod +x modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
# Pfade zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; und zum Update-Skript anpassen.&lt;br /&gt;
# Cronjob eintragen, z. B. werktags um 18 Uhr:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
0 18 * * 1-5 /pfad/zu/modules_update_cron.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Inhaltlich:&lt;br /&gt;
* Laden der &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
* Start des Skripts &amp;lt;code&amp;gt;modules_update.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Module Upgrades=&lt;br /&gt;
&lt;br /&gt;
==modules_upgrade.sh – Hauptskript==&lt;br /&gt;
Das Upgrade-Skript entspricht dem Update-Skript, unterscheidet sich aber in folgenden Punkten:&lt;br /&gt;
&lt;br /&gt;
* Es wird **manuell** ausgeführt – kein Cronjob vorgesehen.&lt;br /&gt;
* Es verwendet &amp;lt;code&amp;gt;BI_UPGRADE_MODULES&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Das eigentliche Upgrade erfolgt über:  &lt;br /&gt;
  &amp;lt;code&amp;gt;ComponentAdminCLI -u &amp;amp;lt;modul&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nach Abschluss des Upgrades erfolgt ein Mailversand analog zum Update-Skript.&lt;br /&gt;
&lt;br /&gt;
Aufruf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /var/lib/tomcat10/webapps/superx/WEB-INF/bin/BI-Maintenance/update&lt;br /&gt;
./modules_upgrade.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorher muss zu Beginn des Skripts der Pfad zur &amp;lt;code&amp;gt;BI_ENV&amp;lt;/code&amp;gt; eingetragen sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. /pfad/zur/BI_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=Modulverwaltung=&lt;br /&gt;
&lt;br /&gt;
==Modulkürzel==&lt;br /&gt;
Die folgenden Modulkürzel sind in einer typischen BI-Installation relevant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
 kuerzel |                         name                          &lt;br /&gt;
---------+-------------------------------------------------------&lt;br /&gt;
 astat   | Amtliche Statistik                                &lt;br /&gt;
 bau     | Gebäude, Räume, Flächen                           &lt;br /&gt;
 cob     | Kostenrechnung                                    &lt;br /&gt;
 erfolg  | Studienverlauf                                    &lt;br /&gt;
 fin     | Finanzrechnung                                    &lt;br /&gt;
 gang    | Studiengänge                                      &lt;br /&gt;
 ivs     | Inventar                                          &lt;br /&gt;
 kenn    | Kennzahlen                                        &lt;br /&gt;
 kern    | Administration                                    &lt;br /&gt;
 lm      | Leistungsmonitoring                               &lt;br /&gt;
 man     | Management                                        &lt;br /&gt;
 prom    | Promovierende                                     &lt;br /&gt;
 res     | Forschung                                         &lt;br /&gt;
 sos     | Studierende, Prüfungen                            &lt;br /&gt;
 sva     | Personal, Stellen                                 &lt;br /&gt;
 zul     | Bewerbung, Zulassung                              &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die aktiven Module der eigenen Installation können mit folgendem SQL abgefragt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT V.his_system AS kuerzel,&lt;br /&gt;
       S.name&lt;br /&gt;
  FROM db_version V&lt;br /&gt;
  JOIN systeminfo S&lt;br /&gt;
    ON S.tid = V.systeminfo_id&lt;br /&gt;
 ORDER BY 1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
Das bereitgestellte Migrationsskript ermöglicht die Umstellung einer bestehenden SuperX-Installation auf die empfohlene Webapp-Struktur.&lt;br /&gt;
&lt;br /&gt;
Dabei können sowohl klassische Installationen mit separatem DB-Verzeichnis als auch bestehende Webapp-Installationen migriert werden. Die Migration kann je nach Anwendungsfall vollständig oder ausschließlich für das DB-Verzeichnis durchgeführt werden.&lt;br /&gt;
Hier eine Anleitung &amp;quot;in short&amp;quot;, wenn Sie bisher das &amp;quot;klasssische&amp;quot; Layout genutzt haben (also Unix Benutzer &amp;quot;superx&amp;quot;, Installation in &amp;quot;/home/superx&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
 git clone https://git.campussource.de/git/SuperX/BI_Maintenance.git&lt;br /&gt;
 #Script ausführen und neues ENV laden:&lt;br /&gt;
 cd BI_Maintenance/webapps_migration&lt;br /&gt;
 ./migrate_superx_webapp.sh&lt;br /&gt;
&lt;br /&gt;
Das Skript liest die bestehende Installation anhand der vorhandenen SQL_ENV-Datei ein und erzeugt daraus die gewünschte Zielstruktur. Details können in der Konfigurationsdatei &lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
konfiguriert, siehe folgende Dokumentation.&lt;br /&gt;
&lt;br /&gt;
==Zielstruktur==&lt;br /&gt;
&lt;br /&gt;
Die Webapp wird standardmäßig nicht direkt im Tomcat-Webapp-Verzeichnis abgelegt, sondern unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch bleibt die Installation unabhängig von der verwendeten Tomcat-Distribution und kann einfacher per Git, rsync oder Modulupdate gepflegt werden.&lt;br /&gt;
&lt;br /&gt;
Die zugehörige DB-Struktur befindet sich anschließend unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/webapps/superx/WEB-INF/conf/edustore/db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Anbindung==&lt;br /&gt;
&lt;br /&gt;
Für den Zugriff des Tomcat-Servers auf die Webapp gibt es grundsätzlich zwei Möglichkeiten:&lt;br /&gt;
&lt;br /&gt;
* Verwendung eines symbolischen Links vom Tomcat-Webapp-Verzeichnis auf die eigentliche Webapp.&lt;br /&gt;
* Anpassung der Tomcat-Konfiguration (z. B. appBase oder Context-Konfiguration).&lt;br /&gt;
&lt;br /&gt;
Empfohlen wird die Verwendung eines symbolischen Links.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/srv/tomcat/webapps/superx&lt;br /&gt;
 -&amp;gt; /home/superx/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Wichtige Variablen==&lt;br /&gt;
&lt;br /&gt;
Die wichtigsten Einstellungen erfolgen in der Datei:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
migrate_superx.conf&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TARGET_WEBAPP===&lt;br /&gt;
&lt;br /&gt;
Definiert das Zielverzeichnis der Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Owner: superx&lt;br /&gt;
Group: tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE===&lt;br /&gt;
&lt;br /&gt;
Steuert die Art der Migration.&lt;br /&gt;
&lt;br /&gt;
Vollständige Migration:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nur Migration des DB-Verzeichnisses:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Migration des DB-Verzeichnisses==&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis kann entweder kopiert oder verschoben werden.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=copy===&lt;br /&gt;
&lt;br /&gt;
Das bestehende DB-Verzeichnis bleibt erhalten.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür rsync verwendet.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=move===&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis wird verschoben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Intern wird hierfür mv verwendet. Ist das Zielverzeichnis bereits vorhanden und&lt;br /&gt;
&amp;lt;code&amp;gt;ALLOW_EXISTING_TARGET_DB=&amp;quot;true&amp;quot;&amp;lt;/code&amp;gt; gesetzt, wird das vorhandene Ziel-DB-Verzeichnis vor dem Verschieben vollständig ersetzt. Damit verbleiben keine alten Dateien im Ziel.&lt;br /&gt;
&lt;br /&gt;
Dies ist der empfohlene Standard für die Migration klassischer SuperX-Installationen und vermeidet unnötigen zusätzlichen Speicherbedarf.&lt;br /&gt;
&lt;br /&gt;
==Automatische Anpassung der SQL_ENV==&lt;br /&gt;
&lt;br /&gt;
Nach der Migration kann die SQL_ENV-Datei automatisch angepasst werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden insbesondere folgende Variablen aktualisiert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_DIR&lt;br /&gt;
WEBAPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird sichergestellt, dass folgende Einstellung vorhanden ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
umask 002&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vor der Änderung wird automatisch eine Sicherungskopie der SQL_ENV-Datei angelegt.&lt;br /&gt;
&lt;br /&gt;
==Benutzer und Gruppen==&lt;br /&gt;
&lt;br /&gt;
Die folgenden Variablen steuern, welchem Benutzer und welcher Gruppe die Ziel-Webapp nach der Migration zugeordnet wird.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
Definiert den Besitzer der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alle Dateien und Verzeichnisse der Ziel-Webapp werden diesem Benutzer zugeordnet, sofern die Rechteverwaltung aktiviert ist.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_GROUP===&lt;br /&gt;
&lt;br /&gt;
Definiert die Gruppe der Ziel-Webapp.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Gruppe wird für alle Dateien und Verzeichnisse der Ziel-Webapp verwendet.&lt;br /&gt;
&lt;br /&gt;
Durch das gesetzte setgid-Bit auf den Verzeichnissen erben neu angelegte Dateien und Unterverzeichnisse automatisch diese Gruppe.&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Migration kann sowohl als root als auch – unter bestimmten Voraussetzungen – direkt als Anwendungsbenutzer ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=auto===&lt;br /&gt;
&lt;br /&gt;
Dies ist die empfohlene Standardeinstellung.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript entscheidet abhängig vom aktuellen Benutzer automatisch, ob ein Besitzerwechsel erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als root====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript als root ausgeführt, werden Besitzer und Gruppe der Ziel-Webapp auf die konfigurierten Werte gesetzt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $WEBAPP_USER:$WEBAPP_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird auch das übergeordnete Verzeichnis der Webapp (z. B. /home/superx/webapps) auf die gleichen Besitz- und Gruppenrechte gesetzt.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als WEBAPP_USER====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript direkt als der konfigurierte WEBAPP_USER ausgeführt und ist dieser Benutzer Mitglied der konfigurierten WEBAPP_GROUP, wird kein chown ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Stattdessen verwendet das Skript bei Bedarf ein chgrp, um die Gruppenzugehörigkeit der Dateien anzupassen.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall kann die Migration häufig vollständig ohne root-Rechte durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
====Ausführung als anderer Benutzer====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript weder als root noch als WEBAPP_USER mit passender Gruppenmitgliedschaft ausgeführt, bricht das Skript mit einer entsprechenden Fehlermeldung ab.&lt;br /&gt;
&lt;br /&gt;
===ADD_WEBAPP_USER_TO_GROUP===&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript die Gruppenmitgliedschaft des Zielbenutzers automatisch anpassen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ADD_WEBAPP_USER_TO_GROUP=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hierfür sind root-Rechte erforderlich.&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Symlink==&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript den Symlink für den Tomcat automatisch erzeugen.&lt;br /&gt;
&lt;br /&gt;
===CREATE_TOMCAT_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_WEBAPPS_DIR===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_WEBAPPS_DIR=&amp;quot;/srv/tomcat/webapps&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===TOMCAT_CONTEXT_NAME===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_CONTEXT_NAME=&amp;quot;superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===REPLACE_EXISTING_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
Bestehende Symlinks können bei Bedarf automatisch ersetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
REPLACE_EXISTING_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Normale Dateien oder Verzeichnisse werden dabei niemals automatisch gelöscht.&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsprüfungen==&lt;br /&gt;
&lt;br /&gt;
Vor Beginn der Migration werden verschiedene Sicherheitsprüfungen durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Unter anderem wird geprüft:&lt;br /&gt;
&lt;br /&gt;
* Existiert die SQL_ENV-Datei?&lt;br /&gt;
* Existiert der konfigurierte Benutzer?&lt;br /&gt;
* Existiert die konfigurierte Gruppe?&lt;br /&gt;
* Sind Quell- und Zielverzeichnis identisch?&lt;br /&gt;
* Würde eine Verzeichnisverschachtelung entstehen?&lt;br /&gt;
* Befindet sich SUPERX_DIR bereits innerhalb von WEBAPP?&lt;br /&gt;
&lt;br /&gt;
Wird erkannt, dass die Installation bereits der neuen Struktur entspricht, bricht das Skript standardmäßig ab.&lt;br /&gt;
&lt;br /&gt;
===FORCE_ALREADY_MIGRATED===&lt;br /&gt;
&lt;br /&gt;
In Ausnahmefällen kann diese Prüfung übersteuert werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FORCE_ALREADY_MIGRATED=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dies sollte nur verwendet werden, wenn die Auswirkungen bekannt sind.&lt;br /&gt;
&lt;br /&gt;
==Typischer Ablauf==&lt;br /&gt;
&lt;br /&gt;
# Laden der migrate_superx.conf&lt;br /&gt;
# Laden der bestehenden SQL_ENV&lt;br /&gt;
# Ermitteln von SUPERX_DIR, WEBAPP und DB-Verzeichnis&lt;br /&gt;
# Sicherheitsprüfungen&lt;br /&gt;
# Optionales Stoppen des Tomcat-Dienstes&lt;br /&gt;
# Kopieren der Webapp&lt;br /&gt;
# Kopieren oder Verschieben des DB-Verzeichnisses&lt;br /&gt;
# Anpassen der SQL_ENV&lt;br /&gt;
# Setzen von Besitzern, Gruppen und Rechten&lt;br /&gt;
# Optionales Erzeugen des Tomcat-Symlinks&lt;br /&gt;
# Optionales Starten des Tomcat-Dienstes&lt;br /&gt;
&lt;br /&gt;
==Empfohlene Standardkonfiguration==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/home/superx/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
WEBAPP_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
* Standardziel ist /home/superx/webapps/superx.&lt;br /&gt;
* Die Tomcat-Anbindung kann über einen Symlink erfolgen.&lt;br /&gt;
* Bei WEBAPP_USER=superx und WEBAPP_GROUP=tomcat kann die Migration häufig ohne root erfolgen, sofern der Benutzer Mitglied der Gruppe tomcat ist.&lt;br /&gt;
* Root wird nur benötigt, wenn Besitzer geändert, Benutzer oder Gruppen angepasst oder Systemkonfigurationen verändert werden müssen.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16372</id>
		<title>Kernmodul Komponentenverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16372"/>
		<updated>2026-07-14T12:29:28Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Komponentenverwaltung im Kernmodul kann je nach Aufgabe über die Browseroberfläche oder über Shell-Skripte erfolgen.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden Installation, Deinstallation, Aktualisierung und Upgrade von Modulen überwiegend über Skripte in der Shell durchgeführt. Ab Kernmodul 6.0 steht zusätzlich eine Komponentenverwaltung über die Browseroberfläche zur Verfügung. Diese Browseroberfläche wird im Folgenden als SuperX Komponentenverwaltung beschrieben.&lt;br /&gt;
&lt;br /&gt;
Die SuperX Komponentenverwaltung ist vor allem für die Ausführung und Überwachung von ETL-Prozessen, für Modul-Upgrades sowie für die Installation von im Dateisystem vorhandenen Modulen vorgesehen. Die Deinstallation von Modulen erfolgt weiterhin über die Shell-Skripte.&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ist daher in zwei Bereiche gegliedert: Zuerst wird die Nutzung der SuperX Komponentenverwaltung beschrieben. Anschließend folgt die Dokumentation zur Installation und Verwaltung von Modulen mit Skripten.&lt;br /&gt;
&lt;br /&gt;
= Komponentenverwaltung im Browser: SuperX Komponentenverwaltung =&lt;br /&gt;
Die SuperX Komponentenverwaltung dient dazu, ETL-Prozesse der SuperX-Module über die Weboberfläche auszuführen und zu überwachen. Sie bietet eine zentrale Übersicht über installierte und installierbare Module, verfügbare Aktionen, Versionsinformationen, Datenquellen, den aktuellen Lauf sowie technische Zusatzinformationen für die Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der Schwerpunkt der Oberfläche liegt auf dem täglichen Betrieb: Anwenderinnen und Anwender können Laderoutinen starten, den aktuellen Stand eines Laufs verfolgen und bei Bedarf die Log-Ausgabe einsehen. Technische Detail- und Diagnoseinformationen stehen ebenfalls zur Verfügung, sind aber vor allem für Administratorinnen und Administratoren oder den Support gedacht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Uebersicht.png|Gesamtübersicht der SuperX Komponentenverwaltung mit Modulübersicht, Filterbereich, Aktionsbuttons und aktuellem Lauf.]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Oberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche besteht im Wesentlichen aus folgenden Bereichen:&lt;br /&gt;
&lt;br /&gt;
* Filterbereich&lt;br /&gt;
* Modulübersicht&lt;br /&gt;
* Aktionsbuttons pro Modul&lt;br /&gt;
* Bereich „Aktueller Lauf“&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
* Details-Bereich&lt;br /&gt;
* Diagnose-Bereich&lt;br /&gt;
&lt;br /&gt;
Über den Filterbereich kann die angezeigte Modulliste eingeschränkt werden. Die Modulübersicht zeigt die wichtigsten Informationen zu den vorhandenen Modulen. Über die Aktionsbuttons können ETL-Prozesse gestartet werden. Der Bereich „Aktueller Lauf“ zeigt den zuletzt gestarteten oder aktuell laufenden Prozess an.&lt;br /&gt;
&lt;br /&gt;
Die Bereiche „Details“ und „Diagnose“ liefern zusätzliche technische Informationen. Sie sind hilfreich für Supportfälle, aber für die normale Bedienung nicht zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Modulübersicht ==&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt die installierten sowie die im Dateisystem erkannten installierbaren Module mit ihren wichtigsten Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Spalte&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Modul&lt;br /&gt;
| Zeigt den Namen und das technische Kürzel des Moduls, zum Beispiel „Administration“ mit dem Kürzel „kern“ oder „Kennzahlen“ mit dem Kürzel „kenn“.&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Zeigt, ob das Modul installiert ist. Nicht installierte, aber im Dateisystem verfügbare Module können ebenfalls erscheinen.&lt;br /&gt;
|-&lt;br /&gt;
| Versionen&lt;br /&gt;
| Zeigt die installierte Version und die verfügbare Version des Moduls.&lt;br /&gt;
|-&lt;br /&gt;
| Letztes Update&lt;br /&gt;
| Zeigt den Zeitpunkt des letzten bekannten Updates.&lt;br /&gt;
|-&lt;br /&gt;
| Datenquelle&lt;br /&gt;
| Zeigt, aus welcher Datenquelle das Modul seine Daten bezieht oder auf welcher Datenbasis der ETL-Prozess arbeitet.&lt;br /&gt;
|-&lt;br /&gt;
| DB-Verbindung&lt;br /&gt;
| Zeigt, ob die Verbindung zur Datenbank bzw. Datenquelle aktuell erreichbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| Aktionen&lt;br /&gt;
| Zeigt die verfügbaren Aktionen für das jeweilige Modul. Bei nicht installierten Modulen wird anstelle von „Upgrade“ die Aktion „Installieren“ angeboten.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Versionen ===&lt;br /&gt;
&lt;br /&gt;
In der Spalte „Versionen“ werden zwei Werte angezeigt:&lt;br /&gt;
&lt;br /&gt;
* installierte Version&lt;br /&gt;
* verfügbare Version&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der aktuell in der Datenbank installiert ist. Die verfügbare Version beschreibt den ausgelieferten Stand des Moduls, der in der Installation vorliegt.&lt;br /&gt;
&lt;br /&gt;
Wenn die verfügbare Version höher ist als die installierte Version, sollte in der Regel ein Upgrade des Moduls durchgeführt werden. Dadurch werden die Datenstrukturen des Moduls auf den ausgelieferten Stand aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Datenquelle ===&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle gibt an, aus welchem System ein Modul seine Daten bezieht oder auf welcher Datenbasis es arbeitet.&lt;br /&gt;
&lt;br /&gt;
SuperX ist ein Data Warehouse. Viele Module übernehmen Daten aus externen vorsystemen. Beispiele für solche Datenquellen sind:&lt;br /&gt;
&lt;br /&gt;
* cob für Kostenrechnung&lt;br /&gt;
* mbs für Finanzrechnung, Inventar oder Gebäude/Räume/Flächen&lt;br /&gt;
* sva für Personal- und Stelleninformationen&lt;br /&gt;
* hisinone bei entsprechend angebundenen Modulen&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es Module, die auf bereits in SuperX vorhandene Daten zurückgreifen. In solchen Fällen wird als Datenquelle „SuperX“ angezeigt. Das betrifft vor allem Module, die modulübergreifend, auswertungsorientiert oder spezialisiert auf vorhandene SuperX-Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
Beispiele hierfür können sein:&lt;br /&gt;
&lt;br /&gt;
* kenn für Kennzahlen&lt;br /&gt;
* man für Managementberichte&lt;br /&gt;
* erfolg für Studienverlauf bzw. Erfolgsbetrachtungen&lt;br /&gt;
* gang für Studiengänge&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle „SuperX“ bedeutet also nicht, dass keine Daten verarbeitet werden. Sie zeigt an, dass die Verarbeitung auf Daten basiert, die bereits im SuperX-System vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Aktionen ausführen ==&lt;br /&gt;
&lt;br /&gt;
Die verfügbaren Aktionen hängen vom jeweiligen Modul ab. Nicht jedes Modul unterstützt alle Aktionen. Wenn eine Aktion nicht verfügbar ist, wird der entsprechende Button nicht angezeigt oder ist nicht aktiv.&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche ermittelt die ausführbaren Aktionen aus den verfügbaren technischen Jobs des jeweiligen Moduls. Falls die Jobliste nicht vollständig geliefert wird, können die grundsätzlichen Angaben aus der Komponentenliste als Fallback genutzt werden. Dadurch können Standardaktionen wie „Unload“, „Update“ oder „Unload &amp;amp; Update“ trotzdem angeboten werden, wenn sie für das Modul grundsätzlich vorgesehen sind.&lt;br /&gt;
&lt;br /&gt;
Vor dem Start einer Aktion erscheint ein Bestätigungsdialog. Dort werden die geplante Aktion, der Modulname und das technische Kürzel angezeigt. Technische REST-Aufrufe werden im normalen Dialog nicht angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktionsbuttons.png|Modulzeile mit den Aktionsbuttons Unload, Update, Unload &amp;amp; Update sowie Installieren bzw. Upgrade.]]&lt;br /&gt;
&lt;br /&gt;
=== Unload ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ entlädt Daten aus einem angebundenen Vorsystem, sofern für das Modul ein Vorsystem angebunden ist.&lt;br /&gt;
&lt;br /&gt;
Der Unload dient dazu, Daten aus der jeweiligen Datenquelle bereitzustellen, damit sie anschließend in SuperX verarbeitet werden können. Je nach Modul und Einrichtung kann der Unload auch dazu dienen, Daten für eine weitere Verarbeitung oder Übertragung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Update“ lädt vorhandene Rohdaten in SuperX ein und führt die Hauptladeroutine des Moduls aus.&lt;br /&gt;
&lt;br /&gt;
Dies ist in vielen Fällen die wichtigste Aktion für den täglichen Betrieb. Beim Update werden die vorhandenen Rohdaten verarbeitet und die zugehörigen SuperX-Tabellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Unload &amp;amp; Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload &amp;amp; Update“ führt zuerst den Unload und anschließend das Update aus.&lt;br /&gt;
&lt;br /&gt;
Diese Aktion ist sinnvoll, wenn neue Daten aus einem angebundenen Vorsystem entladen und direkt anschließend in SuperX verarbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Installieren ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Installieren“ wird angezeigt, wenn ein Modul im Dateisystem vorhanden, aber noch nicht installiert ist.&lt;br /&gt;
&lt;br /&gt;
Die Installation legt die benötigten Datenbankobjekte, Abfragen und weiteren Modulbestandteile an. Nach erfolgreicher Installation erscheint das Modul als installiert. An derselben Stelle wird dann statt „Installieren“ die Aktion „Upgrade“ angezeigt.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Upgrade“ führt eine Modulaktualisierung durch. Dabei werden die Datenstrukturen des Moduls auf den ausgelieferten Stand gebracht.&lt;br /&gt;
&lt;br /&gt;
Ein Upgrade sollte ausgeführt werden, wenn eine neue verfügbare Version angezeigt wird oder wenn dies im Rahmen eines Modulupdates erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
== Sonderfall Kennzahlen-Modul ==&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ ist die Verarbeitung etwas anders als bei typischen Modulen mit externem Vorsystem.&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist hier in der Regel „SuperX“. Das bedeutet, dass die Kennzahlen nicht primär aus einem externen Fremdsystem entladen werden. Stattdessen basiert die Verarbeitung auf Daten, die bereits in SuperX vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Für den täglichen Betrieb ist beim Kennzahlen-Modul daher häufig vor allem die Aktion „Update“ relevant. Dabei werden die Kennzahlen auf Basis der vorhandenen SuperX-Daten neu berechnet bzw. aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Je nach Einrichtung können beim Kennzahlen-Modul auch „Unload“ oder „Unload &amp;amp; Update“ angeboten werden. Die Oberfläche richtet sich dabei nach den verfügbaren Jobs bzw. nach den Modulangaben aus der Komponentenliste.&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ kann beim Kennzahlen-Modul eine andere Bedeutung haben als bei klassischen Vorsystem-Modulen. Sie kann dazu dienen, Kennzahlen für ein anderes System bereitzustellen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* für ein hochschulübergreifendes SuperX&lt;br /&gt;
* für Vergleichssysteme&lt;br /&gt;
* für landesweite Auswertungen oder Berichtssysteme&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Aktion „Unload &amp;amp; Update“ ist beim Kennzahlen-Modul daher nicht immer die wichtigste Aktion. In vielen Installationen wird das Update gezielt über die Oberfläche ausgeführt, während Export- oder Übertragungsprozesse über automatische Abläufe wie Cronjobs gesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Lauf ==&lt;br /&gt;
&lt;br /&gt;
Der Bereich „Aktueller Lauf“ zeigt Informationen zum zuletzt gestarteten oder aktuell laufenden ETL-Prozess.&lt;br /&gt;
&lt;br /&gt;
Typische Informationen sind:&lt;br /&gt;
&lt;br /&gt;
* JobExecutionId&lt;br /&gt;
* Name des gestarteten Jobs&lt;br /&gt;
* Status&lt;br /&gt;
* Fortschritt&lt;br /&gt;
* Anzahl der ausgeführten Schritte&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktueller_Lauf.png|Bereich „Aktueller Lauf“ mit JobExecutionId, Status, Fortschritt und Log-Ausgabe.]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
Der Status zeigt den aktuellen Zustand des Laufs. Häufige Statuswerte sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| STARTING&lt;br /&gt;
| Der Lauf wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
| STARTED&lt;br /&gt;
| Der Lauf wurde gestartet und wird ausgeführt.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETED&lt;br /&gt;
| Der Lauf wurde erfolgreich abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| FAILED&lt;br /&gt;
| Der Lauf ist mit einem Fehler abgebrochen.&lt;br /&gt;
|-&lt;br /&gt;
| STOPPED&lt;br /&gt;
| Der Lauf wurde gestoppt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fortschritt ===&lt;br /&gt;
&lt;br /&gt;
Der Fortschritt zeigt, wie viele Prozessschritte bereits abgearbeitet wurden. Er ist als technischer bzw. prozessbezogener Fortschritt zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Fortschrittswert ist keine genaue Zeitprognose.&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann schnell auf eine hohe Prozentzahl springen und dort längere Zeit stehen bleiben, wenn ein einzelner Verarbeitungsschritt besonders lange dauert. Umgekehrt können viele kleine Schritte sehr schnell nacheinander abgeschlossen werden. Die Prozentanzeige beschreibt daher den Abarbeitungsstand der Prozessschritte, nicht die tatsächlich vergangene oder verbleibende Zeit.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann bereits 80 % anzeigen, obwohl noch ein größerer Verarbeitungsschritt aussteht. Ebenso kann ein Lauf am Anfang längere Zeit bei einer niedrigen Prozentzahl stehen bleiben, wenn ein früher Prozessschritt besonders umfangreich ist.&lt;br /&gt;
&lt;br /&gt;
== Log-Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe zeigt technische Informationen zum ausgeführten ETL-Prozess. Sie kann helfen, den Ablauf nachzuvollziehen und bei Problemen erste Hinweise zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe ist vor allem für Supportfälle hilfreich. Für eine tiefergehende Fehleranalyse sind in der Regel administrative Kenntnisse erforderlich. Je nach Fehler müssen zusätzlich Serverlogs, Datenbankinhalte, Moduldateien oder Systemkonfigurationen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Log-Ausgabe nicht sofort erscheint, kann sie über „Log laden“ erneut abgefragt werden. Gerade bei umfangreichen Läufen kann es vorkommen, dass die Log-Ausgabe erst kurze Zeit nach Abschluss vollständig verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
== Typische Nutzungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Bereits vorhandene Rohdaten verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Rohdaten bereits vorhanden sind und lediglich erneut verarbeitet werden sollen, wird in der Regel die Aktion „Update“ verwendet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Rohdaten liegen bereits im System vor&lt;br /&gt;
* Berechnungen oder Aggregationen sollen neu ausgeführt werden&lt;br /&gt;
* die SuperX-Tabellen des Moduls sollen aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Daten aus einem Vorsystem übernehmen und verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn neue Daten aus einem externen Vorsystem übernommen und anschließend verarbeitet werden sollen, kann die Aktion „Unload &amp;amp; Update“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden zunächst die Daten aus dem Vorsystem entladen. Anschließend werden die Daten durch das Update in SuperX verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload &amp;amp; Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nur Daten aus einem Vorsystem entladen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten aus einem Vorsystem entladen werden sollen, ohne direkt anschließend die Laderoutine auszuführen, kann die Aktion „Unload“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul installieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn ein Modul im Dateisystem vorhanden, aber noch nicht installiert ist, wird in der Modulzeile die Aktion „Installieren“ angezeigt.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Installieren&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul auf den ausgelieferten Stand aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue verfügbare Version angezeigt wird, sollte ein Upgrade geprüft bzw. durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen innerhalb von SuperX aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ werden die Daten in der Regel aus SuperX selbst bezogen. Wenn die Kennzahlen neu berechnet oder aktualisiert werden sollen, ist häufig die Aktion „Update“ die passende Aktion.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen für ein anderes System bereitstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Kennzahlen für ein anderes System bereitgestellt werden sollen, kann beim Kennzahlen-Modul die Aktion „Unload“ relevant sein.&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel für hochschulübergreifende Auswertungen, Vergleichssysteme oder landesweite Berichtssysteme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Nutzung ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung der SuperX Komponentenverwaltung sollten folgende Punkte beachtet werden:&lt;br /&gt;
&lt;br /&gt;
* Ein laufender Prozess sollte nicht unnötig mehrfach parallel gestartet werden.&lt;br /&gt;
* Vor dem Start von Installieren, Upgrade, Unload, Update oder Unload &amp;amp; Update sollte der Bestätigungsdialog geprüft werden.&lt;br /&gt;
* Nach einem Lauf kann die Modulübersicht über „Aktualisieren“ neu geladen werden.&lt;br /&gt;
* Die Prozentanzeige ist kein Zeitindikator, sondern beschreibt den Fortschritt der Prozessschritte.&lt;br /&gt;
* Bei Fehlern sollte zuerst der Status und anschließend die Log-Ausgabe geprüft werden.&lt;br /&gt;
* Für tiefergehende Fehleranalysen sollten Administratorinnen und Administratoren oder technische Ansprechpartner einbezogen werden.&lt;br /&gt;
* Bei neuen verfügbaren Modulversionen sollte geprüft werden, ob ein Upgrade auszuführen ist.&lt;br /&gt;
&lt;br /&gt;
== Details-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Über den Button „Details“ können zusätzliche technische Informationen zu einem Modul angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Der Details-Bereich ist vor allem für fortgeschrittene Benutzerinnen und Benutzer, Administratorinnen und Administratoren oder den Support gedacht. Er kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* technische Modulkennung&lt;br /&gt;
* Systeminfo-ID&lt;br /&gt;
* technische Jobnamen&lt;br /&gt;
* verfügbare Jobs&lt;br /&gt;
* hergeleitete Startaktionen&lt;br /&gt;
* Rohdaten der Schnittstelle&lt;br /&gt;
* zusätzliche technische Moduldetails&lt;br /&gt;
&lt;br /&gt;
Für den normalen Betrieb ist der Details-Bereich meist nicht erforderlich. Er ist vor allem dann hilfreich, wenn bei Rückfragen oder Supportfällen genaue technische Informationen benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diagnose-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist eine technische Hilfsfunktion zur Prüfung der SuperX Komponentenverwaltung. Er ist global angeordnet und nicht auf ein einzelnes Modul beschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Diagnose führt keine Reparaturen automatisch aus. Sie zeigt technische Informationen, mögliche Auffälligkeiten und Hinweise an. Zusätzlich können SQL- oder Shell-Hinweise angezeigt werden, die bei Bedarf von Administratorinnen und Administratoren kopiert und manuell ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* Erreichbarkeit der REST-Schnittstellen&lt;br /&gt;
* Webapp-, Tomcat- und Java-Informationen&lt;br /&gt;
* Pfade und Dateisysteminformationen&lt;br /&gt;
* Festplattenspeicher&lt;br /&gt;
* Datenbankinformationen&lt;br /&gt;
* Prüfung der Log-Tabelle&lt;br /&gt;
* Versionsquellen&lt;br /&gt;
* bekannte Fehlerbilder&lt;br /&gt;
* kopierbare SQL- und Shell-Hinweise&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist vor allem für Administratorinnen und Administratoren oder technische Ansprechpartner gedacht. Für normale Anwenderinnen und Anwender ist er in der Regel nur dann relevant, wenn ein Fehler auftritt oder technische Informationen weitergegeben werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Administratorhinweise ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält ergänzende technische Hinweise. Er richtet sich vor allem an Administratorinnen und Administratoren sowie an den technischen Support.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft der Versionsinformationen ===&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche zeigt eine installierte und eine verfügbare Version an.&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der in der Datenbank installiert ist. Falls die REST-Schnittstelle keinen Wert liefert, kann die Version aus der Tabelle &amp;lt;code&amp;gt;db_version&amp;lt;/code&amp;gt; gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die verfügbare Version beschreibt den ausgelieferten Stand im Dateisystem. Sie kann aus der Modul-XML-Datei gelesen werden. Für normale Module liegt diese Datei typischerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/&amp;lt;modul&amp;gt;/conf/&amp;lt;modul&amp;gt;.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul gilt ein Sonderfall. Die Modul-XML liegt unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/install/conf/kern.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann eine Datei &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; im jeweiligen Modulverzeichnis als Fallback verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Log-Tabelle ===&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe der SuperX Komponentenverwaltung verwendet eine Datenbanktabelle für die Joblogs. Wenn diese Tabelle fehlt oder unvollständig ist, kann die Log-Ausgabe fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Struktur der Tabelle ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS job_log&lt;br /&gt;
(&lt;br /&gt;
   job_instance_id  bigint   NOT NULL,&lt;br /&gt;
   log              text,&lt;br /&gt;
   status           text&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX IF NOT EXISTS ix_job_log1&lt;br /&gt;
ON public.job_log USING btree (job_instance_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese SQL-Anweisungen sollten nicht automatisch durch die Oberfläche ausgeführt werden. Sie dienen als Hinweis für Administratorinnen und Administratoren und müssen bei Bedarf manuell geprüft und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Typische technische Fehlerbilder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehlerbild&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/jobLog/{id}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Die Tabelle &amp;lt;code&amp;gt;job_log&amp;lt;/code&amp;gt; fehlt, ist unvollständig oder der Logeintrag ist noch nicht verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/job/list/{modul}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Moduldateien fehlen, Pfade stimmen nicht oder die Webapp verwendet nicht den erwarteten Dateistand.&lt;br /&gt;
|-&lt;br /&gt;
| REST-Endpunkt liefert HTTP 404&lt;br /&gt;
| Der Context-Pfad, die Webapp, der Port oder ein Tunnel zeigt möglicherweise nicht auf die erwartete Anwendung.&lt;br /&gt;
|-&lt;br /&gt;
| Log erscheint erst nach erneutem Laden&lt;br /&gt;
| Der ETL-Lauf ist abgeschlossen, aber der Logeintrag war beim ersten Abruf noch nicht vollständig verfügbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Die SuperX Komponentenverwaltung stellt eine zentrale Oberfläche zur Ausführung und Überwachung von ETL-Prozessen bereit. Für den täglichen Betrieb stehen vor allem die Aktionen „Unload“, „Update“ und „Unload &amp;amp; Update“ im Vordergrund. Zusätzlich können Module installiert oder per Upgrade auf den ausgelieferten Stand gebracht werden.&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt den Installationsstatus, Versionsinformationen, Datenquellen und Datenbankverbindungen. Der Bereich „Aktueller Lauf“ informiert über den Fortschritt eines gestarteten Prozesses. Die Log-Ausgabe liefert technische Zusatzinformationen und kann bei der Fehleranalyse helfen.&lt;br /&gt;
&lt;br /&gt;
Details und Diagnose ergänzen die Oberfläche um technische Informationen für Support- und Administrationsfälle. Sie unterstützen bei der Analyse, führen aber keine automatischen Reparaturen aus.&lt;br /&gt;
&lt;br /&gt;
= Installation und Verwaltung in der Shell mit Skripten =&lt;br /&gt;
&lt;br /&gt;
== Installation von Modulen ==&lt;br /&gt;
Das Kernmodul enthält außer Administrationsabfragen und Tabellen keinerlei Inhalte. Die Inhalte werden in Form von Modulen hinzugefügt. Dazu gibt es vorgefertigte [[Kernmodul_Shellscripte#Modulverwaltung|Installationsscripte]].&lt;br /&gt;
&lt;br /&gt;
=== Architektur von SuperX-Modulen ===&lt;br /&gt;
Die folgende Abbildung zeigt die Architektur von Modulen ab Beispiel vom HISCOB-Modul:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Ein Modul besteht auf Datenbankseite aus Abfragen, Hilfstabellen, Datentabellen und Schlüsseltabellen (sowie Prozeduren).&lt;br /&gt;
Auf Webserver-Seite können auch XSL-Stylesheets vorhanden sein.&lt;br /&gt;
| [[Bild:modularchitektur_cob.png|417x307px]]&lt;br /&gt;
|}&lt;br /&gt;
Die Abbildung zeigt, dass ein Modul eigene Komponenten nutzt, aber auch auf Teile des Kernmoduls zugreift, z.B. das Orgranigramm - dies macht SuperX zu einem integrierten System. Neben dem Organigramm sind alle anderen Komponenten des Kernmoduls natürlich betroffen, z.B. Themenbaum, Userrechte.&lt;br /&gt;
Die Ordnerstruktur eines Moduls spiegelt die Komponenten des Systems wieder. Es gibt je ein Verzeichnis für datentabellen, schluesseltabellen und hilfstabellen. &lt;br /&gt;
Die Installation eines Moduls ist in der Dokumentation des jeweiligen Moduls näher beschrieben. Module, die auf dem Kernmodul 2.1 oder höher basieren, haben einen einheitlichen Aufbau.&lt;br /&gt;
&lt;br /&gt;
=== Modulscripte im Kernmodul ===&lt;br /&gt;
Seit Version 2.1 werden die Datenbankschemata und Scripte der Module in einem einheitlichen Format zusammengestellt und in einer Datei $SUPERX_DIR/db/module/$MODULNAME/conf/$MODULNAME.xml gespeichert. Das XML-Format hat den Vorteil, dass die Scripte dynamisch für Postgres und Informix erzeugt werden können, und dass die Scripte vereinheitlicht werden. Aus dieser Datei werden die Scripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen. Die folgende Abbildung zeigt das Vorgehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Aus der xml-Datei werden die jeweiligen Scripte für die Installation, den Update, die Extraktions-, Transformations- und Ladescripte (ETL) und die Deinstallation erzeugt.&lt;br /&gt;
| [[Bild:modulscripte_erzeugen.png|417x371px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Modul-Scripte liegen als Shellscripte im Verzeichnis $SUPERX_DIR/db/bin, und sind an [[Kernmodul_Shellscripte#Modulverwaltung|anderer Stelle]] im Detail erläutert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| module_install.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_install.x sos $SOS_PFAD&lt;br /&gt;
| Installiert ein Modul, d.h. erzeugt die Tabellen, Views, Funktionen und Abfragen. Die Abfragen werden in den Themenbaum eingehängt. &lt;br /&gt;
|-&lt;br /&gt;
| module_etl.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_etl.x sos $SOS_PFAD&lt;br /&gt;
| Aktualisiert das Modul, d.h. lädt die Rohdaten, Transformiert sie, und aggregiert die Hilfstabellen. Fehler werden in eine Log-Datei geschrieben, diese kann dann per Mail an einen Admin versandt werden. Wenn das Script erfolgreich durchläuft, wird die Tabelle systeminfo aktualisiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Script wird nicht direkt als Cronjob aufgerufen, sondern von einem Shellscript, das die Umgebungsvariablen und Parameter setzt, z.B. cob_update.x.&lt;br /&gt;
|-&lt;br /&gt;
| module_drop.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_ drop.x sos $SOS_PFAD&lt;br /&gt;
| Entfernt das Modul bzw. die Tabellen, Views, Funktionen und Abfragen.&lt;br /&gt;
|-&lt;br /&gt;
| module_scripts_create.x -name- -pfad- -Datenbanksystem(optional, INFORMIX, POSTGRES)- -Versionsnr.-&lt;br /&gt;
| Erzeugt via XSL-Transformation die jeweiligen Scripte, die in den obigen Scripten aufgerufen werden, z.B. bau_install_ids.sql für das Installationsscript des Baumoduls beim Informix Dynamic Server.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den operativen Scripten erzeugt module_scripts_create.x auch html-Dateien zur Dokumentation eines Moduls in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/-Modulname-.html&lt;br /&gt;
(auch als rtf-Datei zu Einbindung in Modul-Dokumentationen) sowie zur Schnittstelle in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/rohdaten/-Modulname-_unload.html&lt;br /&gt;
Darüber hinaus werden auch DBForms-Formulare erzeugt.&lt;br /&gt;
&lt;br /&gt;
=== Installation eines Moduls: Allgemeines Vorgehen ===&lt;br /&gt;
Das Vorgehen bei der Installation eines Moduls ist standardisiert. Im folgenden eine Kurzbeschreibung, weiter unten finden Sie das Vorgehen am Beispiel des ZUL-Moduls im Detail.&lt;br /&gt;
* Entpacken Sie das Modul in $SUPERX_DIR&lt;br /&gt;
* Erweiterung der Umgebung in der Datei $SUPERX_DIR/db/bin/SQL_ENV: fügen Sie den Inhalt der jew. Beispieldatei SQL_ENV_-Modulname-.sam in der SQL_ENV an, wenn noch nicht vorhanden, und ändern Sie ggf. Email-Adressen für log- und Fehlermails.&lt;br /&gt;
* Entladen der Rohdaten; auch hier müssen vorher Umgebungsvariablen zum Vorsystem angepasst werden&amp;lt;br /&amp;gt;&lt;br /&gt;
(Datei $-Modulname-_LOAD_PFAD/-Modulname-_ENV), hier liegt ebenfalls eine *.sam-Datei vor&lt;br /&gt;
* Kopieren der Rohdaten nach -Modulpfad-/rohdaten. Neuere SuperX-Module haben dafür vorgefertigte Scripte mit dem Namen -Modulname-_copy.x (z.B. zul_copy.x)&lt;br /&gt;
* Installieren Sie das Modul mit -Modulname-_erzeugen.x, z.B. mit  zul_modul_erzeugen.x&lt;br /&gt;
* Wenn die Installation erfolgreich war, können Sie das Modul aktualisieren mit&amp;lt;br /&amp;gt;&lt;br /&gt;
-Modulname-_update.x (ggf. mit Parametern)&amp;lt;br /&amp;gt;&lt;br /&gt;
z.B. mit &lt;br /&gt;
 zul__update.x&lt;br /&gt;
d.h. die ETL-Prozesse werden gestartet (s.u.).&lt;br /&gt;
* Wenn das Modul erfolgreich aktualisiert ist, wird eine Prüfprozedur gestartet, die die Daten plausibilisiert. Fehler und Warnungen finden Sie in der Datei $-Modulname-_ERRORDAT.&lt;br /&gt;
* Starten Sie Tomcat neu. Wenn Tomcat auf einem separaten Server installiert ist, müssen Sie vorher die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml dorthin übertragen. &lt;br /&gt;
* Schritt 7 wird bei jedem SuperX-Update wiederholt. Nun muss der Entladerhythmus geplant werden, und die Cronjobs werden eingerichtet. Es gibt eine Musterdatei $SUPERX_DIR/db/module/-MODULNAME-/-MODUL-_update_cron.x.sam , benennen sie diese um nach -MODUL-_update_cron.x und fügen Sie das Script in die crontab ein. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines zum Laden ====&lt;br /&gt;
Zunächst müssen die Rohdaten aus dem Vorsystem entladen werden. &lt;br /&gt;
Für das Entladen gibt es ferner zwei Modi: Das &amp;quot;Pull&amp;quot;-Verfahren und das &amp;quot;Push&amp;quot;-Verfahren. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Pull&amp;quot;-&#039;&#039;&#039;Verfahren wird einer Benutzerkennung auf dem SuperX-Rechner Zugriffsrecht auf die SOSPOS-Datenbank gegeben, und die Daten werden via TCP/IP aus dem Basissystem entladen. Bei APP / HISinOne als Quellsystem ist &amp;quot;Pull&amp;quot; das Standardvorgehen. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Push&amp;quot;-&#039;&#039;&#039;Verfahren werden die Entladescripte auf den SOSPOS-Rechner kopiert und dort von einer Benutzerkennung auf dem SOSPOS-Rechner ausgeführt. Die Rohdaten müssen dann auf den SuperX-Rechner kopiert werden. Dieses Verfahren klappt bei Informix unter Unix problemlos, bei Entladen aus Postgres müsste das komplette SuperX-Kernmodul installiert werden. &lt;br /&gt;
Am einfachsten ist immer das &amp;quot;Pull&amp;quot;-Verfahren, das mit fast allen Quellsystemen funktioniert und wenig Konfiguration auf dem Quellsystem erfordert. Aufgrund von Sicherheitsvorkehrungen oder Netz-Infrastrukturen wählen aber viele Hochschulen das &amp;quot;Push&amp;quot;-Verfahren. Da derzeit Informix /Unix die gängigste Plattform an Hochschulen ist, ist dies auch kein Problem. &lt;br /&gt;
&lt;br /&gt;
==== Einrichtung der Entladescripte ====&lt;br /&gt;
Im Push-Verfahren btw. unter SuperX können Sie mitgelieferte Shellscripte nutzen. Das folgende Beispiel des ZUL-Moduls zeigt das Vorgehen:&lt;br /&gt;
Die Entladescripte liegen im Verzeichnis $SUPERX_DIR/db/module/zul/rohdaten und lauten je nach Systemversion: &lt;br /&gt;
 zul_unload.x&lt;br /&gt;
&lt;br /&gt;
Die Scripte laufen nur, wenn die entsprechenden Umgebungsvariablen in der Datei ZUL_ENV (im gleichen Verzeichnis, ein Muster liegt vor in ZUL_ENV.sam) korrekt gesetzt sind, benennen Sie die Musterdatei um nach ZUL_ENV und tragen die richtigen Umgebungsvariablen ein, z.B. den Pfad für $INFORMIXDIR. &lt;br /&gt;
&#039;&#039;&#039;ZUL_ENV Die Umgebung für Entladescripte aus ZUL-GX(Auszug)&#039;&#039;&#039; &lt;br /&gt;
 ##Pfad für Entladedaten:&lt;br /&gt;
 ZUL_PFAD=.; export ZUL_PFAD &lt;br /&gt;
 ##hier muss Unterverzeichnis unl existieren!&lt;br /&gt;
&lt;br /&gt;
 In der ZUL_ENV müssen außerdem folgende Umgebungsvariablen gesetzt werden (defaults sind bereits vorbelegt, aber hier und da müssen Sie sicher ran): &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Informix gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXDIR&lt;br /&gt;
| Home-Verzeichnis von Informix &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXSERVER&lt;br /&gt;
| Name des Informixservers &lt;br /&gt;
|-&lt;br /&gt;
| ONCONFIG&lt;br /&gt;
| Name der onconfig, wenn auf dem SOS-Rechner mehrere Informix-Instanzen laufen &lt;br /&gt;
|-&lt;br /&gt;
| CLIENT_LOCALE&lt;br /&gt;
| Sprachumgebung (wichtig fürs Entladen von Datumsformaten) &lt;br /&gt;
|-&lt;br /&gt;
| SERVER_LOCALE&lt;br /&gt;
| dito &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Postgres gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| PGDATESTYLE&lt;br /&gt;
| Datumsformat &amp;quot;German&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| PGPORT&lt;br /&gt;
| Port vom Postgres-Server, standardmäßig 5432 &lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname oder IP-Adresse vom Postgres-Server &lt;br /&gt;
|-&lt;br /&gt;
| PGUSER&lt;br /&gt;
| Benutzerkennung für Postgres-Server (nur Datenbank, nicht Betriebssystem) &lt;br /&gt;
|-&lt;br /&gt;
| PGPATH&lt;br /&gt;
| Installationsverzeichnis von Postgres, z.B. /usr/local/pgsql &lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur db-zul.properties-Datei mit den Zugangsparametern für SOSPOS unter Postgres &lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Pfad zur Steuerungsdatei mit den Parametern für das Logging beim Entladen, voreingestellt auf ./logging.properties. Normalerweise brauchen Sie hier nichts ändern, wenn beim Entladen Probleme auftauchen, kann man den Level von SEVERE auf INFO oder FINEST ändern, dann werden die konkreten SQLs geloggt. Aber Achtung: wenn keine Fehler mehr auftreten, müssen Sie den Level wieder auf SERVERE ändern, sonst kommen Schlüsselworte in die Logdatei zul_unload.err, die dann bei der Übernahme nach SuperX fälschlicherweise zu Fehlermeldungen führen. &lt;br /&gt;
|}&lt;br /&gt;
Unter Postgres muss für das &amp;quot;Pull&amp;quot;-Verfahren beim Entladen die Datenbankverbindung in der Datei db-zul.properties eingetragen werden (Muster für Postgres liegt bei in db-zul_pg.properties). Dazu laden Sie einmal die Datei ZUL_ENV mit den obigen Parameter, starten den SuperX-Propadmin (siehe Administrationshandbuch Kernmodul) und richten die Verbindung zum SOSPOS-Server ein. Das Kennwort wird verschlüsselt gespeichert. Danach sind die Entladescripte für Postgres ausführbar. &lt;br /&gt;
Hinweis: Anders als Informix hat Postgres hat eine eigene, vom Basissystem unabhängige Benutzerverwaltung. Daher brauchen Sie den User, den Sie zum Entladen aus Postgres nutzen, nicht auf dem SuperX- oder SOSPOS-Rechner auf Betriebssystem-Ebene einrichten. Sie können also z.B. auf dem SuperX-Rechner zum Entladen aus SOSPOS die Kennung sospos des Postgres- Rechners verwenden. Oder Sie richten in der SOSPOS -Datenbank den Benutzer SuperX ein und geben ihm Leserecht auf die Tabellen sowie das Recht, Tabellen und Stored Procedures anzulegen. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Für alle Platformen gelten folgende Variablen:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ERRORMAIL&lt;br /&gt;
| An wen solle eine Logmail verschickt werden, wenn das Entladen nicht geklappt hat? (nur Unix). &lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL&lt;br /&gt;
| An wen soll immer eine Logmail verschickt werden &lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Pfad zum ausführbaren Mailprogramm unter Unix, Vorbelegung ist &amp;quot;mail&amp;quot;, manche Unixe haben aber auch &amp;quot;mutt&amp;quot; oder &amp;quot;mailx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom ZUL-Rechner auf den SuperX-Rechner kopiert werden sollen, dann werden für das Script zul_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync und scp sind wählbar. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem SuperX-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/zul/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem SuperX-Rechner, in der Regel &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des SuperX-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Dann starten Sie das Script zul_unload.x. Wenn es gelaufen ist, müssten die Dateien im unl-Verzeichnis stehen. Prüfen Sie dann bitte, ob dort Dateien mit 0 bytes stehen. Die Logdatei heisst zul_unload.err. &lt;br /&gt;
&lt;br /&gt;
===== Entladen unter Windows =====&lt;br /&gt;
Für das Entladen unter Windows gibt es Muster-Dateien im jew. Rohdaten-Verzeichnis, z.B. $SOS_PFAD/rohdaten/sos_unload.bat. Die Einrichtung geschieht dann in [[Kernmodul_Komponentenverwaltung#Java-Client_zum_Entladen_von_Quell-Datenbanken|Java]]. Ans Ende der Datei können Sie noch schreiben:&lt;br /&gt;
date /T &amp;gt;superx.datum&lt;br /&gt;
Dann wird auch die Datumsdatei geschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Dateitransfer beim Push-Verfahren =====&lt;br /&gt;
Wenn Sie das Verzeichnis nicht gemounted haben, müssen das Verzeichnis unl, die zul_unload.err und die superx.datum dann in das Verzeichnis $ZUL_LOAD_PFAD auf dem SuperX-Rechner kopiert werden, ein Script dafür liegt ebenfalls bei (zul_copy.x). Das Entladedatum wird danach in der Textdatei $ZUL_LOAD_PFAD/superx.datum gespeichert; wenn das Script einen Fehler findet, dann wird das vorherige Datum (in der Datei superx.datum.alt) gesetzt. &lt;br /&gt;
&lt;br /&gt;
Für den Transfer der Rohdaten beim Push-Verfahren wird in SuperX die dateibasierte Schnittstelle genutzt. Unter UNIX läßt sich dieser Transfer vollends automatisieren, indem die Programme scp oder rsync auf der Basis des OpenSSH-Pakets genutzt werden. Beide setzen auf das ssh-Protokoll 2 auf und stellen somit einen verschlüsselten Dateitransfer sicher. Auch [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] ist möglich. &lt;br /&gt;
In den jeweiligen Modulen wird im Verzeichnis rohdaten eine Beispieldatei mit dem Namen -MODULNAME-_ENV.sam ausgeliefert, die Sie umbenennen können nach -MODULNAME-_ENV. Darin werden am Ende der Datei die Parameter zum Kopieren festgelegt, also die Userkennung REMOTE_USER, der Hostname REMOTE_HOST, und die Methode des Kopierens (COPY_METHOD) sowie die jeweiligen Zielpfade. Diese Umgebungsvariablen werden von dem jeweiligen Script -modulname-_copy.x benutzt. &lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Unix =====&lt;br /&gt;
Damit die Passworteingabe unter Unix entfällt, muss man wie folgt vorgehen:&lt;br /&gt;
Loggen Sie sich zunächst testweise einmal ein. Wenn Sie z.B. vom COB-Server auf den SuperX-Server kopieren wollen, loggen Sie sich als user cob auf cobhost ein mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh superx@superxhost&lt;br /&gt;
Beim ersten Mal müssen Sie die Sicherheitsabfrage mit &amp;quot;yes&amp;quot; bestätigen.&lt;br /&gt;
Erzeugen Sie auf dem Quellrechner einen öffentlichen Schlüssel mittels &lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;cob@cobhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 wobei man eine leere Passphrase vergibt. Der öffentliche Teil dieses Schlüssels (~/.ssh/id_ed25519.pub) muss auf dem Zielrechner in die Datei ~/.ssh/authorized_keys eingefügt werden, ggf. muss die Datei neu erzeugt werden.&lt;br /&gt;
Wenn z.B. auf dem COB-Server unter der Kennung cob ein Key wie folgt erzeugt wurde:&lt;br /&gt;
&lt;br /&gt;
;Beispieleintrag eines Public Keys:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-ed25519 AAAAC3N.[hier viele kryptische Zeichen]....4V cob@cobhost&lt;br /&gt;
&lt;br /&gt;
Dann wird genau diese Zeile in der Datei /home/superx/.ssh/authorized_keys angefügt (die Datei kann mehrere PublicKeys enthalten, ein Eintrag pro Absatz).&lt;br /&gt;
Achten Sie auch auf Dateirechte: Die Verzeichnisse und Dateien sollten keine Schreibrechte für Gruppen haben. Im Zweifelsfall z.B. für den user superx:&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 600 /home/superx/.ssh/authorized_keys&lt;br /&gt;
Danach sollte z.B. der Login vom cobhost als user cob mit ssh superx@superxhost ohne Passworteingabe klappen. Wenn nicht, schalten Sie das Logging mit ssh -v superx@superxhost ein. Eine Möglichkeit ist, dass die PublicKey-Authentifizierung in der Konfigurationsdatei des SSHD (normal /etc/ssh/ssh_config) abgeschaltet ist. Weitere Diagnosen liefert die Datei /var/log/messages.&lt;br /&gt;
Sie können außerdem noch einschränken, von welchem Host die obige Authentifizierung ermöglicht wird. Dazu setzen Sie den Parameter &amp;quot;from=*.uni-xy.de&amp;quot; davor, z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Einschränkung &amp;quot;from&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
in authorized_keys&lt;br /&gt;
| from=&amp;quot;*.uni-xy.de&amp;quot; ssh-rsa AAAAB3Nza…[hier viele kryptische &lt;br /&gt;
Zeichen]…pg6VkCc= cob@cobhost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Kopiermethode scp benutzen, und die obige &amp;quot;authorized_keys&amp;quot;-Metohde mit PublicKey nicht nutzen wollen, können Sie auch mit Private Keys arbeiten (siehe SSH-Doku). Dazu können sie in der *_ENV-Datei in dem Parameter SCP_OPTS den Verweis auf den private Key setzen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| SCP_OPTS in *_ENV:&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel COB_ENV&lt;br /&gt;
| SCP_OPTS=&amp;quot;-p -B -i /home/cob/.ssh/superx_key&amp;quot;&lt;br /&gt;
export SCP_OPTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Windows =====&lt;br /&gt;
Wenn Sie die ssh-Shell putty aus dem Installationspaket nutzen, haben Sie im Installationsordner auch die Anwendung &amp;quot;puttyGen.exe&amp;quot;. Wenn Sie putty als reine Executable nutzen, laden Sie die Anwendung separat herunter. [http://winscp.net/download/puttygen.exe PuttyGen]&lt;br /&gt;
*     Folgen Sie der Anleitung auf der Seite http://winscp.net/eng/docs/ui_puttygen, um den SSH2-DSA oder RSA Schlüssel zu erzeugen. Für den Schlüssel bitte kein Passwort vergeben, wenn Sie das Tool automatisiert nutzen.&lt;br /&gt;
*     Den privaten Schlüssel geben Sie in Putty bzw. Winscp im Menü &amp;quot;Session&amp;quot; im Feld &amp;quot;Private Key File&amp;quot; an.&lt;br /&gt;
*    Der Button &amp;quot;Save public key&amp;quot; ist nicht für OPENSSH unter Linux als Zielserver geeignet. Im folgenden Screenshot sehen Sie den markierten Bereich, den Sie kopieren müssen:&lt;br /&gt;
[[Bild:puttygen.png|413x402px]]&lt;br /&gt;
*     Kopieren Sie Ihren Public Key, den Sie oben mit PuttyGen erzeugt haben, zur Datei &amp;quot;authorized_keys&amp;quot; und kopieren Sie diese in das Verzeichnis ~/.ssh/&lt;br /&gt;
* Im Profil unter Connection -&amp;gt; SSH -&amp;gt; Auth -&amp;gt; Credentials geben Sie den Pfad zum privaten Schlüssel in &amp;quot;Private key file&amp;quot; an.&lt;br /&gt;
* Bei erneutem Login mit Putty oder Winscp sollte die Passwortabfrage entfallen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP (Server) =====&lt;br /&gt;
Beim Push-Verfahren wird, wenn mit scp oder rsync kopiert wird, eine Login-Shell vorausgesetzt. Wenn dies aus Sicherheitsgründen nicht gewünscht ist bzw. wg. Einsatz von Windows nicht möglich ist, können Sie auch sftp nutzen, dies wird in modernen ssh-Servern mitgeliefert und bietet ebenfalls verschlüsselten Datentransfer. Zur Einrichtung des Servers:&lt;br /&gt;
Der SSH-Dienst wird wie folgt konfiguriert (am Beispiel Ubuntu Linux 22.04 LTS) mit dem SFTP-Verzeichnis /home/sftp/-benutzername: &lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/ssh/sshd_config die Zeile auskommentieren:&lt;br /&gt;
 #Subsystem      sftp    /usr/lib/openssh/sftp-server&lt;br /&gt;
und stattdessen:&lt;br /&gt;
 Subsystem sftp internal-sftp&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
         ChrootDirectory /home/sftp/%u&lt;br /&gt;
         ForceCommand internal-sftp&lt;br /&gt;
        AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Danach starten Sie den SSH-Dienst neu:&lt;br /&gt;
 service ssh restart&lt;br /&gt;
&lt;br /&gt;
Dann legen Sie die Gruppe &amp;quot;sftponly&amp;quot; an:&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
 und dann den Unix-User an, und geben ihm die Gruppe &amp;quot;sftponly&amp;quot;. Hier ein Script:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SFTPUSERNAME=$1&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 useradd -b /home/sftp -s /bin/false -G sftponly $SFTPUSERNAME&lt;br /&gt;
 chown root:root /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 chmod 755 /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
 chown $SFTPUSERNAME:sftponly /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
&lt;br /&gt;
Danach legen Sie mit &lt;br /&gt;
 passwd $SFTPUSERNAME&lt;br /&gt;
ein Passwort fest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der User kann sich dann nicht mehr mit ssh einloggen, nur noch mit sftp, und landet beim Login in /home/$KENNUNG, in einem &amp;quot;chroot-Käfig&amp;quot;, und der User kann mit SFTP in den Ordner &amp;quot;incoming&amp;quot; schreiben. Zum Testen geben Sie ein: &lt;br /&gt;
 sftp $KENNUNG@-Host-&lt;br /&gt;
&lt;br /&gt;
Wenn beim SFTP Login die Meldung kommt:&lt;br /&gt;
 client_loop: send disconnect: Broken pipe&lt;br /&gt;
müssen Sie darauf achten dass das Home-Verzeichnis des Users nicht dem User gehört, sondern root.&lt;br /&gt;
&lt;br /&gt;
Wenn der Login klappt, können Sie nach dem [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|oben]]  beschriebenen Verfahren die Passworteingabe durch PublicKey-Authentifizierung ersetzen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP =====&lt;br /&gt;
Für das Kopieren der Rohdaten können Sie im Kopierscript &amp;quot;-modulname-_copy.x&amp;quot; auch sftp-Kommandos nutzen. Sie müssen nur in der ENV-Datei die Variable&lt;br /&gt;
 COPY_METHOD=sftp&lt;br /&gt;
setzen. Alle anderen Variablen und Mechanismen wie z.B. [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|Entfernen der Passworteingabe]] entsprechen denen von SCP / SSH (s.o.). &lt;br /&gt;
Spezielle Optionen fürs sftp können Sie in der Umgebungsvariable SFTP_OPTS setzen. Es kann z.B. sein, dass das Kopieren großer Dateien in einen Timeout läuft. Bei CSV bietet es sich an, die Dateien zu komprimieren, sie können also setzen:&lt;br /&gt;
 SFTP_OPTS=&amp;quot;-oCompression=yes&amp;quot;&lt;br /&gt;
 export SFTP_OPTS&lt;br /&gt;
Danach wiederholen Sie das kenn_copy.x&lt;br /&gt;
Dies ist nur ein Beispiel. Weitere Optionen für SFTP entnehmen Sie der manpage.&lt;br /&gt;
Das Kopieren mit sftp klappt übrigens auch unter Windows z.B. mit dem Programm [http://winscp.net/eng/docs/lang:de winscp]. Dies wird im folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP unter Windows =====&lt;br /&gt;
Unter Windows ist das Standardprogramm für SFTP die Anwendung [http://winscp.net/eng/docs/lang:de winscp]. Sie können die Passworteingabe analog zu Putty [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|entfernen]]. Danach können Sie eine Session erzeugen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp1.png|517x364px]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;quot;Private key file&amp;quot; geben Sie den private key ein, den Sie [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|oben]] erzeugt haben. Klicken Sie dann auf &amp;quot;Save session&amp;quot;, und geben Sie einen kurzen, sprechenden Namen ohne Leerzeichen oder Umlaute, z.B. &amp;quot;superx@vmmulti1&amp;quot;&lt;br /&gt;
Sie müssen nun die Verzeichnisse lokal und remote in der Winscp-Session speichern, im Menüpunkt &amp;quot;Directories&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp2.png|517x359px]]&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie auch hiernach nicht, die Session zu speichern. &lt;br /&gt;
Danach testen Sie einmal den Zugang. Wenn das klappt können Sie Winscp auch für die Kommandozeile automatisieren. Sie erzeugen zunächst eine Textdatei mit den Kommandos für Winscp, dies enthält auch die zu übertragenden Dateien. Der Aufbau der Datei ist wie folgt:&lt;br /&gt;
 open -Sessionname-&lt;br /&gt;
 # Upload the file to current working directory&lt;br /&gt;
 put -Datei-&lt;br /&gt;
 # Disconnect&lt;br /&gt;
 close&lt;br /&gt;
 # Exit WinSCP&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Die zu übertragenden Dateien sind in der Musterdatei des jew. Moduls in rohdaten/-Modulname-_sftp.txt aufgelistet, Sie müssen lediglich &lt;br /&gt;
* den &amp;quot;/&amp;quot; durch einen &amp;quot;\&amp;quot; ersetzen&lt;br /&gt;
* das Entladeprotokoll -Modulname-_unload.err und die Datumsdatei superx.datum hinzufügen&lt;br /&gt;
Hier ein Beispielscript fürs das Studierenden-Modul:&lt;br /&gt;
	open superx@vmmulti1&lt;br /&gt;
	# Change remote directory&lt;br /&gt;
	# Upload the file to current working directory&lt;br /&gt;
	put sos_unload.err&lt;br /&gt;
	put superx.datum&lt;br /&gt;
	put unl\konstanten.unl&lt;br /&gt;
	put unl\sos_studenten.unl&lt;br /&gt;
	put unl\sos_hzb.unl&lt;br /&gt;
	put unl\sos_faecher.unl&lt;br /&gt;
	put unl\sos_pord_to_stg.unl&lt;br /&gt;
	put unl\sos_pruefungenext.unl&lt;br /&gt;
	put unl\sos_pruefungen.unl&lt;br /&gt;
	put unl\sos_lab_astat_attributes.unl&lt;br /&gt;
	put unl\sos_stud_loe.unl&lt;br /&gt;
	put unl\sos_faecher_ext.unl&lt;br /&gt;
	put unl\sos_faecher_kontrolle.unl&lt;br /&gt;
	put unl\sos_pruefungen_kontrolle.unl&lt;br /&gt;
	put unl\sos_anschri.unl&lt;br /&gt;
	put unl\sos_parstg.unl&lt;br /&gt;
	put unl\sos_hsnr.unl&lt;br /&gt;
	put unl\semester.unl&lt;br /&gt;
	put unl\cif.unl&lt;br /&gt;
	put unl\cifx.unl&lt;br /&gt;
	put unl\k_pvers.unl&lt;br /&gt;
	put unl\k_stg.unl&lt;br /&gt;
	put unl\k_stgext.unl&lt;br /&gt;
	put unl\k_abstgv.unl&lt;br /&gt;
	put unl\sos_pord.unl&lt;br /&gt;
	put unl\sos_dipl.unl&lt;br /&gt;
	put unl\sos_minder.unl&lt;br /&gt;
	put unl\sos_stud_d.unl&lt;br /&gt;
	put unl\sos_pords.unl&lt;br /&gt;
	put unl\sos_porg.unl&lt;br /&gt;
	put unl\sos_labzuord.unl&lt;br /&gt;
	put unl\sos_pnrzuord.unl&lt;br /&gt;
	put unl\sos_gewichtungsvariante.unl&lt;br /&gt;
	put unl\sos_gewichtungregel_filter.unl&lt;br /&gt;
	put unl\sos_gewichtungregel.unl&lt;br /&gt;
	put unl\personattribute.unl&lt;br /&gt;
	put unl\personattributetype.unl&lt;br /&gt;
	put unl\personattribute_value_list.unl&lt;br /&gt;
	put unl\stu_update_prot.unl&lt;br /&gt;
	put unl\exa_update_prot.unl&lt;br /&gt;
	put unl\sos_accredited_ects.unl&lt;br /&gt;
	put unl\sos_pord_orgeinheit.unl&lt;br /&gt;
	# Disconnect&lt;br /&gt;
	close&lt;br /&gt;
	# Exit WinSCP&lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
Die Datei hat z.B. den Namen winscp_example_script.txt. Dann können Sie das Script aufrufen mit dem DOS-Kommando:&lt;br /&gt;
 winscp /script=-Pfad zu-\winscp_example_script.txt&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot wie das dann aussieht:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp3.png|609x337px]]&lt;br /&gt;
&lt;br /&gt;
Das DOS-Kommando läßt sich dann über die Windows-Taskverwaltung automatisieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Java-Client zum Entladen von Quell-Datenbanken =====&lt;br /&gt;
Zum Entladen aus dem operativen Vorsystem wird unter Informix dbaccess genutzt. Unter Postgres wird generell der SuperX-JAVA-Client zum Entladen genutzt, denn SuperX benötigt ein spezielles, an Informix angepasstes [[Kernmodul_Komponentenverwaltung#Format_der_Unload_Dateien_CSV|CSV-Format]], das sich mit Bordmitteln von Postgres (copy-Befehl) nicht erzeugen lässt. Es kann aber auch sinnvoll sein, aus der Informix-Datenbank mit SuperX-JAVA-Client zu entladen, z.B. wenn Sie kein UNIX-dbaccess auf dem Vorsystem installiert haben. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie das jew. operative Vorsystem im PUSH-Verfahren entladen wollen, d.h. die Rohdaten werden auf dem Vorsystem entladen und auf den SuperX-Rechner kopiert, dann müssen Sie spezielle Vorkehrungen treffen. SuperX nutzt generell zum Entladen eigene Java-Klassen. Beim Entladen im PULL-Verfahren sind diese Klassen vorhanden, denn die Entladeroutine läuft auf dem SuperX Rechner. Wenn Sie aber PUSH nutzen wollen, werden die SuperX-Java-Klassen auf dem Liefersystem benötigt, und die Entladeroutine muss konfiguriert sein. Im Folgenden nutzen wir das Beispiel &amp;quot;Entladen im Push-Verfahren aus SVA-GX unter Postgres&amp;quot;. Gehen Sie dazu wie folgt vor:&lt;br /&gt;
* Kopieren Sie die Dateien &lt;br /&gt;
** superx*jar&lt;br /&gt;
** postgresql-*.jar&lt;br /&gt;
** jfor-0.7.2rc1.jar&lt;br /&gt;
* vom SuperX-Rechner im Verzeichnis $SUPERX_DIR/tomcat/webapps/superx/WEB-INF/lib auf den Quellrechner in ein Unterverzeichnis lib unter rohdaten (z.B. /home/sva/superx/rohdaten/lib). In rohdaten liegt die bisherige Entladeroutine (z.B. sva_unload.x). &lt;br /&gt;
* Kopieren Sie die *_ENV.sam -Datei nach *_ENV, also hier SVA_ENV.sam nach SVA_ENV&lt;br /&gt;
* Fügen Sie dann folgenden Passus in die Umgebungs-Datei der Entladeroutine, hier also SVA_ENV:&lt;br /&gt;
 #Pfad zu den SuperX-Java-Libraries&lt;br /&gt;
 #Der JDBC_CLASSPATH enthält alles, was der jdbc-Client in superx für den Datenbankzugriff braucht.&lt;br /&gt;
 #jfor*.jar, postgresql*.jar&lt;br /&gt;
 JDBC_CLASSPATH=&amp;quot;$SVA_LOAD_PFAD/lib/superx5.0.jar:$SVA_LOAD_PFAD/lib/postgresql-42.2.19.jar:$SVA_LOAD_PFAD/lib/jfor-0.7.2rc1.jar&amp;quot;&lt;br /&gt;
 export JDBC_CLASSPATH&lt;br /&gt;
&lt;br /&gt;
Wenn dann noch die Variablen [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] und LOGGER_PROPERTIES korrekt gesetzt sind, kann die Entladeroutine bei SX_CLIENT=jdbc (Wenn Sie unter Windows entladen, oder Informix ohne dbaccess entladen wollen) oder SX_CLIENT=psql (wenn Sie Postgres unter UNIX nutzen) mit Java entladen.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Entladescript ausführen:&lt;br /&gt;
 sva_unload.x&lt;br /&gt;
Die Logdatei lautet sva_unload.err&lt;br /&gt;
&lt;br /&gt;
Zum Kopieren der Rohdaten zum SuperX-Server passen Sie folgende Variablen an:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom SVA-Rechner auf den BI-Rechner kopiert werden sollen, dann werden für das Script sva_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync, [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] und scp sind wählbar [Achtung: diese müssen dann betriebssystemseitig installiert sein]. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem BI-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/sva/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem BI-Rechner, in der Regel &amp;quot;tomcat&amp;quot; oder &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des BI-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Danach starten Sie &lt;br /&gt;
 sva_copy.x&lt;br /&gt;
Die Logdatei lautet sva_copy.err&lt;br /&gt;
&lt;br /&gt;
Weitere Entladeparameter werden in den modulspezifischen Administrationshandbüchern beschrieben.&lt;br /&gt;
{{Hinweis|Bei neuen SuperX-Versionen reicht es in der Regel, die modulspez. Dateien auszutauschen, also hier sva_unload.* etc.}}&lt;br /&gt;
&lt;br /&gt;
== Update eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Wenn das Entladen aus dem Vorsystem geklappt hat (sofern es ein Vorsystem gibt), können Sie die Daten laden. Zum Update bzw. zum Laden der Rohdaten gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname- und führen das Script aus:&lt;br /&gt;
-Modulname-_update.x&lt;br /&gt;
Die Logdatei lautet L_-Modulname-_UPDATE.log, im Mandantenfähigen Betrieb &amp;quot;L_-Modulname-_UPDATE-MANDANTID-.log&amp;quot;.&lt;br /&gt;
Für die Aufnahme der Laderoutine in die crontab gibt es im gleichen Verzeichnis Musterscripte nach dem Namensmuster:&lt;br /&gt;
-Modulname-_update_cron.x&lt;br /&gt;
Je nach Push/Pull-Szenario können Sie auch den Unload darin starten oder nicht.&lt;br /&gt;
&lt;br /&gt;
=== Modulupdate in mandantenfähigen Installationen ===&lt;br /&gt;
Der Modulupdate in mandantenfähigen Installation findet in einer SuperX-Installation statt, allerdings werden die einzelnen Scripte mit unterschiedlichen Umgebungsvariablen, wie sie in SQL_ENV.-MANDANTID- definiert ist, z.B. SQL_ENV.FHRO.&lt;br /&gt;
In der SQL_ENV.-MANDANTID- werden unterschiedliche Pfade für den jeweiligen *_LOAD_PFAD gesetzt, wobei in der Regel die Mandandid ein Unterverzeichnis vom &amp;quot;normalen&amp;quot; LOAD_PFAD ist. So ist z.B. beim COB-Modul folgender Pfad anzusetzen:&lt;br /&gt;
Normale SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten&lt;br /&gt;
Mandantenfähige SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten/FHRO&lt;br /&gt;
Unterhalb von FHRO befindet sich noch einmal die Entladeroutine sowie das Unterverzeichnis unl mit den Rohdaten. Dieses Verzeichnis FHRO kann der Einfahheit halber auch ein symbolischer Link auf den gemounteten COB-Rechner sein.&lt;br /&gt;
Durch Setzen der Mandantennummer in der Umgebungsvariable MANDANTID in der jeweiligen SQL_ENV des Mandanten werden die ETL-Scripte anders ausgeführt: Die Logdateien werden jeweils mit der Mandantennummer versehen (z.B. L_cob_updateFHRO.log), damit die Übersicht nicht verloren geht und der gleichzeitige Update mehrerer Mandanten in eine rsuperX-Installation möglich ist.&lt;br /&gt;
Außerdem können weitreichende Steuerungsmechanismen im Modulupdate eingesetzt werden: Nach jedem ETL-Schritt können optional mandantenspezifische Scripte aufgerufen werden. Diese müssen folgende Namenskonvention einhalten:&lt;br /&gt;
 -Scriptname-_-MANDANTID-.sql&lt;br /&gt;
Also für eine hochschulspezifische Transformation im COB-Modul des Mandanten FHRO wird eine Datei namens&lt;br /&gt;
 cob_trans_FHRO.sql &lt;br /&gt;
mit entsprechenden SQL-Anweisungen angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Format der Unload Dateien CSV ===&lt;br /&gt;
Generell gilt das Prinzip, daß Daten vom Vorsystem in CSV entladen werden, und dann in sog. Ladetabellen hochgeladen werden. Da CSV je nach DBMS unterschiedlich implementiert wird, hier eine kurze Beschreibung des Formats, das im wesentlichen den Vorgaben von Informix LOAD entspricht:&lt;br /&gt;
* Zeichenformat: UNIX LATIN1 oder UTF-8&lt;br /&gt;
* Feldtrenner: ^ &lt;br /&gt;
* Satztrenner: Feldtrenner + UNIX NEWLINE&lt;br /&gt;
* Zeilenschaltung: Umbrüche innerhalb von Textfeldern sind als \ + NEWLINE codiert&lt;br /&gt;
* Feldtrenner, die im Textfeld vorkommen, werden mit &amp;quot;\&amp;quot; maskiert. Ebenso das Zeichen &amp;quot;\&amp;quot; selbst&lt;br /&gt;
* Die Datumsformate sind bei Datumsfeldern immer im deutschen Format (DD.MM.YYYY) vorgesehen&lt;br /&gt;
* Boolean-Werte werden durch &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; codiert&lt;br /&gt;
* Der Dezimaltrenner ist &amp;quot;.&amp;quot;, kein 1000-er Punkt bei Zahlen. &lt;br /&gt;
* Leerstrings und Leerzeichen werden als &amp;quot; &amp;quot; (Leerzeichen) exportiert.&lt;br /&gt;
&lt;br /&gt;
== Upgrade eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Zum Upgrade bzw. zum Zurücksetzen des Moduls auf den Auslieferungszustand entpacken Sie das Paket in $SUPERX_DIR und gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname-/upgrade und führen das Script aus:&lt;br /&gt;
-Modulname-_upgrade.x&lt;br /&gt;
Ausnahme: beim Kernmodul gibt es i.d.R. ein spezielles [[Kern_Installation_Upgrade#Standardvorgehen_beim_Upgrade|Upgrade Script]].&lt;br /&gt;
&lt;br /&gt;
Die Logdatei lautet upgrade.log, im Mandantenfähigen Betrieb &amp;quot;upgrade-MANDANTID-.log&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen separaten Tomcat-Rechner betreiben, müssen Sie das Paket dort ebenfalls entpacken, und vom Datenbankserver die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml an die gleiche Stelle auf den Tomcat Rechner kopieren. Ein nochmaliges Ausführen des Upgrade Scriptes ist nicht nötig, weil dies nur die Datenbank betrifft.&lt;br /&gt;
&lt;br /&gt;
== Hochschulspezifische Anpassung eines Moduls ==&lt;br /&gt;
=== Dateibasierte hochschulspezifische Anpassung ===&lt;br /&gt;
Nach der Installation bzw. beim Upgrade können Sie hochschuleigene SQL Scripte ausführen lassen. Erzeugen Sie dazu eine Datei &lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/customize.sql &lt;br /&gt;
bei Mandantenbetrieb&lt;br /&gt;
  $SUPERX_DIR/db/module/-Modulname-/conf/customize-MANDANTID-.sql &lt;br /&gt;
und füllen Sie diese mit einem beliebigen Inhalt. Das Script wird beim Upgrade des Moduls automatisch am Ende ausgeführt.&lt;br /&gt;
=== Datenbankbasierte hochschulspezifische Laderegeln ===&lt;br /&gt;
Eine Laderoutine gliedert sich in die Schritte&lt;br /&gt;
#Unload: Entladen der CSV Dateien aus dem jew. Vorsystem&lt;br /&gt;
#Load: Upload der CSV Dateien&lt;br /&gt;
#Trans: Transformation der Daten&lt;br /&gt;
#Aggr: Aggregation der Daten&lt;br /&gt;
#Test: Test der Daten&lt;br /&gt;
#System: Standdatum bei Erfolg aktualisieren&lt;br /&gt;
Es ist möglich über sog. &amp;quot;Preparation&amp;quot;- oder &amp;quot;Finalize&amp;quot;-[[Kernmodul_Shellscripte#Hochschulspezifische_Transformationen_im_ETL-Prozess|Scripte]] die Laderoutine am Ende von LOAD bzw. TRANS anzupassen. Dieses Verfahren ist weiterhin möglich, ist aber bzgl. Clustering und Schreibzugriff recht unflexibel.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich im Browser hochschulspezifische Scripte am Ende des jeweiligen Schrittes einer Laderoutine anzulegen. Dies funktioniert so: Die Laderoutine führt zunächst den allgemeinen, von uns vorgegebenen Ladeschritt aus. Wenn dann eine Repository-Variable mit einem gewissen Namensschema existiert, wird sie ausgeführt. Das Namensschema lautet &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Kürzel der Komponente&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;_CUSTOM&lt;br /&gt;
&amp;lt;/source&amp;gt;. &lt;br /&gt;
* Bei Hauptladeroutinen ist dies&lt;br /&gt;
*# Laden: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_load_CUSTOM, z. B. sos_load_CUSTOM&lt;br /&gt;
*# Transformation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_trans_CUSTOM, z. B. sos_trans_CUSTOM&lt;br /&gt;
*# Aggregation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_aggr_CUSTOM, z. B. sos_aggr_CUSTOM&lt;br /&gt;
* Bei Unterladeroutinen ist dies &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_&#039;&#039;&#039;ID des Ladeschritts&#039;&#039;&#039;_CUSTOM, also z. B. cob_trans_fin_busa_CUSTOM für die Unterladeroutine &amp;quot;Lade Buchungen aus FIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um eine Variable neu einzurichten:&lt;br /&gt;
* Gehen Sie in den BI-Standardberichten auf Administration/Hochschul-Repository.&lt;br /&gt;
* Wählen Sie das jeweilige Sachgebiet und schicken Sie das Formular ab.&lt;br /&gt;
* Klicken Sie bei einer Beispielzeile auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;.&lt;br /&gt;
* Im neuen Fenster klicken Sie oben ganz rechts auf das Symbol &#039;&#039;&#039;Datensatz kopieren&#039;&#039;&#039;.&lt;br /&gt;
* Definieren Sie die Variable z. B.&lt;br /&gt;
** als Variablenname die ID z. B.: fin_load_CUSTOM&lt;br /&gt;
** Art der Variable: ein für Sie sprechender Schlüssel mit Modulkürzel, z. B. &amp;quot;fin_Laderegel&amp;quot;&lt;br /&gt;
** als Inhalt der Variable die gewünschten Befehle, z. B. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update fin_buch_neu set ch110_institut=buchungsab_fb where length(buchungsab_fb)=5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** aktiv=1&lt;br /&gt;
** gültig seit 1.1.1900&lt;br /&gt;
** gültig bis 1.1.3000&lt;br /&gt;
* Klicken Sie oben rechts auf das Häkchen-Symbol für &#039;&#039;&#039;Datensatz einfügen&#039;&#039;&#039;.&lt;br /&gt;
* Schließen Sie das Fenster.&lt;br /&gt;
&lt;br /&gt;
Analog können Sie auch die [[Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung|customize]]-Regeln&amp;quot; ins Repository verlagern. Hier heißt die Variable z.B. fin_install_CUSTOM.&lt;br /&gt;
&lt;br /&gt;
== Entfernen eines Moduls ==&lt;br /&gt;
Wenn Sie ein Modul nicht mehr benötigen, starten Sie das Script&amp;lt;br /&amp;gt;&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/-Modulname-_modul_entfernen.x.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses Script löscht alle Tabellen, Prozeduren und Abfragen aus der Datenbank, und löscht auch die Einträge im Themenbaum. Danach können Sie den Pfad $SUPERX_DIR/db/module/-Modulname-löschen.&lt;br /&gt;
Wenn Sie nur die Inhalte der Daten- und Hilfstabellen des Moduls löschen wollen (z.B. aus Datenschutzgründen), ohne das ganze Modul zu deinstallieren, können Sie dies mit folgendem Befehl tun:&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_pg.sql (für Postgres)&amp;lt;br /&amp;gt;&lt;br /&gt;
bzw.&amp;lt;br /&amp;gt;&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_ids.sql (für Informix)&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16371</id>
		<title>Kernmodul Komponentenverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16371"/>
		<updated>2026-07-13T06:51:43Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Komponentenverwaltung im Kernmodul kann je nach Aufgabe über die Browseroberfläche oder über Shell-Skripte erfolgen.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden die Installation, Deinstallation, Aktualisierung und das Upgrade von Modulen überwiegend über Skripte in der Shell durchgeführt. Ab Kernmodul 6.0 steht zusätzlich eine Komponentenverwaltung über die Browseroberfläche zur Verfügung. Diese Browseroberfläche wird im Folgenden als SuperX ETL Manager beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager ist vor allem für die Ausführung und Überwachung von ETL-Prozessen sowie für Modul-Upgrades vorgesehen. Die Installation und Deinstallation von Modulen stehen dort bisher nicht zur Verfügung und werden weiterhin über die Shell-Skripte durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ist daher in zwei Bereiche gegliedert: Zuerst wird die Nutzung des SuperX ETL Managers beschrieben. Anschließend folgt die Dokumentation zur Installation und Verwaltung von Modulen mit Skripten.&lt;br /&gt;
&lt;br /&gt;
= Komponentenverwaltung im Browser: SuperX ETL Manager =&lt;br /&gt;
Der SuperX ETL Manager dient dazu, ETL-Prozesse der installierten SuperX-Module über die Weboberfläche auszuführen und zu überwachen. Er bietet eine zentrale Übersicht über installierte Module, verfügbare Aktionen, Versionsinformationen, Datenquellen, den aktuellen Lauf sowie technische Zusatzinformationen für die Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der Schwerpunkt der Oberfläche liegt auf dem täglichen Betrieb: Anwenderinnen und Anwender können Laderoutinen starten, den aktuellen Stand eines Laufs verfolgen und bei Bedarf die Log-Ausgabe einsehen. Technische Detail- und Diagnoseinformationen stehen ebenfalls zur Verfügung, sind aber vor allem für Administratorinnen und Administratoren oder den Support gedacht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Uebersicht.png|Gesamtübersicht des SuperX ETL Managers mit Modulübersicht, Filterbereich, Aktionsbuttons und aktuellem Lauf.]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Oberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche besteht im Wesentlichen aus folgenden Bereichen:&lt;br /&gt;
&lt;br /&gt;
* Filterbereich&lt;br /&gt;
* Modulübersicht&lt;br /&gt;
* Aktionsbuttons pro Modul&lt;br /&gt;
* Bereich „Aktueller Lauf“&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
* Details-Bereich&lt;br /&gt;
* Diagnose-Bereich&lt;br /&gt;
&lt;br /&gt;
Über den Filterbereich kann die angezeigte Modulliste eingeschränkt werden. Die Modulübersicht zeigt die wichtigsten Informationen zu den vorhandenen Modulen. Über die Aktionsbuttons können ETL-Prozesse gestartet werden. Der Bereich „Aktueller Lauf“ zeigt den zuletzt gestarteten oder aktuell laufenden Prozess an.&lt;br /&gt;
&lt;br /&gt;
Die Bereiche „Details“ und „Diagnose“ liefern zusätzliche technische Informationen. Sie sind hilfreich für Supportfälle, aber für die normale Bedienung nicht zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Modulübersicht ==&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt die installierten bzw. erkannten Module mit ihren wichtigsten Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Spalte&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Modul&lt;br /&gt;
| Zeigt den Namen und das technische Kürzel des Moduls, zum Beispiel „Administration“ mit dem Kürzel „kern“ oder „Kennzahlen“ mit dem Kürzel „kenn“.&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Zeigt, ob das Modul installiert ist.&lt;br /&gt;
|-&lt;br /&gt;
| Versionen&lt;br /&gt;
| Zeigt die installierte Version und die verfügbare Version des Moduls.&lt;br /&gt;
|-&lt;br /&gt;
| Letztes Update&lt;br /&gt;
| Zeigt den Zeitpunkt des letzten bekannten Updates.&lt;br /&gt;
|-&lt;br /&gt;
| Datenquelle&lt;br /&gt;
| Zeigt, aus welcher Datenquelle das Modul seine Daten bezieht oder auf welcher Datenbasis der ETL-Prozess arbeitet.&lt;br /&gt;
|-&lt;br /&gt;
| DB-Verbindung&lt;br /&gt;
| Zeigt, ob die Verbindung zur Datenbank bzw. Datenquelle aktuell erreichbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| Aktionen&lt;br /&gt;
| Zeigt die verfügbaren Aktionen für das jeweilige Modul.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Versionen ===&lt;br /&gt;
&lt;br /&gt;
In der Spalte „Versionen“ werden zwei Werte angezeigt:&lt;br /&gt;
&lt;br /&gt;
* installierte Version&lt;br /&gt;
* verfügbare Version&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der aktuell in der Datenbank installiert ist. Die verfügbare Version beschreibt den ausgelieferten Stand des Moduls, der in der Installation vorliegt.&lt;br /&gt;
&lt;br /&gt;
Wenn die verfügbare Version höher ist als die installierte Version, sollte in der Regel ein Upgrade des Moduls durchgeführt werden. Dadurch werden die Datenstrukturen des Moduls auf den ausgelieferten Stand aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Datenquelle ===&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle gibt an, aus welchem System ein Modul seine Daten bezieht oder auf welcher Datenbasis es arbeitet.&lt;br /&gt;
&lt;br /&gt;
SuperX ist ein Data Warehouse. Viele Module übernehmen Daten aus externen vorsystemen. Beispiele für solche Datenquellen sind:&lt;br /&gt;
&lt;br /&gt;
* cob für Kostenrechnung&lt;br /&gt;
* mbs für Finanzrechnung, Inventar oder Gebäude/Räume/Flächen&lt;br /&gt;
* sva für Personal- und Stelleninformationen&lt;br /&gt;
* hisinone bei entsprechend angebundenen Modulen&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es Module, die auf bereits in SuperX vorhandene Daten zurückgreifen. In solchen Fällen wird als Datenquelle „SuperX“ angezeigt. Das betrifft vor allem Module, die modulübergreifend, auswertungsorientiert oder spezialisiert auf vorhandene SuperX-Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
Beispiele hierfür können sein:&lt;br /&gt;
&lt;br /&gt;
* kenn für Kennzahlen&lt;br /&gt;
* man für Managementberichte&lt;br /&gt;
* erfolg für Studienverlauf bzw. Erfolgsbetrachtungen&lt;br /&gt;
* gang für Studiengänge&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle „SuperX“ bedeutet also nicht, dass keine Daten verarbeitet werden. Sie zeigt an, dass die Verarbeitung auf Daten basiert, die bereits im SuperX-System vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Aktionen ausführen ==&lt;br /&gt;
&lt;br /&gt;
Die verfügbaren Aktionen hängen vom jeweiligen Modul ab. Nicht jedes Modul unterstützt alle Aktionen. Wenn eine Aktion nicht verfügbar ist, wird der entsprechende Button nicht angezeigt oder ist nicht aktiv.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktionsbuttons.png|Modulzeile mit den Aktionsbuttons Unload, Update, Unload &amp;amp; Update und Upgrade.]]&lt;br /&gt;
&lt;br /&gt;
=== Unload ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ entlädt Daten aus einem angebundenen Vorsystem, sofern für das Modul ein Vorsystem angebunden ist.&lt;br /&gt;
&lt;br /&gt;
Der Unload dient dazu, Daten aus der jeweiligen Datenquelle bereitzustellen, damit sie anschließend in SuperX verarbeitet werden können. Je nach Modul und Einrichtung kann der Unload auch dazu dienen, Daten für eine weitere Verarbeitung oder Übertragung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Update“ lädt vorhandene Rohdaten in SuperX ein und führt die Hauptladeroutine des Moduls aus.&lt;br /&gt;
&lt;br /&gt;
Dies ist in vielen Fällen die wichtigste Aktion für den täglichen Betrieb. Beim Update werden die vorhandenen Rohdaten verarbeitet und die zugehörigen SuperX-Tabellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Unload &amp;amp; Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload &amp;amp; Update“ führt zuerst den Unload und anschließend das Update aus.&lt;br /&gt;
&lt;br /&gt;
Diese Aktion ist sinnvoll, wenn neue Daten aus einem angebundenen Vorsystem entladen und direkt anschließend in SuperX verarbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Upgrade“ führt eine Modulaktualisierung durch. Dabei werden die Datenstrukturen des Moduls auf den ausgelieferten Stand gebracht.&lt;br /&gt;
&lt;br /&gt;
Ein Upgrade sollte ausgeführt werden, wenn eine neue verfügbare Version angezeigt wird oder wenn dies im Rahmen eines Modulupdates erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
== Sonderfall Kennzahlen-Modul ==&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ ist die Verarbeitung etwas anders als bei typischen Modulen mit externem Vorsystem.&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist hier in der Regel „SuperX“. Das bedeutet, dass die Kennzahlen nicht primär aus einem externen Fremdsystem entladen werden. Stattdessen basiert die Verarbeitung auf Daten, die bereits in SuperX vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Für den täglichen Betrieb ist beim Kennzahlen-Modul daher häufig vor allem die Aktion „Update“ relevant. Dabei werden die Kennzahlen auf Basis der vorhandenen SuperX-Daten neu berechnet bzw. aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ kann beim Kennzahlen-Modul eine andere Bedeutung haben als bei klassischen Vorsystem-Modulen. Sie kann dazu dienen, Kennzahlen für ein anderes System bereitzustellen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* für ein hochschulübergreifendes SuperX&lt;br /&gt;
* für Vergleichssysteme&lt;br /&gt;
* für landesweite Auswertungen oder Berichtssysteme&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Aktion „Unload &amp;amp; Update“ ist beim Kennzahlen-Modul daher nicht immer die wichtigste Aktion. In vielen Installationen wird das Update gezielt über die Oberfläche ausgeführt, während Export- oder Übertragungsprozesse über automatische Abläufe wie Cronjobs gesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Lauf ==&lt;br /&gt;
&lt;br /&gt;
Der Bereich „Aktueller Lauf“ zeigt Informationen zum zuletzt gestarteten oder aktuell laufenden ETL-Prozess.&lt;br /&gt;
&lt;br /&gt;
Typische Informationen sind:&lt;br /&gt;
&lt;br /&gt;
* JobExecutionId&lt;br /&gt;
* Name des gestarteten Jobs&lt;br /&gt;
* Status&lt;br /&gt;
* Fortschritt&lt;br /&gt;
* Anzahl der ausgeführten Schritte&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktueller_Lauf.png|Bereich „Aktueller Lauf“ mit JobExecutionId, Status, Fortschritt und Log-Ausgabe.]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
Der Status zeigt den aktuellen Zustand des Laufs. Häufige Statuswerte sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| STARTING&lt;br /&gt;
| Der Lauf wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
| STARTED&lt;br /&gt;
| Der Lauf wurde gestartet und wird ausgeführt.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETED&lt;br /&gt;
| Der Lauf wurde erfolgreich abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| FAILED&lt;br /&gt;
| Der Lauf ist mit einem Fehler abgebrochen.&lt;br /&gt;
|-&lt;br /&gt;
| STOPPED&lt;br /&gt;
| Der Lauf wurde gestoppt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fortschritt ===&lt;br /&gt;
&lt;br /&gt;
Der Fortschritt zeigt, wie viele Prozessschritte bereits abgearbeitet wurden. Er ist als technischer bzw. prozessbezogener Fortschritt zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Fortschrittswert ist keine genaue Zeitprognose.&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann schnell auf eine hohe Prozentzahl springen und dort längere Zeit stehen bleiben, wenn ein einzelner Verarbeitungsschritt besonders lange dauert. Umgekehrt können viele kleine Schritte sehr schnell nacheinander abgeschlossen werden. Die Prozentanzeige beschreibt daher den Abarbeitungsstand der Prozessschritte, nicht die tatsächlich vergangene oder verbleibende Zeit.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann bereits 80 % anzeigen, obwohl noch ein größerer Verarbeitungsschritt aussteht. Ebenso kann ein Lauf am Anfang längere Zeit bei einer niedrigen Prozentzahl stehen bleiben, wenn ein früher Prozessschritt besonders umfangreich ist.&lt;br /&gt;
&lt;br /&gt;
== Log-Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe zeigt technische Informationen zum ausgeführten ETL-Prozess. Sie kann helfen, den Ablauf nachzuvollziehen und bei Problemen erste Hinweise zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe ist vor allem für Supportfälle hilfreich. Für eine tiefergehende Fehleranalyse sind in der Regel administrative Kenntnisse erforderlich. Je nach Fehler müssen zusätzlich Serverlogs, Datenbankinhalte, Moduldateien oder Systemkonfigurationen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Log-Ausgabe nicht sofort erscheint, kann sie über „Log laden“ erneut abgefragt werden. Gerade bei umfangreichen Läufen kann es vorkommen, dass die Log-Ausgabe erst kurze Zeit nach Abschluss vollständig verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
== Typische Nutzungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Bereits vorhandene Rohdaten verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Rohdaten bereits vorhanden sind und lediglich erneut verarbeitet werden sollen, wird in der Regel die Aktion „Update“ verwendet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Rohdaten liegen bereits im System vor&lt;br /&gt;
* Berechnungen oder Aggregationen sollen neu ausgeführt werden&lt;br /&gt;
* die SuperX-Tabellen des Moduls sollen aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Daten aus einem Vorsystem übernehmen und verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn neue Daten aus einem externen Vorsystem übernommen und anschließend verarbeitet werden sollen, kann die Aktion „Unload &amp;amp; Update“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden zunächst die Daten aus dem Vorsystem entladen. Anschließend werden die Daten durch das Update in SuperX verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload &amp;amp; Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nur Daten aus einem Vorsystem entladen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten aus einem Vorsystem entladen werden sollen, ohne direkt anschließend die Laderoutine auszuführen, kann die Aktion „Unload“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul auf den ausgelieferten Stand aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue verfügbare Version angezeigt wird, sollte ein Upgrade geprüft bzw. durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen innerhalb von SuperX aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ werden die Daten in der Regel aus SuperX selbst bezogen. Wenn die Kennzahlen neu berechnet oder aktualisiert werden sollen, ist häufig die Aktion „Update“ die passende Aktion.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen für ein anderes System bereitstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Kennzahlen für ein anderes System bereitgestellt werden sollen, kann beim Kennzahlen-Modul die Aktion „Unload“ relevant sein.&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel für hochschulübergreifende Auswertungen, Vergleichssysteme oder landesweite Berichtssysteme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Nutzung ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung des ETL Managers sollten folgende Punkte beachtet werden:&lt;br /&gt;
&lt;br /&gt;
* Ein laufender Prozess sollte nicht unnötig mehrfach parallel gestartet werden.&lt;br /&gt;
* Nach einem Lauf kann die Modulübersicht über „Aktualisieren“ neu geladen werden.&lt;br /&gt;
* Die Prozentanzeige ist kein Zeitindikator, sondern beschreibt den Fortschritt der Prozessschritte.&lt;br /&gt;
* Bei Fehlern sollte zuerst der Status und anschließend die Log-Ausgabe geprüft werden.&lt;br /&gt;
* Für tiefergehende Fehleranalysen sollten Administratorinnen und Administratoren oder technische Ansprechpartner einbezogen werden.&lt;br /&gt;
* Bei neuen verfügbaren Modulversionen sollte geprüft werden, ob ein Upgrade auszuführen ist.&lt;br /&gt;
&lt;br /&gt;
== Details-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Über den Button „Details“ können zusätzliche technische Informationen zu einem Modul angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Der Details-Bereich ist vor allem für fortgeschrittene Benutzerinnen und Benutzer, Administratorinnen und Administratoren oder den Support gedacht. Er kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* technische Modulkennung&lt;br /&gt;
* Systeminfo-ID&lt;br /&gt;
* technische Jobnamen&lt;br /&gt;
* verfügbare Jobs&lt;br /&gt;
* Rohdaten der Schnittstelle&lt;br /&gt;
* zusätzliche technische Moduldetails&lt;br /&gt;
&lt;br /&gt;
Für den normalen Betrieb ist der Details-Bereich meist nicht erforderlich. Er ist vor allem dann hilfreich, wenn bei Rückfragen oder Supportfällen genaue technische Informationen benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diagnose-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist eine technische Hilfsfunktion zur Prüfung der ETL-Manager-Installation. Er ist global angeordnet und nicht auf ein einzelnes Modul beschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Diagnose führt keine Reparaturen automatisch aus. Sie zeigt technische Informationen, mögliche Auffälligkeiten und Hinweise an. Zusätzlich können SQL- oder Shell-Hinweise angezeigt werden, die bei Bedarf von Administratorinnen und Administratoren kopiert und manuell ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* Erreichbarkeit der REST-Schnittstellen&lt;br /&gt;
* Webapp-, Tomcat- und Java-Informationen&lt;br /&gt;
* Pfade und Dateisysteminformationen&lt;br /&gt;
* Festplattenspeicher&lt;br /&gt;
* Datenbankinformationen&lt;br /&gt;
* Prüfung der Log-Tabelle&lt;br /&gt;
* Versionsquellen&lt;br /&gt;
* bekannte Fehlerbilder&lt;br /&gt;
* kopierbare SQL- und Shell-Hinweise&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist vor allem für Administratorinnen und Administratoren oder technische Ansprechpartner gedacht. Für normale Anwenderinnen und Anwender ist er in der Regel nur dann relevant, wenn ein Fehler auftritt oder technische Informationen weitergegeben werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Administratorhinweise ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält ergänzende technische Hinweise. Er richtet sich vor allem an Administratorinnen und Administratoren sowie an den technischen Support.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft der Versionsinformationen ===&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche zeigt eine installierte und eine verfügbare Version an.&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der in der Datenbank installiert ist. Falls die REST-Schnittstelle keinen Wert liefert, kann die Version aus der Tabelle &amp;lt;code&amp;gt;db_version&amp;lt;/code&amp;gt; gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die verfügbare Version beschreibt den ausgelieferten Stand im Dateisystem. Sie kann aus der Modul-XML-Datei gelesen werden. Für normale Module liegt diese Datei typischerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/&amp;lt;modul&amp;gt;/conf/&amp;lt;modul&amp;gt;.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul gilt ein Sonderfall. Die Modul-XML liegt unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/install/conf/kern.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann eine Datei &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; im jeweiligen Modulverzeichnis als Fallback verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Log-Tabelle ===&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe des ETL Managers verwendet eine Datenbanktabelle für die Joblogs. Wenn diese Tabelle fehlt oder unvollständig ist, kann die Log-Ausgabe fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Struktur der Tabelle ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS job_log&lt;br /&gt;
(&lt;br /&gt;
   job_instance_id  bigint   NOT NULL,&lt;br /&gt;
   log              text,&lt;br /&gt;
   status           text&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX IF NOT EXISTS ix_job_log1&lt;br /&gt;
ON public.job_log USING btree (job_instance_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese SQL-Anweisungen sollten nicht automatisch durch die Oberfläche ausgeführt werden. Sie dienen als Hinweis für Administratorinnen und Administratoren und müssen bei Bedarf manuell geprüft und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Typische technische Fehlerbilder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehlerbild&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/jobLog/{id}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Die Tabelle &amp;lt;code&amp;gt;job_log&amp;lt;/code&amp;gt; fehlt, ist unvollständig oder der Logeintrag ist noch nicht verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/job/list/{modul}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Moduldateien fehlen, Pfade stimmen nicht oder die Webapp verwendet nicht den erwarteten Dateistand.&lt;br /&gt;
|-&lt;br /&gt;
| REST-Endpunkt liefert HTTP 404&lt;br /&gt;
| Der Context-Pfad, die Webapp, der Port oder ein Tunnel zeigt möglicherweise nicht auf die erwartete Anwendung.&lt;br /&gt;
|-&lt;br /&gt;
| Log erscheint erst nach erneutem Laden&lt;br /&gt;
| Der ETL-Lauf ist abgeschlossen, aber der Logeintrag war beim ersten Abruf noch nicht vollständig verfügbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager stellt eine zentrale Oberfläche zur Ausführung und Überwachung von ETL-Prozessen bereit. Für den täglichen Betrieb stehen vor allem die Aktionen „Unload“, „Update“, „Unload &amp;amp; Update“ und „Upgrade“ im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt den Installationsstatus, Versionsinformationen, Datenquellen und Datenbankverbindungen. Der Bereich „Aktueller Lauf“ informiert über den Fortschritt eines gestarteten Prozesses. Die Log-Ausgabe liefert technische Zusatzinformationen und kann bei der Fehleranalyse helfen.&lt;br /&gt;
&lt;br /&gt;
Details und Diagnose ergänzen die Oberfläche um technische Informationen für Support- und Administrationsfälle. Sie unterstützen bei der Analyse, führen aber keine automatischen Reparaturen aus.&lt;br /&gt;
&lt;br /&gt;
= Installation und Verwaltung in der Shell mit Skripten =&lt;br /&gt;
&lt;br /&gt;
== Installation von Modulen ==&lt;br /&gt;
Das Kernmodul enthält außer Administrationsabfragen und Tabellen keinerlei Inhalte. Die Inhalte werden in Form von Modulen hinzugefügt. Dazu gibt es vorgefertigte [[Kernmodul_Shellscripte#Modulverwaltung|Installationsscripte]].&lt;br /&gt;
&lt;br /&gt;
=== Architektur von SuperX-Modulen ===&lt;br /&gt;
Die folgende Abbildung zeigt die Architektur von Modulen ab Beispiel vom HISCOB-Modul:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Ein Modul besteht auf Datenbankseite aus Abfragen, Hilfstabellen, Datentabellen und Schlüsseltabellen (sowie Prozeduren).&lt;br /&gt;
Auf Webserver-Seite können auch XSL-Stylesheets vorhanden sein.&lt;br /&gt;
| [[Bild:modularchitektur_cob.png|417x307px]]&lt;br /&gt;
|}&lt;br /&gt;
Die Abbildung zeigt, dass ein Modul eigene Komponenten nutzt, aber auch auf Teile des Kernmoduls zugreift, z.B. das Orgranigramm - dies macht SuperX zu einem integrierten System. Neben dem Organigramm sind alle anderen Komponenten des Kernmoduls natürlich betroffen, z.B. Themenbaum, Userrechte.&lt;br /&gt;
Die Ordnerstruktur eines Moduls spiegelt die Komponenten des Systems wieder. Es gibt je ein Verzeichnis für datentabellen, schluesseltabellen und hilfstabellen. &lt;br /&gt;
Die Installation eines Moduls ist in der Dokumentation des jeweiligen Moduls näher beschrieben. Module, die auf dem Kernmodul 2.1 oder höher basieren, haben einen einheitlichen Aufbau.&lt;br /&gt;
&lt;br /&gt;
=== Modulscripte im Kernmodul ===&lt;br /&gt;
Seit Version 2.1 werden die Datenbankschemata und Scripte der Module in einem einheitlichen Format zusammengestellt und in einer Datei $SUPERX_DIR/db/module/$MODULNAME/conf/$MODULNAME.xml gespeichert. Das XML-Format hat den Vorteil, dass die Scripte dynamisch für Postgres und Informix erzeugt werden können, und dass die Scripte vereinheitlicht werden. Aus dieser Datei werden die Scripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen. Die folgende Abbildung zeigt das Vorgehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Aus der xml-Datei werden die jeweiligen Scripte für die Installation, den Update, die Extraktions-, Transformations- und Ladescripte (ETL) und die Deinstallation erzeugt.&lt;br /&gt;
| [[Bild:modulscripte_erzeugen.png|417x371px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Modul-Scripte liegen als Shellscripte im Verzeichnis $SUPERX_DIR/db/bin, und sind an [[Kernmodul_Shellscripte#Modulverwaltung|anderer Stelle]] im Detail erläutert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| module_install.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_install.x sos $SOS_PFAD&lt;br /&gt;
| Installiert ein Modul, d.h. erzeugt die Tabellen, Views, Funktionen und Abfragen. Die Abfragen werden in den Themenbaum eingehängt. &lt;br /&gt;
|-&lt;br /&gt;
| module_etl.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_etl.x sos $SOS_PFAD&lt;br /&gt;
| Aktualisiert das Modul, d.h. lädt die Rohdaten, Transformiert sie, und aggregiert die Hilfstabellen. Fehler werden in eine Log-Datei geschrieben, diese kann dann per Mail an einen Admin versandt werden. Wenn das Script erfolgreich durchläuft, wird die Tabelle systeminfo aktualisiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Script wird nicht direkt als Cronjob aufgerufen, sondern von einem Shellscript, das die Umgebungsvariablen und Parameter setzt, z.B. cob_update.x.&lt;br /&gt;
|-&lt;br /&gt;
| module_drop.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_ drop.x sos $SOS_PFAD&lt;br /&gt;
| Entfernt das Modul bzw. die Tabellen, Views, Funktionen und Abfragen.&lt;br /&gt;
|-&lt;br /&gt;
| module_scripts_create.x -name- -pfad- -Datenbanksystem(optional, INFORMIX, POSTGRES)- -Versionsnr.-&lt;br /&gt;
| Erzeugt via XSL-Transformation die jeweiligen Scripte, die in den obigen Scripten aufgerufen werden, z.B. bau_install_ids.sql für das Installationsscript des Baumoduls beim Informix Dynamic Server.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den operativen Scripten erzeugt module_scripts_create.x auch html-Dateien zur Dokumentation eines Moduls in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/-Modulname-.html&lt;br /&gt;
(auch als rtf-Datei zu Einbindung in Modul-Dokumentationen) sowie zur Schnittstelle in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/rohdaten/-Modulname-_unload.html&lt;br /&gt;
Darüber hinaus werden auch DBForms-Formulare erzeugt.&lt;br /&gt;
&lt;br /&gt;
=== Installation eines Moduls: Allgemeines Vorgehen ===&lt;br /&gt;
Das Vorgehen bei der Installation eines Moduls ist standardisiert. Im folgenden eine Kurzbeschreibung, weiter unten finden Sie das Vorgehen am Beispiel des ZUL-Moduls im Detail.&lt;br /&gt;
* Entpacken Sie das Modul in $SUPERX_DIR&lt;br /&gt;
* Erweiterung der Umgebung in der Datei $SUPERX_DIR/db/bin/SQL_ENV: fügen Sie den Inhalt der jew. Beispieldatei SQL_ENV_-Modulname-.sam in der SQL_ENV an, wenn noch nicht vorhanden, und ändern Sie ggf. Email-Adressen für log- und Fehlermails.&lt;br /&gt;
* Entladen der Rohdaten; auch hier müssen vorher Umgebungsvariablen zum Vorsystem angepasst werden&amp;lt;br /&amp;gt;&lt;br /&gt;
(Datei $-Modulname-_LOAD_PFAD/-Modulname-_ENV), hier liegt ebenfalls eine *.sam-Datei vor&lt;br /&gt;
* Kopieren der Rohdaten nach -Modulpfad-/rohdaten. Neuere SuperX-Module haben dafür vorgefertigte Scripte mit dem Namen -Modulname-_copy.x (z.B. zul_copy.x)&lt;br /&gt;
* Installieren Sie das Modul mit -Modulname-_erzeugen.x, z.B. mit  zul_modul_erzeugen.x&lt;br /&gt;
* Wenn die Installation erfolgreich war, können Sie das Modul aktualisieren mit&amp;lt;br /&amp;gt;&lt;br /&gt;
-Modulname-_update.x (ggf. mit Parametern)&amp;lt;br /&amp;gt;&lt;br /&gt;
z.B. mit &lt;br /&gt;
 zul__update.x&lt;br /&gt;
d.h. die ETL-Prozesse werden gestartet (s.u.).&lt;br /&gt;
* Wenn das Modul erfolgreich aktualisiert ist, wird eine Prüfprozedur gestartet, die die Daten plausibilisiert. Fehler und Warnungen finden Sie in der Datei $-Modulname-_ERRORDAT.&lt;br /&gt;
* Starten Sie Tomcat neu. Wenn Tomcat auf einem separaten Server installiert ist, müssen Sie vorher die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml dorthin übertragen. &lt;br /&gt;
* Schritt 7 wird bei jedem SuperX-Update wiederholt. Nun muss der Entladerhythmus geplant werden, und die Cronjobs werden eingerichtet. Es gibt eine Musterdatei $SUPERX_DIR/db/module/-MODULNAME-/-MODUL-_update_cron.x.sam , benennen sie diese um nach -MODUL-_update_cron.x und fügen Sie das Script in die crontab ein. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines zum Laden ====&lt;br /&gt;
Zunächst müssen die Rohdaten aus dem Vorsystem entladen werden. &lt;br /&gt;
Für das Entladen gibt es ferner zwei Modi: Das &amp;quot;Pull&amp;quot;-Verfahren und das &amp;quot;Push&amp;quot;-Verfahren. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Pull&amp;quot;-&#039;&#039;&#039;Verfahren wird einer Benutzerkennung auf dem SuperX-Rechner Zugriffsrecht auf die SOSPOS-Datenbank gegeben, und die Daten werden via TCP/IP aus dem Basissystem entladen. Bei APP / HISinOne als Quellsystem ist &amp;quot;Pull&amp;quot; das Standardvorgehen. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Push&amp;quot;-&#039;&#039;&#039;Verfahren werden die Entladescripte auf den SOSPOS-Rechner kopiert und dort von einer Benutzerkennung auf dem SOSPOS-Rechner ausgeführt. Die Rohdaten müssen dann auf den SuperX-Rechner kopiert werden. Dieses Verfahren klappt bei Informix unter Unix problemlos, bei Entladen aus Postgres müsste das komplette SuperX-Kernmodul installiert werden. &lt;br /&gt;
Am einfachsten ist immer das &amp;quot;Pull&amp;quot;-Verfahren, das mit fast allen Quellsystemen funktioniert und wenig Konfiguration auf dem Quellsystem erfordert. Aufgrund von Sicherheitsvorkehrungen oder Netz-Infrastrukturen wählen aber viele Hochschulen das &amp;quot;Push&amp;quot;-Verfahren. Da derzeit Informix /Unix die gängigste Plattform an Hochschulen ist, ist dies auch kein Problem. &lt;br /&gt;
&lt;br /&gt;
==== Einrichtung der Entladescripte ====&lt;br /&gt;
Im Push-Verfahren btw. unter SuperX können Sie mitgelieferte Shellscripte nutzen. Das folgende Beispiel des ZUL-Moduls zeigt das Vorgehen:&lt;br /&gt;
Die Entladescripte liegen im Verzeichnis $SUPERX_DIR/db/module/zul/rohdaten und lauten je nach Systemversion: &lt;br /&gt;
 zul_unload.x&lt;br /&gt;
&lt;br /&gt;
Die Scripte laufen nur, wenn die entsprechenden Umgebungsvariablen in der Datei ZUL_ENV (im gleichen Verzeichnis, ein Muster liegt vor in ZUL_ENV.sam) korrekt gesetzt sind, benennen Sie die Musterdatei um nach ZUL_ENV und tragen die richtigen Umgebungsvariablen ein, z.B. den Pfad für $INFORMIXDIR. &lt;br /&gt;
&#039;&#039;&#039;ZUL_ENV Die Umgebung für Entladescripte aus ZUL-GX(Auszug)&#039;&#039;&#039; &lt;br /&gt;
 ##Pfad für Entladedaten:&lt;br /&gt;
 ZUL_PFAD=.; export ZUL_PFAD &lt;br /&gt;
 ##hier muss Unterverzeichnis unl existieren!&lt;br /&gt;
&lt;br /&gt;
 In der ZUL_ENV müssen außerdem folgende Umgebungsvariablen gesetzt werden (defaults sind bereits vorbelegt, aber hier und da müssen Sie sicher ran): &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Informix gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXDIR&lt;br /&gt;
| Home-Verzeichnis von Informix &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXSERVER&lt;br /&gt;
| Name des Informixservers &lt;br /&gt;
|-&lt;br /&gt;
| ONCONFIG&lt;br /&gt;
| Name der onconfig, wenn auf dem SOS-Rechner mehrere Informix-Instanzen laufen &lt;br /&gt;
|-&lt;br /&gt;
| CLIENT_LOCALE&lt;br /&gt;
| Sprachumgebung (wichtig fürs Entladen von Datumsformaten) &lt;br /&gt;
|-&lt;br /&gt;
| SERVER_LOCALE&lt;br /&gt;
| dito &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Postgres gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| PGDATESTYLE&lt;br /&gt;
| Datumsformat &amp;quot;German&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| PGPORT&lt;br /&gt;
| Port vom Postgres-Server, standardmäßig 5432 &lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname oder IP-Adresse vom Postgres-Server &lt;br /&gt;
|-&lt;br /&gt;
| PGUSER&lt;br /&gt;
| Benutzerkennung für Postgres-Server (nur Datenbank, nicht Betriebssystem) &lt;br /&gt;
|-&lt;br /&gt;
| PGPATH&lt;br /&gt;
| Installationsverzeichnis von Postgres, z.B. /usr/local/pgsql &lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur db-zul.properties-Datei mit den Zugangsparametern für SOSPOS unter Postgres &lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Pfad zur Steuerungsdatei mit den Parametern für das Logging beim Entladen, voreingestellt auf ./logging.properties. Normalerweise brauchen Sie hier nichts ändern, wenn beim Entladen Probleme auftauchen, kann man den Level von SEVERE auf INFO oder FINEST ändern, dann werden die konkreten SQLs geloggt. Aber Achtung: wenn keine Fehler mehr auftreten, müssen Sie den Level wieder auf SERVERE ändern, sonst kommen Schlüsselworte in die Logdatei zul_unload.err, die dann bei der Übernahme nach SuperX fälschlicherweise zu Fehlermeldungen führen. &lt;br /&gt;
|}&lt;br /&gt;
Unter Postgres muss für das &amp;quot;Pull&amp;quot;-Verfahren beim Entladen die Datenbankverbindung in der Datei db-zul.properties eingetragen werden (Muster für Postgres liegt bei in db-zul_pg.properties). Dazu laden Sie einmal die Datei ZUL_ENV mit den obigen Parameter, starten den SuperX-Propadmin (siehe Administrationshandbuch Kernmodul) und richten die Verbindung zum SOSPOS-Server ein. Das Kennwort wird verschlüsselt gespeichert. Danach sind die Entladescripte für Postgres ausführbar. &lt;br /&gt;
Hinweis: Anders als Informix hat Postgres hat eine eigene, vom Basissystem unabhängige Benutzerverwaltung. Daher brauchen Sie den User, den Sie zum Entladen aus Postgres nutzen, nicht auf dem SuperX- oder SOSPOS-Rechner auf Betriebssystem-Ebene einrichten. Sie können also z.B. auf dem SuperX-Rechner zum Entladen aus SOSPOS die Kennung sospos des Postgres- Rechners verwenden. Oder Sie richten in der SOSPOS -Datenbank den Benutzer SuperX ein und geben ihm Leserecht auf die Tabellen sowie das Recht, Tabellen und Stored Procedures anzulegen. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Für alle Platformen gelten folgende Variablen:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ERRORMAIL&lt;br /&gt;
| An wen solle eine Logmail verschickt werden, wenn das Entladen nicht geklappt hat? (nur Unix). &lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL&lt;br /&gt;
| An wen soll immer eine Logmail verschickt werden &lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Pfad zum ausführbaren Mailprogramm unter Unix, Vorbelegung ist &amp;quot;mail&amp;quot;, manche Unixe haben aber auch &amp;quot;mutt&amp;quot; oder &amp;quot;mailx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom ZUL-Rechner auf den SuperX-Rechner kopiert werden sollen, dann werden für das Script zul_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync und scp sind wählbar. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem SuperX-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/zul/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem SuperX-Rechner, in der Regel &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des SuperX-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Dann starten Sie das Script zul_unload.x. Wenn es gelaufen ist, müssten die Dateien im unl-Verzeichnis stehen. Prüfen Sie dann bitte, ob dort Dateien mit 0 bytes stehen. Die Logdatei heisst zul_unload.err. &lt;br /&gt;
&lt;br /&gt;
===== Entladen unter Windows =====&lt;br /&gt;
Für das Entladen unter Windows gibt es Muster-Dateien im jew. Rohdaten-Verzeichnis, z.B. $SOS_PFAD/rohdaten/sos_unload.bat. Die Einrichtung geschieht dann in [[Kernmodul_Komponentenverwaltung#Java-Client_zum_Entladen_von_Quell-Datenbanken|Java]]. Ans Ende der Datei können Sie noch schreiben:&lt;br /&gt;
date /T &amp;gt;superx.datum&lt;br /&gt;
Dann wird auch die Datumsdatei geschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Dateitransfer beim Push-Verfahren =====&lt;br /&gt;
Wenn Sie das Verzeichnis nicht gemounted haben, müssen das Verzeichnis unl, die zul_unload.err und die superx.datum dann in das Verzeichnis $ZUL_LOAD_PFAD auf dem SuperX-Rechner kopiert werden, ein Script dafür liegt ebenfalls bei (zul_copy.x). Das Entladedatum wird danach in der Textdatei $ZUL_LOAD_PFAD/superx.datum gespeichert; wenn das Script einen Fehler findet, dann wird das vorherige Datum (in der Datei superx.datum.alt) gesetzt. &lt;br /&gt;
&lt;br /&gt;
Für den Transfer der Rohdaten beim Push-Verfahren wird in SuperX die dateibasierte Schnittstelle genutzt. Unter UNIX läßt sich dieser Transfer vollends automatisieren, indem die Programme scp oder rsync auf der Basis des OpenSSH-Pakets genutzt werden. Beide setzen auf das ssh-Protokoll 2 auf und stellen somit einen verschlüsselten Dateitransfer sicher. Auch [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] ist möglich. &lt;br /&gt;
In den jeweiligen Modulen wird im Verzeichnis rohdaten eine Beispieldatei mit dem Namen -MODULNAME-_ENV.sam ausgeliefert, die Sie umbenennen können nach -MODULNAME-_ENV. Darin werden am Ende der Datei die Parameter zum Kopieren festgelegt, also die Userkennung REMOTE_USER, der Hostname REMOTE_HOST, und die Methode des Kopierens (COPY_METHOD) sowie die jeweiligen Zielpfade. Diese Umgebungsvariablen werden von dem jeweiligen Script -modulname-_copy.x benutzt. &lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Unix =====&lt;br /&gt;
Damit die Passworteingabe unter Unix entfällt, muss man wie folgt vorgehen:&lt;br /&gt;
Loggen Sie sich zunächst testweise einmal ein. Wenn Sie z.B. vom COB-Server auf den SuperX-Server kopieren wollen, loggen Sie sich als user cob auf cobhost ein mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh superx@superxhost&lt;br /&gt;
Beim ersten Mal müssen Sie die Sicherheitsabfrage mit &amp;quot;yes&amp;quot; bestätigen.&lt;br /&gt;
Erzeugen Sie auf dem Quellrechner einen öffentlichen Schlüssel mittels &lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;cob@cobhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 wobei man eine leere Passphrase vergibt. Der öffentliche Teil dieses Schlüssels (~/.ssh/id_ed25519.pub) muss auf dem Zielrechner in die Datei ~/.ssh/authorized_keys eingefügt werden, ggf. muss die Datei neu erzeugt werden.&lt;br /&gt;
Wenn z.B. auf dem COB-Server unter der Kennung cob ein Key wie folgt erzeugt wurde:&lt;br /&gt;
&lt;br /&gt;
;Beispieleintrag eines Public Keys:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-ed25519 AAAAC3N.[hier viele kryptische Zeichen]....4V cob@cobhost&lt;br /&gt;
&lt;br /&gt;
Dann wird genau diese Zeile in der Datei /home/superx/.ssh/authorized_keys angefügt (die Datei kann mehrere PublicKeys enthalten, ein Eintrag pro Absatz).&lt;br /&gt;
Achten Sie auch auf Dateirechte: Die Verzeichnisse und Dateien sollten keine Schreibrechte für Gruppen haben. Im Zweifelsfall z.B. für den user superx:&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 600 /home/superx/.ssh/authorized_keys&lt;br /&gt;
Danach sollte z.B. der Login vom cobhost als user cob mit ssh superx@superxhost ohne Passworteingabe klappen. Wenn nicht, schalten Sie das Logging mit ssh -v superx@superxhost ein. Eine Möglichkeit ist, dass die PublicKey-Authentifizierung in der Konfigurationsdatei des SSHD (normal /etc/ssh/ssh_config) abgeschaltet ist. Weitere Diagnosen liefert die Datei /var/log/messages.&lt;br /&gt;
Sie können außerdem noch einschränken, von welchem Host die obige Authentifizierung ermöglicht wird. Dazu setzen Sie den Parameter &amp;quot;from=*.uni-xy.de&amp;quot; davor, z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Einschränkung &amp;quot;from&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
in authorized_keys&lt;br /&gt;
| from=&amp;quot;*.uni-xy.de&amp;quot; ssh-rsa AAAAB3Nza…[hier viele kryptische &lt;br /&gt;
Zeichen]…pg6VkCc= cob@cobhost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Kopiermethode scp benutzen, und die obige &amp;quot;authorized_keys&amp;quot;-Metohde mit PublicKey nicht nutzen wollen, können Sie auch mit Private Keys arbeiten (siehe SSH-Doku). Dazu können sie in der *_ENV-Datei in dem Parameter SCP_OPTS den Verweis auf den private Key setzen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| SCP_OPTS in *_ENV:&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel COB_ENV&lt;br /&gt;
| SCP_OPTS=&amp;quot;-p -B -i /home/cob/.ssh/superx_key&amp;quot;&lt;br /&gt;
export SCP_OPTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Windows =====&lt;br /&gt;
Wenn Sie die ssh-Shell putty aus dem Installationspaket nutzen, haben Sie im Installationsordner auch die Anwendung &amp;quot;puttyGen.exe&amp;quot;. Wenn Sie putty als reine Executable nutzen, laden Sie die Anwendung separat herunter. [http://winscp.net/download/puttygen.exe PuttyGen]&lt;br /&gt;
*     Folgen Sie der Anleitung auf der Seite http://winscp.net/eng/docs/ui_puttygen, um den SSH2-DSA oder RSA Schlüssel zu erzeugen. Für den Schlüssel bitte kein Passwort vergeben, wenn Sie das Tool automatisiert nutzen.&lt;br /&gt;
*     Den privaten Schlüssel geben Sie in Putty bzw. Winscp im Menü &amp;quot;Session&amp;quot; im Feld &amp;quot;Private Key File&amp;quot; an.&lt;br /&gt;
*    Der Button &amp;quot;Save public key&amp;quot; ist nicht für OPENSSH unter Linux als Zielserver geeignet. Im folgenden Screenshot sehen Sie den markierten Bereich, den Sie kopieren müssen:&lt;br /&gt;
[[Bild:puttygen.png|413x402px]]&lt;br /&gt;
*     Kopieren Sie Ihren Public Key, den Sie oben mit PuttyGen erzeugt haben, zur Datei &amp;quot;authorized_keys&amp;quot; und kopieren Sie diese in das Verzeichnis ~/.ssh/&lt;br /&gt;
* Im Profil unter Connection -&amp;gt; SSH -&amp;gt; Auth -&amp;gt; Credentials geben Sie den Pfad zum privaten Schlüssel in &amp;quot;Private key file&amp;quot; an.&lt;br /&gt;
* Bei erneutem Login mit Putty oder Winscp sollte die Passwortabfrage entfallen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP (Server) =====&lt;br /&gt;
Beim Push-Verfahren wird, wenn mit scp oder rsync kopiert wird, eine Login-Shell vorausgesetzt. Wenn dies aus Sicherheitsgründen nicht gewünscht ist bzw. wg. Einsatz von Windows nicht möglich ist, können Sie auch sftp nutzen, dies wird in modernen ssh-Servern mitgeliefert und bietet ebenfalls verschlüsselten Datentransfer. Zur Einrichtung des Servers:&lt;br /&gt;
Der SSH-Dienst wird wie folgt konfiguriert (am Beispiel Ubuntu Linux 22.04 LTS) mit dem SFTP-Verzeichnis /home/sftp/-benutzername: &lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/ssh/sshd_config die Zeile auskommentieren:&lt;br /&gt;
 #Subsystem      sftp    /usr/lib/openssh/sftp-server&lt;br /&gt;
und stattdessen:&lt;br /&gt;
 Subsystem sftp internal-sftp&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
         ChrootDirectory /home/sftp/%u&lt;br /&gt;
         ForceCommand internal-sftp&lt;br /&gt;
        AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Danach starten Sie den SSH-Dienst neu:&lt;br /&gt;
 service ssh restart&lt;br /&gt;
&lt;br /&gt;
Dann legen Sie die Gruppe &amp;quot;sftponly&amp;quot; an:&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
 und dann den Unix-User an, und geben ihm die Gruppe &amp;quot;sftponly&amp;quot;. Hier ein Script:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SFTPUSERNAME=$1&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 useradd -b /home/sftp -s /bin/false -G sftponly $SFTPUSERNAME&lt;br /&gt;
 chown root:root /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 chmod 755 /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
 chown $SFTPUSERNAME:sftponly /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
&lt;br /&gt;
Danach legen Sie mit &lt;br /&gt;
 passwd $SFTPUSERNAME&lt;br /&gt;
ein Passwort fest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der User kann sich dann nicht mehr mit ssh einloggen, nur noch mit sftp, und landet beim Login in /home/$KENNUNG, in einem &amp;quot;chroot-Käfig&amp;quot;, und der User kann mit SFTP in den Ordner &amp;quot;incoming&amp;quot; schreiben. Zum Testen geben Sie ein: &lt;br /&gt;
 sftp $KENNUNG@-Host-&lt;br /&gt;
&lt;br /&gt;
Wenn beim SFTP Login die Meldung kommt:&lt;br /&gt;
 client_loop: send disconnect: Broken pipe&lt;br /&gt;
müssen Sie darauf achten dass das Home-Verzeichnis des Users nicht dem User gehört, sondern root.&lt;br /&gt;
&lt;br /&gt;
Wenn der Login klappt, können Sie nach dem [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|oben]]  beschriebenen Verfahren die Passworteingabe durch PublicKey-Authentifizierung ersetzen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP =====&lt;br /&gt;
Für das Kopieren der Rohdaten können Sie im Kopierscript &amp;quot;-modulname-_copy.x&amp;quot; auch sftp-Kommandos nutzen. Sie müssen nur in der ENV-Datei die Variable&lt;br /&gt;
 COPY_METHOD=sftp&lt;br /&gt;
setzen. Alle anderen Variablen und Mechanismen wie z.B. [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|Entfernen der Passworteingabe]] entsprechen denen von SCP / SSH (s.o.). &lt;br /&gt;
Spezielle Optionen fürs sftp können Sie in der Umgebungsvariable SFTP_OPTS setzen. Es kann z.B. sein, dass das Kopieren großer Dateien in einen Timeout läuft. Bei CSV bietet es sich an, die Dateien zu komprimieren, sie können also setzen:&lt;br /&gt;
 SFTP_OPTS=&amp;quot;-oCompression=yes&amp;quot;&lt;br /&gt;
 export SFTP_OPTS&lt;br /&gt;
Danach wiederholen Sie das kenn_copy.x&lt;br /&gt;
Dies ist nur ein Beispiel. Weitere Optionen für SFTP entnehmen Sie der manpage.&lt;br /&gt;
Das Kopieren mit sftp klappt übrigens auch unter Windows z.B. mit dem Programm [http://winscp.net/eng/docs/lang:de winscp]. Dies wird im folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP unter Windows =====&lt;br /&gt;
Unter Windows ist das Standardprogramm für SFTP die Anwendung [http://winscp.net/eng/docs/lang:de winscp]. Sie können die Passworteingabe analog zu Putty [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|entfernen]]. Danach können Sie eine Session erzeugen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp1.png|517x364px]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;quot;Private key file&amp;quot; geben Sie den private key ein, den Sie [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|oben]] erzeugt haben. Klicken Sie dann auf &amp;quot;Save session&amp;quot;, und geben Sie einen kurzen, sprechenden Namen ohne Leerzeichen oder Umlaute, z.B. &amp;quot;superx@vmmulti1&amp;quot;&lt;br /&gt;
Sie müssen nun die Verzeichnisse lokal und remote in der Winscp-Session speichern, im Menüpunkt &amp;quot;Directories&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp2.png|517x359px]]&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie auch hiernach nicht, die Session zu speichern. &lt;br /&gt;
Danach testen Sie einmal den Zugang. Wenn das klappt können Sie Winscp auch für die Kommandozeile automatisieren. Sie erzeugen zunächst eine Textdatei mit den Kommandos für Winscp, dies enthält auch die zu übertragenden Dateien. Der Aufbau der Datei ist wie folgt:&lt;br /&gt;
 open -Sessionname-&lt;br /&gt;
 # Upload the file to current working directory&lt;br /&gt;
 put -Datei-&lt;br /&gt;
 # Disconnect&lt;br /&gt;
 close&lt;br /&gt;
 # Exit WinSCP&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Die zu übertragenden Dateien sind in der Musterdatei des jew. Moduls in rohdaten/-Modulname-_sftp.txt aufgelistet, Sie müssen lediglich &lt;br /&gt;
* den &amp;quot;/&amp;quot; durch einen &amp;quot;\&amp;quot; ersetzen&lt;br /&gt;
* das Entladeprotokoll -Modulname-_unload.err und die Datumsdatei superx.datum hinzufügen&lt;br /&gt;
Hier ein Beispielscript fürs das Studierenden-Modul:&lt;br /&gt;
	open superx@vmmulti1&lt;br /&gt;
	# Change remote directory&lt;br /&gt;
	# Upload the file to current working directory&lt;br /&gt;
	put sos_unload.err&lt;br /&gt;
	put superx.datum&lt;br /&gt;
	put unl\konstanten.unl&lt;br /&gt;
	put unl\sos_studenten.unl&lt;br /&gt;
	put unl\sos_hzb.unl&lt;br /&gt;
	put unl\sos_faecher.unl&lt;br /&gt;
	put unl\sos_pord_to_stg.unl&lt;br /&gt;
	put unl\sos_pruefungenext.unl&lt;br /&gt;
	put unl\sos_pruefungen.unl&lt;br /&gt;
	put unl\sos_lab_astat_attributes.unl&lt;br /&gt;
	put unl\sos_stud_loe.unl&lt;br /&gt;
	put unl\sos_faecher_ext.unl&lt;br /&gt;
	put unl\sos_faecher_kontrolle.unl&lt;br /&gt;
	put unl\sos_pruefungen_kontrolle.unl&lt;br /&gt;
	put unl\sos_anschri.unl&lt;br /&gt;
	put unl\sos_parstg.unl&lt;br /&gt;
	put unl\sos_hsnr.unl&lt;br /&gt;
	put unl\semester.unl&lt;br /&gt;
	put unl\cif.unl&lt;br /&gt;
	put unl\cifx.unl&lt;br /&gt;
	put unl\k_pvers.unl&lt;br /&gt;
	put unl\k_stg.unl&lt;br /&gt;
	put unl\k_stgext.unl&lt;br /&gt;
	put unl\k_abstgv.unl&lt;br /&gt;
	put unl\sos_pord.unl&lt;br /&gt;
	put unl\sos_dipl.unl&lt;br /&gt;
	put unl\sos_minder.unl&lt;br /&gt;
	put unl\sos_stud_d.unl&lt;br /&gt;
	put unl\sos_pords.unl&lt;br /&gt;
	put unl\sos_porg.unl&lt;br /&gt;
	put unl\sos_labzuord.unl&lt;br /&gt;
	put unl\sos_pnrzuord.unl&lt;br /&gt;
	put unl\sos_gewichtungsvariante.unl&lt;br /&gt;
	put unl\sos_gewichtungregel_filter.unl&lt;br /&gt;
	put unl\sos_gewichtungregel.unl&lt;br /&gt;
	put unl\personattribute.unl&lt;br /&gt;
	put unl\personattributetype.unl&lt;br /&gt;
	put unl\personattribute_value_list.unl&lt;br /&gt;
	put unl\stu_update_prot.unl&lt;br /&gt;
	put unl\exa_update_prot.unl&lt;br /&gt;
	put unl\sos_accredited_ects.unl&lt;br /&gt;
	put unl\sos_pord_orgeinheit.unl&lt;br /&gt;
	# Disconnect&lt;br /&gt;
	close&lt;br /&gt;
	# Exit WinSCP&lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
Die Datei hat z.B. den Namen winscp_example_script.txt. Dann können Sie das Script aufrufen mit dem DOS-Kommando:&lt;br /&gt;
 winscp /script=-Pfad zu-\winscp_example_script.txt&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot wie das dann aussieht:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp3.png|609x337px]]&lt;br /&gt;
&lt;br /&gt;
Das DOS-Kommando läßt sich dann über die Windows-Taskverwaltung automatisieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Java-Client zum Entladen von Quell-Datenbanken =====&lt;br /&gt;
Zum Entladen aus dem operativen Vorsystem wird unter Informix dbaccess genutzt. Unter Postgres wird generell der SuperX-JAVA-Client zum Entladen genutzt, denn SuperX benötigt ein spezielles, an Informix angepasstes [[Kernmodul_Komponentenverwaltung#Format_der_Unload_Dateien_CSV|CSV-Format]], das sich mit Bordmitteln von Postgres (copy-Befehl) nicht erzeugen lässt. Es kann aber auch sinnvoll sein, aus der Informix-Datenbank mit SuperX-JAVA-Client zu entladen, z.B. wenn Sie kein UNIX-dbaccess auf dem Vorsystem installiert haben. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie das jew. operative Vorsystem im PUSH-Verfahren entladen wollen, d.h. die Rohdaten werden auf dem Vorsystem entladen und auf den SuperX-Rechner kopiert, dann müssen Sie spezielle Vorkehrungen treffen. SuperX nutzt generell zum Entladen eigene Java-Klassen. Beim Entladen im PULL-Verfahren sind diese Klassen vorhanden, denn die Entladeroutine läuft auf dem SuperX Rechner. Wenn Sie aber PUSH nutzen wollen, werden die SuperX-Java-Klassen auf dem Liefersystem benötigt, und die Entladeroutine muss konfiguriert sein. Im Folgenden nutzen wir das Beispiel &amp;quot;Entladen im Push-Verfahren aus SVA-GX unter Postgres&amp;quot;. Gehen Sie dazu wie folgt vor:&lt;br /&gt;
* Kopieren Sie die Dateien &lt;br /&gt;
** superx*jar&lt;br /&gt;
** postgresql-*.jar&lt;br /&gt;
** jfor-0.7.2rc1.jar&lt;br /&gt;
* vom SuperX-Rechner im Verzeichnis $SUPERX_DIR/tomcat/webapps/superx/WEB-INF/lib auf den Quellrechner in ein Unterverzeichnis lib unter rohdaten (z.B. /home/sva/superx/rohdaten/lib). In rohdaten liegt die bisherige Entladeroutine (z.B. sva_unload.x). &lt;br /&gt;
* Kopieren Sie die *_ENV.sam -Datei nach *_ENV, also hier SVA_ENV.sam nach SVA_ENV&lt;br /&gt;
* Fügen Sie dann folgenden Passus in die Umgebungs-Datei der Entladeroutine, hier also SVA_ENV:&lt;br /&gt;
 #Pfad zu den SuperX-Java-Libraries&lt;br /&gt;
 #Der JDBC_CLASSPATH enthält alles, was der jdbc-Client in superx für den Datenbankzugriff braucht.&lt;br /&gt;
 #jfor*.jar, postgresql*.jar&lt;br /&gt;
 JDBC_CLASSPATH=&amp;quot;$SVA_LOAD_PFAD/lib/superx5.0.jar:$SVA_LOAD_PFAD/lib/postgresql-42.2.19.jar:$SVA_LOAD_PFAD/lib/jfor-0.7.2rc1.jar&amp;quot;&lt;br /&gt;
 export JDBC_CLASSPATH&lt;br /&gt;
&lt;br /&gt;
Wenn dann noch die Variablen [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] und LOGGER_PROPERTIES korrekt gesetzt sind, kann die Entladeroutine bei SX_CLIENT=jdbc (Wenn Sie unter Windows entladen, oder Informix ohne dbaccess entladen wollen) oder SX_CLIENT=psql (wenn Sie Postgres unter UNIX nutzen) mit Java entladen.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Entladescript ausführen:&lt;br /&gt;
 sva_unload.x&lt;br /&gt;
Die Logdatei lautet sva_unload.err&lt;br /&gt;
&lt;br /&gt;
Zum Kopieren der Rohdaten zum SuperX-Server passen Sie folgende Variablen an:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom SVA-Rechner auf den BI-Rechner kopiert werden sollen, dann werden für das Script sva_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync, [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] und scp sind wählbar [Achtung: diese müssen dann betriebssystemseitig installiert sein]. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem BI-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/sva/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem BI-Rechner, in der Regel &amp;quot;tomcat&amp;quot; oder &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des BI-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Danach starten Sie &lt;br /&gt;
 sva_copy.x&lt;br /&gt;
Die Logdatei lautet sva_copy.err&lt;br /&gt;
&lt;br /&gt;
Weitere Entladeparameter werden in den modulspezifischen Administrationshandbüchern beschrieben.&lt;br /&gt;
{{Hinweis|Bei neuen SuperX-Versionen reicht es in der Regel, die modulspez. Dateien auszutauschen, also hier sva_unload.* etc.}}&lt;br /&gt;
&lt;br /&gt;
== Update eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Wenn das Entladen aus dem Vorsystem geklappt hat (sofern es ein Vorsystem gibt), können Sie die Daten laden. Zum Update bzw. zum Laden der Rohdaten gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname- und führen das Script aus:&lt;br /&gt;
-Modulname-_update.x&lt;br /&gt;
Die Logdatei lautet L_-Modulname-_UPDATE.log, im Mandantenfähigen Betrieb &amp;quot;L_-Modulname-_UPDATE-MANDANTID-.log&amp;quot;.&lt;br /&gt;
Für die Aufnahme der Laderoutine in die crontab gibt es im gleichen Verzeichnis Musterscripte nach dem Namensmuster:&lt;br /&gt;
-Modulname-_update_cron.x&lt;br /&gt;
Je nach Push/Pull-Szenario können Sie auch den Unload darin starten oder nicht.&lt;br /&gt;
&lt;br /&gt;
=== Modulupdate in mandantenfähigen Installationen ===&lt;br /&gt;
Der Modulupdate in mandantenfähigen Installation findet in einer SuperX-Installation statt, allerdings werden die einzelnen Scripte mit unterschiedlichen Umgebungsvariablen, wie sie in SQL_ENV.-MANDANTID- definiert ist, z.B. SQL_ENV.FHRO.&lt;br /&gt;
In der SQL_ENV.-MANDANTID- werden unterschiedliche Pfade für den jeweiligen *_LOAD_PFAD gesetzt, wobei in der Regel die Mandandid ein Unterverzeichnis vom &amp;quot;normalen&amp;quot; LOAD_PFAD ist. So ist z.B. beim COB-Modul folgender Pfad anzusetzen:&lt;br /&gt;
Normale SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten&lt;br /&gt;
Mandantenfähige SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten/FHRO&lt;br /&gt;
Unterhalb von FHRO befindet sich noch einmal die Entladeroutine sowie das Unterverzeichnis unl mit den Rohdaten. Dieses Verzeichnis FHRO kann der Einfahheit halber auch ein symbolischer Link auf den gemounteten COB-Rechner sein.&lt;br /&gt;
Durch Setzen der Mandantennummer in der Umgebungsvariable MANDANTID in der jeweiligen SQL_ENV des Mandanten werden die ETL-Scripte anders ausgeführt: Die Logdateien werden jeweils mit der Mandantennummer versehen (z.B. L_cob_updateFHRO.log), damit die Übersicht nicht verloren geht und der gleichzeitige Update mehrerer Mandanten in eine rsuperX-Installation möglich ist.&lt;br /&gt;
Außerdem können weitreichende Steuerungsmechanismen im Modulupdate eingesetzt werden: Nach jedem ETL-Schritt können optional mandantenspezifische Scripte aufgerufen werden. Diese müssen folgende Namenskonvention einhalten:&lt;br /&gt;
 -Scriptname-_-MANDANTID-.sql&lt;br /&gt;
Also für eine hochschulspezifische Transformation im COB-Modul des Mandanten FHRO wird eine Datei namens&lt;br /&gt;
 cob_trans_FHRO.sql &lt;br /&gt;
mit entsprechenden SQL-Anweisungen angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Format der Unload Dateien CSV ===&lt;br /&gt;
Generell gilt das Prinzip, daß Daten vom Vorsystem in CSV entladen werden, und dann in sog. Ladetabellen hochgeladen werden. Da CSV je nach DBMS unterschiedlich implementiert wird, hier eine kurze Beschreibung des Formats, das im wesentlichen den Vorgaben von Informix LOAD entspricht:&lt;br /&gt;
* Zeichenformat: UNIX LATIN1 oder UTF-8&lt;br /&gt;
* Feldtrenner: ^ &lt;br /&gt;
* Satztrenner: Feldtrenner + UNIX NEWLINE&lt;br /&gt;
* Zeilenschaltung: Umbrüche innerhalb von Textfeldern sind als \ + NEWLINE codiert&lt;br /&gt;
* Feldtrenner, die im Textfeld vorkommen, werden mit &amp;quot;\&amp;quot; maskiert. Ebenso das Zeichen &amp;quot;\&amp;quot; selbst&lt;br /&gt;
* Die Datumsformate sind bei Datumsfeldern immer im deutschen Format (DD.MM.YYYY) vorgesehen&lt;br /&gt;
* Boolean-Werte werden durch &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; codiert&lt;br /&gt;
* Der Dezimaltrenner ist &amp;quot;.&amp;quot;, kein 1000-er Punkt bei Zahlen. &lt;br /&gt;
* Leerstrings und Leerzeichen werden als &amp;quot; &amp;quot; (Leerzeichen) exportiert.&lt;br /&gt;
&lt;br /&gt;
== Upgrade eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Zum Upgrade bzw. zum Zurücksetzen des Moduls auf den Auslieferungszustand entpacken Sie das Paket in $SUPERX_DIR und gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname-/upgrade und führen das Script aus:&lt;br /&gt;
-Modulname-_upgrade.x&lt;br /&gt;
Ausnahme: beim Kernmodul gibt es i.d.R. ein spezielles [[Kern_Installation_Upgrade#Standardvorgehen_beim_Upgrade|Upgrade Script]].&lt;br /&gt;
&lt;br /&gt;
Die Logdatei lautet upgrade.log, im Mandantenfähigen Betrieb &amp;quot;upgrade-MANDANTID-.log&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen separaten Tomcat-Rechner betreiben, müssen Sie das Paket dort ebenfalls entpacken, und vom Datenbankserver die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml an die gleiche Stelle auf den Tomcat Rechner kopieren. Ein nochmaliges Ausführen des Upgrade Scriptes ist nicht nötig, weil dies nur die Datenbank betrifft.&lt;br /&gt;
&lt;br /&gt;
== Hochschulspezifische Anpassung eines Moduls ==&lt;br /&gt;
=== Dateibasierte hochschulspezifische Anpassung ===&lt;br /&gt;
Nach der Installation bzw. beim Upgrade können Sie hochschuleigene SQL Scripte ausführen lassen. Erzeugen Sie dazu eine Datei &lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/customize.sql &lt;br /&gt;
bei Mandantenbetrieb&lt;br /&gt;
  $SUPERX_DIR/db/module/-Modulname-/conf/customize-MANDANTID-.sql &lt;br /&gt;
und füllen Sie diese mit einem beliebigen Inhalt. Das Script wird beim Upgrade des Moduls automatisch am Ende ausgeführt.&lt;br /&gt;
=== Datenbankbasierte hochschulspezifische Laderegeln ===&lt;br /&gt;
Eine Laderoutine gliedert sich in die Schritte&lt;br /&gt;
#Unload: Entladen der CSV Dateien aus dem jew. Vorsystem&lt;br /&gt;
#Load: Upload der CSV Dateien&lt;br /&gt;
#Trans: Transformation der Daten&lt;br /&gt;
#Aggr: Aggregation der Daten&lt;br /&gt;
#Test: Test der Daten&lt;br /&gt;
#System: Standdatum bei Erfolg aktualisieren&lt;br /&gt;
Es ist möglich über sog. &amp;quot;Preparation&amp;quot;- oder &amp;quot;Finalize&amp;quot;-[[Kernmodul_Shellscripte#Hochschulspezifische_Transformationen_im_ETL-Prozess|Scripte]] die Laderoutine am Ende von LOAD bzw. TRANS anzupassen. Dieses Verfahren ist weiterhin möglich, ist aber bzgl. Clustering und Schreibzugriff recht unflexibel.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich im Browser hochschulspezifische Scripte am Ende des jeweiligen Schrittes einer Laderoutine anzulegen. Dies funktioniert so: Die Laderoutine führt zunächst den allgemeinen, von uns vorgegebenen Ladeschritt aus. Wenn dann eine Repository-Variable mit einem gewissen Namensschema existiert, wird sie ausgeführt. Das Namensschema lautet &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Kürzel der Komponente&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;_CUSTOM&lt;br /&gt;
&amp;lt;/source&amp;gt;. &lt;br /&gt;
* Bei Hauptladeroutinen ist dies&lt;br /&gt;
*# Laden: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_load_CUSTOM, z. B. sos_load_CUSTOM&lt;br /&gt;
*# Transformation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_trans_CUSTOM, z. B. sos_trans_CUSTOM&lt;br /&gt;
*# Aggregation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_aggr_CUSTOM, z. B. sos_aggr_CUSTOM&lt;br /&gt;
* Bei Unterladeroutinen ist dies &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_&#039;&#039;&#039;ID des Ladeschritts&#039;&#039;&#039;_CUSTOM, also z. B. cob_trans_fin_busa_CUSTOM für die Unterladeroutine &amp;quot;Lade Buchungen aus FIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um eine Variable neu einzurichten:&lt;br /&gt;
* Gehen Sie in den BI-Standardberichten auf Administration/Hochschul-Repository.&lt;br /&gt;
* Wählen Sie das jeweilige Sachgebiet und schicken Sie das Formular ab.&lt;br /&gt;
* Klicken Sie bei einer Beispielzeile auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;.&lt;br /&gt;
* Im neuen Fenster klicken Sie oben ganz rechts auf das Symbol &#039;&#039;&#039;Datensatz kopieren&#039;&#039;&#039;.&lt;br /&gt;
* Definieren Sie die Variable z. B.&lt;br /&gt;
** als Variablenname die ID z. B.: fin_load_CUSTOM&lt;br /&gt;
** Art der Variable: ein für Sie sprechender Schlüssel mit Modulkürzel, z. B. &amp;quot;fin_Laderegel&amp;quot;&lt;br /&gt;
** als Inhalt der Variable die gewünschten Befehle, z. B. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update fin_buch_neu set ch110_institut=buchungsab_fb where length(buchungsab_fb)=5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** aktiv=1&lt;br /&gt;
** gültig seit 1.1.1900&lt;br /&gt;
** gültig bis 1.1.3000&lt;br /&gt;
* Klicken Sie oben rechts auf das Häkchen-Symbol für &#039;&#039;&#039;Datensatz einfügen&#039;&#039;&#039;.&lt;br /&gt;
* Schließen Sie das Fenster.&lt;br /&gt;
&lt;br /&gt;
Analog können Sie auch die [[Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung|customize]]-Regeln&amp;quot; ins Repository verlagern. Hier heißt die Variable z.B. fin_install_CUSTOM.&lt;br /&gt;
&lt;br /&gt;
== Entfernen eines Moduls ==&lt;br /&gt;
Wenn Sie ein Modul nicht mehr benötigen, starten Sie das Script&amp;lt;br /&amp;gt;&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/-Modulname-_modul_entfernen.x.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses Script löscht alle Tabellen, Prozeduren und Abfragen aus der Datenbank, und löscht auch die Einträge im Themenbaum. Danach können Sie den Pfad $SUPERX_DIR/db/module/-Modulname-löschen.&lt;br /&gt;
Wenn Sie nur die Inhalte der Daten- und Hilfstabellen des Moduls löschen wollen (z.B. aus Datenschutzgründen), ohne das ganze Modul zu deinstallieren, können Sie dies mit folgendem Befehl tun:&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_pg.sql (für Postgres)&amp;lt;br /&amp;gt;&lt;br /&gt;
bzw.&amp;lt;br /&amp;gt;&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_ids.sql (für Informix)&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16370</id>
		<title>Kernmodul Komponentenverwaltung</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Komponentenverwaltung&amp;diff=16370"/>
		<updated>2026-07-13T06:45:00Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Die Komponentenverwaltung im Kernmodul kann je nach Aufgabe über die Browseroberfläche oder über Shell-Skripte erfolgen.&lt;br /&gt;
&lt;br /&gt;
Bisher wurden die Installation, Deinstallation, Aktualisierung und das Upgrade von Modulen überwiegend über Skripte in der Shell durchgeführt. Ab Kernmodul 6.0 steht zusätzlich eine Komponentenverwaltung über die Browseroberfläche zur Verfügung. Diese Browseroberfläche wird im Folgenden als SuperX ETL Manager beschrieben.&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager ist vor allem für die Ausführung und Überwachung von ETL-Prozessen sowie für Modul-Upgrades vorgesehen. Die Installation und Deinstallation von Modulen stehen dort bisher nicht zur Verfügung und werden weiterhin über die Shell-Skripte durchgeführt.&lt;br /&gt;
&lt;br /&gt;
Der folgende Artikel ist daher in zwei Bereiche gegliedert: Zuerst wird die Nutzung des SuperX ETL Managers beschrieben. Anschließend folgt die bisherige Dokumentation zur Installation und Verwaltung von Modulen mit Skripten.&lt;br /&gt;
&lt;br /&gt;
= Komponentenverwaltung im Browser: SuperX ETL Manager =&lt;br /&gt;
Der SuperX ETL Manager dient dazu, ETL-Prozesse der installierten SuperX-Module über die Weboberfläche auszuführen und zu überwachen. Er bietet eine zentrale Übersicht über installierte Module, verfügbare Aktionen, Versionsinformationen, Datenquellen, den aktuellen Lauf sowie technische Zusatzinformationen für die Fehlersuche.&lt;br /&gt;
&lt;br /&gt;
Der Schwerpunkt der Oberfläche liegt auf dem täglichen Betrieb: Anwenderinnen und Anwender können Laderoutinen starten, den aktuellen Stand eines Laufs verfolgen und bei Bedarf die Log-Ausgabe einsehen. Technische Detail- und Diagnoseinformationen stehen ebenfalls zur Verfügung, sind aber vor allem für Administratorinnen und Administratoren oder den Support gedacht.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Uebersicht.png|Gesamtübersicht des SuperX ETL Managers mit Modulübersicht, Filterbereich, Aktionsbuttons und aktuellem Lauf.]]&lt;br /&gt;
&lt;br /&gt;
== Aufbau der Oberfläche ==&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche besteht im Wesentlichen aus folgenden Bereichen:&lt;br /&gt;
&lt;br /&gt;
* Filterbereich&lt;br /&gt;
* Modulübersicht&lt;br /&gt;
* Aktionsbuttons pro Modul&lt;br /&gt;
* Bereich „Aktueller Lauf“&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
* Details-Bereich&lt;br /&gt;
* Diagnose-Bereich&lt;br /&gt;
&lt;br /&gt;
Über den Filterbereich kann die angezeigte Modulliste eingeschränkt werden. Die Modulübersicht zeigt die wichtigsten Informationen zu den vorhandenen Modulen. Über die Aktionsbuttons können ETL-Prozesse gestartet werden. Der Bereich „Aktueller Lauf“ zeigt den zuletzt gestarteten oder aktuell laufenden Prozess an.&lt;br /&gt;
&lt;br /&gt;
Die Bereiche „Details“ und „Diagnose“ liefern zusätzliche technische Informationen. Sie sind hilfreich für Supportfälle, aber für die normale Bedienung nicht zwingend erforderlich.&lt;br /&gt;
&lt;br /&gt;
== Modulübersicht ==&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt die installierten bzw. erkannten Module mit ihren wichtigsten Eigenschaften.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Spalte&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| Modul&lt;br /&gt;
| Zeigt den Namen und das technische Kürzel des Moduls, zum Beispiel „Administration“ mit dem Kürzel „kern“ oder „Kennzahlen“ mit dem Kürzel „kenn“.&lt;br /&gt;
|-&lt;br /&gt;
| Status&lt;br /&gt;
| Zeigt, ob das Modul installiert ist.&lt;br /&gt;
|-&lt;br /&gt;
| Versionen&lt;br /&gt;
| Zeigt die installierte Version und die verfügbare Version des Moduls.&lt;br /&gt;
|-&lt;br /&gt;
| Letztes Update&lt;br /&gt;
| Zeigt den Zeitpunkt des letzten bekannten Updates.&lt;br /&gt;
|-&lt;br /&gt;
| Datenquelle&lt;br /&gt;
| Zeigt, aus welcher Datenquelle das Modul seine Daten bezieht oder auf welcher Datenbasis der ETL-Prozess arbeitet.&lt;br /&gt;
|-&lt;br /&gt;
| DB-Verbindung&lt;br /&gt;
| Zeigt, ob die Verbindung zur Datenbank bzw. Datenquelle aktuell erreichbar ist.&lt;br /&gt;
|-&lt;br /&gt;
| Aktionen&lt;br /&gt;
| Zeigt die verfügbaren Aktionen für das jeweilige Modul.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Versionen ===&lt;br /&gt;
&lt;br /&gt;
In der Spalte „Versionen“ werden zwei Werte angezeigt:&lt;br /&gt;
&lt;br /&gt;
* installierte Version&lt;br /&gt;
* verfügbare Version&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der aktuell in der Datenbank installiert ist. Die verfügbare Version beschreibt den ausgelieferten Stand des Moduls, der in der Installation vorliegt.&lt;br /&gt;
&lt;br /&gt;
Wenn die verfügbare Version höher ist als die installierte Version, sollte in der Regel ein Upgrade des Moduls durchgeführt werden. Dadurch werden die Datenstrukturen des Moduls auf den ausgelieferten Stand aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Datenquelle ===&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle gibt an, aus welchem System ein Modul seine Daten bezieht oder auf welcher Datenbasis es arbeitet.&lt;br /&gt;
&lt;br /&gt;
SuperX ist ein Data Warehouse. Viele Module übernehmen Daten aus externen vorsystemen. Beispiele für solche Datenquellen sind:&lt;br /&gt;
&lt;br /&gt;
* cob für Kostenrechnung&lt;br /&gt;
* mbs für Finanzrechnung, Inventar oder Gebäude/Räume/Flächen&lt;br /&gt;
* sva für Personal- und Stelleninformationen&lt;br /&gt;
* hisinone bei entsprechend angebundenen Modulen&lt;br /&gt;
&lt;br /&gt;
Daneben gibt es Module, die auf bereits in SuperX vorhandene Daten zurückgreifen. In solchen Fällen wird als Datenquelle „SuperX“ angezeigt. Das betrifft vor allem Module, die modulübergreifend, auswertungsorientiert oder spezialisiert auf vorhandene SuperX-Daten zugreifen.&lt;br /&gt;
&lt;br /&gt;
Beispiele hierfür können sein:&lt;br /&gt;
&lt;br /&gt;
* kenn für Kennzahlen&lt;br /&gt;
* man für Managementberichte&lt;br /&gt;
* erfolg für Studienverlauf bzw. Erfolgsbetrachtungen&lt;br /&gt;
* gang für Studiengänge&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle „SuperX“ bedeutet also nicht, dass keine Daten verarbeitet werden. Sie zeigt an, dass die Verarbeitung auf Daten basiert, die bereits im SuperX-System vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
== Aktionen ausführen ==&lt;br /&gt;
&lt;br /&gt;
Die verfügbaren Aktionen hängen vom jeweiligen Modul ab. Nicht jedes Modul unterstützt alle Aktionen. Wenn eine Aktion nicht verfügbar ist, wird der entsprechende Button nicht angezeigt oder ist nicht aktiv.&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktionsbuttons.png|Modulzeile mit den Aktionsbuttons Unload, Update, Unload &amp;amp; Update und Upgrade.]]&lt;br /&gt;
&lt;br /&gt;
=== Unload ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ entlädt Daten aus einem angebundenen Vorsystem, sofern für das Modul ein Vorsystem angebunden ist.&lt;br /&gt;
&lt;br /&gt;
Der Unload dient dazu, Daten aus der jeweiligen Datenquelle bereitzustellen, damit sie anschließend in SuperX verarbeitet werden können. Je nach Modul und Einrichtung kann der Unload auch dazu dienen, Daten für eine weitere Verarbeitung oder Übertragung bereitzustellen.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Update“ lädt vorhandene Rohdaten in SuperX ein und führt die Hauptladeroutine des Moduls aus.&lt;br /&gt;
&lt;br /&gt;
Dies ist in vielen Fällen die wichtigste Aktion für den täglichen Betrieb. Beim Update werden die vorhandenen Rohdaten verarbeitet und die zugehörigen SuperX-Tabellen aktualisiert.&lt;br /&gt;
&lt;br /&gt;
=== Unload &amp;amp; Update ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload &amp;amp; Update“ führt zuerst den Unload und anschließend das Update aus.&lt;br /&gt;
&lt;br /&gt;
Diese Aktion ist sinnvoll, wenn neue Daten aus einem angebundenen Vorsystem entladen und direkt anschließend in SuperX verarbeitet werden sollen.&lt;br /&gt;
&lt;br /&gt;
=== Upgrade ===&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Upgrade“ führt eine Modulaktualisierung durch. Dabei werden die Datenstrukturen des Moduls auf den ausgelieferten Stand gebracht.&lt;br /&gt;
&lt;br /&gt;
Ein Upgrade sollte ausgeführt werden, wenn eine neue verfügbare Version angezeigt wird oder wenn dies im Rahmen eines Modulupdates erforderlich ist.&lt;br /&gt;
&lt;br /&gt;
== Sonderfall Kennzahlen-Modul ==&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ ist die Verarbeitung etwas anders als bei typischen Modulen mit externem Vorsystem.&lt;br /&gt;
&lt;br /&gt;
Die Datenquelle ist hier in der Regel „SuperX“. Das bedeutet, dass die Kennzahlen nicht primär aus einem externen Fremdsystem entladen werden. Stattdessen basiert die Verarbeitung auf Daten, die bereits in SuperX vorhanden sind.&lt;br /&gt;
&lt;br /&gt;
Für den täglichen Betrieb ist beim Kennzahlen-Modul daher häufig vor allem die Aktion „Update“ relevant. Dabei werden die Kennzahlen auf Basis der vorhandenen SuperX-Daten neu berechnet bzw. aktualisiert.&lt;br /&gt;
&lt;br /&gt;
Die Aktion „Unload“ kann beim Kennzahlen-Modul eine andere Bedeutung haben als bei klassischen Vorsystem-Modulen. Sie kann dazu dienen, Kennzahlen für ein anderes System bereitzustellen, zum Beispiel:&lt;br /&gt;
&lt;br /&gt;
* für ein hochschulübergreifendes SuperX&lt;br /&gt;
* für Vergleichssysteme&lt;br /&gt;
* für landesweite Auswertungen oder Berichtssysteme&lt;br /&gt;
&lt;br /&gt;
Die kombinierte Aktion „Unload &amp;amp; Update“ ist beim Kennzahlen-Modul daher nicht immer die wichtigste Aktion. In vielen Installationen wird das Update gezielt über die Oberfläche ausgeführt, während Export- oder Übertragungsprozesse über automatische Abläufe wie Cronjobs gesteuert werden können.&lt;br /&gt;
&lt;br /&gt;
== Aktueller Lauf ==&lt;br /&gt;
&lt;br /&gt;
Der Bereich „Aktueller Lauf“ zeigt Informationen zum zuletzt gestarteten oder aktuell laufenden ETL-Prozess.&lt;br /&gt;
&lt;br /&gt;
Typische Informationen sind:&lt;br /&gt;
&lt;br /&gt;
* JobExecutionId&lt;br /&gt;
* Name des gestarteten Jobs&lt;br /&gt;
* Status&lt;br /&gt;
* Fortschritt&lt;br /&gt;
* Anzahl der ausgeführten Schritte&lt;br /&gt;
* Log-Ausgabe&lt;br /&gt;
&lt;br /&gt;
[[Bild:SuperX_ETL_Manager_Aktueller_Lauf.png|Bereich „Aktueller Lauf“ mit JobExecutionId, Status, Fortschritt und Log-Ausgabe.]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
Der Status zeigt den aktuellen Zustand des Laufs. Häufige Statuswerte sind:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Status&lt;br /&gt;
! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| STARTING&lt;br /&gt;
| Der Lauf wird gestartet.&lt;br /&gt;
|-&lt;br /&gt;
| STARTED&lt;br /&gt;
| Der Lauf wurde gestartet und wird ausgeführt.&lt;br /&gt;
|-&lt;br /&gt;
| COMPLETED&lt;br /&gt;
| Der Lauf wurde erfolgreich abgeschlossen.&lt;br /&gt;
|-&lt;br /&gt;
| FAILED&lt;br /&gt;
| Der Lauf ist mit einem Fehler abgebrochen.&lt;br /&gt;
|-&lt;br /&gt;
| STOPPED&lt;br /&gt;
| Der Lauf wurde gestoppt.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Fortschritt ===&lt;br /&gt;
&lt;br /&gt;
Der Fortschritt zeigt, wie viele Prozessschritte bereits abgearbeitet wurden. Er ist als technischer bzw. prozessbezogener Fortschritt zu verstehen.&lt;br /&gt;
&lt;br /&gt;
Wichtig ist: Der Fortschrittswert ist keine genaue Zeitprognose.&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann schnell auf eine hohe Prozentzahl springen und dort längere Zeit stehen bleiben, wenn ein einzelner Verarbeitungsschritt besonders lange dauert. Umgekehrt können viele kleine Schritte sehr schnell nacheinander abgeschlossen werden. Die Prozentanzeige beschreibt daher den Abarbeitungsstand der Prozessschritte, nicht die tatsächlich vergangene oder verbleibende Zeit.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
Ein Lauf kann bereits 80 % anzeigen, obwohl noch ein größerer Verarbeitungsschritt aussteht. Ebenso kann ein Lauf am Anfang längere Zeit bei einer niedrigen Prozentzahl stehen bleiben, wenn ein früher Prozessschritt besonders umfangreich ist.&lt;br /&gt;
&lt;br /&gt;
== Log-Ausgabe ==&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe zeigt technische Informationen zum ausgeführten ETL-Prozess. Sie kann helfen, den Ablauf nachzuvollziehen und bei Problemen erste Hinweise zu erhalten.&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe ist vor allem für Supportfälle hilfreich. Für eine tiefergehende Fehleranalyse sind in der Regel administrative Kenntnisse erforderlich. Je nach Fehler müssen zusätzlich Serverlogs, Datenbankinhalte, Moduldateien oder Systemkonfigurationen geprüft werden.&lt;br /&gt;
&lt;br /&gt;
Wenn die Log-Ausgabe nicht sofort erscheint, kann sie über „Log laden“ erneut abgefragt werden. Gerade bei umfangreichen Läufen kann es vorkommen, dass die Log-Ausgabe erst kurze Zeit nach Abschluss vollständig verfügbar ist.&lt;br /&gt;
&lt;br /&gt;
== Typische Nutzungsszenarien ==&lt;br /&gt;
&lt;br /&gt;
=== Bereits vorhandene Rohdaten verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn die Rohdaten bereits vorhanden sind und lediglich erneut verarbeitet werden sollen, wird in der Regel die Aktion „Update“ verwendet.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
* Rohdaten liegen bereits im System vor&lt;br /&gt;
* Berechnungen oder Aggregationen sollen neu ausgeführt werden&lt;br /&gt;
* die SuperX-Tabellen des Moduls sollen aktualisiert werden&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Neue Daten aus einem Vorsystem übernehmen und verarbeiten ===&lt;br /&gt;
&lt;br /&gt;
Wenn neue Daten aus einem externen Vorsystem übernommen und anschließend verarbeitet werden sollen, kann die Aktion „Unload &amp;amp; Update“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden zunächst die Daten aus dem Vorsystem entladen. Anschließend werden die Daten durch das Update in SuperX verarbeitet.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload &amp;amp; Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Nur Daten aus einem Vorsystem entladen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Daten aus einem Vorsystem entladen werden sollen, ohne direkt anschließend die Laderoutine auszuführen, kann die Aktion „Unload“ verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modul auf den ausgelieferten Stand aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Wenn eine neue verfügbare Version angezeigt wird, sollte ein Upgrade geprüft bzw. durchgeführt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen innerhalb von SuperX aktualisieren ===&lt;br /&gt;
&lt;br /&gt;
Beim Kennzahlen-Modul „kenn“ werden die Daten in der Regel aus SuperX selbst bezogen. Wenn die Kennzahlen neu berechnet oder aktualisiert werden sollen, ist häufig die Aktion „Update“ die passende Aktion.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Kennzahlen für ein anderes System bereitstellen ===&lt;br /&gt;
&lt;br /&gt;
Wenn Kennzahlen für ein anderes System bereitgestellt werden sollen, kann beim Kennzahlen-Modul die Aktion „Unload“ relevant sein.&lt;br /&gt;
&lt;br /&gt;
Dies kann zum Beispiel für hochschulübergreifende Auswertungen, Vergleichssysteme oder landesweite Berichtssysteme genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Geeignete Aktion:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hinweise zur Nutzung ==&lt;br /&gt;
&lt;br /&gt;
Bei der Nutzung des ETL Managers sollten folgende Punkte beachtet werden:&lt;br /&gt;
&lt;br /&gt;
* Ein laufender Prozess sollte nicht unnötig mehrfach parallel gestartet werden.&lt;br /&gt;
* Nach einem Lauf kann die Modulübersicht über „Aktualisieren“ neu geladen werden.&lt;br /&gt;
* Die Prozentanzeige ist kein Zeitindikator, sondern beschreibt den Fortschritt der Prozessschritte.&lt;br /&gt;
* Bei Fehlern sollte zuerst der Status und anschließend die Log-Ausgabe geprüft werden.&lt;br /&gt;
* Für tiefergehende Fehleranalysen sollten Administratorinnen und Administratoren oder technische Ansprechpartner einbezogen werden.&lt;br /&gt;
* Bei neuen verfügbaren Modulversionen sollte geprüft werden, ob ein Upgrade auszuführen ist.&lt;br /&gt;
&lt;br /&gt;
== Details-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Über den Button „Details“ können zusätzliche technische Informationen zu einem Modul angezeigt werden.&lt;br /&gt;
&lt;br /&gt;
Der Details-Bereich ist vor allem für fortgeschrittene Benutzerinnen und Benutzer, Administratorinnen und Administratoren oder den Support gedacht. Er kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* technische Modulkennung&lt;br /&gt;
* Systeminfo-ID&lt;br /&gt;
* technische Jobnamen&lt;br /&gt;
* verfügbare Jobs&lt;br /&gt;
* Rohdaten der Schnittstelle&lt;br /&gt;
* zusätzliche technische Moduldetails&lt;br /&gt;
&lt;br /&gt;
Für den normalen Betrieb ist der Details-Bereich meist nicht erforderlich. Er ist vor allem dann hilfreich, wenn bei Rückfragen oder Supportfällen genaue technische Informationen benötigt werden.&lt;br /&gt;
&lt;br /&gt;
== Diagnose-Bereich ==&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist eine technische Hilfsfunktion zur Prüfung der ETL-Manager-Installation. Er ist global angeordnet und nicht auf ein einzelnes Modul beschränkt.&lt;br /&gt;
&lt;br /&gt;
Die Diagnose führt keine Reparaturen automatisch aus. Sie zeigt technische Informationen, mögliche Auffälligkeiten und Hinweise an. Zusätzlich können SQL- oder Shell-Hinweise angezeigt werden, die bei Bedarf von Administratorinnen und Administratoren kopiert und manuell ausgeführt werden können.&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich kann unter anderem folgende Informationen enthalten:&lt;br /&gt;
&lt;br /&gt;
* Erreichbarkeit der REST-Schnittstellen&lt;br /&gt;
* Webapp-, Tomcat- und Java-Informationen&lt;br /&gt;
* Pfade und Dateisysteminformationen&lt;br /&gt;
* Festplattenspeicher&lt;br /&gt;
* Datenbankinformationen&lt;br /&gt;
* Prüfung der Log-Tabelle&lt;br /&gt;
* Versionsquellen&lt;br /&gt;
* bekannte Fehlerbilder&lt;br /&gt;
* kopierbare SQL- und Shell-Hinweise&lt;br /&gt;
&lt;br /&gt;
Der Diagnose-Bereich ist vor allem für Administratorinnen und Administratoren oder technische Ansprechpartner gedacht. Für normale Anwenderinnen und Anwender ist er in der Regel nur dann relevant, wenn ein Fehler auftritt oder technische Informationen weitergegeben werden sollen.&lt;br /&gt;
&lt;br /&gt;
== Administratorhinweise ==&lt;br /&gt;
&lt;br /&gt;
Dieser Abschnitt enthält ergänzende technische Hinweise. Er richtet sich vor allem an Administratorinnen und Administratoren sowie an den technischen Support.&lt;br /&gt;
&lt;br /&gt;
=== Herkunft der Versionsinformationen ===&lt;br /&gt;
&lt;br /&gt;
Die Oberfläche zeigt eine installierte und eine verfügbare Version an.&lt;br /&gt;
&lt;br /&gt;
Die installierte Version beschreibt den Stand, der in der Datenbank installiert ist. Falls die REST-Schnittstelle keinen Wert liefert, kann die Version aus der Tabelle &amp;lt;code&amp;gt;db_version&amp;lt;/code&amp;gt; gelesen werden.&lt;br /&gt;
&lt;br /&gt;
Die verfügbare Version beschreibt den ausgelieferten Stand im Dateisystem. Sie kann aus der Modul-XML-Datei gelesen werden. Für normale Module liegt diese Datei typischerweise unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/module/&amp;lt;modul&amp;gt;/conf/&amp;lt;modul&amp;gt;.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das Kernmodul gilt ein Sonderfall. Die Modul-XML liegt unter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
WEB-INF/conf/edustore/db/install/conf/kern.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich kann eine Datei &amp;lt;code&amp;gt;VERSION&amp;lt;/code&amp;gt; im jeweiligen Modulverzeichnis als Fallback verwendet werden.&lt;br /&gt;
&lt;br /&gt;
=== Log-Tabelle ===&lt;br /&gt;
&lt;br /&gt;
Die Log-Ausgabe des ETL Managers verwendet eine Datenbanktabelle für die Joblogs. Wenn diese Tabelle fehlt oder unvollständig ist, kann die Log-Ausgabe fehlschlagen.&lt;br /&gt;
&lt;br /&gt;
Eine mögliche Struktur der Tabelle ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CREATE TABLE IF NOT EXISTS job_log&lt;br /&gt;
(&lt;br /&gt;
   job_instance_id  bigint   NOT NULL,&lt;br /&gt;
   log              text,&lt;br /&gt;
   status           text&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
CREATE UNIQUE INDEX IF NOT EXISTS ix_job_log1&lt;br /&gt;
ON public.job_log USING btree (job_instance_id);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese SQL-Anweisungen sollten nicht automatisch durch die Oberfläche ausgeführt werden. Sie dienen als Hinweis für Administratorinnen und Administratoren und müssen bei Bedarf manuell geprüft und ausgeführt werden.&lt;br /&gt;
&lt;br /&gt;
=== Typische technische Fehlerbilder ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Fehlerbild&lt;br /&gt;
! Mögliche Ursache&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/jobLog/{id}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Die Tabelle &amp;lt;code&amp;gt;job_log&amp;lt;/code&amp;gt; fehlt, ist unvollständig oder der Logeintrag ist noch nicht verfügbar.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/job/list/{modul}&amp;lt;/code&amp;gt; liefert HTTP 500&lt;br /&gt;
| Moduldateien fehlen, Pfade stimmen nicht oder die Webapp verwendet nicht den erwarteten Dateistand.&lt;br /&gt;
|-&lt;br /&gt;
| REST-Endpunkt liefert HTTP 404&lt;br /&gt;
| Der Context-Pfad, die Webapp, der Port oder ein Tunnel zeigt möglicherweise nicht auf die erwartete Anwendung.&lt;br /&gt;
|-&lt;br /&gt;
| Log erscheint erst nach erneutem Laden&lt;br /&gt;
| Der ETL-Lauf ist abgeschlossen, aber der Logeintrag war beim ersten Abruf noch nicht vollständig verfügbar.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Der SuperX ETL Manager stellt eine zentrale Oberfläche zur Ausführung und Überwachung von ETL-Prozessen bereit. Für den täglichen Betrieb stehen vor allem die Aktionen „Unload“, „Update“, „Unload &amp;amp; Update“ und „Upgrade“ im Vordergrund.&lt;br /&gt;
&lt;br /&gt;
Die Modulübersicht zeigt den Installationsstatus, Versionsinformationen, Datenquellen und Datenbankverbindungen. Der Bereich „Aktueller Lauf“ informiert über den Fortschritt eines gestarteten Prozesses. Die Log-Ausgabe liefert technische Zusatzinformationen und kann bei der Fehleranalyse helfen.&lt;br /&gt;
&lt;br /&gt;
Details und Diagnose ergänzen die Oberfläche um technische Informationen für Support- und Administrationsfälle. Sie unterstützen bei der Analyse, führen aber keine automatischen Reparaturen aus.&lt;br /&gt;
&lt;br /&gt;
= Installation und Verwaltung in der Shell mit Skripten =&lt;br /&gt;
&lt;br /&gt;
== Installation von Modulen ==&lt;br /&gt;
Das Kernmodul enthält außer Administrationsabfragen und Tabellen keinerlei Inhalte. Die Inhalte werden in Form von Modulen hinzugefügt. Dazu gibt es vorgefertigte [[Kernmodul_Shellscripte#Modulverwaltung|Installationsscripte]].&lt;br /&gt;
&lt;br /&gt;
=== Architektur von SuperX-Modulen ===&lt;br /&gt;
Die folgende Abbildung zeigt die Architektur von Modulen ab Beispiel vom HISCOB-Modul:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Ein Modul besteht auf Datenbankseite aus Abfragen, Hilfstabellen, Datentabellen und Schlüsseltabellen (sowie Prozeduren).&lt;br /&gt;
Auf Webserver-Seite können auch XSL-Stylesheets vorhanden sein.&lt;br /&gt;
| [[Bild:modularchitektur_cob.png|417x307px]]&lt;br /&gt;
|}&lt;br /&gt;
Die Abbildung zeigt, dass ein Modul eigene Komponenten nutzt, aber auch auf Teile des Kernmoduls zugreift, z.B. das Orgranigramm - dies macht SuperX zu einem integrierten System. Neben dem Organigramm sind alle anderen Komponenten des Kernmoduls natürlich betroffen, z.B. Themenbaum, Userrechte.&lt;br /&gt;
Die Ordnerstruktur eines Moduls spiegelt die Komponenten des Systems wieder. Es gibt je ein Verzeichnis für datentabellen, schluesseltabellen und hilfstabellen. &lt;br /&gt;
Die Installation eines Moduls ist in der Dokumentation des jeweiligen Moduls näher beschrieben. Module, die auf dem Kernmodul 2.1 oder höher basieren, haben einen einheitlichen Aufbau.&lt;br /&gt;
&lt;br /&gt;
=== Modulscripte im Kernmodul ===&lt;br /&gt;
Seit Version 2.1 werden die Datenbankschemata und Scripte der Module in einem einheitlichen Format zusammengestellt und in einer Datei $SUPERX_DIR/db/module/$MODULNAME/conf/$MODULNAME.xml gespeichert. Das XML-Format hat den Vorteil, dass die Scripte dynamisch für Postgres und Informix erzeugt werden können, und dass die Scripte vereinheitlicht werden. Aus dieser Datei werden die Scripte erzeugt, die das Modul jeweils für Postgres und Informix installieren / updaten /aktualisieren / überprüfen und entfernen. Die folgende Abbildung zeigt das Vorgehen:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Aus der xml-Datei werden die jeweiligen Scripte für die Installation, den Update, die Extraktions-, Transformations- und Ladescripte (ETL) und die Deinstallation erzeugt.&lt;br /&gt;
| [[Bild:modulscripte_erzeugen.png|417x371px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Die Modul-Scripte liegen als Shellscripte im Verzeichnis $SUPERX_DIR/db/bin, und sind an [[Kernmodul_Shellscripte#Modulverwaltung|anderer Stelle]] im Detail erläutert.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| module_install.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_install.x sos $SOS_PFAD&lt;br /&gt;
| Installiert ein Modul, d.h. erzeugt die Tabellen, Views, Funktionen und Abfragen. Die Abfragen werden in den Themenbaum eingehängt. &lt;br /&gt;
|-&lt;br /&gt;
| module_etl.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_etl.x sos $SOS_PFAD&lt;br /&gt;
| Aktualisiert das Modul, d.h. lädt die Rohdaten, Transformiert sie, und aggregiert die Hilfstabellen. Fehler werden in eine Log-Datei geschrieben, diese kann dann per Mail an einen Admin versandt werden. Wenn das Script erfolgreich durchläuft, wird die Tabelle systeminfo aktualisiert.&amp;lt;br /&amp;gt;&lt;br /&gt;
Das Script wird nicht direkt als Cronjob aufgerufen, sondern von einem Shellscript, das die Umgebungsvariablen und Parameter setzt, z.B. cob_update.x.&lt;br /&gt;
|-&lt;br /&gt;
| module_drop.x -name- -pfad-&lt;br /&gt;
z.B.:&lt;br /&gt;
module_ drop.x sos $SOS_PFAD&lt;br /&gt;
| Entfernt das Modul bzw. die Tabellen, Views, Funktionen und Abfragen.&lt;br /&gt;
|-&lt;br /&gt;
| module_scripts_create.x -name- -pfad- -Datenbanksystem(optional, INFORMIX, POSTGRES)- -Versionsnr.-&lt;br /&gt;
| Erzeugt via XSL-Transformation die jeweiligen Scripte, die in den obigen Scripten aufgerufen werden, z.B. bau_install_ids.sql für das Installationsscript des Baumoduls beim Informix Dynamic Server.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neben den operativen Scripten erzeugt module_scripts_create.x auch html-Dateien zur Dokumentation eines Moduls in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/-Modulname-.html&lt;br /&gt;
(auch als rtf-Datei zu Einbindung in Modul-Dokumentationen) sowie zur Schnittstelle in&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/rohdaten/-Modulname-_unload.html&lt;br /&gt;
Darüber hinaus werden auch DBForms-Formulare erzeugt.&lt;br /&gt;
&lt;br /&gt;
=== Installation eines Moduls: Allgemeines Vorgehen ===&lt;br /&gt;
Das Vorgehen bei der Installation eines Moduls ist standardisiert. Im folgenden eine Kurzbeschreibung, weiter unten finden Sie das Vorgehen am Beispiel des ZUL-Moduls im Detail.&lt;br /&gt;
* Entpacken Sie das Modul in $SUPERX_DIR&lt;br /&gt;
* Erweiterung der Umgebung in der Datei $SUPERX_DIR/db/bin/SQL_ENV: fügen Sie den Inhalt der jew. Beispieldatei SQL_ENV_-Modulname-.sam in der SQL_ENV an, wenn noch nicht vorhanden, und ändern Sie ggf. Email-Adressen für log- und Fehlermails.&lt;br /&gt;
* Entladen der Rohdaten; auch hier müssen vorher Umgebungsvariablen zum Vorsystem angepasst werden&amp;lt;br /&amp;gt;&lt;br /&gt;
(Datei $-Modulname-_LOAD_PFAD/-Modulname-_ENV), hier liegt ebenfalls eine *.sam-Datei vor&lt;br /&gt;
* Kopieren der Rohdaten nach -Modulpfad-/rohdaten. Neuere SuperX-Module haben dafür vorgefertigte Scripte mit dem Namen -Modulname-_copy.x (z.B. zul_copy.x)&lt;br /&gt;
* Installieren Sie das Modul mit -Modulname-_erzeugen.x, z.B. mit  zul_modul_erzeugen.x&lt;br /&gt;
* Wenn die Installation erfolgreich war, können Sie das Modul aktualisieren mit&amp;lt;br /&amp;gt;&lt;br /&gt;
-Modulname-_update.x (ggf. mit Parametern)&amp;lt;br /&amp;gt;&lt;br /&gt;
z.B. mit &lt;br /&gt;
 zul__update.x&lt;br /&gt;
d.h. die ETL-Prozesse werden gestartet (s.u.).&lt;br /&gt;
* Wenn das Modul erfolgreich aktualisiert ist, wird eine Prüfprozedur gestartet, die die Daten plausibilisiert. Fehler und Warnungen finden Sie in der Datei $-Modulname-_ERRORDAT.&lt;br /&gt;
* Starten Sie Tomcat neu. Wenn Tomcat auf einem separaten Server installiert ist, müssen Sie vorher die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml dorthin übertragen. &lt;br /&gt;
* Schritt 7 wird bei jedem SuperX-Update wiederholt. Nun muss der Entladerhythmus geplant werden, und die Cronjobs werden eingerichtet. Es gibt eine Musterdatei $SUPERX_DIR/db/module/-MODULNAME-/-MODUL-_update_cron.x.sam , benennen sie diese um nach -MODUL-_update_cron.x und fügen Sie das Script in die crontab ein. &lt;br /&gt;
&lt;br /&gt;
==== Allgemeines zum Laden ====&lt;br /&gt;
Zunächst müssen die Rohdaten aus dem Vorsystem entladen werden. &lt;br /&gt;
Für das Entladen gibt es ferner zwei Modi: Das &amp;quot;Pull&amp;quot;-Verfahren und das &amp;quot;Push&amp;quot;-Verfahren. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Pull&amp;quot;-&#039;&#039;&#039;Verfahren wird einer Benutzerkennung auf dem SuperX-Rechner Zugriffsrecht auf die SOSPOS-Datenbank gegeben, und die Daten werden via TCP/IP aus dem Basissystem entladen. Bei APP / HISinOne als Quellsystem ist &amp;quot;Pull&amp;quot; das Standardvorgehen. &lt;br /&gt;
* Beim &#039;&#039;&#039;&amp;quot;Push&amp;quot;-&#039;&#039;&#039;Verfahren werden die Entladescripte auf den SOSPOS-Rechner kopiert und dort von einer Benutzerkennung auf dem SOSPOS-Rechner ausgeführt. Die Rohdaten müssen dann auf den SuperX-Rechner kopiert werden. Dieses Verfahren klappt bei Informix unter Unix problemlos, bei Entladen aus Postgres müsste das komplette SuperX-Kernmodul installiert werden. &lt;br /&gt;
Am einfachsten ist immer das &amp;quot;Pull&amp;quot;-Verfahren, das mit fast allen Quellsystemen funktioniert und wenig Konfiguration auf dem Quellsystem erfordert. Aufgrund von Sicherheitsvorkehrungen oder Netz-Infrastrukturen wählen aber viele Hochschulen das &amp;quot;Push&amp;quot;-Verfahren. Da derzeit Informix /Unix die gängigste Plattform an Hochschulen ist, ist dies auch kein Problem. &lt;br /&gt;
&lt;br /&gt;
==== Einrichtung der Entladescripte ====&lt;br /&gt;
Im Push-Verfahren btw. unter SuperX können Sie mitgelieferte Shellscripte nutzen. Das folgende Beispiel des ZUL-Moduls zeigt das Vorgehen:&lt;br /&gt;
Die Entladescripte liegen im Verzeichnis $SUPERX_DIR/db/module/zul/rohdaten und lauten je nach Systemversion: &lt;br /&gt;
 zul_unload.x&lt;br /&gt;
&lt;br /&gt;
Die Scripte laufen nur, wenn die entsprechenden Umgebungsvariablen in der Datei ZUL_ENV (im gleichen Verzeichnis, ein Muster liegt vor in ZUL_ENV.sam) korrekt gesetzt sind, benennen Sie die Musterdatei um nach ZUL_ENV und tragen die richtigen Umgebungsvariablen ein, z.B. den Pfad für $INFORMIXDIR. &lt;br /&gt;
&#039;&#039;&#039;ZUL_ENV Die Umgebung für Entladescripte aus ZUL-GX(Auszug)&#039;&#039;&#039; &lt;br /&gt;
 ##Pfad für Entladedaten:&lt;br /&gt;
 ZUL_PFAD=.; export ZUL_PFAD &lt;br /&gt;
 ##hier muss Unterverzeichnis unl existieren!&lt;br /&gt;
&lt;br /&gt;
 In der ZUL_ENV müssen außerdem folgende Umgebungsvariablen gesetzt werden (defaults sind bereits vorbelegt, aber hier und da müssen Sie sicher ran): &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Informix gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXDIR&lt;br /&gt;
| Home-Verzeichnis von Informix &lt;br /&gt;
|-&lt;br /&gt;
| INFORMIXSERVER&lt;br /&gt;
| Name des Informixservers &lt;br /&gt;
|-&lt;br /&gt;
| ONCONFIG&lt;br /&gt;
| Name der onconfig, wenn auf dem SOS-Rechner mehrere Informix-Instanzen laufen &lt;br /&gt;
|-&lt;br /&gt;
| CLIENT_LOCALE&lt;br /&gt;
| Sprachumgebung (wichtig fürs Entladen von Datumsformaten) &lt;br /&gt;
|-&lt;br /&gt;
| SERVER_LOCALE&lt;br /&gt;
| dito &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Nur für Postgres gelten:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| PGDATESTYLE&lt;br /&gt;
| Datumsformat &amp;quot;German&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| PGPORT&lt;br /&gt;
| Port vom Postgres-Server, standardmäßig 5432 &lt;br /&gt;
|-&lt;br /&gt;
| PGHOST&lt;br /&gt;
| Hostname oder IP-Adresse vom Postgres-Server &lt;br /&gt;
|-&lt;br /&gt;
| PGUSER&lt;br /&gt;
| Benutzerkennung für Postgres-Server (nur Datenbank, nicht Betriebssystem) &lt;br /&gt;
|-&lt;br /&gt;
| PGPATH&lt;br /&gt;
| Installationsverzeichnis von Postgres, z.B. /usr/local/pgsql &lt;br /&gt;
|-&lt;br /&gt;
| DB_PROPERTIES&lt;br /&gt;
| Pfad zur db-zul.properties-Datei mit den Zugangsparametern für SOSPOS unter Postgres &lt;br /&gt;
|-&lt;br /&gt;
| LOGGING_PROPERTIES&lt;br /&gt;
| Pfad zur Steuerungsdatei mit den Parametern für das Logging beim Entladen, voreingestellt auf ./logging.properties. Normalerweise brauchen Sie hier nichts ändern, wenn beim Entladen Probleme auftauchen, kann man den Level von SEVERE auf INFO oder FINEST ändern, dann werden die konkreten SQLs geloggt. Aber Achtung: wenn keine Fehler mehr auftreten, müssen Sie den Level wieder auf SERVERE ändern, sonst kommen Schlüsselworte in die Logdatei zul_unload.err, die dann bei der Übernahme nach SuperX fälschlicherweise zu Fehlermeldungen führen. &lt;br /&gt;
|}&lt;br /&gt;
Unter Postgres muss für das &amp;quot;Pull&amp;quot;-Verfahren beim Entladen die Datenbankverbindung in der Datei db-zul.properties eingetragen werden (Muster für Postgres liegt bei in db-zul_pg.properties). Dazu laden Sie einmal die Datei ZUL_ENV mit den obigen Parameter, starten den SuperX-Propadmin (siehe Administrationshandbuch Kernmodul) und richten die Verbindung zum SOSPOS-Server ein. Das Kennwort wird verschlüsselt gespeichert. Danach sind die Entladescripte für Postgres ausführbar. &lt;br /&gt;
Hinweis: Anders als Informix hat Postgres hat eine eigene, vom Basissystem unabhängige Benutzerverwaltung. Daher brauchen Sie den User, den Sie zum Entladen aus Postgres nutzen, nicht auf dem SuperX- oder SOSPOS-Rechner auf Betriebssystem-Ebene einrichten. Sie können also z.B. auf dem SuperX-Rechner zum Entladen aus SOSPOS die Kennung sospos des Postgres- Rechners verwenden. Oder Sie richten in der SOSPOS -Datenbank den Benutzer SuperX ein und geben ihm Leserecht auf die Tabellen sowie das Recht, Tabellen und Stored Procedures anzulegen. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;Für alle Platformen gelten folgende Variablen:&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
| ERRORMAIL&lt;br /&gt;
| An wen solle eine Logmail verschickt werden, wenn das Entladen nicht geklappt hat? (nur Unix). &lt;br /&gt;
|-&lt;br /&gt;
| LOGMAIL&lt;br /&gt;
| An wen soll immer eine Logmail verschickt werden &lt;br /&gt;
|-&lt;br /&gt;
| MAILPROG&lt;br /&gt;
| Pfad zum ausführbaren Mailprogramm unter Unix, Vorbelegung ist &amp;quot;mail&amp;quot;, manche Unixe haben aber auch &amp;quot;mutt&amp;quot; oder &amp;quot;mailx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom ZUL-Rechner auf den SuperX-Rechner kopiert werden sollen, dann werden für das Script zul_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync und scp sind wählbar. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem SuperX-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/zul/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem SuperX-Rechner, in der Regel &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des SuperX-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Dann starten Sie das Script zul_unload.x. Wenn es gelaufen ist, müssten die Dateien im unl-Verzeichnis stehen. Prüfen Sie dann bitte, ob dort Dateien mit 0 bytes stehen. Die Logdatei heisst zul_unload.err. &lt;br /&gt;
&lt;br /&gt;
===== Entladen unter Windows =====&lt;br /&gt;
Für das Entladen unter Windows gibt es Muster-Dateien im jew. Rohdaten-Verzeichnis, z.B. $SOS_PFAD/rohdaten/sos_unload.bat. Die Einrichtung geschieht dann in [[Kernmodul_Komponentenverwaltung#Java-Client_zum_Entladen_von_Quell-Datenbanken|Java]]. Ans Ende der Datei können Sie noch schreiben:&lt;br /&gt;
date /T &amp;gt;superx.datum&lt;br /&gt;
Dann wird auch die Datumsdatei geschrieben.&lt;br /&gt;
&lt;br /&gt;
===== Dateitransfer beim Push-Verfahren =====&lt;br /&gt;
Wenn Sie das Verzeichnis nicht gemounted haben, müssen das Verzeichnis unl, die zul_unload.err und die superx.datum dann in das Verzeichnis $ZUL_LOAD_PFAD auf dem SuperX-Rechner kopiert werden, ein Script dafür liegt ebenfalls bei (zul_copy.x). Das Entladedatum wird danach in der Textdatei $ZUL_LOAD_PFAD/superx.datum gespeichert; wenn das Script einen Fehler findet, dann wird das vorherige Datum (in der Datei superx.datum.alt) gesetzt. &lt;br /&gt;
&lt;br /&gt;
Für den Transfer der Rohdaten beim Push-Verfahren wird in SuperX die dateibasierte Schnittstelle genutzt. Unter UNIX läßt sich dieser Transfer vollends automatisieren, indem die Programme scp oder rsync auf der Basis des OpenSSH-Pakets genutzt werden. Beide setzen auf das ssh-Protokoll 2 auf und stellen somit einen verschlüsselten Dateitransfer sicher. Auch [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] ist möglich. &lt;br /&gt;
In den jeweiligen Modulen wird im Verzeichnis rohdaten eine Beispieldatei mit dem Namen -MODULNAME-_ENV.sam ausgeliefert, die Sie umbenennen können nach -MODULNAME-_ENV. Darin werden am Ende der Datei die Parameter zum Kopieren festgelegt, also die Userkennung REMOTE_USER, der Hostname REMOTE_HOST, und die Methode des Kopierens (COPY_METHOD) sowie die jeweiligen Zielpfade. Diese Umgebungsvariablen werden von dem jeweiligen Script -modulname-_copy.x benutzt. &lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Unix =====&lt;br /&gt;
Damit die Passworteingabe unter Unix entfällt, muss man wie folgt vorgehen:&lt;br /&gt;
Loggen Sie sich zunächst testweise einmal ein. Wenn Sie z.B. vom COB-Server auf den SuperX-Server kopieren wollen, loggen Sie sich als user cob auf cobhost ein mit&amp;lt;br /&amp;gt;&lt;br /&gt;
 ssh superx@superxhost&lt;br /&gt;
Beim ersten Mal müssen Sie die Sicherheitsabfrage mit &amp;quot;yes&amp;quot; bestätigen.&lt;br /&gt;
Erzeugen Sie auf dem Quellrechner einen öffentlichen Schlüssel mittels &lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t ed25519 -C &amp;quot;cob@cobhost&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 wobei man eine leere Passphrase vergibt. Der öffentliche Teil dieses Schlüssels (~/.ssh/id_ed25519.pub) muss auf dem Zielrechner in die Datei ~/.ssh/authorized_keys eingefügt werden, ggf. muss die Datei neu erzeugt werden.&lt;br /&gt;
Wenn z.B. auf dem COB-Server unter der Kennung cob ein Key wie folgt erzeugt wurde:&lt;br /&gt;
&lt;br /&gt;
;Beispieleintrag eines Public Keys:  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 ssh-ed25519 AAAAC3N.[hier viele kryptische Zeichen]....4V cob@cobhost&lt;br /&gt;
&lt;br /&gt;
Dann wird genau diese Zeile in der Datei /home/superx/.ssh/authorized_keys angefügt (die Datei kann mehrere PublicKeys enthalten, ein Eintrag pro Absatz).&lt;br /&gt;
Achten Sie auch auf Dateirechte: Die Verzeichnisse und Dateien sollten keine Schreibrechte für Gruppen haben. Im Zweifelsfall z.B. für den user superx:&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 700 /home/superx/.ssh&lt;br /&gt;
 chmod 600 /home/superx/.ssh/authorized_keys&lt;br /&gt;
Danach sollte z.B. der Login vom cobhost als user cob mit ssh superx@superxhost ohne Passworteingabe klappen. Wenn nicht, schalten Sie das Logging mit ssh -v superx@superxhost ein. Eine Möglichkeit ist, dass die PublicKey-Authentifizierung in der Konfigurationsdatei des SSHD (normal /etc/ssh/ssh_config) abgeschaltet ist. Weitere Diagnosen liefert die Datei /var/log/messages.&lt;br /&gt;
Sie können außerdem noch einschränken, von welchem Host die obige Authentifizierung ermöglicht wird. Dazu setzen Sie den Parameter &amp;quot;from=*.uni-xy.de&amp;quot; davor, z.B.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| Einschränkung &amp;quot;from&amp;quot;&amp;lt;br /&amp;gt;&lt;br /&gt;
in authorized_keys&lt;br /&gt;
| from=&amp;quot;*.uni-xy.de&amp;quot; ssh-rsa AAAAB3Nza…[hier viele kryptische &lt;br /&gt;
Zeichen]…pg6VkCc= cob@cobhost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Wenn Sie die Kopiermethode scp benutzen, und die obige &amp;quot;authorized_keys&amp;quot;-Metohde mit PublicKey nicht nutzen wollen, können Sie auch mit Private Keys arbeiten (siehe SSH-Doku). Dazu können sie in der *_ENV-Datei in dem Parameter SCP_OPTS den Verweis auf den private Key setzen.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
| SCP_OPTS in *_ENV:&amp;lt;br /&amp;gt;&lt;br /&gt;
Beispiel COB_ENV&lt;br /&gt;
| SCP_OPTS=&amp;quot;-p -B -i /home/cob/.ssh/superx_key&amp;quot;&lt;br /&gt;
export SCP_OPTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Entfernen der Passworteingabe unter Windows =====&lt;br /&gt;
Wenn Sie die ssh-Shell putty aus dem Installationspaket nutzen, haben Sie im Installationsordner auch die Anwendung &amp;quot;puttyGen.exe&amp;quot;. Wenn Sie putty als reine Executable nutzen, laden Sie die Anwendung separat herunter. [http://winscp.net/download/puttygen.exe PuttyGen]&lt;br /&gt;
*     Folgen Sie der Anleitung auf der Seite http://winscp.net/eng/docs/ui_puttygen, um den SSH2-DSA oder RSA Schlüssel zu erzeugen. Für den Schlüssel bitte kein Passwort vergeben, wenn Sie das Tool automatisiert nutzen.&lt;br /&gt;
*     Den privaten Schlüssel geben Sie in Putty bzw. Winscp im Menü &amp;quot;Session&amp;quot; im Feld &amp;quot;Private Key File&amp;quot; an.&lt;br /&gt;
*    Der Button &amp;quot;Save public key&amp;quot; ist nicht für OPENSSH unter Linux als Zielserver geeignet. Im folgenden Screenshot sehen Sie den markierten Bereich, den Sie kopieren müssen:&lt;br /&gt;
[[Bild:puttygen.png|413x402px]]&lt;br /&gt;
*     Kopieren Sie Ihren Public Key, den Sie oben mit PuttyGen erzeugt haben, zur Datei &amp;quot;authorized_keys&amp;quot; und kopieren Sie diese in das Verzeichnis ~/.ssh/&lt;br /&gt;
* Im Profil unter Connection -&amp;gt; SSH -&amp;gt; Auth -&amp;gt; Credentials geben Sie den Pfad zum privaten Schlüssel in &amp;quot;Private key file&amp;quot; an.&lt;br /&gt;
* Bei erneutem Login mit Putty oder Winscp sollte die Passwortabfrage entfallen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP (Server) =====&lt;br /&gt;
Beim Push-Verfahren wird, wenn mit scp oder rsync kopiert wird, eine Login-Shell vorausgesetzt. Wenn dies aus Sicherheitsgründen nicht gewünscht ist bzw. wg. Einsatz von Windows nicht möglich ist, können Sie auch sftp nutzen, dies wird in modernen ssh-Servern mitgeliefert und bietet ebenfalls verschlüsselten Datentransfer. Zur Einrichtung des Servers:&lt;br /&gt;
Der SSH-Dienst wird wie folgt konfiguriert (am Beispiel Ubuntu Linux 22.04 LTS) mit dem SFTP-Verzeichnis /home/sftp/-benutzername: &lt;br /&gt;
&lt;br /&gt;
In der Datei /etc/ssh/sshd_config die Zeile auskommentieren:&lt;br /&gt;
 #Subsystem      sftp    /usr/lib/openssh/sftp-server&lt;br /&gt;
und stattdessen:&lt;br /&gt;
 Subsystem sftp internal-sftp&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
         ChrootDirectory /home/sftp/%u&lt;br /&gt;
         ForceCommand internal-sftp&lt;br /&gt;
        AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Danach starten Sie den SSH-Dienst neu:&lt;br /&gt;
 service ssh restart&lt;br /&gt;
&lt;br /&gt;
Dann legen Sie die Gruppe &amp;quot;sftponly&amp;quot; an:&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
 und dann den Unix-User an, und geben ihm die Gruppe &amp;quot;sftponly&amp;quot;. Hier ein Script:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SFTPUSERNAME=$1&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 useradd -b /home/sftp -s /bin/false -G sftponly $SFTPUSERNAME&lt;br /&gt;
 chown root:root /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 chmod 755 /home/sftp/$SFTPUSERNAME&lt;br /&gt;
 mkdir -p /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
 chown $SFTPUSERNAME:sftponly /home/sftp/$SFTPUSERNAME/incoming&lt;br /&gt;
&lt;br /&gt;
Danach legen Sie mit &lt;br /&gt;
 passwd $SFTPUSERNAME&lt;br /&gt;
ein Passwort fest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Der User kann sich dann nicht mehr mit ssh einloggen, nur noch mit sftp, und landet beim Login in /home/$KENNUNG, in einem &amp;quot;chroot-Käfig&amp;quot;, und der User kann mit SFTP in den Ordner &amp;quot;incoming&amp;quot; schreiben. Zum Testen geben Sie ein: &lt;br /&gt;
 sftp $KENNUNG@-Host-&lt;br /&gt;
&lt;br /&gt;
Wenn beim SFTP Login die Meldung kommt:&lt;br /&gt;
 client_loop: send disconnect: Broken pipe&lt;br /&gt;
müssen Sie darauf achten dass das Home-Verzeichnis des Users nicht dem User gehört, sondern root.&lt;br /&gt;
&lt;br /&gt;
Wenn der Login klappt, können Sie nach dem [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|oben]]  beschriebenen Verfahren die Passworteingabe durch PublicKey-Authentifizierung ersetzen.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP =====&lt;br /&gt;
Für das Kopieren der Rohdaten können Sie im Kopierscript &amp;quot;-modulname-_copy.x&amp;quot; auch sftp-Kommandos nutzen. Sie müssen nur in der ENV-Datei die Variable&lt;br /&gt;
 COPY_METHOD=sftp&lt;br /&gt;
setzen. Alle anderen Variablen und Mechanismen wie z.B. [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Unix|Entfernen der Passworteingabe]] entsprechen denen von SCP / SSH (s.o.). &lt;br /&gt;
Spezielle Optionen fürs sftp können Sie in der Umgebungsvariable SFTP_OPTS setzen. Es kann z.B. sein, dass das Kopieren großer Dateien in einen Timeout läuft. Bei CSV bietet es sich an, die Dateien zu komprimieren, sie können also setzen:&lt;br /&gt;
 SFTP_OPTS=&amp;quot;-oCompression=yes&amp;quot;&lt;br /&gt;
 export SFTP_OPTS&lt;br /&gt;
Danach wiederholen Sie das kenn_copy.x&lt;br /&gt;
Dies ist nur ein Beispiel. Weitere Optionen für SFTP entnehmen Sie der manpage.&lt;br /&gt;
Das Kopieren mit sftp klappt übrigens auch unter Windows z.B. mit dem Programm [http://winscp.net/eng/docs/lang:de winscp]. Dies wird im folgenden erläutert.&lt;br /&gt;
&lt;br /&gt;
===== Einrichtung von SFTP unter Windows =====&lt;br /&gt;
Unter Windows ist das Standardprogramm für SFTP die Anwendung [http://winscp.net/eng/docs/lang:de winscp]. Sie können die Passworteingabe analog zu Putty [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|entfernen]]. Danach können Sie eine Session erzeugen:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp1.png|517x364px]]&lt;br /&gt;
&lt;br /&gt;
Im Feld &amp;quot;Private key file&amp;quot; geben Sie den private key ein, den Sie [[Kernmodul_Komponentenverwaltung#Entfernen_der_Passworteingabe_unter_Windows|oben]] erzeugt haben. Klicken Sie dann auf &amp;quot;Save session&amp;quot;, und geben Sie einen kurzen, sprechenden Namen ohne Leerzeichen oder Umlaute, z.B. &amp;quot;superx@vmmulti1&amp;quot;&lt;br /&gt;
Sie müssen nun die Verzeichnisse lokal und remote in der Winscp-Session speichern, im Menüpunkt &amp;quot;Directories&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp2.png|517x359px]]&lt;br /&gt;
&lt;br /&gt;
Vergessen Sie auch hiernach nicht, die Session zu speichern. &lt;br /&gt;
Danach testen Sie einmal den Zugang. Wenn das klappt können Sie Winscp auch für die Kommandozeile automatisieren. Sie erzeugen zunächst eine Textdatei mit den Kommandos für Winscp, dies enthält auch die zu übertragenden Dateien. Der Aufbau der Datei ist wie folgt:&lt;br /&gt;
 open -Sessionname-&lt;br /&gt;
 # Upload the file to current working directory&lt;br /&gt;
 put -Datei-&lt;br /&gt;
 # Disconnect&lt;br /&gt;
 close&lt;br /&gt;
 # Exit WinSCP&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
Die zu übertragenden Dateien sind in der Musterdatei des jew. Moduls in rohdaten/-Modulname-_sftp.txt aufgelistet, Sie müssen lediglich &lt;br /&gt;
* den &amp;quot;/&amp;quot; durch einen &amp;quot;\&amp;quot; ersetzen&lt;br /&gt;
* das Entladeprotokoll -Modulname-_unload.err und die Datumsdatei superx.datum hinzufügen&lt;br /&gt;
Hier ein Beispielscript fürs das Studierenden-Modul:&lt;br /&gt;
	open superx@vmmulti1&lt;br /&gt;
	# Change remote directory&lt;br /&gt;
	# Upload the file to current working directory&lt;br /&gt;
	put sos_unload.err&lt;br /&gt;
	put superx.datum&lt;br /&gt;
	put unl\konstanten.unl&lt;br /&gt;
	put unl\sos_studenten.unl&lt;br /&gt;
	put unl\sos_hzb.unl&lt;br /&gt;
	put unl\sos_faecher.unl&lt;br /&gt;
	put unl\sos_pord_to_stg.unl&lt;br /&gt;
	put unl\sos_pruefungenext.unl&lt;br /&gt;
	put unl\sos_pruefungen.unl&lt;br /&gt;
	put unl\sos_lab_astat_attributes.unl&lt;br /&gt;
	put unl\sos_stud_loe.unl&lt;br /&gt;
	put unl\sos_faecher_ext.unl&lt;br /&gt;
	put unl\sos_faecher_kontrolle.unl&lt;br /&gt;
	put unl\sos_pruefungen_kontrolle.unl&lt;br /&gt;
	put unl\sos_anschri.unl&lt;br /&gt;
	put unl\sos_parstg.unl&lt;br /&gt;
	put unl\sos_hsnr.unl&lt;br /&gt;
	put unl\semester.unl&lt;br /&gt;
	put unl\cif.unl&lt;br /&gt;
	put unl\cifx.unl&lt;br /&gt;
	put unl\k_pvers.unl&lt;br /&gt;
	put unl\k_stg.unl&lt;br /&gt;
	put unl\k_stgext.unl&lt;br /&gt;
	put unl\k_abstgv.unl&lt;br /&gt;
	put unl\sos_pord.unl&lt;br /&gt;
	put unl\sos_dipl.unl&lt;br /&gt;
	put unl\sos_minder.unl&lt;br /&gt;
	put unl\sos_stud_d.unl&lt;br /&gt;
	put unl\sos_pords.unl&lt;br /&gt;
	put unl\sos_porg.unl&lt;br /&gt;
	put unl\sos_labzuord.unl&lt;br /&gt;
	put unl\sos_pnrzuord.unl&lt;br /&gt;
	put unl\sos_gewichtungsvariante.unl&lt;br /&gt;
	put unl\sos_gewichtungregel_filter.unl&lt;br /&gt;
	put unl\sos_gewichtungregel.unl&lt;br /&gt;
	put unl\personattribute.unl&lt;br /&gt;
	put unl\personattributetype.unl&lt;br /&gt;
	put unl\personattribute_value_list.unl&lt;br /&gt;
	put unl\stu_update_prot.unl&lt;br /&gt;
	put unl\exa_update_prot.unl&lt;br /&gt;
	put unl\sos_accredited_ects.unl&lt;br /&gt;
	put unl\sos_pord_orgeinheit.unl&lt;br /&gt;
	# Disconnect&lt;br /&gt;
	close&lt;br /&gt;
	# Exit WinSCP&lt;br /&gt;
	exit&lt;br /&gt;
&lt;br /&gt;
Die Datei hat z.B. den Namen winscp_example_script.txt. Dann können Sie das Script aufrufen mit dem DOS-Kommando:&lt;br /&gt;
 winscp /script=-Pfad zu-\winscp_example_script.txt&lt;br /&gt;
&lt;br /&gt;
Hier ein Screenshot wie das dann aussieht:&lt;br /&gt;
&lt;br /&gt;
[[Bild:winscp3.png|609x337px]]&lt;br /&gt;
&lt;br /&gt;
Das DOS-Kommando läßt sich dann über die Windows-Taskverwaltung automatisieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Java-Client zum Entladen von Quell-Datenbanken =====&lt;br /&gt;
Zum Entladen aus dem operativen Vorsystem wird unter Informix dbaccess genutzt. Unter Postgres wird generell der SuperX-JAVA-Client zum Entladen genutzt, denn SuperX benötigt ein spezielles, an Informix angepasstes [[Kernmodul_Komponentenverwaltung#Format_der_Unload_Dateien_CSV|CSV-Format]], das sich mit Bordmitteln von Postgres (copy-Befehl) nicht erzeugen lässt. Es kann aber auch sinnvoll sein, aus der Informix-Datenbank mit SuperX-JAVA-Client zu entladen, z.B. wenn Sie kein UNIX-dbaccess auf dem Vorsystem installiert haben. &lt;br /&gt;
&lt;br /&gt;
Wenn Sie das jew. operative Vorsystem im PUSH-Verfahren entladen wollen, d.h. die Rohdaten werden auf dem Vorsystem entladen und auf den SuperX-Rechner kopiert, dann müssen Sie spezielle Vorkehrungen treffen. SuperX nutzt generell zum Entladen eigene Java-Klassen. Beim Entladen im PULL-Verfahren sind diese Klassen vorhanden, denn die Entladeroutine läuft auf dem SuperX Rechner. Wenn Sie aber PUSH nutzen wollen, werden die SuperX-Java-Klassen auf dem Liefersystem benötigt, und die Entladeroutine muss konfiguriert sein. Im Folgenden nutzen wir das Beispiel &amp;quot;Entladen im Push-Verfahren aus SVA-GX unter Postgres&amp;quot;. Gehen Sie dazu wie folgt vor:&lt;br /&gt;
* Kopieren Sie die Dateien &lt;br /&gt;
** superx*jar&lt;br /&gt;
** postgresql-*.jar&lt;br /&gt;
** jfor-0.7.2rc1.jar&lt;br /&gt;
* vom SuperX-Rechner im Verzeichnis $SUPERX_DIR/tomcat/webapps/superx/WEB-INF/lib auf den Quellrechner in ein Unterverzeichnis lib unter rohdaten (z.B. /home/sva/superx/rohdaten/lib). In rohdaten liegt die bisherige Entladeroutine (z.B. sva_unload.x). &lt;br /&gt;
* Kopieren Sie die *_ENV.sam -Datei nach *_ENV, also hier SVA_ENV.sam nach SVA_ENV&lt;br /&gt;
* Fügen Sie dann folgenden Passus in die Umgebungs-Datei der Entladeroutine, hier also SVA_ENV:&lt;br /&gt;
 #Pfad zu den SuperX-Java-Libraries&lt;br /&gt;
 #Der JDBC_CLASSPATH enthält alles, was der jdbc-Client in superx für den Datenbankzugriff braucht.&lt;br /&gt;
 #jfor*.jar, postgresql*.jar&lt;br /&gt;
 JDBC_CLASSPATH=&amp;quot;$SVA_LOAD_PFAD/lib/superx5.0.jar:$SVA_LOAD_PFAD/lib/postgresql-42.2.19.jar:$SVA_LOAD_PFAD/lib/jfor-0.7.2rc1.jar&amp;quot;&lt;br /&gt;
 export JDBC_CLASSPATH&lt;br /&gt;
&lt;br /&gt;
Wenn dann noch die Variablen [[Kern_Installation_Upgrade#Anpassen_der_Datenbankparameter_db.properties|DB_PROPERTIES]] und LOGGER_PROPERTIES korrekt gesetzt sind, kann die Entladeroutine bei SX_CLIENT=jdbc (Wenn Sie unter Windows entladen, oder Informix ohne dbaccess entladen wollen) oder SX_CLIENT=psql (wenn Sie Postgres unter UNIX nutzen) mit Java entladen.&lt;br /&gt;
&lt;br /&gt;
Danach können Sie das Entladescript ausführen:&lt;br /&gt;
 sva_unload.x&lt;br /&gt;
Die Logdatei lautet sva_unload.err&lt;br /&gt;
&lt;br /&gt;
Zum Kopieren der Rohdaten zum SuperX-Server passen Sie folgende Variablen an:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable&lt;br /&gt;
! Erläuterung&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| Wenn die Rohdaten beim Push-Verfahren nach dem Entladen vom SVA-Rechner auf den BI-Rechner kopiert werden sollen, dann werden für das Script sva_copy.x folgende Umgebungsvariablen benötigt: &lt;br /&gt;
|-&lt;br /&gt;
| COPY_METHOD&lt;br /&gt;
| Programm, das die Dateien kopiert; rsync, [[Kernmodul_Komponentenverwaltung#Einrichtung_von_SFTP|sftp]] und scp sind wählbar [Achtung: diese müssen dann betriebssystemseitig installiert sein]. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_DIR&lt;br /&gt;
| Verzeichnis, in das die Rohdaten auf dem BI-Rechner kopiert werden sollen, in der Regel ist dies &amp;quot;/home/superx/db/module/sva/rohdaten&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_USER&lt;br /&gt;
| Der Unix-Username auf dem BI-Rechner, in der Regel &amp;quot;tomcat&amp;quot; oder &amp;quot;superx&amp;quot;. &lt;br /&gt;
|-&lt;br /&gt;
| REMOTE_HOST&lt;br /&gt;
| Der Rechnername bzw. die IP-Nr. des BI-Rechners. &lt;br /&gt;
|}&lt;br /&gt;
Danach starten Sie &lt;br /&gt;
 sva_copy.x&lt;br /&gt;
Die Logdatei lautet sva_copy.err&lt;br /&gt;
&lt;br /&gt;
Weitere Entladeparameter werden in den modulspezifischen Administrationshandbüchern beschrieben.&lt;br /&gt;
{{Hinweis|Bei neuen SuperX-Versionen reicht es in der Regel, die modulspez. Dateien auszutauschen, also hier sva_unload.* etc.}}&lt;br /&gt;
&lt;br /&gt;
== Update eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Wenn das Entladen aus dem Vorsystem geklappt hat (sofern es ein Vorsystem gibt), können Sie die Daten laden. Zum Update bzw. zum Laden der Rohdaten gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname- und führen das Script aus:&lt;br /&gt;
-Modulname-_update.x&lt;br /&gt;
Die Logdatei lautet L_-Modulname-_UPDATE.log, im Mandantenfähigen Betrieb &amp;quot;L_-Modulname-_UPDATE-MANDANTID-.log&amp;quot;.&lt;br /&gt;
Für die Aufnahme der Laderoutine in die crontab gibt es im gleichen Verzeichnis Musterscripte nach dem Namensmuster:&lt;br /&gt;
-Modulname-_update_cron.x&lt;br /&gt;
Je nach Push/Pull-Szenario können Sie auch den Unload darin starten oder nicht.&lt;br /&gt;
&lt;br /&gt;
=== Modulupdate in mandantenfähigen Installationen ===&lt;br /&gt;
Der Modulupdate in mandantenfähigen Installation findet in einer SuperX-Installation statt, allerdings werden die einzelnen Scripte mit unterschiedlichen Umgebungsvariablen, wie sie in SQL_ENV.-MANDANTID- definiert ist, z.B. SQL_ENV.FHRO.&lt;br /&gt;
In der SQL_ENV.-MANDANTID- werden unterschiedliche Pfade für den jeweiligen *_LOAD_PFAD gesetzt, wobei in der Regel die Mandandid ein Unterverzeichnis vom &amp;quot;normalen&amp;quot; LOAD_PFAD ist. So ist z.B. beim COB-Modul folgender Pfad anzusetzen:&lt;br /&gt;
Normale SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten&lt;br /&gt;
Mandantenfähige SuperX-Installation:&lt;br /&gt;
 COB_LOAD_PFAD=$SUPERX_DIR/db/module/cob/rohdaten/FHRO&lt;br /&gt;
Unterhalb von FHRO befindet sich noch einmal die Entladeroutine sowie das Unterverzeichnis unl mit den Rohdaten. Dieses Verzeichnis FHRO kann der Einfahheit halber auch ein symbolischer Link auf den gemounteten COB-Rechner sein.&lt;br /&gt;
Durch Setzen der Mandantennummer in der Umgebungsvariable MANDANTID in der jeweiligen SQL_ENV des Mandanten werden die ETL-Scripte anders ausgeführt: Die Logdateien werden jeweils mit der Mandantennummer versehen (z.B. L_cob_updateFHRO.log), damit die Übersicht nicht verloren geht und der gleichzeitige Update mehrerer Mandanten in eine rsuperX-Installation möglich ist.&lt;br /&gt;
Außerdem können weitreichende Steuerungsmechanismen im Modulupdate eingesetzt werden: Nach jedem ETL-Schritt können optional mandantenspezifische Scripte aufgerufen werden. Diese müssen folgende Namenskonvention einhalten:&lt;br /&gt;
 -Scriptname-_-MANDANTID-.sql&lt;br /&gt;
Also für eine hochschulspezifische Transformation im COB-Modul des Mandanten FHRO wird eine Datei namens&lt;br /&gt;
 cob_trans_FHRO.sql &lt;br /&gt;
mit entsprechenden SQL-Anweisungen angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Format der Unload Dateien CSV ===&lt;br /&gt;
Generell gilt das Prinzip, daß Daten vom Vorsystem in CSV entladen werden, und dann in sog. Ladetabellen hochgeladen werden. Da CSV je nach DBMS unterschiedlich implementiert wird, hier eine kurze Beschreibung des Formats, das im wesentlichen den Vorgaben von Informix LOAD entspricht:&lt;br /&gt;
* Zeichenformat: UNIX LATIN1 oder UTF-8&lt;br /&gt;
* Feldtrenner: ^ &lt;br /&gt;
* Satztrenner: Feldtrenner + UNIX NEWLINE&lt;br /&gt;
* Zeilenschaltung: Umbrüche innerhalb von Textfeldern sind als \ + NEWLINE codiert&lt;br /&gt;
* Feldtrenner, die im Textfeld vorkommen, werden mit &amp;quot;\&amp;quot; maskiert. Ebenso das Zeichen &amp;quot;\&amp;quot; selbst&lt;br /&gt;
* Die Datumsformate sind bei Datumsfeldern immer im deutschen Format (DD.MM.YYYY) vorgesehen&lt;br /&gt;
* Boolean-Werte werden durch &amp;quot;true&amp;quot; oder &amp;quot;false&amp;quot; codiert&lt;br /&gt;
* Der Dezimaltrenner ist &amp;quot;.&amp;quot;, kein 1000-er Punkt bei Zahlen. &lt;br /&gt;
* Leerstrings und Leerzeichen werden als &amp;quot; &amp;quot; (Leerzeichen) exportiert.&lt;br /&gt;
&lt;br /&gt;
== Upgrade eines Moduls: Allgemeines Vorgehen ==&lt;br /&gt;
Zum Upgrade bzw. zum Zurücksetzen des Moduls auf den Auslieferungszustand entpacken Sie das Paket in $SUPERX_DIR und gehen in das Verzeichnis $SUPERX_DIR/db/module/-Modulname-/upgrade und führen das Script aus:&lt;br /&gt;
-Modulname-_upgrade.x&lt;br /&gt;
Ausnahme: beim Kernmodul gibt es i.d.R. ein spezielles [[Kern_Installation_Upgrade#Standardvorgehen_beim_Upgrade|Upgrade Script]].&lt;br /&gt;
&lt;br /&gt;
Die Logdatei lautet upgrade.log, im Mandantenfähigen Betrieb &amp;quot;upgrade-MANDANTID-.log&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Wenn Sie einen separaten Tomcat-Rechner betreiben, müssen Sie das Paket dort ebenfalls entpacken, und vom Datenbankserver die Datei $SUPERX_DIR/webserver/tomcat/webapps/superx/WEB-INF/dbforms-config.xml an die gleiche Stelle auf den Tomcat Rechner kopieren. Ein nochmaliges Ausführen des Upgrade Scriptes ist nicht nötig, weil dies nur die Datenbank betrifft.&lt;br /&gt;
&lt;br /&gt;
== Hochschulspezifische Anpassung eines Moduls ==&lt;br /&gt;
=== Dateibasierte hochschulspezifische Anpassung ===&lt;br /&gt;
Nach der Installation bzw. beim Upgrade können Sie hochschuleigene SQL Scripte ausführen lassen. Erzeugen Sie dazu eine Datei &lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/conf/customize.sql &lt;br /&gt;
bei Mandantenbetrieb&lt;br /&gt;
  $SUPERX_DIR/db/module/-Modulname-/conf/customize-MANDANTID-.sql &lt;br /&gt;
und füllen Sie diese mit einem beliebigen Inhalt. Das Script wird beim Upgrade des Moduls automatisch am Ende ausgeführt.&lt;br /&gt;
=== Datenbankbasierte hochschulspezifische Laderegeln ===&lt;br /&gt;
Eine Laderoutine gliedert sich in die Schritte&lt;br /&gt;
#Unload: Entladen der CSV Dateien aus dem jew. Vorsystem&lt;br /&gt;
#Load: Upload der CSV Dateien&lt;br /&gt;
#Trans: Transformation der Daten&lt;br /&gt;
#Aggr: Aggregation der Daten&lt;br /&gt;
#Test: Test der Daten&lt;br /&gt;
#System: Standdatum bei Erfolg aktualisieren&lt;br /&gt;
Es ist möglich über sog. &amp;quot;Preparation&amp;quot;- oder &amp;quot;Finalize&amp;quot;-[[Kernmodul_Shellscripte#Hochschulspezifische_Transformationen_im_ETL-Prozess|Scripte]] die Laderoutine am Ende von LOAD bzw. TRANS anzupassen. Dieses Verfahren ist weiterhin möglich, ist aber bzgl. Clustering und Schreibzugriff recht unflexibel.&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich im Browser hochschulspezifische Scripte am Ende des jeweiligen Schrittes einer Laderoutine anzulegen. Dies funktioniert so: Die Laderoutine führt zunächst den allgemeinen, von uns vorgegebenen Ladeschritt aus. Wenn dann eine Repository-Variable mit einem gewissen Namensschema existiert, wird sie ausgeführt. Das Namensschema lautet &lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;&amp;lt;Kürzel der Komponente&amp;gt;&amp;gt;_&amp;lt;&amp;lt;Ladeschritt&amp;gt;&amp;gt;_CUSTOM&lt;br /&gt;
&amp;lt;/source&amp;gt;. &lt;br /&gt;
* Bei Hauptladeroutinen ist dies&lt;br /&gt;
*# Laden: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_load_CUSTOM, z. B. sos_load_CUSTOM&lt;br /&gt;
*# Transformation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_trans_CUSTOM, z. B. sos_trans_CUSTOM&lt;br /&gt;
*# Aggregation: &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_aggr_CUSTOM, z. B. sos_aggr_CUSTOM&lt;br /&gt;
* Bei Unterladeroutinen ist dies &#039;&#039;&#039;Kürzel der Komponente&#039;&#039;&#039;_&#039;&#039;&#039;ID des Ladeschritts&#039;&#039;&#039;_CUSTOM, also z. B. cob_trans_fin_busa_CUSTOM für die Unterladeroutine &amp;quot;Lade Buchungen aus FIN&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Um eine Variable neu einzurichten:&lt;br /&gt;
* Gehen Sie in den BI-Standardberichten auf Administration/Hochschul-Repository.&lt;br /&gt;
* Wählen Sie das jeweilige Sachgebiet und schicken Sie das Formular ab.&lt;br /&gt;
* Klicken Sie bei einer Beispielzeile auf &#039;&#039;&#039;Bearbeiten&#039;&#039;&#039;.&lt;br /&gt;
* Im neuen Fenster klicken Sie oben ganz rechts auf das Symbol &#039;&#039;&#039;Datensatz kopieren&#039;&#039;&#039;.&lt;br /&gt;
* Definieren Sie die Variable z. B.&lt;br /&gt;
** als Variablenname die ID z. B.: fin_load_CUSTOM&lt;br /&gt;
** Art der Variable: ein für Sie sprechender Schlüssel mit Modulkürzel, z. B. &amp;quot;fin_Laderegel&amp;quot;&lt;br /&gt;
** als Inhalt der Variable die gewünschten Befehle, z. B. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
update fin_buch_neu set ch110_institut=buchungsab_fb where length(buchungsab_fb)=5;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
** aktiv=1&lt;br /&gt;
** gültig seit 1.1.1900&lt;br /&gt;
** gültig bis 1.1.3000&lt;br /&gt;
* Klicken Sie oben rechts auf das Häkchen-Symbol für &#039;&#039;&#039;Datensatz einfügen&#039;&#039;&#039;.&lt;br /&gt;
* Schließen Sie das Fenster.&lt;br /&gt;
&lt;br /&gt;
Analog können Sie auch die [[Kernmodul_Komponentenverwaltung#Dateibasierte_hochschulspezifische_Anpassung|customize]]-Regeln&amp;quot; ins Repository verlagern. Hier heißt die Variable z.B. fin_install_CUSTOM.&lt;br /&gt;
&lt;br /&gt;
== Entfernen eines Moduls ==&lt;br /&gt;
Wenn Sie ein Modul nicht mehr benötigen, starten Sie das Script&amp;lt;br /&amp;gt;&lt;br /&gt;
 $SUPERX_DIR/db/module/-Modulname-/-Modulname-_modul_entfernen.x.&amp;lt;br /&amp;gt;&lt;br /&gt;
Dieses Script löscht alle Tabellen, Prozeduren und Abfragen aus der Datenbank, und löscht auch die Einträge im Themenbaum. Danach können Sie den Pfad $SUPERX_DIR/db/module/-Modulname-löschen.&lt;br /&gt;
Wenn Sie nur die Inhalte der Daten- und Hilfstabellen des Moduls löschen wollen (z.B. aus Datenschutzgründen), ohne das ganze Modul zu deinstallieren, können Sie dies mit folgendem Befehl tun:&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_pg.sql (für Postgres)&amp;lt;br /&amp;gt;&lt;br /&gt;
bzw.&amp;lt;br /&amp;gt;&lt;br /&gt;
 DOSQL $SUPERX_DIR/db/module/-Modulname-/-Modulname-_purge_ids.sql (für Informix)&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktueller_Lauf.png&amp;diff=16369</id>
		<title>Datei:SuperX ETL Manager Aktueller Lauf.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktueller_Lauf.png&amp;diff=16369"/>
		<updated>2026-07-13T06:42:38Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktionsbuttons.png&amp;diff=16368</id>
		<title>Datei:SuperX ETL Manager Aktionsbuttons.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:SuperX_ETL_Manager_Aktionsbuttons.png&amp;diff=16368"/>
		<updated>2026-07-13T06:42:23Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
</feed>