はじめに
- 運用中のリバースプロキシ/Redmine/ZabbixらのPackageをアップデートかけた際につまづいたエラーと気がつくまでの過程をまとめる.
復旧までの過程
1.アップデート後からZabbixサイトのみにアクセスができず
- ブラウザからアクセスした際に表示されたエラーは以下の通り.
- POSTGRESQLは利用していないためあれ?となる.
- lsof -i :443などでlistenしていることを確認.
- 設定ファイルが認識されているかを確認.
DB type "MYSQL" is not supported by current setup. Possible values POSTGRESQL.
スクリーンショットし忘れた...orz
2.Nginx,Httpd,Zabbixの各ログの調査開始、関係していそうなログ発見(エラー文参照)
- 確認した箇所は/var/log配下やsystemctl
- Warningステータスのため、後回しにしたけどErrorがなかったので最終的にここに戻りました.
# systemctl restart rh-php72-php-fpm.service
# systemctl status rh-php72-php-fpm.service -l
● rh-php72-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-11-26 22:27:59 JST; 8s ago
Main PID: 2441 (php-fpm)
Status: "Ready to handle connections"
CGroup: /system.slice/rh-php72-php-fpm.service
├─2441 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf)
├─2446 php-fpm: pool www
├─2447 php-fpm: pool www
├─2448 php-fpm: pool www
├─2449 php-fpm: pool www
├─2450 php-fpm: pool www
├─2451 php-fpm: pool zabbix
├─2452 php-fpm: pool zabbix
├─2453 php-fpm: pool zabbix
├─2454 php-fpm: pool zabbix
└─2455 php-fpm: pool zabbix
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'zip' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/zip (/opt/rh/rh-php72/root/usr/lib64/php/modules/zip: cannot open shared object file: No such file or directory), /opt/rh/rh-php72/root/usr/lib64/php/modules/zip.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/zip.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/mysqli (/opt/rh/rh-php72/root/usr/lib64/php/modules/mysqli: cannot open shared object file: No such file or directory), /opt/rh/rh-php72/root/usr/lib64/php/modules/mysqli.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/mysqli.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_mysql' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_mysql (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_mysql: cannot open shared object file: No such file or directory), /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_mysql.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_mysql.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_odbc' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_odbc (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_odbc: undefined symbol: pdo_parse_params), /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_odbc.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_odbc.so: undefined symbol: pdo_parse_params)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_pgsql (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_pgsql: undefined symbol: pdo_parse_params), /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_pgsql.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_pgsql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_sqlite' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_sqlite (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_sqlite: cannot open shared object file: No such file or directory), /opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_sqlite.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/pdo_sqlite.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'wddx' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/wddx (/opt/rh/rh-php72/root/usr/lib64/php/modules/wddx: cannot open shared object file: No such file or directory), /opt/rh/rh-php72/root/usr/lib64/php/modules/wddx.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/wddx.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'xmlreader' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/xmlreader (/opt/rh/rh-php72/root/usr/lib64/php/modules/xmlreader: cannot open shared object file: No such file or directory), /opt/rh/rh-php72/root/usr/lib64/php/modules/xmlreader.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/xmlreader.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
Nov 26 22:27:59 [hostname] php-fpm[2441]: [26-Nov-2020 22:27:59] NOTICE: PHP message: PHP Warning: PHP Startup: Unable to load dynamic library 'xmlrpc' (tried: /opt/rh/rh-php72/root/usr/lib64/php/modules/xmlrpc (/opt/rh/rh-php72/root/usr/lib64/php/modules/xmlrpc: undefined symbol: php_XML_GetErrorCode), /opt/rh/rh-php72/root/usr/lib64/php/modules/xmlrpc.so (/opt/rh/rh-php72/root/usr/lib64/php/modules/xmlrpc.so: undefined symbol: php_XML_GetErrorCode)) in Unknown on line 0
Nov 26 22:27:59 [hostname] systemd[1]: Started The PHP FastCGI Process Manager.
3.Zabbixの公式サイトにある手順の再チェック.
- パッケージのインストール漏れなどないか確認.
- あまり使ったことのないコマンドの確認.
4.SCLの概要を公式サイトやググってみる.
- 公式サイトより一部抜粋.
- 置き換わらないんだねということを把握.
Red Hat Software Collections では、Red Hat Enterprise Linux 6 または Red Hat Enterprise Linux 7 で提供されるデフォルトのシステムツールは置き換えられません。
その代わりに、並列のツールセットが /opt/ ディレクトリーにインストールされ、提供された scl ユーティリティーを使用してユーザーがアプリケーションごとにオプションで有効にできます。
たとえば、Perl または PostgreSQL のデフォルトのバージョンは、ベース Red Hat Enterprise Linux システムが提供するバージョンのままになります。
5.phpコマンドが効かないことに気が付く.
- phpの古いVerの削除は確認済み.
- php72をインスコし以下のコマンドで再確認.
- zabbixの構築手順の過程でrh-php72-php-fpmがインスコされます.
# rpm -qa |grep php72
rh-php72-php-cli-7.2.24-1.el7.x86_64
rh-php72-runtime-1-2.el7.x86_64
rh-php72-php-gd-7.2.24-1.el7.x86_64
rh-php72-php-mbstring-7.2.24-1.el7.x86_64
rh-php72-php-ldap-7.2.24-1.el7.x86_64
rh-php72-php-common-7.2.24-1.el7.x86_64
rh-php72-php-mysqlnd-7.2.24-1.el7.x86_64
rh-php72-php-zip-7.2.24-1.el7.x86_64
rh-php72-php-pdo-7.2.24-1.el7.x86_64
rh-php72-php-xml-7.2.24-1.el7.x86_64
rh-php72-php-pear-1.10.5-1.el7.noarch
rh-php72-php-json-7.2.24-1.el7.x86_64
rh-php72-php-process-7.2.24-1.el7.x86_64
rh-php72-php-bcmath-7.2.24-1.el7.x86_64
rh-php72-php-fpm-7.2.24-1.el7.x86_64
rh-php72-1-2.el7.x86_64
ここでphp72モジュールはあるが、VPS側で認識していないことを把握.
6.scl enable rh-php72 bashが実行できず.
- 認識させるためにコマンドを実行するがエラーが発生.
# scl enable rh-php72 bash
warning: /opt/rh/rh-php72//enable scriptlet does not exist!
7.rh-php73をインストールしてrh-php72とディレクトリ構造を比較.
- 両方のディレクトリを比較した際に★マークのものがrh-php72になかった.
# yum install rh-php73-php-fpm -y
# ls -la /opt/rh/rh-php72/
total 36
dr-xr-xr-x 6 root root 4096 Nov 26 23:44 .
drwxr-xr-x 5 root root 4096 Nov 26 23:44 ..
drwxr-xr-x 2 root root 4096 Nov 26 23:44 deregister.d
drwxr-xr-x 5 root root 4096 Nov 26 23:44 register.content
drwxr-xr-x 2 root root 4096 Nov 26 23:44 register.d
dr-xr-xr-x 16 root root 4096 Nov 26 23:44 root
# ls -la /opt/rh/rh-php73/
total 12
dr-xr-xr-x. 6 root root 128 Nov 27 17:40 .
drwxr-xr-x. 4 root root 38 Nov 27 17:40 ..
-rw-r--r--. 1 root root 70 Oct 23 2019 deregister ★
drwxr-xr-x. 2 root root 69 Nov 27 17:40 deregister.d
-rw-r--r--. 1 root root 246 Oct 23 2019 enable ★
-rw-r--r--. 1 root root 68 Oct 23 2019 register ★
drwxr-xr-x. 5 root root 39 Nov 27 17:40 register.content
drwxr-xr-x. 2 root root 46 Nov 27 17:40 register.d
dr-xr-xr-x. 16 root root 213 Nov 27 17:40 root
8.rh-php72の削除後、再インストールを実施.
- yumで削除後もディレクトリらが残っていたため、rmコマンドでまるごと削除.
# yum remove rh-php72-php-fpm -y
# ls -la rh-php72/ <--ディレクトリの存在を確認
# rm -fr /opt/rh/rh-php72/ <--もしディレクトリが存在していたら
# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl <--*1
# ls -la rh-php72/
total 12
dr-xr-xr-x. 6 root root 128 Nov 27 17:52 .
drwxr-xr-x. 5 root root 53 Nov 27 17:52 ..
-rw-r--r--. 1 root root 70 Jul 26 2018 deregister
drwxr-xr-x. 2 root root 69 Nov 27 17:52 deregister.d
-rw-r--r--. 1 root root 246 Jul 26 2018 enable
-rw-r--r--. 1 root root 68 Jul 26 2018 register
drwxr-xr-x. 5 root root 39 Nov 27 17:52 register.content
drwxr-xr-x. 2 root root 46 Nov 27 17:52 register.d
dr-xr-xr-x. 16 root root 213 Nov 27 17:52 root
yum install rh-php72-php-fpm -yの場合関連パッケージがインストールされないことも考慮して上記*1のコマンドで実行した.
9.scl enable rh-php72 bash/systemctl restart rh-php72-php-fpm.service/systemctl status rh-php72-php-fpm.serviceを実行しエラーが出ていないことを確認.
# scl enable rh-php72 bash
#
# systemctl restart rh-php72-php-fpm.service
#
# systemctl status rh-php72-php-fpm.service -l
● rh-php72-php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2020-11-27 18:10:59 JST; 21s ago
Main PID: 14257 (php-fpm)
Status: "Processes active: 0, idle: 10, Requests: 0, slow: 0, Traffic: 0req/sec"
CGroup: /system.slice/rh-php72-php-fpm.service
├─14257 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf)
├─14258 php-fpm: pool www
├─14259 php-fpm: pool www
├─14260 php-fpm: pool www
├─14261 php-fpm: pool www
├─14262 php-fpm: pool www
├─14263 php-fpm: pool zabbix
├─14264 php-fpm: pool zabbix
├─14265 php-fpm: pool zabbix
├─14266 php-fpm: pool zabbix
└─14267 php-fpm: pool zabbix
Nov 27 18:10:59 [hostname] systemd[1]: Starting The PHP FastCGI Process Manager...
Nov 27 18:10:59 [hostname] systemd[1]: Started The PHP FastCGI Process Manager.
#
10.サイトへアクセスし無事にログインできたことを確認.
さいごに
- sclのドキュメントをしっかりと読み込んで行けばもっと早く気が付く事案かなと思いました.
- また再現性は取れなったのですが以下の2点は目視にて確認しておりますが、複数回remove/installを試してみたら2回目以降は問題なく削除/インストールしてくれました.
- yum remove rh-php72-*を実行したときに/opt/rh/rh-php72ディレクトリ自体の削除がされなかった.
- yum install rh-php72-*を実行したときに/opt/rh/rh-php72配下に「deregister/enable/register」がなかった.
- 余談:リソースの問題もあるためVPSのモジュールらは近くコンテナ化したなぁ(´ω`)