<?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-06-19T20:18:28Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.11</generator>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15927</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15927"/>
		<updated>2026-06-15T13:02:19Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Migration auf die Webapp-Struktur */&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;
==Aktueller Stand==&lt;br /&gt;
&lt;br /&gt;
Die empfohlene Zielstruktur wurde gegenüber den ersten Entwürfen angepasst.&lt;br /&gt;
&lt;br /&gt;
Die Webapp wird standardmäßig nicht mehr direkt unter dem 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 SuperX-Installation unabhängig von der verwendeten Tomcat-Distribution und kann einfacher per Git, rsync oder Modulupdate gepflegt werden.&lt;br /&gt;
&lt;br /&gt;
Optional kann anschließend ein symbolischer Link erzeugt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/var/lib/tomcat10/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;
Die Standardkonfiguration verwendet derzeit:&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;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Neue Variablen==&lt;br /&gt;
&lt;br /&gt;
Die bisherigen Variablen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER&lt;br /&gt;
SUPERX_GROUP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wurden ersetzt durch:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP_USER&lt;br /&gt;
WEBAPP_GROUP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dadurch ist das Skript nicht mehr auf bestimmte Benutzernamen festgelegt und kann flexibler eingesetzt werden.&lt;br /&gt;
&lt;br /&gt;
===WEBAPP_USER===&lt;br /&gt;
&lt;br /&gt;
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;
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;
Dadurch ergibt sich als Standardziel:&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;
==Automatische Rechtebehandlung==&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 automatisch, ob ein chown 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 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;
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;
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;
====Ausführung als WEBAPP_USER====&lt;br /&gt;
&lt;br /&gt;
Wird das Skript direkt als WEBAPP_USER ausgeführt und ist dieser Benutzer Mitglied der WEBAPP_GROUP, kann die Migration häufig vollständig ohne root-Rechte erfolgen.&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;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prüfung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispielausgabe:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
uid=1001(superx)&lt;br /&gt;
groups=superx,tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall kann der Benutzer:&lt;br /&gt;
&lt;br /&gt;
* Dateien kopieren&lt;br /&gt;
* Dateien verschieben&lt;br /&gt;
* Verzeichnisse anlegen&lt;br /&gt;
* chmod ausführen&lt;br /&gt;
* Gruppenrechte setzen&lt;br /&gt;
&lt;br /&gt;
ohne root-Rechte durchführen.&lt;br /&gt;
&lt;br /&gt;
===ADD_WEBAPP_USER_TO_GROUP===&lt;br /&gt;
&lt;br /&gt;
Optional kann das Skript den Benutzer automatisch der Zielgruppe hinzufügen.&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;
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;
WEBAPP_GROUP=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Skript führt dann bei Bedarf aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
usermod -aG tomcat superx&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-Anbindung über Symlink==&lt;br /&gt;
&lt;br /&gt;
Empfohlen wird folgende Struktur:&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;
Optional kann das Skript automatisch einen Symlink 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;/var/lib/tomcat10/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;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/var/lib/tomcat10/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;
===REPLACE_EXISTING_SYMLINK===&lt;br /&gt;
&lt;br /&gt;
Bestehende Symlinks können optional 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;
==Empfohlene Standardkonfiguration==&lt;br /&gt;
&lt;br /&gt;
Für neue Installationen wird derzeit folgende Konfiguration empfohlen:&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;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CREATE_TOMCAT_SYMLINK=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* SuperX bleibt unabhängig vom Tomcat-Verzeichnis.&lt;br /&gt;
* Git-Repositories können direkt durch den Benutzer superx gepflegt werden.&lt;br /&gt;
* Modulupdates können häufig ohne root durchgeführt werden.&lt;br /&gt;
* Die Webapp bleibt auch bei Tomcat-Upgrades unverändert.&lt;br /&gt;
* Die Struktur funktioniert distributionsübergreifend.&lt;br /&gt;
&lt;br /&gt;
==Aktualisierte Beispiele==&lt;br /&gt;
&lt;br /&gt;
===Migration ohne root===&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;
WEBAPP_GROUP=&amp;quot;tomcat&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;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voraussetzung:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
id superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
liefert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
groups=superx,tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Migration mit root===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden die Zielrechte automatisch auf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
superx:tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
gesetzt.&lt;br /&gt;
&lt;br /&gt;
==Ergänzung zum Migrationsablauf==&lt;br /&gt;
&lt;br /&gt;
Der Ablauf lautet nun:&lt;br /&gt;
&lt;br /&gt;
# Laden von 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üfung auf bereits migrierte Strukturen&lt;br /&gt;
# Ermitteln der Zielstruktur&lt;br /&gt;
# Optional Tomcat stoppen&lt;br /&gt;
# Optional Webapp kopieren&lt;br /&gt;
# DB-Verzeichnis kopieren oder verschieben&lt;br /&gt;
# SQL_ENV anpassen&lt;br /&gt;
# Rechte setzen&lt;br /&gt;
# Optional Tomcat-Symlink erzeugen&lt;br /&gt;
# Optional Tomcat starten&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;
* WEBAPP_USER und WEBAPP_GROUP ersetzen die früheren Variablen TOMCAT_USER und SUPERX_GROUP.&lt;br /&gt;
* Bei WEBAPP_USER=superx und WEBAPP_GROUP=tomcat kann die Migration häufig ohne root erfolgen.&lt;br /&gt;
* Root wird nur benötigt, wenn Besitzer geändert oder Systemkonfigurationen angepasst 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=15921</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15921"/>
		<updated>2026-06-12T08:37:26Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Ziel */&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;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
