Lets go
Я не знаю как билдить что-то универсальное поэтому будем отталкиваться от имеющейся проблемы. А именно нам нужен nginx для RHEL7
Загрузка необходимых вещей
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
Загружаем файлы которые мы извлекли предыдущей коммандой в репозиторий. В итоге там должно быть что-то вида:
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
так же я залил туда файл которыйц нужен для моей версии 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
My links
https://github.com/ptmp13/openSuseBuildService_nginx
Lifehack
Для RHEL7 могут отсутствовать некоторые пакеты и может быть ошибка unresolvable как на скриншоте ниже. Поэтому лучше выбирать для сборки CentOS7