\$1
apxs - Инструмент расширения APache
apxs -g [ -S name=value ] -n modname
apxs -q [ -v ] [ -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 ...
apxs — это инструмент для создания и установки модулей расширения для сервера Apache HyperText Transfer Protocol (HTTP). Это достигается путем создания динамического общего объекта (DSO) из одного или нескольких исходных или объектных файлов, которые затем могут быть загружены на сервер Apache во время выполнения с помощью директивы LoadModule из mod_so.
Таким образом, чтобы использовать этот механизм расширения, ваша платформа должна поддерживать функцию DSO, а ваш двоичный файл Apache httpd должен быть собран с модулем mod_so. Инструмент apxs автоматически жалуется, если это не так. Вы можете проверить это самостоятельно, запустив вручную команду
$ httpd -l
Модуль mod_so должен быть частью отображаемого списка. Если эти требования соблюдены, вы можете легко расширить функциональность своего сервера Apache, установив собственные модули с механизмом DSO с помощью этого инструмента 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 (.c), объектным файлом (.o) или даже библиотечным архивом (.a). Инструмент apxs автоматически распознает эти расширения и автоматически использует исходные файлы C для компиляции, а объектные и архивные файлы используются только на этапе компоновки. Но при использовании таких предварительно скомпилированных объектов убедитесь, что они скомпилированы для позиционно-независимого кода (PIC), чтобы их можно было использовать для динамически загружаемого общего объекта. Например, с GCC вам всегда нужно использовать -fpic. Для других компиляторов C обратитесь к его справочной странице или просмотрите флаги, которые apxs использует для компиляции объектных файлов.
Для получения более подробной информации о поддержке DSO в Apache прочитайте документацию mod_so или, возможно, даже прочитайте исходный файл src/modules/standard/mod_so.c.
Это явно задает имя модуля для параметров -i (установка) и -g (создание шаблона). Используйте это, чтобы явно указать имя модуля. Для параметра -g это обязательно, для параметра -i инструмент apxs пытается определить имя из источника или (в качестве запасного варианта) по крайней мере, догадываясь об этом из имени файла.
Выполняет запрос переменных и параметров среды, используемых для сборки httpd. При вызове без параметров query он печатает все известные переменные и их значения. Необязательный параметр -v форматирует вывод списка. .PP Используйте это, чтобы вручную определить параметры, используемые для создания httpd, который будет загружать ваш модуль. Например, используйте INC=-I`apxs -q INCLUDEDIR` .PP внутри ваших собственных файлов Makefile, если вам нужен ручной доступ к файлам заголовков Apache C.
Эта опция изменяет настройки apxs, описанные выше.
При этом создается подкаталог name (см. параметр -n) и два файла: Образец исходного файла модуля с именем mod_name.c, который можно использовать как шаблон для создания собственных модулей или как быстрый старт для экспериментов с механизмом apxs. И соответствующий Makefile для еще более простой сборки и установки этого модуля.
Это указывает на операцию компиляции. Сначала он компилирует исходные файлы C (.c) из файлов в соответствующие объектные файлы (.o), а затем создает динамически общий объект в dsofile, связывая эти объектные файлы и остальные объектные файлы (.o и .a) из файлов. Если параметр -o не указан, выходной файл угадывается по первому имени файла в files, поэтому по умолчанию обычно используется mod_name.so.
Явно указывает имя файла созданного динамически общего объекта. Если не указано и имя не может быть угадано из списка файлов, используется резервное имя mod_unknown.so.
Эта опция напрямую передается командам компиляции. Используйте это, чтобы добавить свои собственные определения в процесс сборки.
Эта опция напрямую передается командам компиляции. Используйте это, чтобы добавить свои собственные включаемые каталоги для поиска в процессе сборки.
Этот параметр напрямую передается команде компоновщика. Используйте это, чтобы добавить свои собственные каталоги библиотек для поиска в процессе сборки.
Этот параметр напрямую передается команде компоновщика. Используйте это, чтобы добавить свои собственные библиотеки для поиска в процессе сборки.
Этот параметр передает флаги компилятора в качестве дополнительных флагов команде libtool --mode=compile. Используйте это, чтобы добавить локальные специфичные для компилятора параметры.
Эта опция передает linker-flags в качестве дополнительных флагов команде libtool --mode=link. Используйте это, чтобы добавить параметры, специфичные для локального компоновщика.
Этот параметр заставляет apxs связываться с библиотеками apr/apr-util. Это полезно при компиляции вспомогательных программ, использующих библиотеки apr/apr-util.
Это указывает на операцию установки и устанавливает один или несколько динамически совместно используемых объектов в каталог modules сервера.
Это активирует модуль, автоматически добавляя соответствующую строку LoadModule в файл конфигурации Apache httpd.conf или активируя его, если он уже существует.
То же, что и опция -a, но созданная директива LoadModule имеет префикс решётки (#), т. е. модуль просто подготовлен для последующего использования активация, но изначально отключена.
Это указывает на операцию редактирования, которую можно использовать с параметрами -a и -A аналогично операции -i для редактирования файла Apache. >httpd.conf, не пытаясь установить модуль.
Предположим, у вас есть доступный модуль Apache с именем mod_foo.c, который должен расширять функциональные возможности сервера Apache. Для этого вам сначала нужно скомпилировать исходный код C в общий объект, подходящий для загрузки на сервер 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 предоставляет автоматический способ установки общего объекта в его каталог «modules» и соответствующего обновления файла 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]
$ _
Таким образом, строка с именем
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/.deps
$ _
Затем вы можете сразу же скомпилировать этот образец модуля в общий объект и загрузить его на сервер 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
$ _