![]() |
![]() |
Installation und Konfiguration von SeL
Bezugsquelle
Sie können die jeweils aktuelle Distribution per eMail vom Autor bekommen:
matthias@hrz.uni-kassel.de (Andreas Matthias)
PGP-Information: ---------------- Type Bits/KeyID Date User ID pub 1024/802DBD35 1998/07/15 Andreas MatthiasDie Distributionsdatei wird mit diesem Schlüssel signiert sein.Key fingerprint = DE 54 40 E0 19 F7 A4 F3 39 DA AB 22 0B 33 04 79
Während der Entwicklung wird SeL unter AIX, Linux und FreeBSD getestet.
Es sollte möglich sein, den SeL-Interpreter auf Windows zu portieren, es ist aber noch nicht getestet worden.
cd /tmp mkdir sesame cd sesame gtar xvfz sel-*.tgz |
Ein Verzeichnis "sel-VERSION" wird erzeugt, wobei VERSION durch eine Versionsnummer ersetzt wird. In disem Verzeichnis liegen alle Dateien des SeL-Pakets.
#define SAFE_FILE_PREFIX_COUNT 3 #ifdef DECLARE_PREFIX_VARS char *safe_file_prefix[SAFE_FILE_PREFIX_COUNT]= { "/home/WWW/docs/", "/home/WWW/homepages/", "/etc/motd" }; |
Hier werden die "sicheren" Pfade angegeben, d.h. jene, unterhalb derer alle Dateien liegen müssen, die mit "lib" oder "$_include()" in eine SeL-Datei zur Laufzeit eingebunden werden sollen. In der Regel wird hier der DOCUMENT_ROOT-Pfad des WWW-Servers eingetragen sein. Unter SAFE_FILE_PREFIX_COUNT geben Sie an, wieviele sichere Pfade weiter unten definiert wurden. Es ist wichtig, dass diese Zahl bei jeder Änderung mit angepaßt wird.
#define INCLUDE_PATH_COUNT 3 #ifdef DECLARE_PREFIX_VARS char *include_path[INCLUDE_PATH_COUNT]= { "/home/WWW/docs/", "/home/WWW/homepages/", "./" }; |
Hier werden die Pfade angegeben, die standardmäßig nach Masterfiles und Bibliotheken durchsucht werden, wenn beim Einbinden der Bibliothek mit "lib" kein voller Pfad angegeben wurde. Auch hier kann zunächst der Server-DOCUMENT_ROOT eingetragen werden.
Wenn in dieser Liste (wie im Beispiel) "./" angegeben wird, dann wird auch das Verzeichnis durchsucht, in dem sich die aufrufende SeL-Datei befindet.
#define CONFIG_FILE "/home/hrz/matthias/design2/latest/sel.conf" |
Der volle Pfad (inclusive Dateiname) der SeL-Konfigurationsdatei. Ein Beispiel liegt im Distributionsverzeichnis unter sel.conf.sample. Wenn SeL beim Starten zu hängen scheint, dann wurde vermutlich dieser Pfad falsch angegeben.
#define MAX_SOURCE_SIZE 512*1024 |
Die maximale Größe von Dateien (in Bytes), die per "$_include()" eingebunden werden dürfen. Das kann auf der Voreinstellung von 512k gelassen werden.
#define MAX_OVERRIDES 128 |
Die Anzahl der Override-Anweisungen für dynamische Bibliotheken (Maximum). Diese Zahl beeinflußt die Performance von SeL geringfügig, es lohnt sich also sie möglichst klein zu halten. Zur Bedeutung vgl. unten: Konfiguration der Masterfile-Override-Funktion.
#define MAX_LIBPATH 1024 |
Die maximale Länge (in Zeichen) des absoluten Pfades zu einer Bibliotheksdatei. Die Voreinstellung sollte in der Regel genügen.
Das Makefile. Im Makefile muß wenig eingestellt werden. Die wichtigste Einstellung ist der Pfad zu der Flex-Bibliothek "libfl.a", der oben in der Datei eingestellt wird:
# Set this to your libs directory (where libfl.a is located) LIBDIR = /usr/aix4-PD/lib |
Falls die Flex-Bibliothek an einem der Pfade liegt, die ohnehin vom Linker durchsucht werden (/lib, /usr/lib, /usr/local/lib) dann kann diese Zeile auch auskommentiert werden.
Die zweite Anpassung müssen Sie nur dann vornehmen, wenn es beim Compilieren zu einer Fehlermeldung kommt, die sich über eine fehlende Datei "libgen.h" beschwert. In diesem Fall muß folgende Einstellung geändert werden:
MISSING_DIRNAME = -DMISSING_DIRNAME DIRNAMEOBJ = dirname.o |
Diese beiden Zeilen sind auskommentiert und müssen, falls der Fehler auftritt, aktiviert werden (Kommentarzeichen "#" am Anfang der Zeilen entfernen). Dieser Fehler betrifft einige ältere Linux-Installationen und FreeBSD.
Die Datei sel.conf Hier kann man die Masterfile-Override-Funktion konfigurieren. Die Konfiguration wird unten beschrieben. Für die erste Testinstallation kann diese Datei unverändert bleiben.
cd /tmp/sel-VERSION make |
Das Ergebnis sieht etwa so aus:
gmake ghkf gmake[1]: Entering directory `/tmp/sel-04-test2' bison -y -d -tv ghkf.y cc -g -c y.tab.c -DDECLARE_PREFIX_VARS flex ghkf.l cc -g -c lex.yy.c cc -g -c stack.c cc -o ghkf y.tab.o lex.yy.o stack.o -L/usr/aix4-PD/lib -lfl strip ghkf gmake[1]: Leaving directory `/tmp/sel-04-test2' |
|
./sel <filename> |
wobei <filename> der Name jeweils einer der mitgelieferten test*.sel-Dateien sein sollte. Lesen Sie die Ausgabe und entscheiden Sie, ob alles richtig aussieht.
Glückwunsch! Der SeL-Interpreter läuft jetzt auf Ihrer Maschine.
Sie sollten diese Schritte von jemandem durchführen lassen, der Erfahrung im Konfigurieren eines WWW-Server-Prozesses hat.
Erzeugen eines Content-Handler-Verzeichnisses. Der SeL-Interpreter muß als Apache-Content-Handler installiert werden. Dazu muss er in ein Verzeichnis installiert werden, das von Apache als CGI-Verzeichnis erkannt wird.
Frühere SeL-Versionen erzeugten eine Sicherheitslücke, wenn sie in einem CGI-Verzeichnis installiert wurden. Das ist ab SeL 0.4 nicht mehr der Fall. |
Wir nehmen für die folgende Diskussion an, daß der Apache-WWW-Server in /usr/local/httpd installiert ist. Das CGI-Verzeichnis sei /usr/local/httpd/cgi-bin.
Zuerst erzeugen wir ein neues Verzeichnis für SeL und kopieren das vorher erzeugte Programm hinein, wobei wir es in "sel.cgi" umbenennen (weil manche Apache-Installationen die Erweiterung ".cgi" verlangen).
mkdir /usr/local/httpd/cgi-bin/sel cd /tmp/sel-VERSION cp sel /usr/local/httpd/cgi-bin/sel/sel.cgi |
Erstellen des CGI-Handler-Wrappers.
In früheren SeL-Versionen war noch das
Erstellen einer Datei sel.cgi
erforderlich. In SeL ab Version 0.4 erfüllt das Skript
sel diese Funktion. In SeL ab Version 0.5 ist
sel ein normales Executable. Ebenfalls entfallen ist das Hilfsprogramm splitlines, dessen Funktion jetzt von dem SeL-Interpreter selbst übernommen wird. |
Aktivieren des Handlers. Zuerst müssen Sie sich eine neue Dateinamenserweiterung ausdenken, die der Server benutzen wird, um SeL-Dateien zu identifizieren. Wir empfehlen ".sel" oder ".ghk", aber Sie können auch jede beliebige andere Erweiterung verwenden, die noch nicht in Gebrauch ist. An der Universität Kassel wird zum Beispiel die Erweiterung ".ghk" benutzt.
Jetzt wechseln Sie ins Apache-Konfigurationsverzeichnis (in unserem Beispiel: /usr/local/httpd/conf/) und editieren die Datei srm.conf oder ihr Äquivalent (neue Apache-Installationen verwenden dafür die httpd.conf. Fügen Sie die folgenden Zeilen ein:
AddHandler sel .sel AddHandler sel .SEL Action sel /cgi-bin/sel/sel.cgi |
(".SEL" wird für DOS-/Windows-Benutzer benötigt, die manchmal falsch konfigurierte FTP-Clients einsetzen). In den AddHandler-Zeilen ersetzen Sie bitte jeweils die Erweiterung ".sel" durch die von Ihnen gewählte Erweiterung.
Jetzt beenden Sie Ihren httpd-Prozeß und starten ihn neu.
fwd TITLE CONTENT AUTHOR.NAME AUTHOR.ADDR AUTHOR.MAIL DATE; !PAGE( void ) <SQD> <HEAD> <TITLE> </SQD> $TITLE <SQD> </TITLE> </HEAD> <BODY BGCOLOR="#ffffa0"> <H2> </SQD> $TITLE <SQD> </H2> </SQD> $CONTENT <SQD> <P><HR> <TABLE WIDTH="100%" BORDER=0> <TR><TD> </SQD> $AUTHOR.NAME <SQD> <P> </SQD> $AUTHOR.ADDR <SQD> <P>mailto: </SQD> $AUTHOR.MAIL <SQD> <P></TD><TD> </SQD> $DATE <SQD> </TD></TR></TABLE></BODY> </SQD> ; $PAGE(). |
Passend dazu ist hier eine einfache SeL-Datei, die dieses Masterfile nutzt:
lib "simple.mas"; =TITLE "Testseite"; =CONTENT <SQD> <IMG SRC="http://www.uni-kassel.de/campus.gif"><P> Eine Testseite. <PRE> Test </PRE> </SQD> ; =AUTHOR.NAME "Andreas Matthias"; =AUTHOR.ADDR "Moenchebergstr. 13<BR>Kassel"; =AUTHOR.MAIL "matthias@hrz.uni-kassel.de"; =DATE "1999-11-16"; |
Auch diese Dateien sind in der Distribution unter
contrib/simple.mas bzw. sontrib/simple.sel enthalten.
Die Datei sel.conf hat die folgende allgemeine Form:
Konfiguration der Masterfile-Override-Funktion
Ein wesentlicher Vorteil von SeSAMe liegt darin, daß die Leser
je nach ihren Bedürfnissen selber zwischen verschiedenen
Masterfiles wählen können. Trotzdem müssen diese
Masterfiles natürlich vom WWW-Administrator für diesen Zweck
freigegeben werden. Das geschieht in der Datei sel.conf,
deren genaue Position beim Compilieren in der Datei config.h
festgelegt wurde.
ANWEISUNG parameter1 parameter2 ... |
Im Fall der Masterfile-Override-Funktion heißt die Anweisung "OVERRIDE" und bekommt mitgeteilt:
OVERRIDE style=plain ghk.mas plain.mas |
(diese Datei befindet sich als sel.conf.sample im Distributionsverzeichnis). Hier sehen wir, daß, wenn der Leser eine URL und dahinter "style=plain" anfordert, alle Referenzen auf "ghk.mas" ersetzt werden sollen durch "plain.mas". Sollen mehrere alternative Masterfiles angeboten werden, so kann man mehrere OVERRIDE-Zeilen in die sel.conf aufnehmen:
OVERRIDE style=plain ghk.mas plain.mas OVERRIDE style=frames ghk.mas frames.mas OVERRIDE style=french ghk.mas frenchlayout.mas |
Dadurch werden die entsprechenden "lib"-Einträge in den einzelnen SeL-Dateien überschrieben. Ein Aufruf im letzten Beispiel könnte so aussehen:
http://www.uni-kassel.de?style=plain |
Man kann diese Zeile natürlich auch als fertigen Link zum Klicken innerhalb der einzelnen Seiten (am besten in jedem der Masterfiles) anbieten.
Manchmal möchte man, daß durch einen Masterfile-Override immer ein bestimmtes Masterfile aufgerufen wird, egal welches Masterfile vorher aktiv war. Das läßt sich durch Verwendung des Platzhalter-Symbols "*" erreichen:
OVERRIDE style=plain * plain.mas |
Damit der Leser wieder aus dem Override-Modus zurückkehren kann, muß man zusätzlich ein Override-Muster konfigurieren, das alle anderen Overrides abschaltet. Das geht z.B. so:
OVERRIDE style=ghk none none |
Auch hier steht an erster Stelle das Muster, das zum Abschalten der Masterfile-Override-Funktion benutzt werden soll. Statt der Namen der Masterfiles steht an zweiter und dritter Stelle jedoch nur "none". Ein so definiertes Override-Muster hat die Eigenschaft, sich nicht weiterzuvererben (im Gegensatz zu allen anderen Mustern). Damit kann man auf das Standarddesign zurückkommen (das, welches ohne URL-Zusatz verwendet wird) und alle anschließenden Aufrufe erfolgen dann ohne dieses Muster (es wird vom Interpreter aus der URL entfernt).
Es empfiehlt sich, einen Link mit diesem Muster in allen Masterfiles unterzubringen, so daß der Leser mit einem Klick wieder in das Standarddesign zurückkehren kann.