ILIAS-Tricks not only for Schools

ILIAS: Lucene RPC-Server und Chat installieren

[wolfganghuebsch], [iliasadmin1] - 28. Mar 2016, 21:42

Diese Anleitung ist bis auf die Behebung der Kollationsprobleme nicht mehr aktuell! Nutzen Sie bitte dieser hier: https://bbs-ilias.de/info/goto.php?target=blog_62_13&client_id=info

Im folgenden Beitrag geht es darum, wie man die Lucene-RPC- und Chat-Server aktiviert, wie man sie nächtlich neu startet und wie man Indizierungsprobleme durch eine Homogenisierung der Kollationen oder manuelles Indizieren heilen kann.

ILIAS-Lucene-RPC-Server installieren

Die Installation des Lucene-Servers ist eigentlich schnell in 4 Schritten gemacht, allerdings ist die entsprechende Anleitung auf ILIAS.de nicht immer leicht zu verstehen. Daher möchte ich die Eckpunkte kurz erläutern. Mit dieser Anleitung wird auch das Suchen in Microsoft-Office-Dokumenten möglich sein.

Schritt 1: Zunächst gehen Sie in das Verzeichnis Services/WebServices/RPC/lib/
Dorthin kopieren Sie die Dateien ojdbc14.jar und  orai18n.jar, welche Sie sich auf oracle.com herunterladen müssen (über Google findet man die sofort).

Schritt 2: Erstellen bzw. editieren Sie ebenfalls im Verzeichnnis Services/WebServices/RPC/lib/ die Datei ilServer.properties nach diesem Muster und passen folgende Werte an:
  • IndexPath - muss vorhanden und vom Webserver beschreibbar sein, bitte nicht in /tmp indexieren
  • LogFile
  • ClientId
  • NicId (wird erteilt nach der Registrierung des Clients in ilias/setup/setup.php)
  • IliasIniPath

Wichtiger Hinweis zu Schritt 1: Wenn Sie mit git arbeiten und die Branch wechseln, kann es sein, dass git die Dateien  ojdbc14.jar, orai18n.jar und ilServer.properties löscht, z.B. bei einem git-stash-Kommando. Daher sollte man eine Sicherungskopie dieser Dateien anlegen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Server]
IpAddress = 127.0.0.1
Port = 11111
IndexPath = /opt/iliasdata/lucene
LogFile = /var/log/ilServerinfo.log
LogLevel = WARN
NumThreads = 1
RamBufferSize = 256

[Client1]
ClientId = steuerkreis
NicId = 9627
IliasIniPath = /var/www/info/ilias.ini.php

[Client2]
ClientId = info
NicId = 8747
IliasIniPath = /var/www/info/ilias.ini.php

Einträge, die Sie nicht benötigen, löschen Sie einfach.

Achten Sie darauf, dass das Verzeichnis /opt/iliasdata/lucene auch vorhanden ist und der Webserver darauf schreiben darf. Wer in /tmp indiziert, muss die Indizierung nach jedem Neustart wiederholen ;-)

Die NicID wird erst nach der Registrierung des jeweiligen Clients unter setup/setup.php zugeteilt und ist dort oder unter Administration->Allgemeine Einstellungen/Server abrufbar.

Schritt 3: Erstellen Sie die Datei ilserver z.B. im Verzeichnis /etc/init.d/ (Debian, Ubuntu) mit diesem Inhalt (copy&paste) und passen Sie den libpath an:

Neue Version ilserverstart4 vom 06.04.2017 mit if-Teil

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/bin/bash
### BEGIN INIT INFO
# Provides: ilserverstart4
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Lucene-ILIAS-Server (Java)
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO

# Author: Wolfgang Hubesch wolfgang.huebsch@gmx.de
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="iliasserver"
NAME=ilserverneu
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/opt/ilias/scripts/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
JAVABIN="/usr/bin/java"
libpath="/var/www/vhosts/kivinet.de/httpdocs/ilias/Services/WebServices/RPC/lib/" #Path to ojdbc14.jar, orai18n.jar, ilServer.properties
inifile="ilServer.properties" #Name of INI-FIle
enc="-Dfile.encoding=UTF-8"
#######################################################################################################################
code="de.ilias.ilServer"
status=$(ps aux | grep ojdbc)
$status > /dev/null 2>&1
string="$status"


case "$1" in
start)


if [[ $string == *${code}* ]];
then
echo "Ilserver is allready running...exit now..."
exit
cd $libpath
$JAVABIN -jar ilServer.jar $inifile stop
kill $(ps aux | grep ojdbc | awk '{print $2}') > /dev/null 2>&1
echo "Now try to start..."
cd $libpath
$JAVABIN $enc -cp "ojdbc14.jar:orai18n.jar:ilServer.jar" de.ilias.ilServer $inifile start &
else
echo "Ilserver is down...try to start..."
cd $libpath
$JAVABIN $enc -cp "ojdbc14.jar:orai18n.jar:ilServer.jar" de.ilias.ilServer $inifile start &
fi

;;

stop)

if [[ $string == *${code}* ]];
then
echo "Ilserver is running...try to kill..."
cd $libpath
#$JAVABIN -jar ilServer.jar $inifile stop
kill $(ps aux | grep ojdbc | awk '{print $2}') > /dev/null 2>&1
else
echo "Ilserver is down at this moment..."
exit
fi




;;

status)
if [[ $string == *${code}* ]];
then
echo "Ilserver is running..."
else
echo "Ilserver is down..."
exit
fi


;;

restart)
$0 stop
sleep 2
$0 start
;;

*)
echo "Usage: $0 {start|stop|status|restart}"
exit 1
esac

exit 0

Machen Sie die Datei ausführbar mit chmod +x ilserver
Starten Sie nun den Server mit ./ilserver start oder /etc/init.d/ilserver start. Weitere Optionen sind stop, restart, status.

Wichtig: Ist php-curl installiert? Debian- und Ubuntu-User testen dies bitte so:

sudo apt-get install php5-curl

Schritt 4: Wir aktivieren nun den Lucene-RPC-Server in ILIAS. Zunächst überprüfen wir die IP und den Port unter Administration->Allgemeine Einstellungen->Server->Java-Server - dort ist eigentlich nichts weiter zu konfigurieren.  Achten Sie auf die Anzahl der 1er, hier wird gerne mal eine vergessen. Sie können den Port übrigens frei wählen, aber vergessen Sie nicht, auch das Start-Stop-Skript dann anzupassen.

Dann aktivieren wir die Lucene-Suche unter Administration->Suche.

Wenn es nicht läuft, fragen Sie mich direkt oder im Forum :-)

Hierzu noch 2 Screenshots (Danke an Marc :-)):

Aktivierung der Lucene-Suche unter Administration->Suche:

Erste Ausführung der Indizierung unter Administration->Allgemeine Einstellungen->Cronjobs:

Sie sollten das Start-Stop-Skript noch zu den Runlevel hinzufügen, damit es automatisch startet. In Debian würde dies im Verzeichnis /etc/init.d/ mit dem Befehl update-rc.d ilserver defaults passieren.

Den Chat-Server aktivieren

Auch die Aktivierung des Chatservers geht eigentlich leicht, wenn man ein Start-Stop-Skript verwendet. Im Unterschied zum Lucene-RPC-Server ist hier der Port wichtig und wird ggf. von Firewalls geblockt, da Sie nicht 80 oder 443 wählen dürfen.

Chat-Server-Einstellungen

In ILIAS wechseln wir zur Chat-Server-Ansicht unter Administration->Chat->Chat-Server-Einstellungen:

Finden Sie die IP Ihres Servers heraus, für bbs-ilias.de ist dies 195.110.43.152 (z.B. nslookup bbs-ilias.de oder ping bbs-ilias.de). Tragen Sie die IP in die Felder IP-Adresse des Chatservers und Bevorzuge Hosts ein.

