RHEL5用zabbix-webパッケージのphpとの依存関係について

公式のリポジトリよりダウンロードしたrpmを使用して
CentOS 5.11+php5.3環境にてzabbix2.2.6から2.2.9へのアップデートを試みたところ、
以下のエラーが表示され、アップデートが失敗しました。

# rpm -Uvh zabbix-web-2.2.9-1.el5.x86_64.rpm zabbix-web-japanese-2.2.9-1.el5.x86_64.rpm zabbix-web-mysql-2.2.9-1.el5.x86_64.rpm
error: Failed dependencies:
php >= 5.3 is needed by zabbix-web-2.2.9-1.el5.x86_64

phpは5.3以上を要求するとのことですが、
インストールされているphpは5.3となっています。

# php -v
PHP 5.3.3 (cli) (built: Oct 31 2014 09:52:36)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

# rpm -qa |grep php53
php53-bcmath-5.3.3-26.el5_11
php53-xml-5.3.3-26.el5_11
php53-pgsql-5.3.3-26.el5_11
php53-pdo-5.3.3-26.el5_11
php53-cli-5.3.3-26.el5_11
php53-mysql-5.3.3-26.el5_11
php53-gd-5.3.3-26.el5_11
php53-5.3.3-26.el5_11
php53-common-5.3.3-26.el5_11
php53-mbstring-5.3.3-26.el5_11

https://www.zabbix.com/forum/showthread.php?p=161586
上記、オフィシャルのフォーラムにも同様の例が記載されており、
--nodepsオプションをつけ依存関係を無視してインストールすることで
回避している状況です。

機能面では特に問題は起きていないためこのままでもよいのですが
どうにも腑に落ちないため原因を調査してみました。

1.rpmパッケージの依存関係を調査

2.2.9の場合

# rpm -qpR zabbix-web-2.2.9-1.el5.x86_64.rpm
/bin/bash
/bin/sh
/bin/sh
/usr/sbin/update-alternatives
/usr/sbin/update-alternatives
config(zabbix-web) = 2.2.9-1.el5
httpd
php >= 5.3
php-bcmath
php-gd
php-mbstring
php-xml
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
zabbix-web-database = 2.2.9-1.el5

2.2.6の場合

# rpm -qpR zabbix-web-2.2.6-1.el5.x86_64.rpm
/bin/bash
/bin/sh
/bin/sh
/usr/sbin/update-alternatives
/usr/sbin/update-alternatives
config(zabbix-web) = 2.2.6-1.el5
httpd
php53
php53-bcmath
php53-gd
php53-mbstring
php53-xml
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
zabbix-web-database = 2.2.6-1.el5

RHEL(CentOS)5.xではデフォルトのphpは5.1.xであるため
5.3.xを使う場合はphpではなくphp53を指定する必要があります。

2.2.6ではphp53系のパッケージを条件としていますが、2.2.9ではphp >= 5.3という表記に変わっています。

直近のパッケージで一通り確認しましたが、
この変化は2.2.8以降および2.4.3以降で起きています。

2.specファイルのパッケージ依存情報を確認する
2.2.6および2.2.9のsrc.rpmからzabbix.specファイルを抽出し、
zabbix-webに関する部分について比較してみましたが、
特に差異はありませんでした。

しかし、下記の記述内容を参照すると
RHEL5.xではphp53を要求し、それ以外のバージョンではphp >= 5.3を要求するように
条件分岐しているように見えます。

%package web
Summary : Zabbix Web Frontend
Group : Applications/Internet
%if 0%{?fedora} > 9 || 0%{?rhel} >= 6
BuildArch : noarch
%endif
Requires : httpd
%if 0%{?rhel} == 5
Requires : php53
Requires : php53-gd
Requires : php53-bcmath
Requires : php53-mbstring
Requires : php53-xml
%else
Requires : php >= 5.3
Requires : php-gd
Requires : php-bcmath
Requires : php-mbstring
Requires : php-xml
%endif
# DejaVu fonts doesn't exist on EL <= 5
%if 0%{?fedora} || 0%{?rhel} >= 6
Requires : dejavu-sans-fonts
%endif
Requires : zabbix-web-database = %{version}-%{release}
Requires(post) : %{_sbindir}/update-alternatives
Requires(preun) : %{_sbindir}/update-alternatives

%description web
The php frontend to display the zabbix web interface.

この記述に従うのであれば直近のrpmにおいても
php53を要求するはずなのですが、先述のとおりphp >= 5.3になってしまっています。

