Zabbix 3.4が本当にphp-mysqlに依存していない事を確認してみた

CentOS上においてはphp-mysqlに依存してしまうzabbix-web-mysqlですが、実際の所は利用していないので何らかの方法で無視をする(※1)事で導入が出来ます。ただ、本当に依存していないのだろうか、という事を念のため確認してみました。

Zabbix WebフロントエンドはPHPで書かれているOSS(※2)なので、既に導入済みの環境であれば適当なエディタで開いて中身を確認する事が出来ます。公式サイトからソースをDLする事も出来ます。

まずはどこでDB関連の判断をしているのか。ファイル名の雰囲気から以下で設定ファイルを読み込んでいるものと思わます。

/usr/share/zabbix/include/classes/core/CConfigFile.php

         if (!isset($DB['TYPE'])) {
             self::exception('DB type is not set.');
         }

         if (!array_key_exists($DB['TYPE'], self::$supported_db_types)) {
             self::exception(
                 'Incorrect value "'.$DB['TYPE'].'" for DB type. Possible values '.
                 implode(', ', array_keys(self::$supported_db_types)).'.'
             );
         }

         $php_supported_db = array_keys(CFrontendSetup::getSupportedDatabases());

         if (!in_array($DB['TYPE'], $php_supported_db)) {
             self::exception('DB type "'.$DB['TYPE'].'" is not supported by current setup.'.
                 ($php_supported_db ? ' Possible values '.implode(', ', $php_supported_db).'.' : '')
             );
         }

設定ファイルで定義したDBのTYPEがCFrontendSetup::getSupportedDatabases()に含まれているかをチェックしていますね。ではそのCFrontendSetup::getSupportedDatabases()を確認します。

/usr/share/zabbix/include/classes/setup/CFrontendSetup.php

     /**
      * Get list of supported databases.
      *
      * @return array
      */
     public static function getSupportedDatabases() {
         $allowed_db = [];

         if (zbx_is_callable(['mysqli_close', 'mysqli_connect', 'mysqli_connect_error', 'mysqli_error',
                 'mysqli_fetch_assoc', 'mysqli_free_result', 'mysqli_query', 'mysqli_real_escape_string'])) {
             $allowed_db[ZBX_DB_MYSQL] = 'MySQL';
         }

         if (zbx_is_callable(['pg_close', 'pg_connect', 'pg_escape_bytea', 'pg_escape_string', 'pg_fetch_assoc',
                 'pg_free_result', 'pg_last_error', 'pg_parameter_status', 'pg_query', 'pg_unescape_bytea'])) {
             $allowed_db[ZBX_DB_POSTGRESQL] = 'PostgreSQL';
         }

         if (zbx_is_callable(['oci_bind_by_name', 'oci_close', 'oci_commit', 'oci_connect', 'oci_error', 'oci_execute',
                 'oci_fetch_assoc', 'oci_field_type', 'oci_free_statement', 'oci_new_descriptor', 'oci_parse',
                 'oci_rollback'])) {
             $allowed_db[ZBX_DB_ORACLE] = 'Oracle';
         }

         if (zbx_is_callable(['db2_autocommit', 'db2_bind_param', 'db2_close', 'db2_commit', 'db2_conn_errormsg',
                 'db2_connect', 'db2_escape_string', 'db2_execute', 'db2_fetch_assoc', 'db2_free_result', 'db2_prepare',
                 'db2_rollback', 'db2_set_option', 'db2_stmt_errormsg'])) {
            $allowed_db[ZBX_DB_DB2] = 'IBM DB2';
         }

         return $allowed_db;
     }

/usr/share/zabbix/include/func.inc.php

function zbx_is_callable(array $names) {
	foreach ($names as $name) {
		if (!is_callable($name)) {
			return false;
		}
	}

	return true;
}

mysqli_*コマンドが存在するかで確認しています。この事からZabbix 3.4ではMySQL = mysqli_* の利用となっており、旧来のmysql_*は利用していない事が分かります。ちなみにPDOは利用してないようです。

以下はもっとシンプルに接続関数 mysqli_connect と mysql_connect をgrepで探してみた結果です。

# find /usr/share/zabbix/ -type f -print | xargs grep mysql_co
→結果無し

