LoginSignup
0
0

More than 5 years have passed since last update.

Fedora 23で最新nginxのrpmを作成

Last updated at Posted at 2016-04-04

概要

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. 執筆時点では、1.8.1 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0