Inhalt

7. Der Dispatcher

Der Dispatcher wird als Server-Dienst auf einem Host installiert. Beim Start wird die Dispatcher Passwort-Datei anhand der auf dem Host eingerichteten Benutzer überprüft. Alle Benutzer, die nicht auf dem Host eingetragen sind, werden ignoriert. Dann hört er an einem Port und wartet auf Anfragen von einem Client.
Der Client identifiziert sich mit einem Benutzernamen und einem Passwort. Der Dispatcher startet dann einen Daten-Server-Prozess mit dessen Benutzer ID. Der Client wird mit diesem verbunden und kommuniziert dann mit dem Daten-Server direkt.
Der Dispatcher wartet dann wieder auf neue Anfragen.

7.1 Setup

Der Dispatcher wird von Magic in dieses Verzeichnis installiert:
/usr/magicadm/servers
Uns interessieren drei Dateien
  • mgdispatch    - der Dispatcher
  • mgdatasrvr    - der Daten-Server
  • mgdatasrvr.rc - die Resourcen für den Daten-Server
  • MGSERVER.INI  - die Inidatei für den Daten-Server
Obwohl Magic anderer Auffassung ist:
Der Dispatcher läuft als System-Dienst, darum soll er auf keinen Fall "root" Berechtigungen haben. Dies läßt sich verhindern, in dem das Programm "magicadm" gehört und das "Set User ID" Bit gesetzt ist.
chmod 4500 mgdispatch
chown magicadm mgdispatch
Dies bedeutet: wenn der Dispatcher keine "root" Berechtigung hat, dann kann nur mit  "magicadm" Berechtigungen neue Prozesse starten.
Der System Administrator möge entscheiden.

7.1.1 mgpasswd

Der Dispatcher verwendet, je nachdem von welchem Benutzer er gestartet wurde, verschiedene Passwort-Dateien und prüft beim Start verschiedene Bedingungen:
Die mgpasswd Datei:
  • ist in "/usr/magicadm/etc/" und gehört  "magicadm"
    oder
    ist in "/etc/" und gehört  "root"
  • heißt "mgpasswd" und hat die Berechtigung "600".
  • darf kein Symbolischer Link sein.
  • darf nur existierende Benutzer beinhalten.
Wird eine dieser Bedingungen nicht erfüllt, dann wird der Start mit einer Fehlermeldung beendet.
Ist die Datei nicht vorhanden, dann werden "rlogin" und "remote shell" Bedingungen angewendet.
Weitere Informationen sind:
Die mgpasswd Datei
  • wird nur beim Start des Dispatcher gelesen.
  • hat Passworte im Klartext, die nur für den Dispatcher gelten, nicht die Echten eingeben!.
  • darf keine Leerzeichen am Ende eines Feldes/Zeile haben.
Das Format: RealUserName:DispatcherPasswort:[FirstIP[,SecondIP]:]
# Beispiel Passwortdatei
# Alle drei Felder werden von einem : beendet
# UserName:Password:[Host1[,Host2]:]
magicadm:dmagciam:192.168.0.1:
# Host 192.168.0.1 kann mit User magicadm Passwort dmagciam einlogen
meier::192.168.0.22:
# Host 192.168.0.22 kann mit User meier ohne Passwort einlogen
schulze:nix:
# Jeder kann mit User schulze Passwort nix einlogen
cheffe::192.168.0.1,192.168.18.1:
# Hosts 192.168.0.1 und 192.168.18.1 kann mit User cheffe ohne Passwort einlogen

7.2 Manueller Start

Vor dem Start des Dispatcher als "magicadm" einloggen und dann in das Dispatcher Verzeichnis gewechseln.
cd /usr/magicadm/servers
./mgdispatch 2060
  • 2060  - Der Port den der Dispatcher für sich registrieren soll, kann auf jede Nummer über 1000 geändert werden.
Prüfen ob der Dispatcher gestartet wurde:
ps -A -l| grep mgdispatch
  F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
040 S   501 99880     1  0  60   0 -   357 wait_f pts/0    00:00:00 mgdispatch
Als User sehen wir die UID=501, das ist in diesem Beispiel die Benutzernummer von "magicadm" und als Prozess die PID=99880.
Um ihn wieder zu stoppen:
kill 99880

