※2018/06/28 内容ブラッシュアップ
インストール時にCentOS 7.x系でPHP 7.xを使いつつZabbixを導入する方法はちょくちょく見かけるのですが、既に運用中で入れ替えて見る物は見かけなかったので残しておきます。PHP 5.6のサポート終了も年内となり、おそらくZabbix Webフロントエンドの動きもより快適になるであろう7.xに入れ替えていきましょう。
前提
- CentOS Linux release 7.5
- Zabbix 3.4.10
- remiレポジトリから導入したPHP 5.6 → 同7.1
- DBにはMySQLを利用
作業
・remiレポジトリの設定 /etc/yum.repos.d/remi.conf
のPHP 5.6のenable設定を0に変更し、代わりに7.1を有効にします。
・このまま yum update php php-common
を投げるとアップデート出来そうですが、実際には依存関係の絡みで失敗します。これはZabbix Webフロントエンドがphp-mysql
なるパッケージに依存している(事になっている)からなのですが、PHP 7.xにはもうそのようなパッケージはもう存在しません。本来php-mysqlnd
さえ存在していれば普通に動作します。
・--skip-broken
オプションで回避できそうなメッセージも表示されますがそれを試しても結果はそう変わりません。yumでの導入を諦めてZabbixのパッケージをrpmで直接インストールするなどが可能なのですが、裏技的に以下のような対応で回避できます。
・ yum update php php-common --exclude=php-mysql
・上記コマンドを実行するとphp-mysql
導入をスルーし、代わりにremiレポジトリ内にあるpecl拡張となったphp-pecl-mysql
がインストールされます。これはメンテナンスの終わったphp-mysqlモジュールをpecl拡張としたものですが、これでお茶を濁す事でphp 7.xもzabbix-webもyumを利用してインストールした状態にすることができます。
・もっとも実際には利用しないモジュールとはいえ、保守の終わったセキュリティフィックスも当たらない拡張を入れておくのも気持ちが悪いので設定で無効化しておきます。
・/etc/php.d/50-mysql.ini
内でエクステンションを読み込んでいる部分をコメントアウトする事でphp-pecl-mysql拡張は読み込まれなくなります。これでyumでの導入状態を壊すことなく不要なエクステンションを無効化出来ます。
・zabbix-web-mysqlはmysqlモジュール(で提供されるmysql_* 関数)を利用していないので無効化してしまっても動作上全く問題は有りません(※1)。
なお、php.ini や /etc/httpd/conf.d/zabbix.conf 等の設定については今回触れませんので適宜調整してください。