==Ziel==&lt;br /&gt;
Mit dem Skript &amp;lt;code&amp;gt;migrate_superx_webapp.sh&amp;lt;/code&amp;gt; kann eine bestehende SuperX-Installation automatisch auf die neue Verzeichnisstruktur migriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Migration unterstützt zwei Anwendungsfälle:&lt;br /&gt;
&lt;br /&gt;
* vollständige Migration der Webapp inklusive DB-Verzeichnis&lt;br /&gt;
* Migration nur des DB-Verzeichnisses in eine bereits vorhandene Webapp&lt;br /&gt;
&lt;br /&gt;
Die bisherige SuperX-Struktur:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/db&lt;br /&gt;
/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann damit in folgende Zielstruktur überführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;WEBAPP&amp;gt;&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&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;
/var/lib/tomcat10/webapps/superx&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Dateien==&lt;br /&gt;
Das Migrationsskript besteht aus zwei Dateien:&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;
migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Dateien müssen im selben Verzeichnis liegen.&lt;br /&gt;
&lt;br /&gt;
Das Skript lädt die Konfigurationsdatei automatisch aus dem eigenen Skriptverzeichnis. Ein Pfad zur Konfigurationsdatei muss beim Aufruf nicht angegeben werden.&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;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Produktivmigrationen mit Rechteanpassung wird in der Regel root benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlegende Konfiguration==&lt;br /&gt;
&lt;br /&gt;
===Vorhandene SQL_ENV===&lt;br /&gt;
Die bestehende Installation wird über die vorhandene &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; ermittelt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus dieser Datei liest das Skript insbesondere:&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;
Diese Werte werden als Quellpfade für die Migration verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Migrationsmodus==&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;lt;code&amp;gt;MIGRATION_MODE&amp;lt;/code&amp;gt; steuert, ob die komplette Webapp oder nur das DB-Verzeichnis migriert wird.&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;
Erlaubte Werte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
full&lt;br /&gt;
db_only&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE=full===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;full&amp;lt;/code&amp;gt; wird die bestehende Webapp in ein neues Ziel-Webapp-Verzeichnis kopiert.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird das DB-Verzeichnis nach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TARGET_WEBAPP&amp;gt;/WEB-INF/conf/edustore/db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kopiert oder verschoben.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus ist für eine vollständige Migration auf einen neuen Tomcat-Webapp-Pfad vorgesehen.&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;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&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;
Ablauf:&lt;br /&gt;
&lt;br /&gt;
# bestehende Webapp wird nach &amp;lt;code&amp;gt;TARGET_WEBAPP&amp;lt;/code&amp;gt; kopiert&lt;br /&gt;
# bestehendes DB-Verzeichnis wird nach &amp;lt;code&amp;gt;TARGET_WEBAPP/WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt; kopiert oder verschoben&lt;br /&gt;
# die neue &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; im Ziel wird angepasst&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE=db_only===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;db_only&amp;lt;/code&amp;gt; wird keine Webapp kopiert.&lt;br /&gt;
&lt;br /&gt;
Es wird nur das DB-Verzeichnis in die bereits vorhandene Webapp-Struktur übernommen.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus ist sinnvoll, wenn die Webapp bereits an der gewünschten Stelle liegt und nur noch das bisher externe DB-Verzeichnis in die neue Zielstruktur übernommen werden soll.&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;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&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;
Bei &amp;lt;code&amp;gt;TARGET_WEBAPP=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; verwendet das Skript automatisch den bestehenden Wert von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; aus der geladenen &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis wird dann nach:&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&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kopiert oder verschoben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Übertragung des DB-Verzeichnisses==&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;lt;code&amp;gt;DB_TRANSFER_MODE&amp;lt;/code&amp;gt; steuert, ob das DB-Verzeichnis kopiert oder verschoben wird.&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;
Erlaubte Werte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
copy&lt;br /&gt;
move&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=copy===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; wird das DB-Verzeichnis per &amp;lt;code&amp;gt;rsync&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;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Quelle bleibt erhalten.&lt;br /&gt;
&lt;br /&gt;
Das ist die sicherere Variante und eignet sich besonders für Produktivmigrationen, bei denen die alte Installation zunächst unverändert erhalten bleiben soll.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=move===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; wird das DB-Verzeichnis per &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; 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;
Die Quelle liegt danach nicht mehr am alten Ort.&lt;br /&gt;
&lt;br /&gt;
Diese Variante kann sinnvoll sein, wenn das DB-Verzeichnis sehr groß ist, z. B. durch:&lt;br /&gt;
&lt;br /&gt;
* unload-Dateien&lt;br /&gt;
* Exportdateien&lt;br /&gt;
* temporäre Arbeitsdateien&lt;br /&gt;
* lokale Sicherungen&lt;br /&gt;
&lt;br /&gt;
Da beim Verschieben kein doppelter Speicherplatz benötigt wird, kann &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; bei knappen Plattenplatzverhältnissen sinnvoll sein.&lt;br /&gt;
&lt;br /&gt;
Aus Sicherheitsgründen darf das Zielverzeichnis bei &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; noch nicht existieren. Das Skript bricht sonst ab, um unerwünschte Verschachtelungen wie &amp;lt;code&amp;gt;db/db&amp;lt;/code&amp;gt; zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ziel-Webapp==&lt;br /&gt;
&lt;br /&gt;
Die Ziel-Webapp wird über &amp;lt;code&amp;gt;TARGET_WEBAPP&amp;lt;/code&amp;gt; festgelegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; muss hier ein konkreter Zielpfad eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=db_only&amp;lt;/code&amp;gt; kann stattdessen &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann verwendet das Skript den bestehenden Wert von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; aus der alten &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bestehende Zielverzeichnisse==&lt;br /&gt;
&lt;br /&gt;
===ALLOW_EXISTING_TARGET===&lt;br /&gt;
&lt;br /&gt;
Diese Variable steuert, ob eine bereits vorhandene Ziel-Webapp ergänzt werden darf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ALLOW_EXISTING_TARGET=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; kann damit erlaubt werden, dass eine vorhandene Ziel-Webapp per &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; ergänzt oder aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
===ALLOW_EXISTING_TARGET_DB===&lt;br /&gt;
&lt;br /&gt;
Diese Variable steuert, ob ein bereits vorhandenes Ziel-DB-Verzeichnis bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=copy&amp;lt;/code&amp;gt; ergänzt werden darf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ALLOW_EXISTING_TARGET_DB=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=copy&amp;lt;/code&amp;gt; kann das Ziel per &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; wird diese Einstellung ignoriert. In diesem Fall darf das Ziel-DB-Verzeichnis nicht existieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SQL_ENV-Anpassung==&lt;br /&gt;
&lt;br /&gt;
Nach der Migration wird die &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; im Ziel-DB-Verzeichnis angepasst.&lt;br /&gt;
&lt;br /&gt;
Ziel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=&amp;lt;TARGET_WEBAPP&amp;gt;&lt;br /&gt;
SUPERX_DIR=&amp;lt;TARGET_WEBAPP&amp;gt;/WEB-INF/conf/edustore&lt;br /&gt;
umask 002&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;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
SUPERX_DIR=/var/lib/tomcat10/webapps/superx/WEB-INF/conf/edustore&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 Sicherung der Ziel-&amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Anpassung kann über folgende Variable gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE_SQL_ENV=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Rechtebehandlung wird über folgende Variablen gesteuert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
Das Skript entscheidet automatisch, ob ein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; erforderlich ist:&lt;br /&gt;
&lt;br /&gt;
* Wird das Skript als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ausgeführt, werden Besitzer und Gruppe gemäß &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;SUPERX_GROUP&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
* Wird das Skript als derselbe Benutzer ausgeführt, der auch als &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; konfiguriert wurde und ist dieser Benutzer Mitglied der angegebenen Gruppe, wird auf das &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; automatisch verzichtet.&lt;br /&gt;
* Ist eine Änderung des Besitzers erforderlich, das Skript läuft jedoch nicht als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;, wird mit einer Fehlermeldung abgebrochen.&lt;br /&gt;
&lt;br /&gt;
Beispiel Produktivsystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Testsystem ohne root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=true===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Besitzer wird immer auf den konfigurierten Benutzer und die konfigurierte Gruppe gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $TOMCAT_USER:$SUPERX_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dafür werden normalerweise root-Rechte benötigt.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=false===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird kein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die vorhandenen Besitzer- und Gruppeninformationen bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
===SET_CHMOD===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;SET_CHMOD&amp;lt;/code&amp;gt; wird gesteuert, ob Dateirechte gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden u. a.:&lt;br /&gt;
&lt;br /&gt;
* Verzeichnisse auf &amp;lt;code&amp;gt;2775&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
* Dateien auf &amp;lt;code&amp;gt;664&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
* Dateien unter &amp;lt;code&amp;gt;db/bin&amp;lt;/code&amp;gt; ausführbar gesetzt&lt;br /&gt;
* Dateien mit Endung &amp;lt;code&amp;gt;.x&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.sh&amp;lt;/code&amp;gt; ausführbar gesetzt&lt;br /&gt;
&lt;br /&gt;
Das gesetzte setgid-Bit auf Verzeichnissen sorgt dafür, dass neu angelegte Dateien und Verzeichnisse die Gruppe des übergeordneten Verzeichnisses erben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Gruppe==&lt;br /&gt;
&lt;br /&gt;
Wenn mit Gruppenrechten gearbeitet wird, muss der Tomcat-Benutzer Mitglied der verwendeten Gruppe sein.&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;
usermod -aG superx tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Skript kann diese Zuordnung automatisch erfolgen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ADD_TOMCAT_TO_GROUP=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls die Gruppenmitgliedschaft neu gesetzt wurde, muss Tomcat anschließend neu gestartet werden, damit die neue Gruppenzugehörigkeit im laufenden Prozess wirksam wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsprüfung bereits migrierter Installationen==&lt;br /&gt;
&lt;br /&gt;
Um versehentliche Mehrfachmigrationen zu vermeiden, prüft das Skript standardmäßig, ob die Quelle bereits nach einer migrierten Webapp-Struktur aussieht.&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;
SUPERX_DIR=/home/superx/webserver/tomcat/webapps/superx/WEB-INF/conf/edustore&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier liegt &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt; bereits innerhalb von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall bricht das Skript standardmäßig ab.&lt;br /&gt;
&lt;br /&gt;
Die Prüfung kann im Notfall ü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;
Standardwert:&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;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Option sollte nur verwendet werden, wenn die Auswirkungen bekannt sind. Andernfalls besteht die Gefahr, dass bereits migrierte Strukturen erneut kopiert oder ungewollt verschachtelt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dry-Run==&lt;br /&gt;
&lt;br /&gt;
Vor einer Produktivmigration empfiehlt sich ein Testlauf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DRY_RUN=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es werden die geplanten Aktionen angezeigt, ohne Änderungen durchzuführen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
===Vollständige Migration mit Kopie des DB-Verzeichnisses===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vollständige Migration mit Verschieben des DB-Verzeichnisses===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird die Webapp kopiert, das DB-Verzeichnis jedoch verschoben.&lt;br /&gt;
&lt;br /&gt;
===Nur DB-Verzeichnis in bestehende Webapp übernehmen===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&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;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;false&amp;quot;&lt;br /&gt;
UPDATE_SQL_ENV=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird keine Webapp kopiert. Das DB-Verzeichnis wird in die bestehende Webapp unter &amp;lt;code&amp;gt;WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt; verschoben.&lt;br /&gt;
&lt;br /&gt;
===Testmigration ohne root===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/test/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ADD_TOMCAT_TO_GROUP=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird das Skript als Benutzer &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; ausgeführt, kann diese Migration ohne root-Rechte laufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ablauf der Migration==&lt;br /&gt;
&lt;br /&gt;
Das Skript führt je nach Modus folgende Schritte aus:&lt;br /&gt;
&lt;br /&gt;
# Laden von &amp;lt;code&amp;gt;migrate_superx.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
# Laden der bestehenden &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ermitteln von &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; und dem bisherigen DB-Verzeichnis&lt;br /&gt;
# Sicherheitsprüfung, ob die Quelle bereits migriert aussieht&lt;br /&gt;
# Ermitteln der Zielstruktur&lt;br /&gt;
# Optional: Tomcat stoppen&lt;br /&gt;
# Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt;: Webapp kopieren&lt;br /&gt;
# DB-Verzeichnis je nach &amp;lt;code&amp;gt;DB_TRANSFER_MODE&amp;lt;/code&amp;gt; kopieren oder verschieben&lt;br /&gt;
# Backup der Ziel-&amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
# Anpassung von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;umask&amp;lt;/code&amp;gt;&lt;br /&gt;
# Optional: Rechte setzen&lt;br /&gt;
# Optional: Tomcat starten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
* Die Webapp wird vom Skript nie verschoben, sondern bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; kopiert.&lt;br /&gt;
* Das DB-Verzeichnis kann wahlweise kopiert oder verschoben werden.&lt;br /&gt;
* Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; ist die alte DB-Quelle nach der Migration nicht mehr vorhanden.&lt;br /&gt;
* Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; darf das Ziel-DB-Verzeichnis nicht existieren.&lt;br /&gt;
* Für &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; wird &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
* Die interne Zielstruktur ist fest vorgegeben: &amp;lt;code&amp;gt;WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Für Produktivmigrationen ist ein vorheriger Dry-Run empfehlenswert.&lt;br /&gt;
* Bei Rechteänderungen auf andere Benutzer oder Gruppen sind root-Rechte erforderlich.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15918</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15918"/>
		<updated>2026-06-12T08:05:10Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Ziel */&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;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
