我尝试自定义修改了nginx.org的RPM包,在Fedora Copr上进行构建并分发

由于 2015 年 nginx 倒数日历的 12 月 4 日(星期五)的空档已经过去了,所以我现在决定写下这篇文章并进行发布。

首先

nginx在CentOS 7中包含在epel中,但版本已经过时。最近,我们一直在利用nginx: download的yum仓库。然而,如果需要使用lua或其他附加模块,则需要从源代码进行构建。

虽然在Qiita上有关于通过nginx-build构建nginx的方法介绍,但也希望能够在CentOS上通过rpm进行管理。

因此,我在Fedora项目的copr服务中尝试构建和分发ngnx的rpm。

关于我创建的nginx的rpm

我已将在 Travis CI 上使用 Docker 构建 Nginx 的 SRPM 以便在 COPR 上进行构建所需的文件放在了 GitHub 上的 hnakamur/nginx-rpm 项目中。

我正在基于nginx.org的rpm的spec文件构建以下3个模块。

    • openresty/lua-nginx-module

 

    • yaoweibin/nginx_upstream_check_module

 

    replay/ngx_http_consistent_hash

创建SRPM

SRPM的构建步骤写在Dockerfile中。以下是其主要部分摘录:

…(略)…
 && cd /root/rpmbuild/SRPMS \
 && curl -sLO http://nginx.org/packages/mainline/centos/7/SRPMS/nginx-${NGINX_VERSION}-1.el7.ngx.src.rpm \
 && rpm -i nginx-${NGINX_VERSION}-1.el7.ngx.src.rpm \
 && cd /root/rpmbuild/SOURCES \
 && curl -sLO https://github.com/openresty/lua-nginx-module/archive/v${NGX_LUA_VERSION}.tar.gz#/lua-nginx-module-${NGX_LUA_VERSION}.tar.gz \
 && curl -sLO https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.tar.gz#/nginx_upstream_check_module-master.tar.gz \
 && curl -sLO https://github.com/replay/ngx_http_consistent_hash/archive/master.tar.gz#/ngx_http_consistent_hash-master.tar.gz

ADD nginx.spec.patch /root/rpmbuild/SPECS/

RUN cd /root/rpmbuild/SPECS \
 && patch -p0 < nginx.spec.patch \
 && rpmbuild -bs nginx.spec
…(略)…

我们在 nginx.org 提供的 rpm 中应用了以下补丁到 nginx.spec 文件中。

--- nginx.spec.orig 2015-11-18 00:07:19.000000000 +0900
+++ nginx.spec  2015-12-06 17:51:40.000000000 +0900
@@ -74,11 +74,16 @@
 Source9: nginx.upgrade.sh
 Source10: nginx.suse.logrotate

+Source100: https://github.com/openresty/lua-nginx-module/archive/v0.9.19.tar.gz#/lua-nginx-module-0.9.19.tar.gz 
+Source101: https://github.com/yaoweibin/nginx_upstream_check_module/archive/master.tar.gz#/nginx_upstream_check_module-master.tar.gz
+Source102: https://github.com/replay/ngx_http_consistent_hash/archive/master.tar.gz#/ngx_http_consistent_hash-master.tar.gz
+
 License: 2-clause BSD-like license

 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
 BuildRequires: zlib-devel
 BuildRequires: pcre-devel
+BuildRequires: luajit-devel

 Provides: webserver

@@ -98,7 +103,8 @@
 %endif

 %prep
-%setup -q
+%setup -q -a 100 -a 101 -a 102
+patch -p0 < ./nginx_upstream_check_module-master/check_1.9.2+.patch

 %build
 ./configure \
@@ -136,6 +142,9 @@
         --with-mail_ssl_module \
         --with-file-aio \
         --with-ipv6 \
+        --add-module=./lua-nginx-module-0.9.19 \
+        --add-module=./nginx_upstream_check_module-master \
+        --add-module=./ngx_http_consistent_hash-master \
         --with-debug \
         %{?with_http2:--with-http_v2_module} \
         --with-cc-opt="%{optflags} $(pcre-config --cflags)" \
@@ -178,6 +187,9 @@
         --with-mail_ssl_module \
         --with-file-aio \
         --with-ipv6 \
+        --add-module=./lua-nginx-module-0.9.19 \
+        --add-module=./nginx_upstream_check_module-master \
+        --add-module=./ngx_http_consistent_hash-master \
         %{?with_http2:--with-http_v2_module} \
         --with-cc-opt="%{optflags} $(pcre-config --cflags)" \
         $*

我将解释更改的内容。

(Wǒ de .)

    • luajitを使いたいので BuildRequires: luajit-devel を追加

 

    • 使用したいモジュールのソースのURLを Source100, Source101, Source102 に指定

元の nginx.spec に Source0 から Source10 まで書かれているのでnginxの将来のバージョンで Source が増えても衝突しないように100からとしました。
https://github.com/openresty/lua-nginx-module/archive/v0.9.19.tar.gz#/lua-nginx-module-0.9.19.tar.gz のというURLの書き方についてはrpmのspecファイルのSourceにGitHubの任意のコミットのtarballのURLを指定するときの良い書き方 · hnakamur’s blog at githubをご参照ください。

%setupに Source100, Source101, Source102 を展開するためのオプションを追加

オプションについてはSPEC file sections explainedに説明があります。

%setupの後にyaoweibin/nginx_upstream_check_moduleに含まれるパッチcheck_1.9.2+.patchを適用
nginxのconfigureのオプションに使用したいモジュールごとに –add-module=モジュールソースのディレクトリ を追加

在copr上构建和分发rpm。

在上述中,我們使用 copr-build.sh 在 copr 上構建了所述的 srpm。詳細信息可以參考我的 github 部落格 hnakamur’s blog 的「試試使用 Travis CI 和 copr.fedoraproject.org 來構建和發布 rpm」。

RPM构建的安装方式

您可以通过以下命令安装我创建的rpm包,这也在hnakamur/nginx Copr的“安装说明”中有提到。

sudo curl -sL -o /etc/yum.repos.d/hnakamur-nginx.repo https://copr.fedoraproject.org/coprs/hnakamur/nginx/repo/epel-7/hnakamur-nginx-epel-7.repo

sudo yum install nginx

最后

使用Copr,您可以方便地托管自己制作的RPM软件包。我建议大家尝试在Copr上构建和分发各种不同的RPM软件包,这非常方便。

广告
将在 10 秒后关闭
bannerAds