# find /usr/share/zabbix/ -type f -print | xargs grep mysqli_co
/usr/share/zabbix/include/classes/setup/CFrontendSetup.php:             if (zbx_is_callable(['mysqli_close', 'mysqli_connect', 'mysqli_connect_error', 'mysqli_error',
/usr/share/zabbix/include/db.inc.php:                           $DB['DB'] = @mysqli_connect($DB['SERVER'], $DB['USER'], $DB['PASSWORD'], $DB['DATABASE'], $DB['PORT']);
/usr/share/zabbix/include/db.inc.php:                                   $error = 'Error connecting to database: '.trim(mysqli_connect_error());

mysql_connectの呼び出しが物理的に存在しない事が分かります。心置きなくphp-mysqlを葬り去れますね。

※1: 既に運用中のCentOS 7.x上のZabbix(Webフロントエンド)のPHPを5系から7系に入れ替える

※2:

/*
** Zabbix
** Copyright (C) 2001-2018 Zabbix SIA
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation; either version 2 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program; if not, write to the Free Software
** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
**/

既に運用中のCentOS 7.x上のZabbix(Webフロントエンド)のPHPを5系から7系に入れ替える

インストール時に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を利用してインストールした状態にすることができます。

・もっとも実際には利用しないモジュールとはいえ、保守の終わったセキュリティフィックスも当たらない拡張を入れておくのも気持ちが悪いのでrpmコマンドで手動削除します。

rpm -e --nodeps php-pecl-mysql

・zabbix-web-mysqlはmysqlモジュール(で提供されるmysql_* 関数)を利用していないので消してしまっても動作上全く問題は有りません(※1)。この状態でzabbixのyum updateが出来るか、なのですが、まだ次の更新が来ていないので分かりません。ただ、以下のように考えられるので毎回rpmでインストールするよりは楽でしょう。

  • yum updaste 時に –skip-brokenを付ければ普通にyum update出来るかもしれない。
  • yum updateしたい時だけphp-pecl-mysqlを導入してアップデー後にまた消せばいい。
  • 気にせずphp-pecl-mysqlを入れっぱなしにしておく。

なお、php.ini や /etc/httpd/conf.d/zabbix.conf 等の設定については今回触れませんので適宜調整してください。

まぁ、「こんな方法ならzabbix-webは素直にrpm導入でいいのでは」、というのも全然有りだと思います。

※1: Zabbix 3.4が本当にphp-mysqlに依存していない事を確認してみた


THE IDOLM@STER MILLION LIVE! 5thLIVE BRAND NEW PERFORM@NCE!!! に行ってきた

2018年6月2日 (土)、3日(日)にさいたまスーパーアリーナで開催された「THE IDOLM@STER MILLION LIVE! 5thLIVE BRAND NEW PERFORM@NCE!!!」に参加してきました。2Daysのミリオンライブの5thライブとなり、1日目はライブビューイング(LV)、2日目はさいたまスーパーアリーナ現地(SSA)です。

LV会場は良くも悪くも比較的静かな所を選んでみたのですが、もともとそういう会場という事を考慮しても「初参加なのかな?」という方を結構見かけたのが印象的でした。アクティブユーザーが増えるとこういう所にもちゃんと効果が出てくるんですね。どんどん裾野が広がって欲しいです。

ここからはDay1で特に印象に残った部分についてさっくりと。

「AIKANE?」
小笠原早紀さんの茜ちゃんをやる事の上手さ、これまでもそうでしたがやっぱり凄いなぁと。これが(Vo/Da/Viでいう)Viの力なんだろうなと思う。茜ちゃん自身はDaだけど。

「ローリング△さんかく」
良さ。

「あめにうたおう♪」
虹になれ 夢をかなえよう

「ART NEEDS HEART BEATS」
この曲はもちろんの事、他の曲に登場している時も中村温姫さんの「ロコとしての色と魅力を出しつつ加わる」感じ、ロコとロコPって幸せなんだろうなぁと感じました。

「教えてlast note…」
この曲の低音部好きなんですよね。

「花ざかりWeekend✿」
ほんと良く出来た曲だなと思います。華やかな展開、ちょっと昔感の有るメロディ。良い。

「Take! 3. 2. 1. → S・P・A・C・E↑↑」
Arisa! Ready go!! Idol Space Adventure!!!=ARISA。仕上がってますね。村川梨衣さんはアーティストデビューもあってかどんどん歌が上手くなっていますね。「ZETTAI×BREAK!! トゥインクルリズム」でも存在感を発揮していました。安定感を感じます。

「Oli Oli DISCO」
戸田めぐみさんの声が本当によく通って気持ちのいい曲。歌が上手い人ばかりだなほんと。

「空に手が触れる場所」
北上麗花の持つ空気感と風を平山笑美さんの歌唱をもってして披露される。それがただただ良い。

「Silent Joker」「CAT CROSSING」「To…」
ノリノリでエネルギーを感じる阿部里果さんのSilent Joker、スピード感のあるカッコよさだけでなくしっとりした心情も感じさせる雨宮天さんのCAT CROSSING。どちらもCD音源とはまた違った雰囲気が感じられます。雨宮天さんの歌唱は毎回感じられる感情が異なっていて、毎回違った魅力が有ります。CD音源よりも強さだけではない部分が有るように感じられました。そして大型ライブでは初披露の「To…」は実はもうすでに聴いた事が有るのではないかという高橋未奈美さんの安定した実力を感じました。

「瑠璃色金魚と花菖蒲」
いやもう大歓声ですね。そうならざるを得ない。私個人としてはまだ白石紬とこの曲が上手く結びついていない所が有るのですが、その状態でも圧巻のパフォーマンス。南早紀さん本人もまだまだ上を目指しているようなので今後の進化と紬との同化に期待が持てます。

「ハミングバード」
もちろん上手いんですがそれ以上に香里有佐さんの表情がとても明るく豊かでゆとりをもって桜守歌織さんを演じている印象が強い一曲でした。鳥が羽ばたいていけるようなステージ感が有りました。

というわけでDay1でした。LVだと演者さんに比較的近い映像が多いので色々な表情が見えてきてそれによって感じさせられることも多いです。

ユニット曲ではいつもとはだいぶ違うメンバー構成になっていて、「聞いた事有るけど聴いた事無い曲だこれ」とい感じでした。ミリシタが自由にメンバーを構成できるので今まで参加していなかった方を!という事らしいです。

発表パートではミリシタのこれまでを振り返るようなムービーが良かったです。ところで以前から思っている事なんですがSTANDING ALIVEのロゴのALIVEだけ文字サイズが大きい所良くないですか?

ここからはDay2で特に印象に残った部分について。

現地で頂いた有志によるコール本は今までいただいてきたコール本の中でも一番のクオリティだったように思います。色分けや用語やこれまでのライブの解説など情報が幅広く、読み物として良く出来ていました。

ヨドバシさいたま新都心店の実質的なミリオンライブコラボコーナーもなかなかでしたね。DENONのUSB-DACはいつか欲しいです。AL32プロセッシング + DDFAの音を聴きたい……。

「FairyTaleじゃいられない」「虹色letters」
早いな!? 「虹色letters」はこういうと失礼かもしれないのですが、まだ少しぎこちない所も有る感じが凄く「虹色letters」の雰囲気に合っていてよかったです。アウトロのダンスが好き。

「Only One Second」
駒形友梨さんの歌い切っている感とそれと共にしっかりと存在する高山紗代子のオーラ。CDをこの音源で聴きたい。

「WE ARE ONE!!」
この完成度である。浜崎奈々さんの完成度、同じパートを繰り返しながら盛り上がっていく曲の構成、観客(=P)と一緒にする振り付けなども有り完成された盛り上がりを見せました。楽しい。

「Angelic Parade♪」
Day2のAngelic Parade♪はなんだか後半泣ける曲だったのですが私だけでしょうか。なんというか「良いなぁ」っていう心境でした。

「咲くは浮世の君花火」
あれ、予習し忘れた曲が有った?と思ったら新曲でした。打ち上げ花火のSEが好き。

「プリンセス・アラモード」
諏訪さんの諏訪さん感とまつり姫のまつり姫感と曲のプリンセス感、曲調が激しくてどうしてもたまにマイクに音が乗っていない所まで含めて滞りなくいつもの徳川まつりなのが良かった。そうそうこれっていう。良い徳川まつりでした。

「満腹至極フルコォス」「たんけんぼうけん☆ハイホー隊」「スポーツ!スポーツ!スポーツ!」
それぞれ良かったんだけどこの流れはもう一緒に語るしかないです。なにこれ。「満腹至極フルコォス」の全力で駆け抜けていく感じはまさに曲名通りフルコォス。稲川英里さんの完璧な大神環っぷりでハイホーハイホー進んでいく「たんけんぼうけん☆ハイホー隊」の一体感、「スポーツ!スポーツ!スポーツ!」の強いエネルギーと会場全体の熱がここまで有れば説得力を帯びるんだなという歌詞。上田麗奈さん本人と高坂海美はだいぶ雰囲気が違うお方ですが、それがステージ上ではここまで高坂海美になるんだからすごいですよね。甜面醤の読み方はてんめんじゃんです。

「Sister」
この流れで差し込んでいけるSisterです。

「ふわりずむ」
宮尾美也力(みやおみやちから)の強い一曲。美也の曲は曲単体で言えば「初恋バタフライ」が好きですが、分かりやすく美也を感じるのはふわりずむだなーと思います。ところで1曲目が「エフェクト」で2曲目が「バタフライ」でしたが、特にそういうSF的な要素が有る訳ではないんですね。

「昏き星、遠い月」
藤井ゆきよさんの熱演が光る。殺陣はやってくれると信じていました。「Moira」の「死せる英雄達の戦い -Ηρωμαχια-」を思い出させますね。良いですよー。

「ジレるハートに火をつけて」
ついに揃ったわけですが良い意味でそういう重さは感じられない純粋なジレハに感じられたのが印象的でした。

「ムーンゴールド」
「一緒に歩いたね こんなところまで」。野村香菜子さんの表情の乗せ方がとても上手い。もともと人によって色々感じさせる歌詞の曲でしたがそれをステージ上で表現する事によって出てくるエモさ割り増しキャンペーン実施中です。

「SING MY SONG」
疲れた体にSING MY SONGの投与は危険です。いや、ここまでやってくれるだろうという期待は元々持っていましたが、それが本当に出てくると凄いですね。広いステージの真ん中で歌う田所あずささんの静かながらもしっかりとした身振り手振りも印象に残っています。(歌唱もそうなんですが、この曲はCD音源の音質が正直あまりよくないので1番Bメロやサビで音がチリチリ言っていないクリアな声が聴ける事もそれはそれで別で感動が有ります)

トーク関連だと山口立花子さんによる莉緒の「プロデューサー『ちゃん』」が有ったの本当に良かった。私の隣にいた女性Pの方もかなり刺さっているようでした。あとは田村奈央さんのバラエティ力がだいぶ発揮されてきましたね。今後の活躍にも期待が持てます。

そして新キービジュアル

誰が居るのか一人も分からなくて草。周辺席の困惑がそれはそれでちょっと面白かったです。まぁこういう事も有るよね。仕方ないです。

そのせいなのかどうかのか音質面は会場がSSAの割にだいぶ良かったですね。音質面で気になった曲は私の席からだと1曲も有りませんでした。これが音響関係者の技術なんでしょうね。

Day1を見た時点では楽曲構成的にも全体的にまんべんなく良い感じからも、逆に大きな特徴は無い「普通に良いライブだな」という感想でしたが、これまでの積み上げがあってこそ大型ライブでは初お披露目ばかりの曲でもそれが出来る訳なんですよね。普通だけど普通って凄い。

今までものライブ同様では有ったんですが、「今まで積み上げてきた物を引き継いだうえでの新世代としての1stライブ」を目の当たりにするともう1~4thには戻れないんだなぁと思うし、あの場で「その先」である6thの発表が有って良かったと思います。楽しさと同時に4thまでが過去のライブになる寂しさみたいなものが有った。でもそれどころではない、6thが有るんだよっていう。

楽しい事だけではなかった色々な物を積み上げてここまで来て「普通に良いライブ」を新しい楽曲、新しいゲームコンテンツ、新しい参加者(P)で出来ました。もちろん今回だって課題は有るかもしれませんが6thがあります。新世代の1stライブを行った次がどうなるのだろうか。

ひとまずは演者様ダンサー様スタッフの皆様と参加者の皆様お疲れ様でした。

ーーーー

他にも個人的に思った事などいろいろ有るのですが、どうしても私自身の話になってしまうのでこの辺で。2ndの少し前の頃から緩く付き合い今もだいぶ緩くミリオンライブと付き合っていますが、その緩さでついていける所までは見届けたいなと思います。