Здравствуйте, Alex,

On 24/01/2023 12:31 PM, Alex Kubyshkin wrote:
Добрый день, Константин!

Спасибо за оперативный ответ!

Вопрос возник в связи с тем, что при попытке использовать его для многих docker 
images, которые по идее должны поддерживаться, возникают различные ошибки при 
работе скрипта build_module.sh.

Пробовал images:
almalinux:8
almalinux:9
centos:8
registry.access.redhat.com/ubi8/ubi:8.7
rockylinux:8
rockylinux:9

Воспроизвести можно так:
docker run --rm rockylinux:9 bash -c 'yum install -y wget && wget 
https://hg.nginx.org/pkg-oss/raw-file/default/build_module.sh && bash build_module.sh 
-y -r 20 https://github.com/arut/nginx-rtmp-module.git'
Работоспособность build_module.sh из tip проверяем на современных релизах, для 
NGINX Plus R20 система сборки была немного иная. Рекомендую чекаутить версию из 
бранча target-plus-r20 для настолько старого релиза - ну или обновиться на 
современный, для R27-R28 build_module.sh из tip default'а работать будет.
Да, действительно, на r23 модуль собирается. Но r22 вышел 2.5 года назад всего, что по 
меркам сурового энтерпрайза фактически "вчера". Хотелось бы конечно, обратной 
совместимости, тем более в данном случае там совсем немного - путь в rpmbuild передается 
неверный.

Вероятно, чуть больше - там как минимум changelog'и еще не создаются на первый взгляд.

Патчи приветствуются.
А патчи как отсылать? Может у вас github/gitlab/bitbucket какой есть для 
простоты процесса?

Можно аттачами в nginx-packag...@f5.com - это адрес рассылки со мной и моими коллегами, которые занимаются пакетированием продуктов NGINX/NGINX Plus в F5.

К сожалению, репозитория в git-формате для pkg-oss нет (как и другого web ui вместо hgweb), и не хотелось бы делать зеркало без лишней надобности.

В целом правильный путь - не использовать build_module.sh, а написать Makefile 
для нужного модуля и использовать его для своих сборок. Это позволит 
кастомизировать свои сборки, например добавлять свои патчи поверх исходников 
модуля.  См. например 
https://hg.nginx.org/pkg-oss/file/tip/rpm/SPECS/Makefile.module-rtmp, но 
работать это будет только для современных релизов.
А поподробней где можно почитать про "Makefile для нужного модуля"? Я собираю 
кастомный модуль для узкого потребления суровым энтерпрайзом, который как раз на Nginx 
Plus сидит. Если есть какой-то не велосипедный путь, рад буду его использовать.

Документации в виде текстового описания, увы, нет.

В целом схема примерно такая: в pkg-oss/rpm/SPECS есть Makefile, который умеет запускать сборку поддерживаемых пакетов - nginx или модулей.  В случае модулей используются темплейт spec-файла (nginx-plus-module.spec.in) и наполнение его контентом через нехитрый sed.  В этом же Makefile через include добавляются Makefile'ы для модулей (Makefile.module-rtmp например), в которых заданы основные параметры вроде тарболла с исходниками, configure arguments, патчей, тестов и т.п. сборочной информации.

Для сборки под NGINX Plus достаточно в pkg-oss/rpm/SPECS в бранче для желаемого релиза (target-plus-rXX, где XX номер релиза) можно сказать что-то вида:

$ BASE_TARGET=plus MODULE_TARGET=plus make module-rtmp

При этом версия модуля, чексумма, url откуда его качать и т.п. вещи задаются в pkg-oss/contrib/src/$name/.

В вашем случае, полагаю, будет достаточно держать патчсет с добавлением rpm/SPECS/Makefile.module-$foo, contrib/src/$foo/{Makefile,version,SHA512SUMS} и время от времени его rebase'ить на новые бранчи релизов target-plus-rXX.  Если требуется еще и писать осмысленные changelog'и для пакетов, то стоит добавить и docs/nginx-module-$foo.xml по аналогии с уже существующими - на его основне при сборке будет генерироваться changelog, нативный для пакета (rpm и debian) и добавляться в пакет.

Хорошего дня,
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
https://mailman.nginx.org/mailman/listinfo/nginx-ru

Ответить