Страницы

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

воскресенье, 22 декабря 2019 г.

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

#ubuntu #nginx #debian #dpkg


В отличие от apache, модули nginx-а компилируются непосредственно в саму программу.

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


Ответы

Ответ 1



пример для модуля 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/ /\n/g' | grep rtmp --add-module=/home/.../sborka/nginx/nginx-версия/debian/modules/nginx-rtmp-module есть такая буква в этом слове!™

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

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