Страницы

Поиск по вопросам

четверг, 7 марта 2019 г.

Как правильно собрать пакет с nginx-ом и сторонним модулем?

В отличие от apache, модули nginx-а компилируются непосредственно в саму программу.
Как правильно пересобрать пакет с nginx-ом в debian-основных дистрибутивах, включив в код программы какой-нибудь сторонний модуль?


Ответ

пример для модуля nginx-rtmp, но подойдёт и для любого другого. только исходники модуля надо будет брать по другой ссылке и распаковывать в каталог с другим именем (не nginx-rtmp-module).
установим необходимые для сборки пакеты:
$ sudo apt-get update $ sudo apt-get install build-essential $ sudo apt-get build-dep nginx создадим где-нибудь в домашнем каталоге «сборочный» каталог и «перейдём» в него:
$ mkdir -p ~/sborka/nginx $ cd ~/sborka/nginx скачаем и распакуем исходники дистрибутивного пакета nginx
$ apt-get source nginx помимо нескольких необходимых файлов появился и каталог с исходниками пакета — nginx-номер.версии. «перейдём» в него:
$ cd nginx-номер.версии в каталоге debian/modules хранятся каталоги с исходниками модулей, которые собираются в одно целое с программой nginx. туда и скачаем исходники дополнительного модуля, в каталог (к примеру) debian/modules/nginx-rtmp-module (т.к. нам не нужна вся история из репозитория, добавим опцию --depth 1):
$ git clone --depth 1 https://github.com/arut/nginx-rtmp-module.git debian/modules/nginx-rtmp-module теперь самое «сложное» — надо добавить опцию --add-module=путь/к/модулю в «правильном» месте, чтобы она была передана скрипту configure при сборке пакета.
делается это в файле debian/rules. это «обыкновенный» makefile, но «особого, debian-овского назначения». тут два варианта:
в более старых версиях пакета надо использовать переменную CONFIGURE_OPTS. если есть её упоминания, то добавьте где-нибудь в начале файла строку:
CONFIGURE_OPTS = --add-module=$(MODULESDIR)/nginx-rtmp-module в более новых есть переменная common_configure_flags. найдите строки вида:
common_configure_flags := \ --with-cc-opt="$(debian_cflags)" \ ... --with-http_realip_module \
и после последней добавьте нужную строку, чтобы выглядело примерно так (не забудьте про обратный слэш в конце строки и не удаляйте следующую пустую строку):
common_configure_flags := \ --with-cc-opt="$(debian_cflags)" \ ... --with-http_realip_module \ --add-module=$(MODULESDIR)/nginx-rtmp-module \ теперь можно собирать пакет (точнее, их соберётся несколько разных):
$ dpkg-buildpackage -b -us -uc
если последняя команда завершилась успешно (строкой типа dpkg-buildpackage: binary only upload (no source included)), то пакеты — собрались.
файлы с ними лежат на каталог выше текущего, т.е. непосредственно в нашем «сборочном» каталоге ~/sborka/nginx. там присутствуют файлы, включающие в названии буквы dbg — это пакеты с отладочной информацией, они обычно не нужны.
нужен как минимум пакет из файла nginx-common_версия.и.другие.буквы.deb и один из пакетов, начинающихся с: nginx-core (базовая функциональность, «умолчальная» версия) или nginx-light («облегчённая» версия) или nginx-full («навороченная» версия).
для начала удалите установленную версию nginx (если есть):
$ sudo apt-get remove 'nginx-*'
и поставьте собранные пакеты из файлов:
$ sudo dpkg -i ~/sborka/nginx/nginx-common_*.deb ~/sborka/nginx/nginx-core.*.deb
если в выводе команды появятся упоминания про неудовлетворённые зависимости, установите их, выполнив:
$ sudo apt-get -f install
теперь можно проверить, присутствует ли упоминание про тот модуль, который вы добавляли (пример был про rtmp, эту строку и ищем):
$ /usr/sbin/nginx -V |& sed 's/ /
/g' | grep rtmp --add-module=/home/.../sborka/nginx/nginx-версия/debian/modules/nginx-rtmp-module
есть такая буква в этом слове!™

Комментариев нет:

Отправить комментарий