==Ziel==&lt;br /&gt;
Mit dem Skript &amp;lt;code&amp;gt;migrate_superx_webapp.sh&amp;lt;/code&amp;gt; kann eine bestehende SuperX-Installation automatisch auf die neue Verzeichnisstruktur migriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Migration unterstützt zwei Anwendungsfälle:&lt;br /&gt;
&lt;br /&gt;
* vollständige Migration der Webapp inklusive DB-Verzeichnis&lt;br /&gt;
* Migration nur des DB-Verzeichnisses in eine bereits vorhandene Webapp&lt;br /&gt;
&lt;br /&gt;
Die bisherige SuperX-Struktur:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/db&lt;br /&gt;
/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann damit in folgende Zielstruktur überführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;WEBAPP&amp;gt;&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&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;
/var/lib/tomcat10/webapps/superx&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Test&lt;br /&gt;
&lt;br /&gt;
==Dateien==&lt;br /&gt;
Das Migrationsskript besteht aus zwei Dateien:&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;
migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Dateien müssen im selben Verzeichnis liegen.&lt;br /&gt;
&lt;br /&gt;
Das Skript lädt die Konfigurationsdatei automatisch aus dem eigenen Skriptverzeichnis. Ein Pfad zur Konfigurationsdatei muss beim Aufruf nicht angegeben werden.&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;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Produktivmigrationen mit Rechteanpassung wird in der Regel root benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlegende Konfiguration==&lt;br /&gt;
&lt;br /&gt;
===Vorhandene SQL_ENV===&lt;br /&gt;
Die bestehende Installation wird über die vorhandene &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; ermittelt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus dieser Datei liest das Skript insbesondere:&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;
Diese Werte werden als Quellpfade für die Migration verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Migrationsmodus==&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;lt;code&amp;gt;MIGRATION_MODE&amp;lt;/code&amp;gt; steuert, ob die komplette Webapp oder nur das DB-Verzeichnis migriert wird.&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;
Erlaubte Werte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
full&lt;br /&gt;
db_only&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE=full===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;full&amp;lt;/code&amp;gt; wird die bestehende Webapp in ein neues Ziel-Webapp-Verzeichnis kopiert.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird das DB-Verzeichnis nach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TARGET_WEBAPP&amp;gt;/WEB-INF/conf/edustore/db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kopiert oder verschoben.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus ist für eine vollständige Migration auf einen neuen Tomcat-Webapp-Pfad vorgesehen.&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;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&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;
Ablauf:&lt;br /&gt;
&lt;br /&gt;
# bestehende Webapp wird nach &amp;lt;code&amp;gt;TARGET_WEBAPP&amp;lt;/code&amp;gt; kopiert&lt;br /&gt;
# bestehendes DB-Verzeichnis wird nach &amp;lt;code&amp;gt;TARGET_WEBAPP/WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt; kopiert oder verschoben&lt;br /&gt;
# die neue &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; im Ziel wird angepasst&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE=db_only===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;db_only&amp;lt;/code&amp;gt; wird keine Webapp kopiert.&lt;br /&gt;
&lt;br /&gt;
Es wird nur das DB-Verzeichnis in die bereits vorhandene Webapp-Struktur übernommen.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus ist sinnvoll, wenn die Webapp bereits an der gewünschten Stelle liegt und nur noch das bisher externe DB-Verzeichnis in die neue Zielstruktur übernommen werden soll.&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;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&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;
Bei &amp;lt;code&amp;gt;TARGET_WEBAPP=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; verwendet das Skript automatisch den bestehenden Wert von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; aus der geladenen &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis wird dann nach:&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&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kopiert oder verschoben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Übertragung des DB-Verzeichnisses==&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;lt;code&amp;gt;DB_TRANSFER_MODE&amp;lt;/code&amp;gt; steuert, ob das DB-Verzeichnis kopiert oder verschoben wird.&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;
Erlaubte Werte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
copy&lt;br /&gt;
move&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=copy===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; wird das DB-Verzeichnis per &amp;lt;code&amp;gt;rsync&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;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Quelle bleibt erhalten.&lt;br /&gt;
&lt;br /&gt;
Das ist die sicherere Variante und eignet sich besonders für Produktivmigrationen, bei denen die alte Installation zunächst unverändert erhalten bleiben soll.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=move===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; wird das DB-Verzeichnis per &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; 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;
Die Quelle liegt danach nicht mehr am alten Ort.&lt;br /&gt;
&lt;br /&gt;
Diese Variante kann sinnvoll sein, wenn das DB-Verzeichnis sehr groß ist, z. B. durch:&lt;br /&gt;
&lt;br /&gt;
* unload-Dateien&lt;br /&gt;
* Exportdateien&lt;br /&gt;
* temporäre Arbeitsdateien&lt;br /&gt;
* lokale Sicherungen&lt;br /&gt;
&lt;br /&gt;
Da beim Verschieben kein doppelter Speicherplatz benötigt wird, kann &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; bei knappen Plattenplatzverhältnissen sinnvoll sein.&lt;br /&gt;
&lt;br /&gt;
Aus Sicherheitsgründen darf das Zielverzeichnis bei &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; noch nicht existieren. Das Skript bricht sonst ab, um unerwünschte Verschachtelungen wie &amp;lt;code&amp;gt;db/db&amp;lt;/code&amp;gt; zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ziel-Webapp==&lt;br /&gt;
&lt;br /&gt;
Die Ziel-Webapp wird über &amp;lt;code&amp;gt;TARGET_WEBAPP&amp;lt;/code&amp;gt; festgelegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; muss hier ein konkreter Zielpfad eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=db_only&amp;lt;/code&amp;gt; kann stattdessen &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann verwendet das Skript den bestehenden Wert von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; aus der alten &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bestehende Zielverzeichnisse==&lt;br /&gt;
&lt;br /&gt;
===ALLOW_EXISTING_TARGET===&lt;br /&gt;
&lt;br /&gt;
Diese Variable steuert, ob eine bereits vorhandene Ziel-Webapp ergänzt werden darf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ALLOW_EXISTING_TARGET=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; kann damit erlaubt werden, dass eine vorhandene Ziel-Webapp per &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; ergänzt oder aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
===ALLOW_EXISTING_TARGET_DB===&lt;br /&gt;
&lt;br /&gt;
Diese Variable steuert, ob ein bereits vorhandenes Ziel-DB-Verzeichnis bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=copy&amp;lt;/code&amp;gt; ergänzt werden darf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ALLOW_EXISTING_TARGET_DB=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=copy&amp;lt;/code&amp;gt; kann das Ziel per &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; wird diese Einstellung ignoriert. In diesem Fall darf das Ziel-DB-Verzeichnis nicht existieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SQL_ENV-Anpassung==&lt;br /&gt;
&lt;br /&gt;
Nach der Migration wird die &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; im Ziel-DB-Verzeichnis angepasst.&lt;br /&gt;
&lt;br /&gt;
Ziel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=&amp;lt;TARGET_WEBAPP&amp;gt;&lt;br /&gt;
SUPERX_DIR=&amp;lt;TARGET_WEBAPP&amp;gt;/WEB-INF/conf/edustore&lt;br /&gt;
umask 002&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;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
SUPERX_DIR=/var/lib/tomcat10/webapps/superx/WEB-INF/conf/edustore&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 Sicherung der Ziel-&amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Anpassung kann über folgende Variable gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE_SQL_ENV=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Rechtebehandlung wird über folgende Variablen gesteuert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
Das Skript entscheidet automatisch, ob ein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; erforderlich ist:&lt;br /&gt;
&lt;br /&gt;
* Wird das Skript als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ausgeführt, werden Besitzer und Gruppe gemäß &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;SUPERX_GROUP&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
* Wird das Skript als derselbe Benutzer ausgeführt, der auch als &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; konfiguriert wurde und ist dieser Benutzer Mitglied der angegebenen Gruppe, wird auf das &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; automatisch verzichtet.&lt;br /&gt;
* Ist eine Änderung des Besitzers erforderlich, das Skript läuft jedoch nicht als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;, wird mit einer Fehlermeldung abgebrochen.&lt;br /&gt;
&lt;br /&gt;
Beispiel Produktivsystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Testsystem ohne root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=true===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Besitzer wird immer auf den konfigurierten Benutzer und die konfigurierte Gruppe gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $TOMCAT_USER:$SUPERX_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dafür werden normalerweise root-Rechte benötigt.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=false===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird kein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die vorhandenen Besitzer- und Gruppeninformationen bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
===SET_CHMOD===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;SET_CHMOD&amp;lt;/code&amp;gt; wird gesteuert, ob Dateirechte gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden u. a.:&lt;br /&gt;
&lt;br /&gt;
* Verzeichnisse auf &amp;lt;code&amp;gt;2775&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
* Dateien auf &amp;lt;code&amp;gt;664&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
* Dateien unter &amp;lt;code&amp;gt;db/bin&amp;lt;/code&amp;gt; ausführbar gesetzt&lt;br /&gt;
* Dateien mit Endung &amp;lt;code&amp;gt;.x&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.sh&amp;lt;/code&amp;gt; ausführbar gesetzt&lt;br /&gt;
&lt;br /&gt;
Das gesetzte setgid-Bit auf Verzeichnissen sorgt dafür, dass neu angelegte Dateien und Verzeichnisse die Gruppe des übergeordneten Verzeichnisses erben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Gruppe==&lt;br /&gt;
&lt;br /&gt;
Wenn mit Gruppenrechten gearbeitet wird, muss der Tomcat-Benutzer Mitglied der verwendeten Gruppe sein.&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;
usermod -aG superx tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Skript kann diese Zuordnung automatisch erfolgen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ADD_TOMCAT_TO_GROUP=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls die Gruppenmitgliedschaft neu gesetzt wurde, muss Tomcat anschließend neu gestartet werden, damit die neue Gruppenzugehörigkeit im laufenden Prozess wirksam wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsprüfung bereits migrierter Installationen==&lt;br /&gt;
&lt;br /&gt;
Um versehentliche Mehrfachmigrationen zu vermeiden, prüft das Skript standardmäßig, ob die Quelle bereits nach einer migrierten Webapp-Struktur aussieht.&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;
SUPERX_DIR=/home/superx/webserver/tomcat/webapps/superx/WEB-INF/conf/edustore&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier liegt &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt; bereits innerhalb von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall bricht das Skript standardmäßig ab.&lt;br /&gt;
&lt;br /&gt;
Die Prüfung kann im Notfall ü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;
Standardwert:&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;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Option sollte nur verwendet werden, wenn die Auswirkungen bekannt sind. Andernfalls besteht die Gefahr, dass bereits migrierte Strukturen erneut kopiert oder ungewollt verschachtelt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dry-Run==&lt;br /&gt;
&lt;br /&gt;
Vor einer Produktivmigration empfiehlt sich ein Testlauf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DRY_RUN=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es werden die geplanten Aktionen angezeigt, ohne Änderungen durchzuführen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
===Vollständige Migration mit Kopie des DB-Verzeichnisses===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vollständige Migration mit Verschieben des DB-Verzeichnisses===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird die Webapp kopiert, das DB-Verzeichnis jedoch verschoben.&lt;br /&gt;
&lt;br /&gt;
===Nur DB-Verzeichnis in bestehende Webapp übernehmen===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&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;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;false&amp;quot;&lt;br /&gt;
UPDATE_SQL_ENV=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird keine Webapp kopiert. Das DB-Verzeichnis wird in die bestehende Webapp unter &amp;lt;code&amp;gt;WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt; verschoben.&lt;br /&gt;
&lt;br /&gt;
===Testmigration ohne root===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/test/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ADD_TOMCAT_TO_GROUP=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird das Skript als Benutzer &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; ausgeführt, kann diese Migration ohne root-Rechte laufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ablauf der Migration==&lt;br /&gt;
&lt;br /&gt;
Das Skript führt je nach Modus folgende Schritte aus:&lt;br /&gt;
&lt;br /&gt;
# Laden von &amp;lt;code&amp;gt;migrate_superx.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
# Laden der bestehenden &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ermitteln von &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; und dem bisherigen DB-Verzeichnis&lt;br /&gt;
# Sicherheitsprüfung, ob die Quelle bereits migriert aussieht&lt;br /&gt;
# Ermitteln der Zielstruktur&lt;br /&gt;
# Optional: Tomcat stoppen&lt;br /&gt;
# Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt;: Webapp kopieren&lt;br /&gt;
# DB-Verzeichnis je nach &amp;lt;code&amp;gt;DB_TRANSFER_MODE&amp;lt;/code&amp;gt; kopieren oder verschieben&lt;br /&gt;
# Backup der Ziel-&amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
# Anpassung von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;umask&amp;lt;/code&amp;gt;&lt;br /&gt;
# Optional: Rechte setzen&lt;br /&gt;
# Optional: Tomcat starten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
* Die Webapp wird vom Skript nie verschoben, sondern bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; kopiert.&lt;br /&gt;
* Das DB-Verzeichnis kann wahlweise kopiert oder verschoben werden.&lt;br /&gt;
* Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; ist die alte DB-Quelle nach der Migration nicht mehr vorhanden.&lt;br /&gt;
* Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; darf das Ziel-DB-Verzeichnis nicht existieren.&lt;br /&gt;
* Für &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; wird &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
* Die interne Zielstruktur ist fest vorgegeben: &amp;lt;code&amp;gt;WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Für Produktivmigrationen ist ein vorheriger Dry-Run empfehlenswert.&lt;br /&gt;
* Bei Rechteänderungen auf andere Benutzer oder Gruppen sind root-Rechte erforderlich.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15917</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15917"/>
		<updated>2026-06-12T07:33:52Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Migration auf die Webapp-Struktur */&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;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
