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:

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 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:

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:

  • Das Benutzerkonto, unter dem der Webserver läuft, benötigt Lese- und Schreibzugriff auf:

    • die Datei  avanti.con
    • alle Datenbankverzeichnisse, die per avanti zu nutzen sind, nebst Inhalt
    • das Verzeichnis /var/run (Unix)

  • In der Regel empfiehlt es sich, den Webserver zu diesem Zweck unter einer eigens eingerichteten Benutzerkennung (sog. "Sandbox-User") laufen zu lassen, und dieser Kennung nur die benötigten Rechte zuzuweisen. Auf keinen Fall sollte diese Benutzerkennung Administratoren- bzw. "root"-Rechte erhalten.

  • Unter Windows muß der avanti-Server als Systemdienst (bei WIN7/8 als Admin ausführen) installiert werden (s.u.), ansonsten läßt sich der Server nicht über die Weboberfläche starten. Man registriert avanti als Dienst mit diesem Befehl:  
    avanti -install c:\allegro
    (Mehr dazu)
  • Das Administrationsskript sollte so installiert werden, daß es für unbefugte Benutzer nicht zugänglich ist. Das heißt:

    • Username und Passwort  sollten regelmäßig geändert werden, eine gewisse Mindestlänge aufweisen, und nicht leicht zu erraten sein
    • Der Webserver sollte so konfiguriert werden, daß dieser nicht aus dem Internet, sondern  nur aus Ihrem lokalen Netzwerk heraus zugänglich ist.
      (Details hierzu entnehmen Sie der Anleitung zu Ihrem Webserver.)

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:
  • Eine avanti-Anfrage (ein "Job") gliedert sich in drei Teile: das Präfix, die eigentliche Befehlssequenz, und das Postfix.

    • Das Präfix  besteht aus einer einzigen Zeile, die mit einem "&"-Zeichen eingeleitet wird. Danach folgt ein Verzeichnispfad. Er bezieht sich auf den Rechner, auf dem der avanti-Server ausgeführt wird. In diesem Verzeichnis erwartet der avanti-Server u.a. die allegro-Parameterdateien für den Export von Datensätzen sowie auch die CFG-Datei.
      Die Präfixzeile ist optional. Fehlt sie, so werden die Dateien nur im jeweiligen Datenbank-Verzeichnis gesucht.

    • Es folgt die eigentliche Befehlssequenz  in der FLEX-Makrosprache.

    • Das Postfix dient zur Datenbankauswahl und besteht aus zwei Zeilen:

      @ DB=datenbankname ID=user/passwort
      AVANTI:EOJ

      Die erste Zeile wird mit der Sequenz "@" + Leerzeichen eingeleitet und spezifiziert den Namen der Datenbank, auf die sich der Suchauftrag bezieht. Falls die Datenbank passwortgeschützt ist,  muß dieses Passwort ebenfalls übermittelt werden. Diese Angaben müssen mit denen in der Datei avanti.con übereinstimmen! Die zweite Zeile kennzeichnet das Ende der Anfrage.

    Ein Beispiel für eine vollständige Anfrage:

    & c:\allegro\
    find per shakesp?
    xport p e-marc.apr
    download set
    @ DB=avdemo ID=opac/OPAC
    AVANTI:EOJ

  • Die Antwort des avanti-Servers endet immer mit der Sequenz "AVANTI:EOR".  Danach wird die TCP/IP-Verbindung offengehalten, und es kann eine weitere Anfrage gestellt werden. Alternativ kann der Client die Verbindung schließen.
  • 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.


[i] zuletzt aktualisiert:
Email: ub@tu-bs.de