Lets go

Я не знаю как билдить что-то универсальное поэтому будем отталкиваться от имеющейся проблемы. А именно нам нужен nginx для RHEL7

build result

Загрузка необходимых вещей

Cкачаваем src rpm для нужного нам дистрибутива, в нашем случае:

https://nginx.org/packages/centos/7/SRPMS/

Скачаваем патчи/модули, в нашем случае:

https://github.com/chobits/ngx_http_proxy_connect_module

Extract files from rpm + download source

Для сборки чего либо по факту достаточно 2х файлов: spec + source

spec - описание как мы будем собирать
source - исходники из которых мы будем собирать

Но в нашем случае нам надо извлечить все из rpm и закинуть в репу. Проще всего это сделать так

1
rpm2cpio nginx.src.rpm|cpio -idcmv

Этой командой мы “распакуем” rpm и получим все необходимые файлы.

Upload files to buildService

Загружаем файлы которые мы извлекли предыдущей коммандой в репозиторий. В итоге там должно быть что-то вида:

img

Build

Сборка запустится автоматом. Можно запустить руками.

Так же вы можете выбрать список дитрибутивов для которых хотите собирать. Делается это на странице:

https://build.opensuse.org/projects/home:USERNAME/distributions/new (Вместо USERNAME - подставить имя вашего пользователя)

Add modules

Эта часть для тех кто хочет докинуть какой то модуль

Upload additional module to OpenSuse build Service

Скачивате модуль в нашем случае: https://github.com/chobits/ngx_http_proxy_connect_module

Проще всего склонировать репу:

1
git clone https://github.com/chobits/ngx_http_proxy_connect_module

Запаковать скаченную репу в архив:

1
tar -czvf ngx_http_proxy_connect_module.tar.gz ngx_http_proxy_connect_module

upload to build service

img

так же я залил туда файл которыйц нужен для моей версии nginx те proxy_connect.patch (proxy_connect_rewrite_102101.patch в скаченной репе)

Modify Spec for add module

в нашем случае nginx.spec

Для того что бы собирать доп модули надо поправить spec file. (тут я не претендую на правильность… я в целом изрядно задолбался перебирать врианты и вообщем то остановился на том который просто сработал… потом я разберусь как правильно но не сегодня…)

Собственно нам надо указать в configure что у нас есть доп модуль.. + Распаковать залитый на на преведущем шаге архив ngx_http_proxy_connect_module.tar.gz

Для этого правим spec следующим образом:

1
2
3
4
5
6
7
%define BASE_CONFIGURE_ARGS $(echo "--prefix=%{_sysconfdir}/nginx --sbin-path=%{_sbindir}/nginx --modules-path=%{_libdir}/nginx/modules --conf-path=%{_sysconfdir}/nginx/nginx.conf --error-log-path=%{_localstatedir}/log/nginx/error.log --http-log-path=%{_localstatedir}/log/nginx/access.log --pid-path=%{_localstatedir}/run/nginx.pid --lock-path=%{_localstatedir}/run/nginx.lock --http-client-body-temp-path=%{_localstatedir}/cache/nginx/client_temp --http-proxy-temp-path=%{_localstatedir}/cache/nginx/proxy_temp --http-fastcgi-temp-path=%{_localstatedir}/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=%{_localstatedir}/cache/nginx/uwsgi_temp --http-scgi-temp-path=%{_localstatedir}/cache/nginx/scgi_temp --user=%{nginx_user} --group=%{nginx_group} --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=./ngx_http_proxy_connect_module")
..........
%build
echo "=====${PWD}====="
tar -xvf /home/abuild/rpmbuild/SOURCES/ngx_http_proxy_connect_module.tar -C .
echo "---------"
ls -la

Первая строка длинная но по факту в BASE_CONFIGURE_ARGS мы просто добавляем модули - –add-module=./ngx_http_proxy_connect_module

Build

Перезаливаем спеку и оно само начнет билдится.

List modules

1
2
3
nginx -V
--
strings /usr/sbin/nginx|grep _module|grep -v configure| sort

OpenSuse build Service PTMP13

https://github.com/ptmp13/openSuseBuildService_nginx

Lifehack

Для RHEL7 могут отсутствовать некоторые пакеты и может быть ошибка unresolvable как на скриншоте ниже. Поэтому лучше выбирать для сборки CentOS7

img