==Ziel==&lt;br /&gt;
Mit dem Skript &amp;lt;code&amp;gt;migrate_superx_webapp.sh&amp;lt;/code&amp;gt; kann eine bestehende SuperX-Installation automatisch auf die neue Verzeichnisstruktur migriert werden.&lt;br /&gt;
&lt;br /&gt;
Die Migration unterstützt zwei Anwendungsfälle:&lt;br /&gt;
&lt;br /&gt;
* vollständige Migration der Webapp inklusive DB-Verzeichnis&lt;br /&gt;
* Migration nur des DB-Verzeichnisses in eine bereits vorhandene Webapp&lt;br /&gt;
&lt;br /&gt;
Die bisherige SuperX-Struktur:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/db&lt;br /&gt;
/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kann damit in folgende Zielstruktur überführt werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;WEBAPP&amp;gt;&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&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;
/var/lib/tomcat10/webapps/superx&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dateien==&lt;br /&gt;
Das Migrationsskript besteht aus zwei Dateien:&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;
migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Dateien müssen im selben Verzeichnis liegen.&lt;br /&gt;
&lt;br /&gt;
Das Skript lädt die Konfigurationsdatei automatisch aus dem eigenen Skriptverzeichnis. Ein Pfad zur Konfigurationsdatei muss beim Aufruf nicht angegeben werden.&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;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für Produktivmigrationen mit Rechteanpassung wird in der Regel root benötigt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Grundlegende Konfiguration==&lt;br /&gt;
&lt;br /&gt;
===Vorhandene SQL_ENV===&lt;br /&gt;
Die bestehende Installation wird über die vorhandene &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; ermittelt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aus dieser Datei liest das Skript insbesondere:&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;
Diese Werte werden als Quellpfade für die Migration verwendet.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Migrationsmodus==&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;lt;code&amp;gt;MIGRATION_MODE&amp;lt;/code&amp;gt; steuert, ob die komplette Webapp oder nur das DB-Verzeichnis migriert wird.&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;
Erlaubte Werte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
full&lt;br /&gt;
db_only&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE=full===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;full&amp;lt;/code&amp;gt; wird die bestehende Webapp in ein neues Ziel-Webapp-Verzeichnis kopiert.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird das DB-Verzeichnis nach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TARGET_WEBAPP&amp;gt;/WEB-INF/conf/edustore/db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kopiert oder verschoben.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus ist für eine vollständige Migration auf einen neuen Tomcat-Webapp-Pfad vorgesehen.&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;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&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;
Ablauf:&lt;br /&gt;
&lt;br /&gt;
# bestehende Webapp wird nach &amp;lt;code&amp;gt;TARGET_WEBAPP&amp;lt;/code&amp;gt; kopiert&lt;br /&gt;
# bestehendes DB-Verzeichnis wird nach &amp;lt;code&amp;gt;TARGET_WEBAPP/WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt; kopiert oder verschoben&lt;br /&gt;
# die neue &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; im Ziel wird angepasst&lt;br /&gt;
&lt;br /&gt;
===MIGRATION_MODE=db_only===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;db_only&amp;lt;/code&amp;gt; wird keine Webapp kopiert.&lt;br /&gt;
&lt;br /&gt;
Es wird nur das DB-Verzeichnis in die bereits vorhandene Webapp-Struktur übernommen.&lt;br /&gt;
&lt;br /&gt;
Dieser Modus ist sinnvoll, wenn die Webapp bereits an der gewünschten Stelle liegt und nur noch das bisher externe DB-Verzeichnis in die neue Zielstruktur übernommen werden soll.&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;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&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;
Bei &amp;lt;code&amp;gt;TARGET_WEBAPP=&amp;quot;auto&amp;quot;&amp;lt;/code&amp;gt; verwendet das Skript automatisch den bestehenden Wert von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; aus der geladenen &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das DB-Verzeichnis wird dann nach:&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&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
kopiert oder verschoben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Übertragung des DB-Verzeichnisses==&lt;br /&gt;
&lt;br /&gt;
Die Variable &amp;lt;code&amp;gt;DB_TRANSFER_MODE&amp;lt;/code&amp;gt; steuert, ob das DB-Verzeichnis kopiert oder verschoben wird.&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;
Erlaubte Werte:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
copy&lt;br /&gt;
move&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=copy===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; wird das DB-Verzeichnis per &amp;lt;code&amp;gt;rsync&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;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Quelle bleibt erhalten.&lt;br /&gt;
&lt;br /&gt;
Das ist die sicherere Variante und eignet sich besonders für Produktivmigrationen, bei denen die alte Installation zunächst unverändert erhalten bleiben soll.&lt;br /&gt;
&lt;br /&gt;
===DB_TRANSFER_MODE=move===&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; wird das DB-Verzeichnis per &amp;lt;code&amp;gt;mv&amp;lt;/code&amp;gt; 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;
Die Quelle liegt danach nicht mehr am alten Ort.&lt;br /&gt;
&lt;br /&gt;
Diese Variante kann sinnvoll sein, wenn das DB-Verzeichnis sehr groß ist, z. B. durch:&lt;br /&gt;
&lt;br /&gt;
* unload-Dateien&lt;br /&gt;
* Exportdateien&lt;br /&gt;
* temporäre Arbeitsdateien&lt;br /&gt;
* lokale Sicherungen&lt;br /&gt;
&lt;br /&gt;
Da beim Verschieben kein doppelter Speicherplatz benötigt wird, kann &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; bei knappen Plattenplatzverhältnissen sinnvoll sein.&lt;br /&gt;
&lt;br /&gt;
Aus Sicherheitsgründen darf das Zielverzeichnis bei &amp;lt;code&amp;gt;move&amp;lt;/code&amp;gt; noch nicht existieren. Das Skript bricht sonst ab, um unerwünschte Verschachtelungen wie &amp;lt;code&amp;gt;db/db&amp;lt;/code&amp;gt; zu vermeiden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ziel-Webapp==&lt;br /&gt;
&lt;br /&gt;
Die Ziel-Webapp wird über &amp;lt;code&amp;gt;TARGET_WEBAPP&amp;lt;/code&amp;gt; festgelegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; muss hier ein konkreter Zielpfad eingetragen werden.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=db_only&amp;lt;/code&amp;gt; kann stattdessen &amp;lt;code&amp;gt;auto&amp;lt;/code&amp;gt; verwendet werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann verwendet das Skript den bestehenden Wert von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; aus der alten &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bestehende Zielverzeichnisse==&lt;br /&gt;
&lt;br /&gt;
===ALLOW_EXISTING_TARGET===&lt;br /&gt;
&lt;br /&gt;
Diese Variable steuert, ob eine bereits vorhandene Ziel-Webapp ergänzt werden darf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ALLOW_EXISTING_TARGET=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; kann damit erlaubt werden, dass eine vorhandene Ziel-Webapp per &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; ergänzt oder aktualisiert wird.&lt;br /&gt;
&lt;br /&gt;
===ALLOW_EXISTING_TARGET_DB===&lt;br /&gt;
&lt;br /&gt;
Diese Variable steuert, ob ein bereits vorhandenes Ziel-DB-Verzeichnis bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=copy&amp;lt;/code&amp;gt; ergänzt werden darf.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ALLOW_EXISTING_TARGET_DB=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=copy&amp;lt;/code&amp;gt; kann das Ziel per &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; ergänzt werden.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; wird diese Einstellung ignoriert. In diesem Fall darf das Ziel-DB-Verzeichnis nicht existieren.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==SQL_ENV-Anpassung==&lt;br /&gt;
&lt;br /&gt;
Nach der Migration wird die &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; im Ziel-DB-Verzeichnis angepasst.&lt;br /&gt;
&lt;br /&gt;
Ziel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=&amp;lt;TARGET_WEBAPP&amp;gt;&lt;br /&gt;
SUPERX_DIR=&amp;lt;TARGET_WEBAPP&amp;gt;/WEB-INF/conf/edustore&lt;br /&gt;
umask 002&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;bash&amp;quot;&amp;gt;&lt;br /&gt;
WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
SUPERX_DIR=/var/lib/tomcat10/webapps/superx/WEB-INF/conf/edustore&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 Sicherung der Ziel-&amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt; angelegt.&lt;br /&gt;
&lt;br /&gt;
Die Anpassung kann über folgende Variable gesteuert werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE_SQL_ENV=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Rechtebehandlung wird über folgende Variablen gesteuert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
Das Skript entscheidet automatisch, ob ein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; erforderlich ist:&lt;br /&gt;
&lt;br /&gt;
* Wird das Skript als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ausgeführt, werden Besitzer und Gruppe gemäß &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;SUPERX_GROUP&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
* Wird das Skript als derselbe Benutzer ausgeführt, der auch als &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; konfiguriert wurde und ist dieser Benutzer Mitglied der angegebenen Gruppe, wird auf das &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; automatisch verzichtet.&lt;br /&gt;
* Ist eine Änderung des Besitzers erforderlich, das Skript läuft jedoch nicht als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;, wird mit einer Fehlermeldung abgebrochen.&lt;br /&gt;
&lt;br /&gt;
Beispiel Produktivsystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel Testsystem ohne root:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=true===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Besitzer wird immer auf den konfigurierten Benutzer und die konfigurierte Gruppe gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $TOMCAT_USER:$SUPERX_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dafür werden normalerweise root-Rechte benötigt.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=false===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird kein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die vorhandenen Besitzer- und Gruppeninformationen bleiben unverändert.&lt;br /&gt;
&lt;br /&gt;
===SET_CHMOD===&lt;br /&gt;
&lt;br /&gt;
Mit &amp;lt;code&amp;gt;SET_CHMOD&amp;lt;/code&amp;gt; wird gesteuert, ob Dateirechte gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dabei werden u. a.:&lt;br /&gt;
&lt;br /&gt;
* Verzeichnisse auf &amp;lt;code&amp;gt;2775&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
* Dateien auf &amp;lt;code&amp;gt;664&amp;lt;/code&amp;gt; gesetzt&lt;br /&gt;
* Dateien unter &amp;lt;code&amp;gt;db/bin&amp;lt;/code&amp;gt; ausführbar gesetzt&lt;br /&gt;
* Dateien mit Endung &amp;lt;code&amp;gt;.x&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;.sh&amp;lt;/code&amp;gt; ausführbar gesetzt&lt;br /&gt;
&lt;br /&gt;
Das gesetzte setgid-Bit auf Verzeichnissen sorgt dafür, dass neu angelegte Dateien und Verzeichnisse die Gruppe des übergeordneten Verzeichnisses erben.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tomcat-Gruppe==&lt;br /&gt;
&lt;br /&gt;
Wenn mit Gruppenrechten gearbeitet wird, muss der Tomcat-Benutzer Mitglied der verwendeten Gruppe sein.&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;
usermod -aG superx tomcat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Skript kann diese Zuordnung automatisch erfolgen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ADD_TOMCAT_TO_GROUP=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Falls die Gruppenmitgliedschaft neu gesetzt wurde, muss Tomcat anschließend neu gestartet werden, damit die neue Gruppenzugehörigkeit im laufenden Prozess wirksam wird.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Sicherheitsprüfung bereits migrierter Installationen==&lt;br /&gt;
&lt;br /&gt;
Um versehentliche Mehrfachmigrationen zu vermeiden, prüft das Skript standardmäßig, ob die Quelle bereits nach einer migrierten Webapp-Struktur aussieht.&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;
SUPERX_DIR=/home/superx/webserver/tomcat/webapps/superx/WEB-INF/conf/edustore&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hier liegt &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt; bereits innerhalb von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall bricht das Skript standardmäßig ab.&lt;br /&gt;
&lt;br /&gt;
Die Prüfung kann im Notfall ü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;
Standardwert:&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;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Diese Option sollte nur verwendet werden, wenn die Auswirkungen bekannt sind. Andernfalls besteht die Gefahr, dass bereits migrierte Strukturen erneut kopiert oder ungewollt verschachtelt werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dry-Run==&lt;br /&gt;
&lt;br /&gt;
Vor einer Produktivmigration empfiehlt sich ein Testlauf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DRY_RUN=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es werden die geplanten Aktionen angezeigt, ohne Änderungen durchzuführen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
&lt;br /&gt;
===Vollständige Migration mit Kopie des DB-Verzeichnisses===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Vollständige Migration mit Verschieben des DB-Verzeichnisses===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;full&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;move&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;/var/lib/tomcat10/webapps/superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;tomcat&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird die Webapp kopiert, das DB-Verzeichnis jedoch verschoben.&lt;br /&gt;
&lt;br /&gt;
===Nur DB-Verzeichnis in bestehende Webapp übernehmen===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/db/bin/SQL_ENV&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;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;false&amp;quot;&lt;br /&gt;
UPDATE_SQL_ENV=&amp;quot;true&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&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;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall wird keine Webapp kopiert. Das DB-Verzeichnis wird in die bestehende Webapp unter &amp;lt;code&amp;gt;WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt; verschoben.&lt;br /&gt;
&lt;br /&gt;
===Testmigration ohne root===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=&amp;quot;/home/superx/test/db/bin/SQL_ENV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
MIGRATION_MODE=&amp;quot;db_only&amp;quot;&lt;br /&gt;
DB_TRANSFER_MODE=&amp;quot;copy&amp;quot;&lt;br /&gt;
TARGET_WEBAPP=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
TOMCAT_USER=&amp;quot;superx&amp;quot;&lt;br /&gt;
SUPERX_GROUP=&amp;quot;superx&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SET_RIGHTS=&amp;quot;true&amp;quot;&lt;br /&gt;
SET_OWNER=&amp;quot;auto&amp;quot;&lt;br /&gt;
SET_CHMOD=&amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ADD_TOMCAT_TO_GROUP=&amp;quot;false&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird das Skript als Benutzer &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; ausgeführt, kann diese Migration ohne root-Rechte laufen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ablauf der Migration==&lt;br /&gt;
&lt;br /&gt;
Das Skript führt je nach Modus folgende Schritte aus:&lt;br /&gt;
&lt;br /&gt;
# Laden von &amp;lt;code&amp;gt;migrate_superx.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
# Laden der bestehenden &amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ermitteln von &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; und dem bisherigen DB-Verzeichnis&lt;br /&gt;
# Sicherheitsprüfung, ob die Quelle bereits migriert aussieht&lt;br /&gt;
# Ermitteln der Zielstruktur&lt;br /&gt;
# Optional: Tomcat stoppen&lt;br /&gt;
# Bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt;: Webapp kopieren&lt;br /&gt;
# DB-Verzeichnis je nach &amp;lt;code&amp;gt;DB_TRANSFER_MODE&amp;lt;/code&amp;gt; kopieren oder verschieben&lt;br /&gt;
# Backup der Ziel-&amp;lt;code&amp;gt;SQL_ENV&amp;lt;/code&amp;gt;&lt;br /&gt;
# Anpassung von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;umask&amp;lt;/code&amp;gt;&lt;br /&gt;
# Optional: Rechte setzen&lt;br /&gt;
# Optional: Tomcat starten&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
* Die Webapp wird vom Skript nie verschoben, sondern bei &amp;lt;code&amp;gt;MIGRATION_MODE=full&amp;lt;/code&amp;gt; kopiert.&lt;br /&gt;
* Das DB-Verzeichnis kann wahlweise kopiert oder verschoben werden.&lt;br /&gt;
* Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; ist die alte DB-Quelle nach der Migration nicht mehr vorhanden.&lt;br /&gt;
* Bei &amp;lt;code&amp;gt;DB_TRANSFER_MODE=move&amp;lt;/code&amp;gt; darf das Ziel-DB-Verzeichnis nicht existieren.&lt;br /&gt;
* Für &amp;lt;code&amp;gt;copy&amp;lt;/code&amp;gt; wird &amp;lt;code&amp;gt;rsync&amp;lt;/code&amp;gt; verwendet.&lt;br /&gt;
* Die interne Zielstruktur ist fest vorgegeben: &amp;lt;code&amp;gt;WEB-INF/conf/edustore/db&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Für Produktivmigrationen ist ein vorheriger Dry-Run empfehlenswert.&lt;br /&gt;
* Bei Rechteänderungen auf andere Benutzer oder Gruppen sind root-Rechte erforderlich.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15916</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15916"/>
		<updated>2026-06-11T12:38:46Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Beispiele */&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;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
