apxs - это утилита для сборки и установки модулей для HTTP сервера Apache.
Apxs создает динамически-загружаемые объекты (DSO) из одного или нескольких файлов исходного кода или объектных файлов, которые затем могут загружаться в сервер Apache с помощью директивы
LoadModule модуля
mod_so. Чтобы использовать этот механизм расширения функциональности сервера, ваша платформа должна поддерживать DSO, а ваш сервер Apache должен быть собран с модулем
mod_so. Утилита
apxs автоматически проверит данные требования. Также вы сами можете проверить это с помощью команды: $ httpd -l Модуль
mod_so должен быть в этом списке. Если эти требования соблюдены, то вы легко сможете расширить функциональность вашего сервера собственными модулями с помощью утилиты
apxs.
$ apxs -i -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/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
$ _
Аргумент
files может содержать файлы исходных текстов на Си (
.c), объектные файлы (
.o) или файлы библиотек (
.a). Утилита
apxs автоматически распознает эти файлы и скомпилирует Си файлы, а объектные файлы и файлы архивов только скомпонует. Но, если вы используете объектные файлы, то убедитесь, что их код скомпилирован как независимый от расположения (
position independent code (PIC)). Это обязательное условия для их динамической загрузки. Например, в компиляторе
GCC для этого необходимо использовать параметр
-fpic. Если вы используете другой Си компилятор, то поищите описание этой возможности в документации. Для дополнительной информации о поддержки DSO в Apache прочитайте документацию модуля
mod_so или ознакомьтесь с исходным кодом модуля в файле
src/modules/standard/mod_so.c.
Синтаксис
apxs -g [
-S name=value ]
-n modname
apxs -q [
-S name=value ] query …
apxs -c [
-S name=value ] [
-o dsofile ] [
-I incdir ] [
-D name=value ]
[
-L libdir ] [
-l libname ] [
-Wc,compiler-flags ] [
-Wl,linker-flags ] files …
apxs -i [
-S name=value ] [
-n modname ] [
-a ] [
-A ] dso-file …
apxs -e [
-S name=value ] [
-n modname ] [
-a ] [
-A ] dso-file …
Опциии
Общие опции
-n modname Опция
n явно задает имя модуля для опций
-i (установка) и для
-g (генерация шаблона). При использовании опции
-g она обязательна, а при использовании
-i, если
n не задана, тогда утилита
apxs попытается определить имя модуля из исходного кода или из имени файла.
Опции запроса
-q Позволяет запрашивать у утилиты
apxs некоторые параметры среды. Запрашиваемые параметры задаются в
query и имеют следующие значения:
CC, CFLAGS, CFLAGS_SHLIB, INCLUDEDIR, LD_SHLIB, LDFLAGS_SHLIB, LIBEXECDIR, LIBS_SHLIB, SBINDIR, SYSCONFDIR, TARGET. Например, следующая строка
INC=-I`apxs -q INCLUDEDIR` внутри make-файла, добавит в переменную
INC каталог Apache с заголовочными файлами.
Опции конфигурации
-S name=value Эта опция меняет настройки
apxs, описанные выше. Например: -S CFLAGS="`$APXS -q CFLAGS`"
Опции генерации шаблонаа
-g При использовании опции
-g утилита
apxs создает подкаталог
name (опция
-n) где размещает два файла: файл исходного кода модуля-примера с именем
mod_name.c, который можно использовать в качестве шаблона для создания собственных модулей или как учебный материал для изучения механизма
apxs. Также в каталоге создается make-файл для сборки и установки этого модуля.
Опции компиляции DSOO
-c Опция c запускает выполнение компиляции. В этом случае apxs сперва компилирует все С-файлы (
.c), заданные в
files, в соответствующие объектные файлы (
.o), а затем создает динамический объект
dsofile, компонуя скомпилированные объектные файлы с оставшимися объектными файлами (
.o и
.a) из
files. Если опция
-o не указана, тогда имя выходного файла задается именем первого файла из
files.
-o dsofile Явно задает имя файла создаваемого динамического объекта. В случае если
dsofile не указано и имя не может быть определено из
files, тогда используется имя
mod_unknown.so.
-D name=value Значение этой опции напрямую передается компилятору. Она используется для добавления определений в процесс сборки.
-I incdir Значение этой опции также напрямую передается компилятору. Используйте ее для добавления каталогов с заголовочными файлами в процесс сборки.
-L libdir Значение этой опции передается компоновщику. Используйте ее для добавления каталогов с библиотеками в процесс сборки.
-l libname Значение этой опции также передается компоновщику. Используйте ее для добавления дополнительных библиотек.
-Wc,compiler-flags Эта опция передает для команды
libtool –mode=compile дополнительные флаги
compiler-flags. Используйте ее для использования специфичных параметров компилятора.
-Wl,,linker-flags Эта опция передает для команды
libtool –mode=link дополнительные флаги
linker-flags. Используйте ее для использования специфичных параметров компоновщика.
Установка DSO и опции конфигурации
-ii Этот флаг обозначает операцию установки. Если он указан, то все dso-файлы модулей, созданные утилитой
apxs, будут скопированы в серверный каталог
modules.
-a Флаг активизирует модуль путем добавления соответствующей строки
LoadModule в конфигурационный файл
htppd.conf.
-A Так же как и опция
-a добавляет директиву
LoadModule, но с префиксом #, т.е. модуль подготавливается для дальнейшего использования, но пока деактивирован.
-e Этот флаг задает операцию редактирования конфигурационного файла
httpd.conf. Может быть использован вместе с опциями
-a и
-A.
Примеры
Предположим, что имя файла нашего модуля Apache -
mod_foo.c. Прежде всего надо скомпилировать исходный С файл в DSO файл, который можно будет загрузить в сервер Apache во время исполнения. Делается это с помощью следующей команды:
$ apxs -c mod_foo.c
/path/to/libtool –mode=compile gcc … -c mod_foo.c
/path/to/libtool –mode=link gcc … -o mod_foo.la mod_foo.slo
$ _
Теперь необходимо обновить конфигурацию Apache, чтобы быть уверенным, что директива для загрузки этого модуля (
LoadModule) создана. Утилита
apxs сама устанавливает созданные объекты в каталог модулей и соответственно обновляет файл
httpd.conf. Делается это следующим образом:
$ apxs -i -a mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool –mode=install cp mod_foo.la /path/to/apache/modules …
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo’ in /path/to/apache/conf/httpd.conf]
$ _
Эта команда добавит следующую строку в файл
httpd.conf: LoadModule foo_module modules/mod_foo.so Если вы хотите, чтобы по умолчанию модуль был отключен, используйте опцию
-A. Например:
$ apxs -i -A mod_foo.c
Для быстрого ознакомления с работой утилиты apxs можно создать пример модуля Apache и соответствующий
Makefile $ apxs -g -n foo
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/modules.mk
Creating [FILE] foo/mod_foo.c
Creating [FILE] foo/.depss
$ _
Созданные файлы модуля можно сразу же скомпилировать в динамический объект и загрузить в сервер Apache:
$ cd foo
$ make all reload
apxs -c mod_foo.c
/path/to/libtool –mode=compile gcc … -c mod_foo.c
/path/to/libtool –mode=link gcc … -o mod_foo.la mod_foo.slo
apxs -i -a -n “foo” mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool –mode=install cp mod_foo.la /path/to/apache/modules …
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module `foo’ in /path/to/apache/conf/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
$ _