Up   This page in English.

Installation und Administration von SeL

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 Matthias 
            Key fingerprint = DE 54 40 E0 19 F7 A4 F3  39 DA AB 22 0B 33 04 79
Die Distributionsdatei wird mit diesem Schlüssel signiert sein.
Unterstützte Plattformen
SeL läuft auf allen Unix-Plattformen, für die es eine GNU-C-Entwicklungsumgebung und einen Apache-WWW-Server gibt. Zur Compilierung sind außer dem GCC auch flex und bison nötig. SeL wird vermutlich nicht mit anderen lex- und yacc-Versionen laufen.

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.

Auspacken
Wechseln Sie in ein temporäres Verzeichnis:

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.

Konfiguration
Es gibt drei Stellen, an denen eine manuelle Konfiguration erforderlich ist:
  1. Die Datei config.h
  2. Das Makefile
  3. Die Datei sel.conf
Die Datei config.h Hier stellen Sie verschiedene Dinge ein, die aus Sicherheitsgründen schon bei der Compilierung festgelegt werden müssen:

#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.

Compilieren
Benötigt werden Flex, Bison, GNU-Make, und der GNU-C-Compiler. Es ist möglich, daß ein anderes Make und ein anderer ANSI-C-Compiler funktionieren; hingegen ist es unwahrscheinlich, daß andere Lex-/Yacc-Varianten eingesetzt werden können.

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'

  • In früheren SeL-Versionen war noch die Angabe eines Pfades zum C-Präprozessor (cpp) erforderlich. SeL ab Version 0.4 benötigt den C-Präprozessor nicht mehr.
  • In früheren SeL-Versionen war "sel" ein Shellscript, das den Interpreter aufrief. Ab Version 0.5 ist das nicht mehr der Fall: es gibt nur noch ein Executable mit dem Namen "sel" (das ist das, was früher "ghkf" hieß).
Testen des Grundpakets
Rufen Sie SeL mit den Testdateien auf:

./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.

Einbindung in einen WWW-Server
Für die folgenden Schritte müssen Sie Schreibzugriff auf die Apache-Konfigurationsdateien und die Apache-Verzeichnisse haben, sowie die Möglichkeit, den httpd-Prozeß zu starten.

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.

Erzeugen eines Masterfiles
Ein einfaches Masterfile für die benutzerdefinierten Einträge AUTHOR, TITLE, DATE und CONTENT wird im folgenden gezeigt. AUTHOR zerfällt in die drei Angaben: AUTHOR.NAME, AUTHOR.ADDR und AUTHOR.MAIL (Name, Postanschrift und eMail-Adresse). Hier ist das Masterfile:

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.

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.

Die Datei sel.conf hat die folgende allgemeine Form:

ANWEISUNG parameter1 parameter2 ...

Im Fall der Masterfile-Override-Funktion heißt die Anweisung "OVERRIDE" und bekommt mitgeteilt:

  1. Mit welchem Zusatz zur URL die Leser ein anderes Masterfile aktivieren sollen
  2. Welches Masterfile durch diesen Zusatz ersetzt wird
  3. Durch welches andere Masterfile es ersetzt wird
Am konkreten Beispiel also:

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.

Häufig gestellte Fragen zur Installation
Bekannte Fehler

Last modified: Mon Apr 23 16:48:48 MES 2001