==Ziel==&lt;br /&gt;
Mit dem Skript &amp;lt;code&amp;gt;migrate_superx_webapp.sh&amp;lt;/code&amp;gt; kann eine bestehende SuperX-Installation automatisch auf die neue Verzeichnisstruktur migriert werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden die Dateien nicht verschoben, sondern kopiert. Die bestehende Installation bleibt dadurch unverändert erhalten und kann bei Bedarf weiterhin verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Die Migration dient insbesondere dazu, die bisher getrennten Verzeichnisse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/db&lt;br /&gt;
/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in einer gemeinsamen Struktur innerhalb der Tomcat-Webapp zusammenzuführen.&lt;br /&gt;
&lt;br /&gt;
==Neue Verzeichnisstruktur==&lt;br /&gt;
Nach der Migration befindet sich die komplette SuperX-Installation innerhalb der Webapp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;WEBAPP&amp;gt;&lt;br /&gt;
├── WEB-INF&lt;br /&gt;
│   ├── conf&lt;br /&gt;
│   │   └── edustore&lt;br /&gt;
│   │       └── db&lt;br /&gt;
│   └── ...&lt;br /&gt;
└── ...&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;
/var/lib/tomcat10/webapps/superx&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Variablen in der SQL_ENV werden dabei automatisch angepasst:&lt;br /&gt;
&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;
&lt;br /&gt;
SUPERX_DIR=/var/lib/tomcat10/webapps/superx/WEB-INF/conf/edustore&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird die Umask auf:&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;
gesetzt, damit Dateien und Verzeichnisse künftig gruppenweit bearbeitet werden können.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Das Migrationsskript wird zusammen mit einer Konfigurationsdatei ausgeliefert:&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;
migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Dateien müssen sich im selben Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
Das Skript liest die Konfiguration automatisch aus 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;
im aktuellen Skriptverzeichnis ein.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration==&lt;br /&gt;
&lt;br /&gt;
===Vorhandene SQL_ENV===&lt;br /&gt;
Pfad zur bestehenden Installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=/home/superx/db/bin/SQL_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Datei werden die bisherigen Werte von SUPERX_DIR und WEBAPP ermittelt.&lt;br /&gt;
&lt;br /&gt;
===Ziel-Webapp===&lt;br /&gt;
Zielverzeichnis der neuen Installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die interne Struktur unterhalb dieses Verzeichnisses wird automatisch erzeugt.&lt;br /&gt;
&lt;br /&gt;
===Benutzer und Gruppen===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=tomcat&lt;br /&gt;
SUPERX_GROUP=superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=superx&lt;br /&gt;
SUPERX_GROUP=superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Variable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=auto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
steuert, ob und wie Besitzer und Gruppen der migrierten Dateien gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=auto (empfohlen)===&lt;br /&gt;
&lt;br /&gt;
Dies ist die empfohlene Standardeinstellung.&lt;br /&gt;
&lt;br /&gt;
Das Skript entscheidet automatisch, ob ein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; erforderlich ist:&lt;br /&gt;
&lt;br /&gt;
*Wird das Skript als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ausgeführt, werden Besitzer und Gruppe gemäß den Variablen &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;SUPERX_GROUP&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
*Wird das Skript als derselbe Benutzer ausgeführt, der auch als &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; konfiguriert wurde und ist dieser Benutzer Mitglied der angegebenen Gruppe, wird auf das &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; automatisch verzichtet.&lt;br /&gt;
*Ist eine Änderung des Besitzers erforderlich, das Skript läuft jedoch nicht als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;, wird die Ausführung mit einer entsprechenden Fehlermeldung abgebrochen.&lt;br /&gt;
&lt;br /&gt;
Dadurch können Testmigrationen ohne Root-Rechte durchgeführt werden, während Produktivmigrationen weiterhin die korrekten Besitzer und Gruppen setzen.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=true===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Besitzer wird immer auf den konfigurierten Benutzer und die konfigurierte Gruppe gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $TOMCAT_USER:$SUPERX_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für diese Einstellung werden in der Regel Root-Rechte benötigt.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=false===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird kein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die vorhandenen Besitzer- und Gruppeninformationen bleiben unverändert erhalten.&lt;br /&gt;
&lt;br /&gt;
Diese Einstellung eignet sich insbesondere für Testumgebungen oder Spezialfälle, in denen die Rechteverwaltung bereits anderweitig erfolgt.&lt;br /&gt;
&lt;br /&gt;
===Sicherheitsprüfung bereits migrierter Installationen===&lt;br /&gt;
&lt;br /&gt;
Um versehentliche Mehrfachmigrationen zu vermeiden, prüft das Skript standardmäßig, ob die Quellinstallation bereits die neue Webapp-Struktur verwendet.&lt;br /&gt;
&lt;br /&gt;
Folgende Konstellationen werden erkannt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SUPERX_DIR=/home/superx/webserver/tomcat/webapps/superx/WEB-INF/conf/edustore&lt;br /&gt;
WEBAPP=/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In diesem Fall liegt &amp;lt;code&amp;gt;SUPERX_DIR&amp;lt;/code&amp;gt; bereits innerhalb von &amp;lt;code&amp;gt;WEBAPP&amp;lt;/code&amp;gt; und die Installation sieht bereits wie eine migrierte Webapp-Struktur aus.&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird geprüft, ob bereits folgendes Verzeichnis vorhanden ist:&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&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird eine solche Struktur erkannt, bricht das Skript standardmäßig mit einer entsprechenden Fehlermeldung ab.&lt;br /&gt;
&lt;br /&gt;
===FORCE_ALREADY_MIGRATED===&lt;br /&gt;
&lt;br /&gt;
Für Sonderfälle kann diese Sicherheitsprüfung bewusst ü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=true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dann wird die Migration trotz erkannter Webapp-Struktur fortgesetzt.&lt;br /&gt;
&lt;br /&gt;
Diese Option sollte nur verwendet werden, wenn die Auswirkungen bekannt sind. Andernfalls besteht die Gefahr, dass bereits migrierte Strukturen erneut kopiert oder Verzeichnisstrukturen ungewollt verschachtelt werden.&lt;br /&gt;
&lt;br /&gt;
Standardwert:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
FORCE_ALREADY_MIGRATED=false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
&lt;br /&gt;
Produktivsystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=tomcat&lt;br /&gt;
SUPERX_GROUP=superx&lt;br /&gt;
SET_OWNER=auto&lt;br /&gt;
FORCE_ALREADY_MIGRATED=false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testsystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=superx&lt;br /&gt;
SUPERX_GROUP=superx&lt;br /&gt;
SET_OWNER=auto&lt;br /&gt;
FORCE_ALREADY_MIGRATED=false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird das Skript in diesem Beispiel als Benutzer &amp;lt;code&amp;gt;superx&amp;lt;/code&amp;gt; ausgeführt, sind keine Root-Rechte erforderlich.&lt;br /&gt;
&lt;br /&gt;
==Ablauf der Migration==&lt;br /&gt;
&lt;br /&gt;
#Laden der Konfiguration aus migrate_superx.conf&lt;br /&gt;
#Laden der bestehenden SQL_ENV&lt;br /&gt;
#Ermitteln der bisherigen Verzeichnisse&lt;br /&gt;
#Anlegen der Zielstruktur&lt;br /&gt;
#Kopieren der Webapp mittels rsync&lt;br /&gt;
#Kopieren des DB-Verzeichnisses nach WEB-INF/conf/edustore/db&lt;br /&gt;
#Backup der neuen SQL_ENV&lt;br /&gt;
#Anpassung von WEBAPP, SUPERX_DIR und umask&lt;br /&gt;
#Optionales Setzen von Rechten&lt;br /&gt;
#Optionale Tomcat-Integration&lt;br /&gt;
&lt;br /&gt;
==Dry-Run==&lt;br /&gt;
&lt;br /&gt;
Vor einer Produktivmigration empfiehlt sich ein Testlauf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DRY_RUN=true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es werden alle geplanten Aktionen angezeigt, jedoch keine Änderungen durchgeführt.&lt;br /&gt;
&lt;br /&gt;
==Produktivmigration==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Abschluss sollte die neue SQL_ENV geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. &amp;lt;WEBAPP&amp;gt;/WEB-INF/conf/edustore/db/bin/SQL_ENV&lt;br /&gt;
&lt;br /&gt;
echo $SUPERX_DIR&lt;br /&gt;
echo $WEBAPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
*Die ursprüngliche Installation bleibt erhalten, da ausschließlich kopiert wird.&lt;br /&gt;
*Für die eigentliche Migration wird rsync benötigt.&lt;br /&gt;
*Das Skript kann mehrfach ausgeführt werden.&lt;br /&gt;
*Die interne Zielstruktur ist fest definiert und unabhängig vom gewählten Webapp-Pfad.&lt;br /&gt;
*Für Produktivmigrationen wird die Ausführung als root empfohlen.&lt;br /&gt;
*Testmigrationen können je nach Konfiguration auch ohne Root-Rechte durchgeführt werden.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15915</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15915"/>
		<updated>2026-06-11T12:08:56Z</updated>

		<summary type="html">&lt;p&gt;Andrek: Migration auf die Webapp-Struktur&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;
