PHP7.4のサポート終了から1年以上も放置状態だったので、PHP8.3にアップデートしました。
基本的には、前回PHP7.4にアップデートした際の記事「PHPアップデート」と同様です。
◆バージョン確認
・OSのバージョン
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
・PHPのバージョン
# php -v
PHP 7.4.33 (cli) (built: Apr 10 2024 09:34:29) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
・インストール済みのPHPパッケージ
# yum list installed | grep php
gd3php.x86_64 2.3.3-7.el7.remi @remi-safe
oniguruma5php.x86_64 6.9.9-1.el7.remi @remi-safe
php.x86_64 7.4.33-14.el7.remi @remi-php74
php-cli.x86_64 7.4.33-14.el7.remi @remi-php74
php-common.x86_64 7.4.33-14.el7.remi @remi-php74
php-gd.x86_64 7.4.33-14.el7.remi @remi-php74
php-json.x86_64 7.4.33-14.el7.remi @remi-php74
php-mbstring.x86_64 7.4.33-14.el7.remi @remi-php74
php-mysqlnd.x86_64 7.4.33-14.el7.remi @remi-php74
php-pdo.x86_64 7.4.33-14.el7.remi @remi-php74
php-pecl-mcrypt.x86_64 1.0.7-1.el7.remi.7.4 @remi-php74
php-sodium.x86_64 7.4.33-14.el7.remi @remi-php74
◆バックアップ
必要により、不具合発生時に備えてバックアップします。
・PHPの設定ファイル等
# mkdir /root/php_backup
# cd /etc
# tar zcvf /root/php_backup/php_bk.tar.gz php*
1行目:任意のディレクトリにバックアップ用のディレクトリを作成
2行目:PHPの設定ファイルがあるディレクトリへ移動
3行目:必要なPHP関連ファイル等(今回は「php*」ですべて)をアーカイブ圧縮ファイルにする
・PHPモジュールリスト
# php -m > /root/php_backup/php74m.txt
# cat /root/php_backup/php74m.txt
[PHP Modules]
bz2
calendar
Core
〜 中略 〜
session
SimpleXML
sockets
sodium
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
xsl
zlib
[Zend Modules]
1行目:「php -m」コマンドでモジュールリストを出力し、バックアップディレクトリに「php74m.txt」というファイル名に書き出し
2行目:ファイルの確認
アップデート後にリストを比較するために利用します。
・WordPress
WordPressのデータについてもバックアップしました。
バックアップ用にプラグイン「All-in-One WP Migration and Backup」を利用しました。
◆リポジトリの追加・確認
PHPのアップデートには、「EPEL」および「REMI」リポジトリが必要です。
追加されているか確認し、なければ追加します。
私の場合、既に追加済みでしたので下記のとおり確認できました。
・EPELの確認
# rpm -qa | grep epel
epel-release-7-14.noarch
・REMIの確認
# rpm -qa | grep remi-release
remi-release-7.9-6.el7.remi.noarch
・yumによるリポジトリの確認
# yum repolist
読み込んだプラグイン:langpacks, versionlock
リポジトリー ID リポジトリー名 状態
base/7/x86_64 CentOS-7 - Base 10,072
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 13,798
extras/7/x86_64 CentOS-7 - Extras 526
mariadb-main MariaDB Server 130
mariadb-maxscale MariaDB MaxScale 1
mariadb-tools MariaDB Tools 17
remi-php74 Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - x86_64 469
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 5,596
updates/7/x86_64 CentOS-7 - Updates 5,802
vz-base vz-base 1
vz-updates vz-updates 4
repolist: 36,416
有効なリポジトリ(「enable=1」の状態)一覧
# yum repolist all
読み込んだプラグイン:langpacks, versionlock
リポジトリー ID リポジトリー名 状態
C7.0.1406-base/x86_64 CentOS-7.0.1406 - Base 無効
C7.0.1406-centosplus/x86_64 CentOS-7.0.1406 - CentOSPlus 無効
C7.0.1406-extras/x86_64 CentOS-7.0.1406 - Extras 無効
C7.0.1406-fasttrack/x86_64 CentOS-7.0.1406 - Fasttrack 無効
C7.0.1406-updates/x86_64 CentOS-7.0.1406 - Updates 無効
〜 中略 〜
base/7/x86_64 CentOS-7 - Base 有効: 10,072
base-debuginfo/x86_64 CentOS-7 - Debuginfo 無効
base-source/7 CentOS-7 - Base Sources 無効
c7-media CentOS-7 - Media 無効
centos-kernel/7/x86_64 CentOS LTS Kernels for x86_64 無効
centos-kernel-experimental/7/x86_64 CentOS Experimental Kernels for x86_64 無効
centosplus/7/x86_64 CentOS-7 - Plus 無効
centosplus-source/7 CentOS-7 - Plus Sources 無効
cr/7/x86_64 CentOS-7 - cr 無効
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 有効: 13,798
epel-debuginfo/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 - Debug 無効
epel-source/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 - Source 無効
epel-testing/x86_64 Extra Packages for Enterprise Linux 7 - Testing - x86_64 無効
epel-testing-debuginfo/x86_64 Extra Packages for Enterprise Linux 7 - Testing - x86_64 - Debug 無効
epel-testing-source/x86_64 Extra Packages for Enterprise Linux 7 - Testing - x86_64 - Source 無効
〜 中略 〜
remi-php74 Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - x86_64 有効: 469
remi-php74-debuginfo/x86_64 Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php74-test Remi's PHP 7.4 test RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php74-test-debuginfo/x86_64 Remi's PHP 7.4 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php80 Remi's PHP 8.0 RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php80-debuginfo/x86_64 Remi's PHP 8.0 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php80-test Remi's PHP 8.0 test RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php80-test-debuginfo/x86_64 Remi's PHP 8.0 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php81 Remi's PHP 8.1 RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php81-debuginfo/x86_64 Remi's PHP 8.1 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php81-test Remi's PHP 8.1 test RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php81-test-debuginfo/x86_64 Remi's PHP 8.1 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php82 Remi's PHP 8.2 RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php82-debuginfo/x86_64 Remi's PHP 8.2 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php82-test Remi's PHP 8.2 test RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php82-test-debuginfo/x86_64 Remi's PHP 8.2 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php83 Remi's PHP 8.3 RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php83-debuginfo/x86_64 Remi's PHP 8.3 RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-php83-test Remi's PHP 8.3 test RPM repository for Enterprise Linux 7 - x86_64 無効
remi-php83-test-debuginfo/x86_64 Remi's PHP 8.3 test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-safe Safe Remi's RPM repository for Enterprise Linux 7 - x86_64 有効: 5,596
remi-safe-debuginfo/x86_64 Remi's RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
remi-test Remi's test RPM repository for Enterprise Linux 7 - x86_64 無効
remi-test-debuginfo/x86_64 Remi's test RPM repository for Enterprise Linux 7 - x86_64 - debuginfo 無効
updates/7/x86_64 CentOS-7 - Updates 有効: 5,802
updates-source/7 CentOS-7 - Updates Sources 無効
vz-base vz-base 有効: 1
vz-updates vz-updates 有効: 4
repolist: 36,416
「all」オプションを付けることで、登録されているリポジトリすべてを表示
・リポジトリの追加
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# wget https://rpms.remirepo.net/enterprise/remi-release-7.rpm
# rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
それぞれリポジトリを追加インストールする場合
◆PHPのアップデート
REMIリポジトリのブログによると、必要なPHPのバージョンにより管理者が有効化する必要があります。
前回使用したリポジトリ「remi-php74」を無効化し、今回PHPのバージョンを最新の8.3にアップデートするため「remi-php83」リポジトリを有効化します。
・「remi-php74」リポジトリの無効化
# yum-config-manager --disable remi-php74
1行目:「remi-php74」リポジトリを無効化する
「yum-config-manager」が利用できない場合は、REMIリポジトリのブログにあるように「yum-utils」をインストールする必要があります。
・「remi-php83」リポジトリの有効化
# yum-config-manager --enable remi-php83
1行目:永続的に「remi-php83」リポジトリを有効化する
・アップデート
# yum update
〜 中略 〜
完了しました!
1行目:アップデートの実行
◆確認
・PHPのバージョン
# php -v
PHP Warning: PHP Startup: Unable to load dynamic library 'dom' (tried: /usr/lib64/php/modules/dom (/usr/lib64/php/modules/dom: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/dom.so (/usr/lib64/php/modules/dom.so: undefined symbol: zend_wrong_parameters_none_exception)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'simplexml' (tried: /usr/lib64/php/modules/simplexml (/usr/lib64/php/modules/simplexml: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/simplexml.so (/usr/lib64/php/modules/simplexml.so: undefined symbol: zend_class_unserialize_deny)) in Unknown on line 0
PHP Warning: PHP Startup: xml: Unable to initialize module
Module compiled with module API=20190902
PHP compiled with module API=20230831
These options need to match
in Unknown on line 0
PHP Warning: PHP Startup: xmlwriter: Unable to initialize module
Module compiled with module API=20190902
PHP compiled with module API=20230831
These options need to match
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'xsl' (tried: /usr/lib64/php/modules/xsl (/usr/lib64/php/modules/xsl: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/xsl.so (/usr/lib64/php/modules/xsl.so: undefined symbol: dom_node_class_entry)) in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'xmlreader' (tried: /usr/lib64/php/modules/xmlreader (/usr/lib64/php/modules/xmlreader: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/xmlreader.so (/usr/lib64/php/modules/xmlreader.so: undefined symbol: dom_node_class_entry)) in Unknown on line 0
PHP 8.3.6 (cli) (built: Apr 10 2024 14:21:20) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
1行目:バージョンを確認
2〜15行目:警告の表示
16行目:バージョン「PHP8.3.6」を確認
・PHPパッケージの追加
警告を基に色々調べると、いくつかインストールしていないパッケージがあったので追加します。
# yum install php-xml php-devel
・PHPのバージョン再確認
# php -v
PHP 8.3.6 (cli) (built: Apr 10 2024 14:21:20) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.6, Copyright (c) Zend Technologies
警告の表示が出なくなりました。
・PHPパッケージ
# rpm -qa | grep php
oniguruma5php-6.9.9-1.el7.remi.x86_64
php-common-8.3.6-1.el7.remi.x86_64
php-8.3.6-1.el7.remi.x86_64
php-pecl-mcrypt-1.0.7-1.el7.remi.8.3.x86_64
php-devel-8.3.6-1.el7.remi.x86_64
gd3php-2.3.3-7.el7.remi.x86_64
php-cli-8.3.6-1.el7.remi.x86_64
php-sodium-8.3.6-1.el7.remi.x86_64
php-mysqlnd-8.3.6-1.el7.remi.x86_64
php-gd-8.3.6-1.el7.remi.x86_64
php-pdo-8.3.6-1.el7.remi.x86_64
php-mbstring-8.3.6-1.el7.remi.x86_64
php-xml-8.3.6-1.el7.remi.x86_64
1行目:最初とは違う方法で確認
・PHP設定ファイルの確認
インストールしたバージョンの設定ファイルは、「php.ini.rpmnew」として作成されるので「diff」コマンドで違いを確認することができます。
必要な修正等をして「php.ini」にリネームします。
# diff /etc/php.ini /etc/php.ini.rpmnew
1行目:「diff」コマンドでファイルを比較
・PHPモジュール
# php -m > /root/php_backup/php83m.txt
1行目:最初と同様にモジュールリストを別名でファイルに書き出す
# diff /root/php_backup/php74m.txt /root/php_backup/php83m.txt
29a30
> random
1行目:「diff」コマンドでファイルの内容を比較し、「random」が追加されているのを確認
詳細は、「PHPマニュアル」を参照
・httpdサービス
# systemctl reload httpd.service
1行目:「httpd」サービスをリロード
最後にブラウザで当ブログ等を確認してみました。
ブログについては、問題なく表示されています。
が、「Nagios」のグラフ表示でエラーが表示されました。
◆エラー内容
Fatal error: Uncaught Error: Undefined constant "MB_OVERLOAD_STRING" in /usr/local/pnp4nagios/lib/kohana/system/core/utf8.php:52 Stack trace: #0 /usr/local/pnp4nagios/lib/kohana/system/core/Bootstrap.php(32): require() #1 /usr/local/pnp4nagios/share/index.php(145): require('/usr/local/pnp4...') #2 {main} thrown in /usr/local/pnp4nagios/lib/kohana/system/core/utf8.php on line 52
マルチバイト文字列を扱う関数で定義された定数(MB_OVERLOAD_STRING)で致命的なエラーが発生しているようです。
「PHPマニュアル」では、PHP8.0で削除されたとありました。
グラフ表示するために「PNP4Nagios」を利用していましたが、更新もされていないようでそろそろ違う方法を検討する時かもしれません。
グラフでの表示はできませんが、Nagiosでの監視には影響はないので放置することとしました。
CentOS7のサポート期限も間もなくなので、そろそろ本格的にサーバ移行も考えなければ…