avanti - Datenbankserver
Material zu avanti
avanti - was ist das?
Der Avanti-Server ist Teil des nichtrelationalen Datenbanksystems
allegro-C und
ermöglicht den
Zugriff auf
allegro-Datenbanken in der Art eines
Client-Server-Modells [
1].
Über eine
Netzwerkverbindung (TCP/IP) kann ein
Client eine Anfrage an den avanti-Server stellen, und erhält
eine
Antwort zurück (z.B. einen Registerauszug oder einen
Datensatz).
Der avanti-Server bietet Programm-Autoren also eine einfache
Möglichkeit, allegro-Datenbankabfragen in ihre Programme
einzubinden.
Endanwender und Systemadministratoren müssen den avanti-Server
nur
dann installieren, wenn sie solche "Client"-Programme einsetzen, die
den
avanti-Server für die Datenbank-Anbindung brauchen. Hierzu
gehören z.B. die Web-Frontends
a35 (HTML5),
a30 (Adobe Flash)
acwww (Perl)
und
phpac
(PHP), ebenso wie
das
Z39.50-Schnittstellenmodul
des Allegro-Systems.
Was ist neu?
avanti V28 ist rückwärtskompatibel zu den bisherigen
avanti-Servern, d.h. es sollten an nutzerseitigen Client-Programmen
keine
Anpassungen notwendig werden.
Die wichtigsten Neuerungen in Stichworten:
- Aufteilung des - unter Unix vorher monolithischen
-
Programms in das Frontend avanti, das den
Netzwerk-Kommunikationsteil
enthält, und das Backend acon,
das die
eigentliche
Funktionalität realisiert, also die Jobs ausführt.
- acon ist als sogenannter "Filter" oder
"Konsolprogramm" ausgelegt [2],
und damit prinzipiell auch eigenständig in anderen Programmen
verwendbar. Dieser Programmteil beruht auf der Klassenbibliothek in C++
und ist plattformunabhängig; avanti wurde
2005
vollständig neu programmiert.
- Die Konfiguration geschieht einheitlich für alle
Programmversionen (Unix und Windows) über die
Konfigurationsdatei
avanti.con (bis 2007: avanti.conf).
- Das Programm läuft als Konsolenapplikation unter
Windows NT/2000/XP/7/8 sowie Unix. (Windows 95/98 sind nicht
mehr verwendbar.)
- Eine PHP-basierte Web-Oberfläche avadmin
zur Konfiguration und Administration des avanti-Servers.
Download
Der avanti-Server ist für folgende Betriebssysteme
verfügbar:
Zum Download sind Benutzername und Paßwort erforderlich.
Beides
finden Sie auf Ihrer letzten allegro-Rechnung.
Installation
Für die Web-Oberfläche wird neben dem avanti-Paket
die folgende Software benötigt:
Beides zusammen ist fix und fertig im Installationspaket von
xampp
enthalten, das es für Windows und für Linux gibt.
Ansonsten gibt es Hinweise zur Installation von PHP
für
Windows bzw.
für
Unix.
Windows
Das Programm wird als ZIP-Archiv ausgeliefert, und muß in ein
leeres Verzeichnis entpackt werden. Starten Sie dort dann das Programm
setup.exe, das durch die weitere Installation führt. Dabei
wird
auch der Installationspfad abgefragt (standardmäßig
bis V28.5
c:\Programme\Allegro\Avanti, ab V28.6 beliebig).
Unix / Linux
Das Programm wird als mit gzip komprimiertes TAR-Archiv ausgeliefert.
Entpacken Sie dieses wie folgt:
gzip
-d <
avanti-<version>.tar.gz | ( cd
installpath ; tar xvf - )
Dabei ist installpath ein bereits existierendes, leeres Verzeichnis, in
das der Server installiert werden soll. Schreibrecht auf dieses
Verzeichnis ist erforderlich.
Ab V28.6: Man braucht im Normalfall nur
ein
Verzeichnis, das kann unter Windows auch das sein, wo die
allegro-Programme liegen. Dort sind nur diese vier Dateien nötig:
avanti bzw. avanti.exe
acon bzw. acon.exe
Dabei auf Ausführbarkeit achten:
ggfls. chmod 755 avanti
und chmod 755 acon
uifsGER = Meldungstexte
avanti.con = Kopie der bisherigen avanti.conf von ../etc
Wenn darin
relative Adressen stehen, muß man sie
u.U. ändern
WICHTIG:
Unter Unix ist besonders zu
beachten,
daß der Benutzer, der den avanti-Server startet,
Schreibrechte
auf
den Datenbankverzeichnissen und den darin enthaltenen Dateien
braucht. Ansonsten kommt es zu Fehlermeldungen, weil der
avanti-Server die Index-Dateien nicht öffnen kann.
Wird avanti so wie hier angegeben installiert, so funktioniert der
avanti-Server in der Standardkonfiguration nur dann, wenn er
- entweder vom selben Benutzer, der die Installation
vorgenommen hat,
- oder aber vom Superuser "root" gestartet wird.
Aus
Sicherheitsgründen empfiehlt es sich jedoch
auf
keinen Fall, den avanti-Server als Superuser zu betreiben!
Gängige Praxis ist, einen
speziellen "Sandbox-Benutzer", (z.B.
"avanti") anzulegen. Er muß die nötigen Rechte auf den
Datenbankpfaden haben sowie Schreibrecht auf dem Verzeichnis, wo evtl.
Dateien angelegt werden. Die Installation
sollte dann unter diesem Benutzer-Account vorgenommen werden, und der
Server sollte auch nur durch diesen Benutzer gestartet werden.
Installation der Web-Oberfläche "avadmin"
Seit Avanti Version 2.2 ist eine Web-Oberfläche für
die
Konfiguration und Administration des Avanti-Servers Bestandteil des
Pakets. Sie bietet die folgenden Funktionen:
- Server-Status-Abfrage
- Starten und Stoppen des Servers
- Bequeme Konfiguration per Web-Oberfläche (d.h.
Bearbeiten der Datei avanti.con)
- Auswerten und Anzeigen von Logdateien inklusive
Filterfunktionen
- Funktionstest des avanti-Servers (Jobs manuell eingeben und
sofort ausführen lassen)
Die PHP-Skripte für avadmin liegen im Verzeichnis
<installdir>/share/avanti/avadmin/.
Kopieren Sie dieses
Verzeichnis in das Dokumenten-Wurzelverzeichnis
Ihres Webservers. Editieren Sie dann die Datei conf.php
und passen Sie
folgende Einstellungen an:
- Username und Paßwort ($admin_user, $admin_pass)
- Installations-Pfad Ihrer avanti-Installation ($avanti_dir)
Um die Web-Oberfläche zu nutzen, öffnen Sie die URL
http://servername/avadmin/login.php,
wobei servername der Name oder
die
IP-Adresse des Webservers ist.
Hinweise:
Manuelle Konfiguration
Nach der Installation befinden sich unterhalb des Installationspfads
(z.B. c:\programme\avanti
) mehrere Unterverzeichnisse:
bin/
|
für "binaries", also ausführbare
Programme, ferner .con(f) und uif... |
etc/
|
früher f. Hilfsdateien |
share/allegro |
für sonstige Dateien |
Die zentrale Konfigurationsdatei ist
<installdir>/avanti.con.
(Bis V28.5: <installdir>/avanti.conf.) Sie kann mit einem
Texteditor
bearbeitet werden. Damit die Änderungen wirksam werden, ist
ein
Neustart des avanti-Programms bzw. des avanti-Systemdienstes notwendig.
Bei Auslieferung ist nur der Zugriff auf die mitgelieferte
Demo-Datenbank eingerichtet.
Beispiel-Konfigurationsdatei avanti.con
[general] # Globale Einstellungen
# ACHTUNG: KEINEN KOMMENTAR VOR [general] SETZEN, SONST CRASH!
# Dies ist die Datei "avanti.con". Kommentare beginnen mit Doppelkreuz
# Das Format ist ähnlich einer Windows "INI"-Datei.
# Sections werden in eckige Klammern gesetzt.
port=4949 # Der TCP/IP-Port, unter dem der
# avanti-Server von außen angesprochen
# werden kann. Standard: 4949.
AnonymousAccess=yes # Nur-Lese-Zugriff auch *ohne* Paßwort erlaubt?
loglevel = default # Was soll mitgeloggt werden, was nicht?
# (Siehe Erklärung unten)
logfile=c:\temp\av.log # Optional
# Wenn "logfile=..." angegeben wird,
# werden die Log-Meldungen nicht mehr
# auf den Bildschirm (stderr) sondern in
# die angegebene Datei ausgegeben.
# Sinnvoll insbesondere für den Betrieb
# als Daemon unter Unix, oder als Systemdienst
# unter Windows XP/VISTA/7/8, da in dieser
# Betriebsart keine Konsole existiert,
# auf die Meldungen ausgegeben werden könnten.
prefork=1 # Bis auf weiteres stets 1 setzen, sonst Leistungseinbuße
max_cputime = 120 # ist die Zeit in Millisekunden, die dem acon-Prozeß zugebilligt wird, bevor
# avanti das Warten aufgibt. Wenn man keine abgebrochenen Jobs
# beobachtet, nicht dran drehen.
IniFileTimeCheck # Bis auf weiteres wirkungslos
# Nun folgen die einzelnen Datenbanken.
# Jede Datenbank hat ihre eigene Section.
# Die Datenbank "avdemo".
[avdemo]
directory = c:\allegro\demo2
access = 3 # Berechtigungsstufe für anon. Zugriff (0 .. 3)
konfiguration = a
indexparameter = cat
# Es folgen die zugelassenen Benutzer.
# Format: "name=PASSWORD:Berechtigungsstufe"
opac=OPAC:0
master=AVANTI:3
admin=ALLEGRO:2
# hier könnte noch eine Datenbank kommen, z.B. "opac"
[opac]
directory = c:\daten\katalog
access = 3
...
Die Loglevel-Einstellung
avanti erzeugt sehr viele und ausführliche
Einträge
in seiner
Protokolldatei, wobei manche Einträge nur in speziellen
Situationen
nützlich sind (z.B. beim Debugging). Daher existiert
die
Möglichkeit, nur die für den Benutzer interessanten
Einträge mitprotokollieren zu lassen. Die interessanten
Einträge werden dabei durch Komma getrennt angegeben. Vorgesetztes ! blendet den jeweiligen Typ aus.
Zur Zeit werden folgende Keywords erkannt:
crit [*] |
Kritische Fehler,
die den
Programmabbruch zur Folge haben |
error [*] |
"Normale" Fehler |
warn [*] |
Warnungen |
note [*] |
Allgemeine
Hinweismeldungen |
slave [*] |
Meldungen, die der
Kindprozess
(acon) über seinen Standard-Fehlerkanal ausgibt |
io |
Statusmeldungen zur
Datenkommunikation |
data
|
Mitschnitt des
Datenverkehrs
zwischen Client und Server
|
serv
|
Statusmeldungen zum
Betrieb als
Systemdienst (nur Windows NT) |
mem
|
Debugging von
Speicherzugriffen
(malloc/free) |
time [*]
|
zu jedem
Log-Eintrag sollen
Datum und Uhrzeit angezeigt werden
|
level [*]
|
zu jedem
Log-Eintrag soll die
zugehörige Event-Klasse angezeigt werden |
location
|
zu jedem
Log-Eintrag soll die
zugehörige Stelle im avanti-Quelltext angezeigt werden |
[*] Keywords, die mit Sternchen versehen sind, sind in der
Standardeinstellung (default)
aktiviert.
Zusätzlich gibt es noch die speziellen Keywords all, default
und none,
mit ihrer
offensichtlichen Bedeutung.
Beispiele:
loglevel = default ## das ist die Standardeinstellung
loglevel = default,io,data ## Standard, plus "io"- und "data"-Events
loglevel = default,!slave ## Standard, aber "slave"-Events weglassen
## (Das Ausrufungszeichen bedeutet Negation)
loglevel = all,!data,!slave ## alles außer "data" und "slave"
loglevel = none ## gar nichts protokollieren
Ausschnitt aus einer Logging-Datei:
[2003-09-19 17:23:24] (NOTE) avanti server listening on port 4949
[2003-09-19 17:23:39] (NOTE) <conn 0> opened
[2003-09-19 17:23:39] (SLAVE) <conn 0> slave started (prefork = 5)
[2003-09-19 17:23:39] (SLAVE) <conn 0> forking '/some/where/../bin/acon' (5 times)
[2003-09-19 17:23:50] (SLAVE) <conn 0> job done
[2003-09-19 17:23:56] (SLAVE) <conn 0> job done
[2003-09-19 17:24:49] (SLAVE) <conn 0> slave finished ok
[2003-09-19 17:24:49] (NOTE) <conn 0> closed
[2003-09-19 17:24:54] (NOTE) avanti server shutting down
Aufruf und Funktionstest
Starten Sie zunächst den avanti-Server:
- unter Windows über das Startmenü mit Start
->
Programme -> avanti -> avanti Server
- unter Unix über die Shell mit dem Kommando
<installationsverzeichnis>/bin/avanti &
Mit Hilfe des "telnet"-Kommandos kann man nun den avanti-Server auf
seine Funktion testen.
- Windows: Aufruf über das Startmenü
Start
-> Ausführen -> "telnet
localhost 4949"
eintippen -> OK
Es öffnet sich ein Fenster.
- Unix: Eingabe des Kommandos
telnet
localhost 4949
Es erscheint die Meldung "Connected to localhost"
(oder
ähnlich).
Sollten stattdessen die Meldung "Connection refused" (oder
ähnlich) erscheinen, so läuft vermutlich der
avanti-Server
nicht auf Port 4949.
Nun nacheinander folgende Befehle eintippen: (es könnte auch
irgendeine andere, sinnvolle FLEX-Befehlsfolge sein)
find per
shakesp?
list internal
@ DB=avdemo ID=opac/OPAC
AVANTI:EOJ
Als Antwort erscheint eine Reihe von Zahlen, gefolgt von der
Zeichenkette "AVANTI:EOR", in etwa so:
2,4,7,8,9,11,12,13,14,15,16,22,23,24,26,27,30,0
AVANTI:EOR
Sollten stattdessen keine Zahlen erscheinen, sondern nur "AVANTI:EOR",
so konnte wahrscheinlich acon nicht gestartet
werden.
In diesem Fall sollten die Log-Meldungen konsultiert und, falls
notwendig, der Log-Level heraufgesetzt werden.
Installation als Systemdienst (Win XP/Vista/7/8)
Der avanti-Server kann auch als Systemdienst betrieben
werden. Der Server wird dann automatisch beim Hochfahren des Rechners
gestartet, und läuft im Hintergrund, auch wenn niemand
eingeloggt
ist - ideal für einen unbewachten Betrieb des Rechners.
Es empfiehlt sich hierfür zunächst, in der Datei
avanti.con
mittels logfile=...
eine Logdatei anzugeben, da der Server in dieser
Betriebsart keine Log-Meldungen auf dem Bildschirm anzeigen kann.
Um das Programm als Systemdienst zu installieren:
- Aufrufen einer cmd Shell als Administrator
- Wechsel in den Ordner, wo avanti.exe liegt, z.B. c:\allegro
- Aufruf : avanti.exe -install c:\allegro
Dienst ist dann installiert
Anschließend sollte der Dienst "avanti Service" im
Systemkontroll-Manager zu sehen sein. Dieser kann wie folgt aufgerufen
werden:
Start
-> Einstellungen ->
Systemsteuerung -> Dienste
beziehungsweise
Start ->
Einstellungen -> Systemsteuerung
-> Verwaltung
-> Dienste
Nach einem Neustart des Rechners läuft der Dienst automatisch
im
Hintergrund.
Über den Systemkontroll-Manager läßt sich
sich der
Dienst manuell beenden oder neu starten, oder die Startart
ändern
(z.B. von "automatisch" auf "manuell").
Entfernen des Systemdienstes
Z.B. vor einer Deinstallation des Programms empfiehlt es sich,
zunächst den Dienst wieder zu entfernen. Dafür
muß
zunächst der Dienst über den Systemkontrollmanager
angehalten
werden. Anschließend entfernt man den Dienst wie folgt:
Aufrufen einer cmd Shell -> sc delete avanti Service ->
Dienst wird gelöscht
Im Systemkontroll-Manager ist nun der Eintrag "avanti Server"
verschwunden.
Restart des UNIX-Servers
Dies kann mit einem schlichten kill -9 ... geschehen mit
anschließenden Neustart.
Wenn es sehr schnell gehen soll:
killproc -SIGHUP $AVANTI
pidofproc $AVANTI > /var/run/avanti.pid
Die Datei avanti.pid enthält nur die Prozeß-IdNr des
laufenden Servers. Gebraucht wird sie von avadmin,
damit dieser feststellen kann, ob der Server läuft.
Die avanti-Kommandosprache
Die avanti-Kommandosprache ist weitgehend kompatibel mit der
Makrosprache FLEX,
die im Windows-Hauptprogramm a99
verwendet
wird. (In a99 kann man die Dokumentation mit dem Befehl h flex
abrufen.) Einige Befehle dieser Sprache gibt es in avanti
nicht, oder sie funktionieren etwas anders. Diese
Einschränkungen sind in der Online-Hilfe
dokumentiert. Die Unterschiede ergeben sich daraus, daß
avanti im
Gegensatz von a99 nicht direkt mit dem Benutzer interagiert, d.h. keine
eigene Benutzeroberfläche hat.
Einige Besonderheiten sind bei avanti zu beachten:
- Wird acon als Konsolprogramm benutzt, genügt die Befehlssequenz.
[1]
Das
Client-Server-Modell
beruht auf einer Trennung der zu erfüllenden Aufgabe (z.B.
einer
Datenbankrecherche) in zwei Programme: das erste ist der "Kunde" (engl.
Client), der den Auftrag vom Benutzer entgegennimmt, und ihn an das
zweite Programm den "Dienstleister" (engl. Server)
weiterleitet.
Der Server erledigt den Auftrag, und gibt das Resultat an den Client
zurück, der das Ergebnis dem Benutzer in geeigneter Form
präsentiert.
Da es sich dabei um verschiedene Programme handelt,
können sich Server und Client durchaus auf unterschiedlichen
Rechnern befinden. Die Weiterleitung der Aufträge geschieht
dann
über ein Netzwerk (z.B. das Internet), mit einem vorher
vereinbarten Kommunikations-Protokoll, hier TCP/IP.
[2]
acon liest eine Anfrage
von Standard-Input, schreibt die Antwort nach Standard-Output, und
schreibt Log-Meldungen nach Standard-Error. Das Ende der Anfrage wird
durch das Dateiende (end-of-file-condition) gekennzeichnet.