=Migration auf die Webapp-Struktur=&lt;br /&gt;
&lt;br /&gt;
==Ziel==&lt;br /&gt;
Mit dem Skript &amp;lt;code&amp;gt;migrate_superx_webapp.sh&amp;lt;/code&amp;gt; kann eine bestehende SuperX-Installation automatisch auf die neue Verzeichnisstruktur migriert werden.&lt;br /&gt;
&lt;br /&gt;
Dabei werden die Dateien nicht verschoben, sondern kopiert. Die bestehende Installation bleibt dadurch unverändert erhalten und kann bei Bedarf weiterhin verwendet werden.&lt;br /&gt;
&lt;br /&gt;
Die Migration dient insbesondere dazu, die bisher getrennten Verzeichnisse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/home/superx/db&lt;br /&gt;
/home/superx/webserver/tomcat/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in einer gemeinsamen Struktur innerhalb der Tomcat-Webapp zusammenzuführen.&lt;br /&gt;
&lt;br /&gt;
==Neue Verzeichnisstruktur==&lt;br /&gt;
Nach der Migration befindet sich die komplette SuperX-Installation innerhalb der Webapp:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;WEBAPP&amp;gt;&lt;br /&gt;
├── WEB-INF&lt;br /&gt;
│   ├── conf&lt;br /&gt;
│   │   └── edustore&lt;br /&gt;
│   │       └── db&lt;br /&gt;
│   └── ...&lt;br /&gt;
└── ...&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;
/var/lib/tomcat10/webapps/superx&lt;br /&gt;
└── WEB-INF&lt;br /&gt;
    └── conf&lt;br /&gt;
        └── edustore&lt;br /&gt;
            └── db&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Variablen in der SQL_ENV werden dabei automatisch angepasst:&lt;br /&gt;
