概要
Fedora 23では、nginx 1.8系のパッケージしか提供されていない1ので、RHEL7向けのsrpmをビルドしようという話
23以下でも動くと思うます。
tl;dr
curl -fsSL https://gist.githubusercontent.com/eru/84fafee9a695aa1e90b3054e02334977/raw/build-nginx-rpm-fedora.sh
# ビルドまで終わるので、後は必要なパッケージを自分でインストールすること。
解説
yumか、dnfか
PKGCMD="yum"
if type dnf >/dev/null 2>&1; then
PKGCMD="dnf"
fi
23向けなので、dnfだけでもいいんですが、少しだけ前方互換。
rootユーザ以外向けにsudo付ける
if [ ${EUID:-${UID}} != 0 ]; then
PKGCMD="sudo ${PKGCMD}"
fi
必要なパッケージインストールする時に、root権限で実行する必要があるので。
SPECファイルのパスを設定しとく
SPECFILE="${HOME}/rpmbuild/SPECS/nginx.spec"
2回以上使う固定値は変数化しておきたい。
必要なパッケージのインストール
${PKGCMD} install rpm-build GeoIP-devel gd-devel libxslt-devel openssl-devel pcre-devel perl-ExtUtils-Embed perl-devel zlib-devel gcc make which
Docker container上で確認したので、Fedora 23については、これで間違いなく足ります。
最新バージョンの検出
NGINX_VERSION=(`curl http://nginx.org/packages/mainline/rhel/7/SRPMS/ | sed -nre 's/<a href="nginx-([0-9\.]+-1)\.el7\.ngx\.src\.rpm">.*/\1/p' | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -r | head -n 1`)
srpmが置いてあるページ(Directory index)から、置換して、ソートして、一番新しいのを取得する。
sort時に、バージョン番号分割してソートするのがポイント。
srpmパッケージのインストール
rpm -ivh http://nginx.org/packages/mainline/rhel/7/SRPMS/nginx-${NGINX_VERSION}.el7.ngx.src.rpm
やっぱり最新版だよね!
SPECファイルの加工
sed -i -e 's/^\(%if 0%{?rhel} == 7\)$/\1 || 0%{?fedora} >= 18/g' ${SPECFILE}
RHEL5, 6, 7と、Suse用のしかないので、RHEL7と同じのを使うようにする
ビルド
LC_ALL=C rpmbuild -bb ${SPECFILE}
LC_ALL=C
をつけていないかつ、日本語環境の場合、ココで、gcc バージョン 5.3.1 20151207 (Red Hat 5.3.1-2) (GCC)
みたいな、期待したい値が返ってくるせいで、コンパイラが取得できなくてビルドに失敗する。
後片付け
unset PKGCMD
unset SPECFILE
使った変数は消しておく。
-
執筆時点では、1.8.1 ↩