rpmbuildしている環境が悪いのか、
specファイルのどこか別の箇所が悪さをしているのかはわかりませんが
どうやらこのあたりが問題のような気がします。
(なお、specファイルの記述に大きく変化があったのは
 RHEL7対応前後であり、rpmコマンドによる依存関係の情報が変化したタイミングと一致します)

公式のフォーラムにて報告することも考慮しましたが、
ここ数年のspecファイルの更新者がKodai Terashimaさんとのことでしたので、
JPコミュニティのほうがレスポンスあるのではと思い、こちらにて報告させて頂きました。

皆様からご意見を頂けると幸いです。
以上、よろしくお願いします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー KAZ の写真

hi_sraさん

Kodai Terashimaさんですが、
この頃はこちらには余り降臨しないとおもいますので、
伝えておきます。A(^^;

ユーザー TNK の写真

el5用のzabbix-2.2.8-1以降のパッケージが、phpに対する依存関係
としてphp53ではなくphp > 5.3となっている状況を確認しました。

試しに、zabbix-2.2.6-1.el5.src.rpmをローカルのCentOS 5.11で
リビルドしてみたところ、同様の状態になってしまいました。

そうすると、

%if 0%{?rhel} == 5

の条件の処理に問題が発生してしまっていると思われます。
ちなみに、

%if 0%{?rhel} < 6

にすると、その条件分岐には流れるようです。

RHEL 5上でも恐らく同じ状況になると思われます。

公開されているバイナリのrpmのバージョン2.2.6-1時点では、正し
く依存関係を指定できているので、それ以降のrpmbuildなどrpm生
成で利用している何らかの変更によって本来設定したかった依存関
係を設定できていないと思われます。

具体的に何が問題であるのかは、もう少し調べてみます。

ユーザー hi_sra の写真

>KAZさん
ありがとうございます。
もし何か動きがあるようでしたら続報頂けると幸いです。

>TNKさん
ご確認ありがとうございました。
公式側のビルド環境で条件分岐の記述式の解釈が変わってしまったから、という可能性が高そうですね。

ちなみにrpm-buildのバージョン依存を考慮して、
手元の古いCentOS(5.5)でもzabbix-2.2.6-1.el5.src.rpmからビルドしてみたのですが、
同様の現象が発生してしまいました。
(使用したrpm-buildのバージョンは4.4.2.3-18.el5)

ご参考まで。

ユーザー TNK の写真

先にご紹介頂いた本家フォーラムにも書いておきましたが、いくつ
かのパッケージを確認してみると、最近のパッケージは依存関係が
正しくない状態のようです。

OK zabbix-web-2.4.0-2.el5.x86_64.rpm 06-Oct-2014 22:58
OK zabbix-web-2.4.1-1.el5.x86_64.rpm 11-Oct-2014 12:11
OK zabbix-web-2.4.2-1.el5.x86_64.rpm 10-Nov-2014 08:52
NG zabbix-web-2.4.3-1.el5.x86_64.rpm 17-Dec-2014 19:52
NG zabbix-web-2.4.4-1.el5.x86_64.rpm 25-Feb-2015 09:50
NG zabbix-web-2.4.5-1.el5.x86_64.rpm 23-Apr-2015 14:08

OK zabbix-web-2.2.6-1.el5.x86_64.rpm 28-Aug-2014 09:24
OK zabbix-web-2.2.7-1.el5.x86_64.rpm 26-Oct-2014 21:47
NG zabbix-web-2.2.8-1.el5.x86_64.rpm 17-Dec-2014 20:18
NG zabbix-web-2.2.9-1.el5.x86_64.rpm 15-Mar-2015 12:29

NGのパッケージを利用するには、依存関係を無視しないとインスト
ールできません。

私も、CentOS 5.8、5.9、5.10で極力インストールメディア上のパ
ッケージを利用した環境を構築し、リビルドして確認してみました
が、依存関係を正しく設定できていないようです。
ですので、あのspecファイルの記述方法では、さらに古い環境でビ
ルドしなければならなさそうです。

ちなみに、CentOS 6やCentOS 7では、「0%{?rhel}」でそれぞれの
バージョン番号を取得して一致しているかどうかの条件分岐が正常
に機能します。

対策として、redhat-rpm-configというパッケージがインストール
されていると、

 $ /usr/lib/rpm/redhat/dist.sh --distnum

と実行することでバージョン番号を取得でき、この値との比較であ
れば、CentOS 5の新しいバージョンでも(恐らくRHEL 5も)、バージ
ョンが一致した場合の条件分岐ができそうです。

この対策案に関しては、寺島さんに連携済みです。