Tragen Sie einen Port ein, z.B. 8082. Klicken Sie auf Speichern. Wir behandeln nur HTTP.

Allgemeine Chat-Einstellungen

Wechseln Sie nun in die allgemeinen Einstellungen. Die Felder sind eigentlich selbsterklärend. Den Haken unter "Chat aktivieren" kann man nur setzen, wenn SOAP aktiviert ist (s.u.).

Der Soap-User ist ein normaler User-Account. Der Account muss sich einloggen können und eventuelle Nutzungsvereibarungen etc. bereits aktzeptiert haben.

Der Chat kann mit dieser Anleitung nicht über https betrieben werden. Nach dem Einloggen in ILIAS muss die URL ohne https beginnen. An einer Anleitung mit https inkl. Weiterleitung auf Port 443 arbeite ich gerade.

Soap aktivieren

Die Aktivierung von SOAP ist zum Glück extrem simpel: Einfach unter Allgemeine Einstellungen->Server->SOAP den Haken setzten und speichern. Danach lässt sich der Chatserver auch aktivieren.

Chatserver per Skript starten

Falls Sie schon Stunden oder Tage damit zugebracht haben, den Chatserver zu starten, vermute ich, dass Sie an dem folgenden Schritt gescheitert sind. Dabei ist es eigntlich ziemlich einfach, wenn man mit einem Skript arbeitet. Erstellen Sie also z.B. unter /etc/init.d eine Datei mit dem Namen ilchat und machen diese ausführbar mit chmod +x ilchat. Kopieren Sie den folgenden Inhalt hinein und passen die Pfade an:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/sh
# For new Chat since ILIAS 4.2
#!/bin/sh

### BEGIN INIT INFO
# Provides: ilchatserver
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts ilias chatsrver
# Description: starts ilias chatserver using start-stop-daemon
### END INIT INFO








JAVABIN=/usr/bin/java
ILIASDIR=/var/www/info # Type in the root directory of your ILIAS installation
ILIAS_DATA_DIR=/opt/info # Type in the ILIAS Data directory (outside webspace)
USER=root # Type in the user who should run the chatserver
CLIENT=info # Type in the exact name of your ILIAS client

case "$1" in
start)
if [ -f /tmp/chatserver.pid ]
then
echo "The chat server seems to be running. Type 'chatserver stop' or remove the file '/tmp/chatserver.pid' manually"
exit 1
fi
echo "Starting chat server"
su -c "$JAVABIN -jar $ILIASDIR/Modules/Chatroom/server/Chatserver.jar $ILIAS_DATA_DIR/$CLIENT/chatroom/server.properties $ILIAS_DATA_DIR/$CLIENT/chatroom/client.properties" $USER &

echo $! > /tmp/chatserver.pid
;;

stop)
echo "Shutting down chatserver"
{
kill `cat /tmp/chatserver.pid`
unlink /tmp/chatserver.pid
} 2> /dev/null
;;

restart)
$0 stop
sleep 2
$0 start
;;

*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac

exit 0

Starten Sie den Chatserver mit ./ilchat start (oder stop bzw. restart) wie beim ilserver.

Damit die Skripte nach jedem Serverboot gestartet werden, führen wir im Verzeichnis /etc/init.d aus:

update-rc.d -f ilchat remove
update-rc.d -f ilserver remove
update-rc.d ilserver defaults 93
update-rc.d ilchat defaults 94

Ilserver und ilchat per Crontab nächtlich neu starten

Auch wenn Sie das Start-Stop-Skript des ilchat den Runleveln hinzufügen: Es läuft nicht nach einem Neustart des Servers. Mein Tipp ist es daher, in die Datei /etc/crontab folgende Zeile einzufügen:

20 2 * * * www-data /var/scripts/ilchat stop
25 2 * * * root rm /tmp/chatserver.pid
30 2 * * * www-data /var/scripts/ilchat start

