Title: apxs - Das APache eXtenSion Tool
apxs ist ein Programm zum Einrichten und Installieren von
Erweiterungsmodulen für den Apache HyperText Transfer Protocol-Server.
Hierfür wird ein Dynamic Shared Object (DSO) aus einer oder mehreren
Quelldateien oder Objektdateien angelegt, welches während der
Ausführung mit der Direktive
Um dieses Verfahren für Erweiterungen nutzen zu können, muss das
Betriebssystem DSO unterstützen und die binäre Apache-Datei
httpd mit dem Modul apxs beschwert sich automatisch, wenn
dies nicht der Fall ist. Sie können aber auch manuell eine Überprüfung
vornehmen:
Das Modul apxs erweitert
werden:
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
$ apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
$ _
Bei den angegebenen Dateien kann es sich um beliebige C-Quelldateien
(.c), eine Objektdatei (.o) oder auch um ein
Bibliotheksarchiv handeln (.a). Das apxs-Programm
erkennt die Dateinamenserweiterungen automatisch und kompiliert C-Quelldateien
und Objekt- und Archivdateien werden erst später eingebunden. Wenn Sie solche
vorkompilierten Objekte benutzen, müssen Sie aber darauf achten, dass sie für
positionsunabhängigen Code (PIC) kompiliert wurden, damit sie in einem
dynamisch geladenen Objekt benutzt werden können. Beim Compiler
GCC müssen Sie hierfür die Option -fpic angeben. Schlagen Sie
bei anderen C-Compilern in der Dokumentation nach oder achten Sie auf die
Flags, die apxs zum Kompilieren der Objektdateien benutzt.
Weitere Details zur DSO-Unterstützung des Apache finden Sie in der
Dokumentation des Moduls src/modules/standard/mod_so.c.
apxs -g
[ -S Name=Wert ]
-n Modul
apxs -q
[ -S Name=Wert ]
Abfrage ...
apxs -c
[ -S Name=Wert ]
[ -o DSO-Datei ]
[ -I iInclude-Verzeichnis ]
[ -D Name=Wert ]
[ -L Bibliotheksverz. ]
[ -l Bibliothek ]
[ -Wc,Compiler-Flags ]
[ -Wl,Linker-Flags ]
Dateien ...
apxs -i
[ -S Name=Wert ]
[ -n Modul ]
[ -a ]
[ -A ]
DSO-Datei ...
apxs -e
[ -S Name=Wert ]
[ -n Modul ]
[ -a ]
[ -A ]
DSO-Datei ...
-n Modul- Mit dieser Option wird der Modulname für die Optionen
-i(installieren) und-g(Mustererzeugung) explizit angegeben. Für die Option-gmuss die Angabe erfolgen, für die Option-iversucht dasapxs-Programm den Namen aus der Quelldatei zu ermitteln oder ihn notfalls aus dem Dateinamen abzuleiten.
-q- Fragt die Kenntnisse des
apxs-Programms über bestimmte Einstellungen ab. Als Abfrageparameter können ein oder mehrere der folgenden Zeichenfolgen angegeben werden:CC,CFLAGS,CFLAGS_SHLIB,INCLUDEDIR,LD_SHLIB,LDFLAGS_SHLIB,LIBEXECDIR,LIBS_SHLIB,SBINDIR,SYSCONFDIR,TARGET.Sie können die Einstellungen auch selbst ermitteln. Mit der folgenden Anweisung innerhalb Ihrer Makefiles greifen Sie beispielsweise auf die Include-Dateien des Apache zu:
INC=-I`apxs -q INCLUDEDIR`
-S Name=Wert- Mit dieser Option werden die oben beschriebenen
apxs-Einstellungen geändert.
-g- Mit dieser Option wird das Unterverzeichnis Name (siehe
-n) und in diesem zwei Dateien erzeugt: Eine Musterdatei mit der Bezeichnungmod_name.c, die als Vorlage für eigene Module oder als Ausgangspunkt für Experimente mit demapxs-Mechanismus dienen kann, sowie eine entsprechendesMakefilefür eine noch einfachere Einrichtung und Installation dieses Moduls.
-c- Mit dieser Option werden die Compileroperationen angegeben. Zuerst
werden die mit Dateien angegebenen C-Quelldateien
(
.c.c) in entsprechende Objektdateien kompiliert (.ound anschließend durch Binden dieser Objektdateien mit den verbleibenden Objektdateien (.ound.a) aus Dateien dynamische Objekte in der DSO-Datei eingerichtet. Wird die Option-onicht angegeben, wird der Name der Ausgabedatei vom ersten Dateinamen aus Dateien abgeleitet und lautet daher meistmod_name.so. -o DSO-Datei- Mit dieser Option wird der Name des erzeugten dynamischen Objekts
explizit angegeben. Erfolgt keine Angabe und lässt er sich nicht aus der Liste der
Dateien ableiten, wird als Notbehelf der Name
mod_unknown.sobenutzt. -D Name=Wert- Diese Option wird direkt an den oder die Kompilationsbefehl(e) weitergereicht und bietet Ihnen die Möglichkeit, eigene Definitionen hinzuzufügen.
-I Include-Verzeichnis- Diese Option wird direkt an den oder die Kompilationsbefehl(e) weitergereicht und dient zur Angabe eigener Include-Verzeichnisse, in denen gesucht werden soll.
-L libdir- Diese Option wird direkt an den Linker-Befehl weitergereicht. Geben Sie mit ihr eigene Verzeichnisse an, in denen nach Bibliotheken gesucht werden soll.
-l libname- Diese Option wird direkt an den Linker-Befehl weitergereicht. Geben Sie mit ihr eigene Bibliotheken an, in denen gesucht werden soll.
-Wc,Compiler-Flags- Mit dieser Option werden zusätzliche Compiler-Flags an den Compiler übergeben. Sie dient zur Angabe lokaler, Compiler-spezifischer Optionen.
-Wl,Linker-flags- Mit dieser Option werden zusätzliche Linker-Flags an den Linker übergeben. Sie dient zur Angabe lokaler, Linker-spezifischer Optionen.
-i- Mit dieser Option wird die Installation angestoßen und ein oder mehrere dynamische Objekte im modules-Verzeichnis des Servers installiert.
-a- Aktiviert die Module durch Einfügen einer entsprechenden
LoadModule -Zeile in diehttpd.conf-Konfigurationsdatei automatisch oder aktiviert bereits vorhandene Module. -A- Identisch mit der Option
-a, der eingefügtenLoadModule -Direktive wird aber ein Doppelkreuz (#) vorangestellt, d.h. das Modul bleibt bis zu seiner späteren Aktivierung deaktiviert. -e- Diese Option gibt die Bearbeitungsoperation an, die mit den Optionen
-aund-Aähnlich wie die-i-Operation benutzt werden kann, um diehttpd.conf-Konfigurationsdatei des Apache bearbeiten zu können, ohne das Modul zu installieren.
Angenommen, Sie möchten die Serverfunktionalität des Apache mit dem
Modul mod_foo.c erweitern. Hierfür müssen Sie zuerst den
C-Quellcode kompilieren, damit er zur Laufzeit mit folgendem Befehl geladen
werden kann:
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
$ _
Anschließend müssen Sie eine apxs durch die Installation des Objekts im Verzeichnis
modules und die entsprechende Aktualisierung der Datei
httpd.conf vereinfacht. Geben Sie folgende Befehlszeile ein:
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module 'foo' in /path/to/apache/etc/httpd.conf]
$ _
Dadurch wird die Zeile
in die Konfigurationsdatei eingefügt, falls sie noch nicht vorhanden ist.
Soll das Modul standardmäßig aktiviert werden, benutzen Sie die Option
-A:
Für einen schnellen Test des Programms apxs können Sie
ein Beispielmodul und ein entsprechendes Makefile erzeugen:
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/mod_foo.c
$ _
Anschließend können Sie dieses Beispielmodul sofort als kompilieren und in den Apache-Server laden:
$ make all reload
apxs -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
apxs -i -a -n "foo" mod_foo.so
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
$ _
Sie können mit apxs auch komplexe Module außerhalb
des Apache-Codebaums kompilieren, zum Beispiel PHP3:
$ ./configure --with-shared-apache=../apache-1.3
$ apxs -c -o libphp3.so mod_php3.c libmodphp3-so.a
gcc -fpic -DSHARED_MODULE -I/tmp/apache/include -c mod_php3.c
ld -Bshareable -o libphp3.so mod_php3.o libmodphp3-so.a
$ _
Das ist möglich, weil apxs C-Quellcodedateien und
Objektdateien automatisch erkennt. Nur C-Quellcodedateien werden
kompiliert, während die verbleibenden Objektdateien erst für das Binden
benutzt werden.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
