Apache2/modulespec
Разбор спека пакета с модулем apache2
При создании пакетов с модулями apache2 рекомендуется использовать следующие шаблоны[1]:
- sample.spec, находящийся в бранче ALT/apache2/mod репозитория specs.git;
- SampleSpecs/apache2module;
Зависимости модуля
Для корректной работы, от apache2 модулям необходимо:
- Совместимость интерфейса (ABI) предоставляемого httpd2 с вариантом использованным при сборке модуля;
- Отсутствие несовместимостей на уровне инфраструктуры apache2;
Зависимость на инфраструктуру задать достаточно просто:
Requires: %apache2_name-base > 2.2.22-alt15
С ABI httpd2 сложнее: модули недолинкованы и set-versions не работает для данного случая. Приходится опираться на:
В спеке это выглядит так:
Requires: %apache2_name-mmn = %apache2_mmn Requires: %apache2_libaprutil_name >= %apache2_libaprutil_evr Requires: %apache2_libapr_name >= %apache2_libapr_evr
(Если модуль линкуется с libaprutil1 и/или libapr, то соответствующий Requires
можно опустить.)
Прошу обратить внимание на макросы:
%apache2_mmn
- Возвращает MMN[2] пакета apache2 используемого при сборке. Определён в rpm-build-apache2[4].
%apache2_libaprutil_evr
и%apache2_libapr_evr
- Возвращают
%EVR
[3] пакетов libaprutil1 и libaprutil1 используемых при сборке. Определены в rpm-macros-apache2[5]. Из за использования макроса%get_SVR
, необходимо чтобы пакеты libaprutil1-devel и libapr1-devel запрашивались черезBuildRequires(pre)
(либо таким образом запрашивался пакет от их зависящий).
Сборочные зависимости модуля
Как правило достаточно:
BuildRequires(pre): apache2-devel > 2.2.22-alt15
При этом нужные версии apache2-httpd, rpm-build-apache2, rpm-macros-apache2, libaprutil1-devel и libapr1-devel будут установлены автоматически.
Файлы пакета
Типичный пакет с модулем apache2 в секции %files
содержит[6]:
# бинарники модулей %apache2_moduledir/* # загрузочные файлы (содержат LoadModule) %config(noreplace) %apache2_mods_available/*.load # конфиги модулей (могут отсутсвовать) %config(noreplace) %apache2_mods_available/*.conf # старт файлы (присутсвие _крайне_ желательно) %config(noreplace) %apache2_mods_start/*.conf # симлинки удаляемые вместе с пакетом %ghost %apache2_mods_enabled/*.load %ghost %apache2_mods_enabled/*.conf
Скрипты %post
/%preun
В связи с переходом на реконфигурацию и перезапуск httpd2 с помощью файлтриггеров, вариант использование для этих целей %post
/%preun
скриптов устарел, и его лучше не использовать: запуск a2chkconfig и/или перезапуск httpd2 в рамках rpm транзакции может приводить к ошибкам. Теперь реконфигурация и перезапуск httpd2 при установке/обновлении/удалении пакета с модулем apache2, выполняются автоматически, файлтриггерами, при условии присутствия в пакете файлов в каталогах:
%apache2_{mods,sites,ports,extra}_start
[7]- Выполняется запуск a2chkconfig с последующим перезапуском httpd2.
%apache2_basedir
[8] или%apache2_moduledir
[9]- Выполняется перезапуск httpd2.
Т. е. для типичного содержимого пакета с модулем httpd2 (см. Apache2/modulespec#Файлы пакета) запускать a2chkconfig и/или перезапускать httpd2 в скриптах %post
/%preun
вообще не надо[10].
Примеры спеков
- apache2-mod_auth_ahttpd-1.0.0-alt4.1
- apache2-mod_auth_ahttpd.spec
- apache2-mod_auth_mysql-3.0.0-alt7.1
- apache2-mod_auth_mysql.spec
- apache2-mod_dnssd-0.6-alt1
- apache2-mod_dnssd.spec
- mod_mono.git-1.9-alt1.1
- mod_mono.spec
Примечания
- ↑ Шаблоны спеков рассчитаны на сборку и взаимодействие с компонентами apache2 более новыми чем apache2-2.2.22-alt15 (в apache2-2.2.22-alt16 были изменены список подпакетов и их зависимости).
- ↑ 2,0 2,1 Module Magic Number (MMN)
- ↑ 3,0 3,1
%{?epoch:%epoch:}%{version}-%{release}
- ↑ Начиная от rpm-build-apache2-2.2.22-alt16
- ↑ Начиная от rpm-macros-apache2-3.12-alt1
- ↑ См. Apache2/Configs#Основные отличия от Debian
- ↑ /etc/httpd2/conf/{mods,sites,ports,extra}-start.d
- ↑ /etc/httpd2
- ↑ /usr/lib{,64}/apache2/modules
- ↑ Если автоматики не хватает, то инфицировать срабатывание файлтриггеров можно через макросы
%post_apache2_{rpma2chkconfigfile,rpmhttpdrestartfile}