Upstart/Ubuntu: Startscript für Domino Server

September 11 2013 12:14:25 PM | Tags: Administration  Linux  Lotus Domino  Server 

Meine IBM Domino Testsysteme installiere ich unter Ubuntu Server. Dafür habe ich ein Startscript, dass den Domino Server in einer screen session aufruft. Nun ist das alte SysVinit, bei dem die Prozesse in der Regel nacheinander in einer festen Reihenfolge gestartet werden, überholt. Während die meisten Distributionen auf systemd setzen, hat sich Canonical entschieden, upstart einzusetzen. Ein neues Script speziell für upstart muss also her.

Die Umsetzung des bestehenden Startscripts hat sich als komplizierter herausgestellt, als ich es vorhergesehen hatte. Grund dafür ist, dass die debugging-Möglichkeiten von upstart leider sehr beschränkt sind. Eine Option auf "ich tue etwas und sehe alles, was im System passiert" gibt es leider nicht. Selbst Kerneloptionen für init in /etc/default/grup helfen nur bedingt weiter:
GRUB_CMDLINE_LINUX_DEFAULT="INIT_VERBOSE=yes init=/sbin/init -v --debug"
Das ist insbesondere dann unangenehm, wenn ein Bug im Fehlerfall den ganzen Start-Stop-Vorgang einfach anhält, ohne zu dokumentieren, warum das passiert. Nach vielen Tests und Recherchen hat sich herausgestellt, dass upstart Schwierigkeiten hat, den Status geforkter Prozesse zu überwachen. Ich kann also nur empfehlen, bei upstart init Scripten nach Möglichkeit auf forks zu verzichten. Nachdem das dann klar war, war die Umsetzung dann keine große Schwierigkeit mehr.

Hier mein Startscript für den Domino Server - welches natürlich für die jeweilige Umgebung (Pfade, userids, etc) angepasst werden muss. Anders als das upstart Script von Stephan H. Wissel, wird hier nur eine Instanz gestartet. Es sollte aber einfach möglich sein, entsprechend seiner Vorgaben mehrere Partitionen/Instanzen zu starten. Mit setuid/setguid wird der Benutzer gesetzt. Wichtig hierbei ist, dass das keine Login-Shell ist. Also muss ich die locale setzen, die bei der Installation auf diesem eingestellt war (hier - shame on me - de_de.UTF-8). Ansonsten werden die Meldungen des Domino-Servers auf der Console nur als Zahlencodes ausgegeben. Im post-stop rufe ich noch nsd auf. Das ist nicht ungedingt notwendig, stellt aber sicher, dass nach dem Beenden vom Server definitiv nichts mehr übrig ist.

# Domino Server - upstart init script 
# Changelog
# 11.09.2013, jmw - Initial version.

description "IBM Domino Server"
author "jan.michael@wrangel.de"

# When to start the service
start on (local-filesystems
  and net-device-up IFACE!=lo
  and mounted MOUNTPOINT=/var/domino)

# Stop on shutdown the machine.
stop on runlevel [!2345]

setuid notes
setgid notes
chdir /var/domino/data

# pre-start Run before process, immediately after
# firing the 'start'-event.
#pre-start script
#
#end script

# script starts your job. Related to an ugly bug,
# I don't recommend to fork here, as it
# is very hard to debug.
# @see https://bugs.launchpad.net/upstart/+bug/406397
script
    echo "Executing the server binary..."
    export LANG="de_DE.UTF-8"
    screen -D -m -S domino /opt/ibm/domino/bin/server
end script

# post-start runs imediately, when script has been invoked.
# It does not wait for a complete startup or anything else.
post-start script
end script

# pre-stop runs, when the 'stop on' event has been fired.
# It does not run, when the job has been terminated.
# You might add 'stop the daemon' stuff here.
pre-stop script
    echo "Stopping the server..."
    export LANG="de_DE.UTF-8"
    /opt/ibm/domino/bin/server -q
end script

# post-stop is executed, whenever this services stops, regardless, if it has been
# quit, it failed or the 'stop' event has been fired.
# This is the right place for cleaning up tasks.
post-stop script
    echo "Server stopped. Cleaning up..."
    /opt/ibm/domino/bin/nsd -kill
    echo "done."
end script


Weitere Informationen

http://www.wissel.net/blog/d6plinks/SHWL-8YG9KB
https://bugs.launchpad.net/upstart/+bug/406397
http://upstart.ubuntu.com/cookbook/
http://en.wikipedia.org/wiki/Upstart
http://freedesktop.org/wiki/Software/systemd/
Comments [0]