Content-type: text/html
apxs -g [ -S variable=valeur ] -n nom
apxs -q [ -S variable=valeur ] requête...
apxs -c [ -S variable=valeur ] [ -o fichier_dso ] [ -I répertoire_à_inclure ] [ -D variable [ =valeur ] ] [ -L répertoire_de_bibliothèque ] [ -l nom_de_bibliothèque ] [ -Wc,drapeaux-du-compilateur ] [ -Wl,drapeaux-du-lieur ] fichiers...
apxs -i [ -S variable=valeur ] [ -n nom ] [ -a ] [ -A ] fichier_dso...
apxs -e [ -S variable=valeur ] [ -n nom ] [ -a ] [ -A ] fichier_dso...
apxs est un outil pour construire et installer des modules d'extension pour le serveur de protocole de transfert Hypertexte (HTTP) Apache. Ceci est accompli en construisant un objet dynamique partagé (« Dynamic share object » : DSO) à partir d'un ou plusieurs fichiers sources ou objets. Les DSO peuvent ensuite être chargés par le serveur Apache en fonctionnement par la directive « LoadModule » de mod_so.
Ainsi, pour utiliser ce mécanisme d'extension, votre plate-forme doit supporter la spécificité DSO et votre binaire httpd d'Apache doit être construit avec le module mod_so. L'outil apxs se plaint automatiquement si ce n'est pas le cas. Vous pouvez vérifier par vous-même que ces conditions sont réalisées en lançant manuellement la commande :
$ httpd -l
Le module mod_so devrait faire partie de la liste affichée. Si ces conditions sont réalisées, vous pouvez facilement étendre les fonctionnalités de votre serveur Apache en installant vos propre modules avec le mécanisme DSO grâce à l'aide de l'outil apxs :
$ apxs -a -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 cp mod_foo.so /path/to/apache/libexec/mod_foo.so chmod 755 /path/to/apache/libexec/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 $
Les fichiers passés en argument peuvent être de différents types : fichier source en C (.c), fichier objet (.o) ou même archive de bibliothèque (.a). L'outil apxs reconnaît automatiquement les extensions et utilise automatiquement les fichiers sources en C pour la compilation tandis qu'il utilise les fichiers objets et archives pour la phase de liaison. Mais en utilisant de tels objets précompilés, soyez sûr qu'ils sont compilés en code de position indépendante (PIC) pour être capable de les utiliser comme un DSO. Par exemple avec GCC vous avez juste à utiliser -fpic. Pour d'autres compilateurs C, veuillez consulter sa page de manuel ou chercher le drapeau qu'apxs utilise pour compiler les fichiers objets.
Pour plus de détails à propos du support DSO dans Apache, d'abord lisez l'information sur DSO dans htdocs/manual/dso.html, ensuite lisez la documentation de mod_so.
Options courantes :
Options de requête :
CC
TARGET
CFLAGS
SBINDIR
CFLAGS_SHLIB
INCLUDEDIR
LD_SHLIB
LIBEXECDIR
LDFLAGS_SHLIB
SYSCONFDIR
LIBS_SHLIB
PREFIX Utilisez cette option pour déterminer manuellement les configurations. Par exemple, utilisez :
INC=-I`apxs -q INCLUDEDIR`à l'intérieur de vos « makefiles » si vous avez besoin d'un accès manuel aux fichiers d'en-tête C d'Apache.
Options de configuration :
Options de génération de modèles :
Options de compilation DSO :
Options d'installation et de configuration DSO :
Supposons que vous avez un module Apache nommé mod_foo.c disponible qui pourrait étendre la fonctionnalité du serveur Apache. Pour réaliser ceci, vous devez d'abord compiler la source C en DSO, qui convient au chargement dans le serveur Apache en fonctionnement, via la commande suivante :
$ 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 $
Ensuite, vous devez mettre à jour la configuration d'Apache en étant sûr qu'une directive « LoadModule » est présente pour charger le DSO. Pour simplifier cette étape, apxs fournie une façon automatique pour installer le DSO dans le répertoire libexec et mettre à jour le fichier httpd.conf en conséquence. Ceci peut être accompli en lançant :
$ apxs -i -a mod_foo.c cp mod_foo.so /path/to/apache/libexec/mod_foo.so chmod 755 /path/to/apache/libexec/mod_foo.so [activating module `foo' in /path/to/apache/etc/httpd.conf] $
Ainsi une ligne nommée
LoadModule foo_module libexec/mod_foo.soest ajoutée au fichier de configuration si elle n'est pas encore présente. Si vous voulez avoir cette opération désactivée, utilisez l'option -A, exemple :
$ apxs -i -A mod_foo.c
Pour un test rapide du mécanisme d'apxs vous pouvez créer un exemple de modèle de module Apache et un « makefile » correspondant via :
$ apxs -g -n foo Creating [DIR] foo Creating [FILE] foo/Makefile Creating [FILE] foo/mod_foo.c $
Ensuite, vous pouvez immédiatement compiler ce module exemple en DSO et le charger dans le serveur Apache :
$ cd foo $ 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/libexec/mod_foo.so chmod 755 /path/to/apache/libexec/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 $
Vous pouvez même utiliser apxs pour compiler des modules complexes en dehors de l'arborescence d'Apache, comme PHP3, parce que apxs reconnaît automatiquement les fichiers sources C et les fichiers objets.
$ cd 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 $
Seulement les fichiers sources en C sont compilés pendant que les fichiers objets restant sont utilisés pendant la phase de liaison.
Aymeric Nys , <aymeric@nnx.com>.