Apache2/modulespec

Материал из ALT Linux Wiki
< Apache2
Версия от 00:53, 11 февраля 2013; AlekseyAvdeev (обсуждение | вклад) (Первая версия)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)

Разбор спека пакета с модулем apache2

При создании пакетов с модулями apache2 рекомендуется использовать следующие шаблоны[1]:


Зависимости модуля

Для корректной работы, от apache2 модулям необходимо:

  • Совместимость интерфейса (ABI) предоставляемого httpd2 с вариантом использованным при сборке модуля;
  • Отсутствие несовместимостей на уровне инфраструктуры apache2;

Зависимость на инфраструктуру задать достаточно просто:

Requires: %apache2_name-base > 2.2.22-alt15

С ABI httpd2 сложнее: модули недолинкованы и set-versions не работает для данного случая. Приходится опираться на:

  1. MMN[2] apache2, с которым собирался модуль.
  2. %EVR[3] пакетов libaprutil1 и libaprutil1.

В спеке это выглядит так:

Requires: %apache2_name-mmn = %apache2_mmn
Requires: %apache2_libaprutil_name >= %apache2_libaprutil_evr
Requires: %apache2_libapr_name >= %apache2_libapr_evr

(Если модуль линкуется с libaprutil1 и/или libaprutil1, то соответствующий 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

Примечания

  1. Шаблоны спеков рассчитаны на сборку и взаимодействие с компонентами apache2 более новыми чем apache2-2.2.22-alt15apache2-2.2.22-alt16 были изменены список подпакетов и их зависимости).
  2. 2,0 2,1 Module Magic Number (MMN)
  3. 3,0 3,1 %{?epoch:%epoch:}%{version}-%{release}
  4. Начиная от rpm-build-apache2-2.2.22-alt16
  5. Начиная от rpm-macros-apache2-3.12-alt1
  6. См. Apache2/Configs#Основные отличия от Debian
  7. /etc/httpd2/conf/{mods,sites,ports,extra}-start.d
  8. /etc/httpd2
  9. /usr/lib{,64}/apache2/modules
  10. Если автоматики не хватает, то инфицировать срабатывание файлтриггеров можно через макросы %post_apache2_{rpma2chkconfigfile,rpmhttpdrestartfile}