最近CentOS5でNginxのRPMをビルドする必要に迫られたので、その時にハマったポイントをメモしておく。
ちなみに、CentOS6以上だったりUbuntu14.04以上だったら id:h-sbtさんのngx_muby-package-builder使うのが便利。
1. yum-builddepがコケる
yum-builddep -y /tmp/nginx-1.9.12-1.el5.ngx.src.rpm
とかすると yum.Errors.MiscError: Could not open local rpm file: /tmp/nginx-1.9.12-1.el5.ngx.src.rpm
というエラーが出てものすごくハマる。。。
原因は、GPGキーがインポートされていないせい。 (だったらそういうエラーを出してくれればいいのに…Warningじゃ無視しちゃうよ。。。)
$ sudo rpm --import http://nginx.org/packages/keys/nginx_signing.key
すると直る。
(CentOS6以降では、 --no-gpgcheck
オプションが使えるっぽい)
2. %rhelマクロが定義されていない
nginx.src.specではRHELのバージョンによって定義が分岐されている。
その判定には %rhel
マクロが使われているのだが、CentOS5には定義されていないためrpmbuildするときにエラーになってしまう。
なので、以下のコマンドで定義してやる。
$ echo "%rhel 5" >> ~/.rpmmacros または $ rpmbuild -ba --define "rhel 5" /path/to/nginx.src.spec
3. ccがWarningでもエラー扱いにしてしまう
デフォルトの設定では、ソースコンパイル中のWarningをすべてエラー扱いにしてしまいrpmbuildが止まってしまう。
そこで、ccするときに -Wno-error
を追加する必要がある。
ccのオプションは、%optflags
マクロを展開していて手元の環境では以下の様な定義になっている。
$ rpmbuild --showrc | grep optflags optflags : %{__global_cflags} -m32 -march=i686 -mtune=generic -fasynchronous-unwind-tables CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS; RPM_OPT_FLAGS="%{optflags}" RPM_OPT_FLAGS="%{optflags}" CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; -11: optflags %{__global_cflags} -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables
仕組みをよく理解していないのだが、このマクロは後から上書きできないようなので、内部的に使用している __global_cflags
マクロを上書きすることにした。
以下のようなコマンドで -Wno-error
を追加する。
$ echo "%__global_cflags $(rpm --eval %{__global_cflags}) -Wno-error" >> ~/.rpmmacros