&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;
&lt;br /&gt;
SUPERX_DIR=/var/lib/tomcat10/webapps/superx/WEB-INF/conf/edustore&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusätzlich wird die Umask auf:&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;
gesetzt, damit Dateien und Verzeichnisse künftig gruppenweit bearbeitet werden können.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Das Migrationsskript wird zusammen mit einer Konfigurationsdatei ausgeliefert:&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;
migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beide Dateien müssen sich im selben Verzeichnis befinden.&lt;br /&gt;
&lt;br /&gt;
Das Skript liest die Konfiguration automatisch aus 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;
im aktuellen Skriptverzeichnis ein.&lt;br /&gt;
&lt;br /&gt;
==Konfiguration==&lt;br /&gt;
&lt;br /&gt;
===Vorhandene SQL_ENV===&lt;br /&gt;
Pfad zur bestehenden Installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SQL_ENV=/home/superx/db/bin/SQL_ENV&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Über diese Datei werden die bisherigen Werte von SUPERX_DIR und WEBAPP ermittelt.&lt;br /&gt;
&lt;br /&gt;
===Ziel-Webapp===&lt;br /&gt;
Zielverzeichnis der neuen Installation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TARGET_WEBAPP=/var/lib/tomcat10/webapps/superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die interne Struktur unterhalb dieses Verzeichnisses wird automatisch erzeugt.&lt;br /&gt;
&lt;br /&gt;
===Benutzer und Gruppen===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=tomcat&lt;br /&gt;
SUPERX_GROUP=superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alternativ:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=superx&lt;br /&gt;
SUPERX_GROUP=superx&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Automatische Rechtebehandlung==&lt;br /&gt;
&lt;br /&gt;
Die Variable&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=auto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
steuert, ob und wie Besitzer und Gruppen der migrierten Dateien gesetzt werden.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=auto (empfohlen)===&lt;br /&gt;
&lt;br /&gt;
Dies ist die empfohlene Standardeinstellung.&lt;br /&gt;
&lt;br /&gt;
Das Skript entscheidet automatisch, ob ein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; erforderlich ist:&lt;br /&gt;
&lt;br /&gt;
*Wird das Skript als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; ausgeführt, werden Besitzer und Gruppe gemäß den Variablen &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; und &amp;lt;code&amp;gt;SUPERX_GROUP&amp;lt;/code&amp;gt; gesetzt.&lt;br /&gt;
*Wird das Skript als derselbe Benutzer ausgeführt, der auch als &amp;lt;code&amp;gt;TOMCAT_USER&amp;lt;/code&amp;gt; konfiguriert wurde und ist dieser Benutzer Mitglied der angegebenen Gruppe, wird auf das &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; automatisch verzichtet.&lt;br /&gt;
*Ist eine Änderung des Besitzers erforderlich, das Skript läuft jedoch nicht als &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;, wird die Ausführung mit einer entsprechenden Fehlermeldung abgebrochen.&lt;br /&gt;
&lt;br /&gt;
Dadurch können Testmigrationen ohne Root-Rechte durchgeführt werden, während Produktivmigrationen weiterhin die korrekten Besitzer und Gruppen setzen.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=true===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der Besitzer wird immer auf den konfigurierten Benutzer und die konfigurierte Gruppe gesetzt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R $TOMCAT_USER:$SUPERX_GROUP ...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für diese Einstellung werden in der Regel Root-Rechte benötigt.&lt;br /&gt;
&lt;br /&gt;
===SET_OWNER=false===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
SET_OWNER=false&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es wird kein &amp;lt;code&amp;gt;chown&amp;lt;/code&amp;gt; ausgeführt.&lt;br /&gt;
&lt;br /&gt;
Die vorhandenen Besitzer- und Gruppeninformationen bleiben unverändert erhalten.&lt;br /&gt;
&lt;br /&gt;
Diese Einstellung eignet sich insbesondere für Testumgebungen oder Spezialfälle, in denen die Rechteverwaltung bereits anderweitig erfolgt.&lt;br /&gt;
&lt;br /&gt;
===Beispiele===&lt;br /&gt;
&lt;br /&gt;
Produktivsystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=tomcat&lt;br /&gt;
SUPERX_GROUP=superx&lt;br /&gt;
SET_OWNER=auto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Testsystem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
TOMCAT_USER=memtext&lt;br /&gt;
SUPERX_GROUP=memtext&lt;br /&gt;
SET_OWNER=auto&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird das Skript in diesem Beispiel als Benutzer &amp;lt;code&amp;gt;memtext&amp;lt;/code&amp;gt; ausgeführt, sind keine Root-Rechte erforderlich.&lt;br /&gt;
&lt;br /&gt;
==Ablauf der Migration==&lt;br /&gt;
&lt;br /&gt;
#Laden der Konfiguration aus migrate_superx.conf&lt;br /&gt;
#Laden der bestehenden SQL_ENV&lt;br /&gt;
#Ermitteln der bisherigen Verzeichnisse&lt;br /&gt;
#Anlegen der Zielstruktur&lt;br /&gt;
#Kopieren der Webapp mittels rsync&lt;br /&gt;
#Kopieren des DB-Verzeichnisses nach WEB-INF/conf/edustore/db&lt;br /&gt;
#Backup der neuen SQL_ENV&lt;br /&gt;
#Anpassung von WEBAPP, SUPERX_DIR und umask&lt;br /&gt;
#Optionales Setzen von Rechten&lt;br /&gt;
#Optionale Tomcat-Integration&lt;br /&gt;
&lt;br /&gt;
==Dry-Run==&lt;br /&gt;
&lt;br /&gt;
Vor einer Produktivmigration empfiehlt sich ein Testlauf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
DRY_RUN=true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anschließend:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Es werden alle geplanten Aktionen angezeigt, jedoch keine Änderungen durchgeführt.&lt;br /&gt;
&lt;br /&gt;
==Produktivmigration==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ./migrate_superx_webapp.sh&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach Abschluss sollte die neue SQL_ENV geprüft werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
. &amp;lt;WEBAPP&amp;gt;/WEB-INF/conf/edustore/db/bin/SQL_ENV&lt;br /&gt;
&lt;br /&gt;
echo $SUPERX_DIR&lt;br /&gt;
echo $WEBAPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
&lt;br /&gt;
*Die ursprüngliche Installation bleibt erhalten, da ausschließlich kopiert wird.&lt;br /&gt;
*Für die eigentliche Migration wird rsync benötigt.&lt;br /&gt;
*Das Skript kann mehrfach ausgeführt werden.&lt;br /&gt;
*Die interne Zielstruktur ist fest definiert und unabhängig vom gewählten Webapp-Pfad.&lt;br /&gt;
*Für Produktivmigrationen wird die Ausführung als root empfohlen.&lt;br /&gt;
*Testmigrationen können je nach Konfiguration auch ohne Root-Rechte durchgeführt werden.&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:rpta_tutorial_pers_erg.png&amp;diff=15859</id>
		<title>Datei:rpta tutorial pers erg.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:rpta_tutorial_pers_erg.png&amp;diff=15859"/>
		<updated>2026-05-19T11:47:28Z</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:rpta_tutorial_maske_spaltenlayout.png&amp;diff=15858</id>
		<title>Datei:rpta tutorial maske spaltenlayout.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:rpta_tutorial_maske_spaltenlayout.png&amp;diff=15858"/>
		<updated>2026-05-19T11:45:09Z</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:rpta_tutorial_beispiel_spaltenlayout_erstellt.png&amp;diff=15857</id>
		<title>Datei:rpta tutorial beispiel spaltenlayout erstellt.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:rpta_tutorial_beispiel_spaltenlayout_erstellt.png&amp;diff=15857"/>
		<updated>2026-05-19T10:24:09Z</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:rpta_tutorial_spaltenlayout_anlegen.png&amp;diff=15856</id>
		<title>Datei:rpta tutorial spaltenlayout anlegen.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:rpta_tutorial_spaltenlayout_anlegen.png&amp;diff=15856"/>
		<updated>2026-05-19T10:13:24Z</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:rpta_tutorial_navigation_spaltenlayout.png&amp;diff=15855</id>
		<title>Datei:rpta tutorial navigation spaltenlayout.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:rpta_tutorial_navigation_spaltenlayout.png&amp;diff=15855"/>
		<updated>2026-05-19T10:09:51Z</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:rpta_tutorial_layout_uebersicht.png.png&amp;diff=15854</id>
		<title>Datei:rpta tutorial layout uebersicht.png.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:rpta_tutorial_layout_uebersicht.png.png&amp;diff=15854"/>
		<updated>2026-05-19T10:03: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=Dokumentation&amp;diff=15853</id>
		<title>Dokumentation</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Dokumentation&amp;diff=15853"/>
		<updated>2026-05-19T09:49:29Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Moduldokumentation]]&lt;br /&gt;
