Сборка rpm пакета Nginx в Centos 7

На данный момент в официальном репозитории Nginx размещены пакеты без поддержки технологии APLN. Возможно, вы успели заметить, что в актуальной версии Chrome ваши сайты перестали работать по протоколу HTTP/2. Связано это с тем, что для сборки Nginx используется старая версия OpenSSL. Хочешь HTTP/2, значит придется собирать Nginx из исходников вручную.

Основной недостаток установки программ при помощи make install — это неудобное управление. Вместо этого мы рассмотрим сборку rpm пакетов из исходников. Все действия я буду производить в дистрибутиве CentOS 7, а в качестве примера буду использовать Nginx 1.11.3.

Устанавливаем все необходимое для сборки и компиляции:

yum groupinstall -y "Development Tools" && yum install rpmdevtools nano yum-utils

Собирать пакеты можно из-под любого пользователя, но делать это из-под root не рекомендуется. Создадим для сборки пакета пользователя builder:

useradd builder
usermod -a -G builder builder

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

rpmdev-setuptree

Для настройки репозитория yum необходимо создать файл:

nano /etc/yum.repos.d/nginx.repo

Копируем в файл следующие строки:

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

[nginx-source]
name=nginx source repo
baseurl=http://nginx.org/packages/mainline/centos/7/SRPMS/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Загружаем пакет с исходниками и запускаем установку rmp:

cd /tmp
yumdownloader --source nginx
rpm -Uvh nginx*.src.rpm

Установим все необходимые для сборки Nginx зависимости:

yum-builddep nginx

Скачиваем и распаковываем исходники OpenSSL:

cd /usr/src/
wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz
tar -xvzf openssl-1.0.2h.tar.gz

В параметрах сборки необходимо указать путь к исходникам OpenSSL:

nano ~/rpmbuild/SPECS/nginx.spec

Для примера привожу фрагмент моего файла:

--with-http_slice_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-openssl=/usr/src/openssl-1.0.2h \

Запускаем сборку пакета:

cd ~/rpmbuild/SPECS/
rpmbuild -ba nginx.spec

После завершения сборки переносим rpm из папки:

cd ~/rpmbuild/RPM/
ls
nginx-1.11.3-1.el7.centos.ngx.x86_64.rpm
nginx-debuginfo-1.11.3-1.el7.centos.ngx.x86_64.rpm
nginx-module-geoip-1.11.3-1.el7.centos.ngx.x86_64.rpm
nginx-module-image-filter-1.11.3-1.el7.centos.ngx.x86_64.rpm
nginx-module-njs-1.11.3.0.1.0-1.el7.centos.ngx.x86_64.rpm
nginx-module-perl-1.11.3-1.el7.centos.ngx.x86_64.rpm
nginx-module-xslt-1.11.3-1.el7.centos.ngx.x86_64.rpm

И запускаем установку командой:

rpm -Uvh nginx*.rpm