7.3 Dispatcher und SuSE

Die System-Scripte befinden sich in dem Verzeichnis
/sbin/init.d/
Und es wird ein eigener Algorythmus verwendet. Der Wechsel eines Run-Levels wird mit dem Script
/etc/rc.config
kontrolliert. Um den Start des Dispatcher mit diesem Script zu verwalten muß am Ende eine neue Sektion eingefügt werden:
---------- cut ---------
#
# Start the communication server mgdispatch (yes,no).
#
START_MGDISPATCH="yes"
#
---------- cut ---------
Diese Einstellung kann mit "yast" in dem Menuepunkt
Administration des System -> Konfigurationsdatei verändern
bearbeitet werden.
Jetzt muß "mgcss" aus dem Archiv nach "/sbin/init.d/" kopiert und die Berechtigungen gesetzt werden:
chmod 4700 mgcss
chown magicadm mgcss
In welchem Run-Level der Dispatcher gestartet werden soll, wird durch symbolische Links in den Unterverzeichnissen kontrolliert:
  • Starte und stoppe den Dispatcher in dem Run-Level 2
    ln -s /sbin/init.d/mgcss /sbin/init.d/rc2.d/K92mgcss
    ln -s /sbin/init.d/mgcss /sbin/init.d/rc2.d/S91mgcss
  • Starte und stoppe den Dispatcher in dem Run-Level 3
    ln -s /sbin/init.d/mgcss /sbin/init.d/rc3.d/K92mgcss
    ln -s /sbin/init.d/mgcss /sbin/init.d/rc3.d/S91mgcss
(Der Lizenz Manager (S91mglms) sollte vor dem Dispatcher (S92mgcss) gestartet werden. Und umgekehrt: der Dispatcher (K91mgcss) sollte vor dem Lizenz Manager (K92mglms) gestoppt werden. Für mehr Informationen : SuSE Handbuch lesen.)
Wenn ein anderes Verzeichnis verwendet wurde, muß der Script angepaßt werden
---------- cut --------------
CS_PATH=/usr/magicadm/servers
CS_USER=magicadm
CS_PORT=2060
---------- cut --------------
Nun kann der Dispatcher gesteuert werden:
/sbin/init.d/mgcss start
/sbin/init.d/mgcss stop
/sbin/init.d/mgcss status
/sbin/init.d/mgcss restart

7.4 Dispatcher und Red Hat