In diesem Beispiel wird der Chatserver um halb drei Morgens neu gestartet. Nach einem Reboot hilft es auch, das Skript manuell auszuführen. Es läuft dann eigentlich zuverlässig.

Aber auch den ilserver sollte man per Skript nächtlich neu starten:

20 1 * * * www-data /etc/init.d/ilserver stop
25 1 * * * root rm  /tmp/ilserverneu.pid
30 1 * * * www-data /etc/init.d/ilserver start

Kollationsprobleme mit dem RPC-Lucene-Server lösen

Es kam merkwürdiger Weise in den letzten Jahren immer dazu, dass sich Tabellen in die Datenbank mit "fremden" Kollationen einschlichen. In diesen Fällen kann es sein, dass der Lucene-Server nicht indizieren kann, was man an Hand entsprechender Meldungen in den Logs sieht.

Nach Kollationsproblemen suchen

Um herauszufinden, ob Kollationsprobleme vorliegen, schauen Sie ins Lucene-Log. Um herauszufinden, welche Tabellen betroffen sind, öffnen Sie die Datenbank mit PHPMyAdmin und geben im Feld SQL SHOW TABLE STATUS ein und klicken auf OK:

In der Abfrage kann man dann in der Spalte Collation sehen, was Sache ist, also hoffentlich nur
  • utf8_general_ci oder
  • utf8_unicode_ci

Die Kollation wieder harmonisieren

Wenn die Indizierung auf Grund der heterogenen Kollationen nicht mehr funktioniert, würde ich  mit einem Skript diese wieder homogenisieren. Unten finden Sie drei entsprechende Links. Die Skripte von Slindberg und Reiche habe ich bereits erfolgreich getestet. Ich empfehle das Skript von Slindberg.

Beim Skript von Eric Reiche müsste dieses eingetragen werden:

$collation = 'utf8_unicode_ci';$character_set = 'utf8';

oder

$collation = 'utf8_general_ci';$character_set = 'utf8';

Verwenden Sie das Skript auf eigene Gefahr zunächst in einer Testumgebung und mit Backup! Testen Sie das Ergebnis ausgiebig, bevor Sie es in ein Produktivsystem immigrieren!

Die Lucene-Indexierung manuell durchführen

In einigen Fällen hat sich gezeigt, dass die Indizierung über den ILIAS-Cronjob nicht immer zum gewünschten Ergebnis geführt hat. Über die Ursachen kann ich nur spekulieren. Jedenfalls wurden ältere Office-Dokumente und PDFs nicht gefunden. Man kann die Indizierung aber auch manuell durchführen. Dazu habe ich diese Zeilen geschrieben:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash

echo Manuelles Indizieren
echo "Der Task luft im Hintergrund";

libpath=/var/www/html/ilias/Services/WebServices/RPC/lib
client_nic=iliasschoolmaster_8484
index=createIndex
#or updateIndex

#------------------------------------------------------------------------------------------------------------------


#Line to update the Lucene-Index

echo /usr/bin/java -Dfile.encoding=UTF-8 -Dconsole.encoding=UTF-8 -jar ${libpath}/ilServer.jar ${libpath}/ilServer.properties ${index} ${client_nic} &

Das Skript wird in eine Textdatei kopiert und mit chmod +x ausführbar gemacht und gestartet. Es geht davon aus, dass schon ein Suchindex existiert. Wenn nicht, kann man die Zeile 13 entsprechend ändern (createIndex), wie in dem Skript beschrieben.

Die Indizierung mit diesem Skript kann ziemlich lange dauern, was ich als Indiz dafür werte, dass es funktioniert :-) Natürlich kann man es auch in die Crontab aufnehmen und nächtlich ausführen. Die Indizierung über ILIAS kann man parallel betreiben, z.B. alle 2 Stunden.

Damit sollten eigentlich alle Lucene-Probleme lösbar sein. :-)


No comment has been posted yet.