* [[DMS-Anbindungen]]&lt;br /&gt;
* Websites&lt;br /&gt;
** [[Memtext-Homepage]]&lt;br /&gt;
*** [[Memtext-Homepage Entwurf]] &lt;br /&gt;
*** [[Memtext-Homepage bis 2024]]&lt;br /&gt;
** [[Memtext-Academy]]&lt;br /&gt;
** [[Memtext-Journal]]&lt;br /&gt;
*** [[Memtext-Journal Entwurf]]&lt;br /&gt;
** [[SuperX-Homepage]]&lt;br /&gt;
* Projekt-Sites&lt;br /&gt;
**[[Studienverlauf Frühwarnsystem]]&lt;br /&gt;
**[[Lehrveranstaltungen (Stundenplan)]]&lt;br /&gt;
**[[Datenabzüge (Datenblätter einfrieren)]]&lt;br /&gt;
**[[Studiengangsmanagement (Begleitung des Studiengangsmanagements mit Kennzahlen)]]&lt;br /&gt;
*** [[Kennzahlen im Bereich Bewerbungen]]&lt;br /&gt;
** [[ZSL_Mittelverteilung|Berichte zur ZSL Mittelverteilung MWK BaWue]]&lt;br /&gt;
* Testfälle&lt;br /&gt;
**[[HIS-Demo_eduetl_davy]]&lt;br /&gt;
* Kurse&lt;br /&gt;
**SuperX&lt;br /&gt;
*** [[Kurs-SuperX-Nutzung|Nutzung]] &lt;br /&gt;
**Kettle&lt;br /&gt;
***[[Kettle-Grundlagen|Kettle Grundlagen]]: Einstieg in Kettle, erste Schritte zur Arbeit mit Spoon und Integration in SuperX/HISinOne-BI&lt;br /&gt;
***[[Kettle_Kurs_Teil_2|Kettle für Fortgeschrittene]]: Kettle-Monitoring und Mailversand, Automatisierung, weitere Integration in SuperX/&lt;br /&gt;
**[[Berichtsassistent-Grundlagen|Berichtsassistent Grundlagen]]: Einstieg in den Berichtsassistenten (RPTA)&lt;br /&gt;
HISinOne-BI&lt;br /&gt;
** [[LM-Vorstellung|LM-Vorstellung]]&lt;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15481</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15481"/>
		<updated>2025-12-17T08:33:02Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Mailversand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&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;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15480</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15480"/>
		<updated>2025-12-17T08:32:28Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Mailversand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&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;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15479</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15479"/>
		<updated>2025-12-17T08:31:26Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Mailversand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&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;
&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;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15478</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15478"/>
		<updated>2025-12-17T08:30:09Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Mailversand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&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;
====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;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Datei:Kernmodul_Regelbetrieb_Mailversand.png&amp;diff=15475</id>
		<title>Datei:Kernmodul Regelbetrieb Mailversand.png</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Datei:Kernmodul_Regelbetrieb_Mailversand.png&amp;diff=15475"/>
		<updated>2025-12-17T08:26:50Z</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=Kernmodul_Regelbetrieb&amp;diff=15471</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15471"/>
		<updated>2025-12-16T12:26:43Z</updated>

		<summary type="html">&lt;p&gt;Andrek: /* Ziel und Überblick */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&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;
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;
----&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;
&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;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
	<entry>
		<id>https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15470</id>
		<title>Kernmodul Regelbetrieb</title>
		<link rel="alternate" type="text/html" href="https://superxhosting.de/wiki/index.php?title=Kernmodul_Regelbetrieb&amp;diff=15470"/>
		<updated>2025-12-15T12:51:39Z</updated>

		<summary type="html">&lt;p&gt;Andrek: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=BI Maintenance=&lt;br /&gt;
&lt;br /&gt;
==Ziel und Überblick==&lt;br /&gt;
Die hier bereitgestellten Skripte ermöglichen es, in der BI-Umgebung von SuperX/HISinOne Modul-Updates und -Upgrades weiterhin zuverlässig über die Shell auszuführen – automatisiert per Cronjob oder manuell.  &lt;br /&gt;
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;
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;
----&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;
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;
&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;
&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;/div&gt;</summary>
		<author><name>Andrek</name></author>
	</entry>
</feed>