Die System Scripte befinden sich in dem Verzeichnis
/etc/rc.d/init.d/
und dort hin muß auch der Script "mgcsr" aus dem Archiv kopiert und die Berechtigungen gesetzt werden:
chmod 4700 mgcsr
chown magicadm mgcsr
Der Start der System-Dienste wird mit dem Tool "chkconfig" gesteuert. Dazu sind in dem Script "mgcsr" am Anfang drei Zeilen (der "\" am Ende der zweiten Zeile verbindet sie mit der dritten Zeile und muß sein):
---------- cut --------------
# chkconfig:   23 92 91
# description: Start des Dienstes in Run Level 2 & 3 als S92mgcsr \
#              und beende ihn in den anderen Leveln mit K91mgcsr
---------- cut --------------
(Der Lizenz Manager (S91mglmr) sollte vor dem Dispatcher (S92mgcsr) gestartet werden. Und umgekehrt: der Dispatcher (K91mgcsr) sollte vor dem Lizenz Manager (K92mglmr) gestoppt werden. Für mehr Informationen : "man chkconfig".)
Den Dispatcher als Service hin zufügen:
chkconfig --add mgcsr
chkconfig --list mgcsr
Ausgabe: "mgcsr 1:off 2:on 3:on 4:off 5:off 6:off"
Den Dispatcher als Service entfernen:
chkconfig --del mgcsr
chkconfig --list mgcsr
Anzeige= "mgcsr 1:off 2:off 3:off 4:off 5:off 6:off"
Der Script "/etc/rc.d/rc" steuert den Wechsel eines Run-Levels. Der prüft alle symbolischen Links mit einem "K" am Anfang "K92mgcsr" und testet ob in dem Verzeichnis "/var/lock/subsys" eine dazugehörende Lock Datei mit dem Namen "mgcsr" vorhanden ist. Der Script "mgcsr" muß also beim Start eine Datei erstellen und beim Beenden wieder gelöschen. "magicadm"  hat aber keine Berechtigung um in diesem Verzeichnis zu schreiben.
Um dieses Problem zu beheben muß "root" die Berechtigung für das Verzeichnis "/var/lock/subsys/" auf "search/execute others" ändern:
chmod o+x /var/lock/subsys/
Wenn ein anderes Verzeichnis verwendet wurde, muß der Script angepaßt werden
---------- cut --------------
CS_PATH=/usr/magicadm/servers
CS_USER=magicadm
CS_PORT=2060
---------- cut --------------
Nun kann der Lizenz-Manager gesteuert werden:
/etc/rc.d/init.d/mgcsr start
/etc/rc.d/init.d/mgcsr stop
/etc/rc.d/init.d/mgcsr status
/etc/rc.d/init.d/mgcsr restart

7.5 Dispatcher und Daten-Server

Der Daten-Server führt als erstes den Script "mgdatasrvr.rc" aus. Danach wird die "MGSERVER.INI" eingelesen.

7.5.1 mgdatasrvr.rc

Dieses Script:
  • prüft ob Magic korrekt installiert wurde.
  • setzt die Namen für die Log-Dateien.
  • prüft ob ein User Verzeichnis existiert.
  • liest Benutzer spezifische Einstellungen.

7.5.2 MGSERVER.INI

Es sollen nur Beispielhaft die notwendigen Einträge für den Zugriff auf lokale Dienste erläutert werden.
Der Servername kann frei benannt werden. Dieser gleiche Name muß bei dem Client in der "magic.ini" in der "[MAGIC_SERVERS]" Sektion verwendet werden. Das heißt, wenn der Daten-Server auf dem Host "MGLINUX" läuft, dann kann er in der "[MAGIC_SERVERS]" Sektion auch "mgwebdaten" benannt werden. Es besteht kein zwingender Grund ihn nach dem Host zubennen. Es ist vielleicht sogar besser, ihn nicht nach dem Host zubennen, da es durchaus vorkommen kann, daß der Dienst auf einem andern Host ausgeführt werden muß. Und dann kann es sehr verwirrend sein, wenn der Daten-Server genauso heißt wie der gerade vom Netz genommen Host.
 
[MAGIC_SERVERS]  
ServerName =  1,NONE, , ,  server name is the name of the Magic logical server:
Any Magic client or server that wants to communicate with a server must use the same name in all the MGSERVER.INI files;
communication type is a number with one of the following values:
1 is no communication (local),
2 is TCP/IP communications, and
3 is DECnet;
server address is set based upon the communication type setting:
for communication type 1, local, the address must be 'NONE';
for communication type 2, TCP/IP, the address is as follows:
hostname/port number
where:
the host name is the name of the host in the TCP/IP hosts repository, and port number is the port number on which the communication dispatcher is listening, as used when loading the dispatcher. For details on the Magic dispatcher see the operating system-specific subsection in this chapter.
For communication type 3, DECnet, the address is as follows:
DECnet-node-name/object-name
where
DECnet host name can be a DECnet node name as defined in the NCP database, or it can be a DECnet address.
The Object name refers to a known Magic DECnet object name. This name is used to distinguish the server that will be invoked on the host machine. MG800GEN will activate the development server and MG800RNT will invoke the runtime server.
For more information on DECnet client/server communication see the section in this chapter on the DECnet Server.
username is the user account that is used for logging into the server:
The server process will be created in the context of this user account.
password is the password for the user account.
Syntax :server name = communication type,server address,username,password
     
[MAGIC_DATABASES]  
Default Database =  4, , , , , , , , MagicRecordLock, ChangeFileInToolkit, CheckDefinition, CheckKey, FileLocks, , , , NoCheckExist, 0,  
     
[MAGIC_LOGICAL_NAMES]  
MagicDir =  /usr/magicadm   

Inhalt