1. はじめに
CentOS Stream 8 に入っていた PHP のバージョンが 7.2 だったので、7.4 に上げました。
2. 現在の状況
OS
$ cat /etc/redhat-release
CentOS Stream release 8
PHP
$ sudo dnf list installed | grep -i php
php.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-cli.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-common.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-dbg.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-devel.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-fpm.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-gd.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-json.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-mbstring.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-mysqlnd.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-opcache.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-pdo.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @AppStream
php-pear.noarch 1:1.10.5-9.module_el8.2.0+313+b04d0a66 @appstream
php-pecl-zip.x86_64 1.15.3-1.module_el8.2.0+313+b04d0a66 @AppStream
php-process.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
php-xml.x86_64 7.2.24-1.module_el8.2.0+313+b04d0a66 @appstream
PHP(dnf module コマンドによる確認)
$ dnf module list php
CentOS Stream 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d][e] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 common [d], devel, minimal PHP scripting language
ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
[i]
がないので、module としてはどれもインストールされていないことが分かります。- 出力された中に Name, Stream, Profiles という列がありますが、モジュールをインストールするコマンドは、「
dnf module install {Name}:{Stream}/{Profile}
」となります。Stream と Profile は省略が可能で、その場合は[d]
(デフォルト)と表示されている項目が選択されます。
3. PHP を 7.4 に変更する作業
Webサーバーを止めておきます。
$ sudo systemctl stop httpd
$ sudo systemctl stop php-fpm
module として PHP 7.4 をインストールします。
※「…[snip]…
」は省略を表しています。
$ sudo dnf module install php:7.4/common
...[snip]...
オペレーションは、モジュール 'php' ストリーム '7.2' を ストリーム '7.4' へと切り替える結果となります
エラー: モジュールの有効なストリームを切り替えることはできません。
モジュールからインストールされた全てのコンテンツを削除し、 'dnf module reset <module_name>' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。
- エラーになりました。
エラーメッセージで指示された通り、dnf module reset php
を実行します。
$ sudo dnf module reset php
再度、PHP 7.4 のインストールします。
$ sudo dnf module install php:7.4/common
...[snip]...
======================================================================================================
パッケージ Arch バージョン リポジトリー サイズ
======================================================================================================
アップグレード:
php x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 1.5 M
php-cli x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 3.1 M
php-common x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 702 k
php-dbg x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 1.6 M
php-devel x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 728 k
php-fpm x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 1.6 M
php-gd x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 85 k
php-json x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 74 k
php-mbstring x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 484 k
php-mysqlnd x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 193 k
php-opcache x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 267 k
php-pdo x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 123 k
php-pecl-zip x86_64 1.18.2-1.module_el8.3.0+396+9a0d79d6 appstream 55 k
php-process x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 85 k
php-xml x86_64 7.4.19-1.module_el8.5.0+815+1c4fd2e5 appstream 174 k
依存関係のインストール:
cmake-filesystem x86_64 3.18.2-9.el8 appstream 44 k
keyutils-libs-devel x86_64 1.5.10-6.el8 baseos 48 k
krb5-devel x86_64 1.18.2-10.el8 baseos 559 k
libcom_err-devel x86_64 1.45.6-1.el8 baseos 38 k
libkadm5 x86_64 1.18.2-10.el8 baseos 186 k
libselinux-devel x86_64 2.9-5.el8 baseos 200 k
libsepol-devel x86_64 2.9-2.el8 baseos 86 k
libverto-devel x86_64 0.3.0-5.el8 baseos 18 k
libxml2-devel x86_64 2.9.7-11.el8 baseos 1.0 M
oniguruma x86_64 6.8.2-2.el8 appstream 187 k
openssl-devel x86_64 1:1.1.1k-1.el8 baseos 2.3 M
pcre2-devel x86_64 10.32-2.el8 baseos 605 k
pcre2-utf16 x86_64 10.32-2.el8 baseos 229 k
pcre2-utf32 x86_64 10.32-2.el8 baseos 220 k
xz-devel x86_64 5.2.4-3.el8 baseos 62 k
モジュールプロファイルのインストール中:
php/common
モジュールストリームの有効化中:
php 7.4
トランザクションの概要
======================================================================================================
インストール 15 パッケージ
アップグレード 15 パッケージ
ダウンロードサイズの合計: 17 M
これでよろしいですか? [y/N]: y
...[snip]...
アップグレード済み:
php-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-cli-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-common-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-dbg-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-devel-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-fpm-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-gd-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-json-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-mbstring-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-mysqlnd-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-opcache-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-pdo-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-pecl-zip-1.18.2-1.module_el8.3.0+396+9a0d79d6.x86_64
php-process-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
php-xml-7.4.19-1.module_el8.5.0+815+1c4fd2e5.x86_64
インストール済み:
cmake-filesystem-3.18.2-9.el8.x86_64 keyutils-libs-devel-1.5.10-6.el8.x86_64
krb5-devel-1.18.2-10.el8.x86_64 libcom_err-devel-1.45.6-1.el8.x86_64
libkadm5-1.18.2-10.el8.x86_64 libselinux-devel-2.9-5.el8.x86_64
libsepol-devel-2.9-2.el8.x86_64 libverto-devel-0.3.0-5.el8.x86_64
libxml2-devel-2.9.7-11.el8.x86_64 oniguruma-6.8.2-2.el8.x86_64
openssl-devel-1:1.1.1k-1.el8.x86_64 pcre2-devel-10.32-2.el8.x86_64
pcre2-utf16-10.32-2.el8.x86_64 pcre2-utf32-10.32-2.el8.x86_64
xz-devel-5.2.4-3.el8.x86_64
完了しました!
- インストールできたようです。
PHP のバージョンを確認します。
$ php -v
Failed loading /usr/lib64/php/modules/xdebug.so: /usr/lib64/php/modules/xdebug.so: undefined symbol: gc_globals
PHP 7.4.19 (cli) (built: May 4 2021 11:06:37) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.19, Copyright (c), by Zend Technologies
- バージョンが 7.4.19 になりました。
- しかし、xdebug のエラーが発生しているので、この後対応します。
php に関する module の状況を確認します。
$ dnf module list php
...[snip]...
CentOS Stream 8 - AppStream
Name Stream Profiles Summary
php 7.2 [d] common [d], devel, minimal PHP scripting language
php 7.3 common [d], devel, minimal PHP scripting language
php 7.4 [e] common [d] [i], devel, minimal PHP scripting language
ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled
- 7.4 の common に
[i]
が表示されているので、インストールできていることが分かります。
4. xdebugの更新
以前導入していた xdebug がそのまま残っているようですが、PHP 7.4 に対応していないので、xdebug も更新します。
メモ
- 以前の
/usr/lib64/php/modules/xdebug.so
が残ったままになっている。 - xdebug の設定ファイル
/etc/php.d/30-xdebug.ini
も残ったままになっている。
まず、php 7.4 の devel(PHP拡張のビルドに必要)という Profile をインストールします。
$ sudo dnf module install php:7.4/devel
...[snip]...
======================================================================================================
パッケージ Arch バージョン リポジトリー サイズ
======================================================================================================
アップグレード:
libzip x86_64 1.6.1-1.module_el8.3.0+396+9a0d79d6 appstream 64 k
php-pear noarch 1:1.10.12-1.module_el8.3.0+396+9a0d79d6 appstream 361 k
モジュールプロファイルのインストール中:
php/devel
トランザクションの概要
======================================================================================================
アップグレード 2 パッケージ
ダウンロードサイズの合計: 425 k
これでよろしいですか? [y/N]: y
...[snip]...
アップグレード済み:
libzip-1.6.1-1.module_el8.3.0+396+9a0d79d6.x86_64
php-pear-1:1.10.12-1.module_el8.3.0+396+9a0d79d6.noarch
完了しました!
pecl コマンドのバージョンを確認します。
$ sudo pear version
...[snip]...
PEAR Version: 1.10.12
PHP Version: 7.4.19
Zend Engine Version: 3.4.0
...[snip]...
xdebug を上書き(?)インストールします。
$ sudo pecl channel-update pecl.php.net
$ sudo pecl install xdebug
...[snip]...
running: make INSTALL_ROOT="/var/tmp/pear-build-rootXXXXXX/install-xdebug-3.0.4" install
Makefile:228: 警告: ターゲット 'test' のためのレシピを置き換えます
Makefile:132: 警告: ターゲット 'test' のための古いレシピは無視されます
Installing shared extensions: /var/tmp/pear-build-rootXXXXXX/install-xdebug-3.0.4/usr/lib64/php/modules/
+----------------------------------------------------------------------+
| |
| INSTALLATION INSTRUCTIONS |
| ========================= |
| |
| See https://xdebug.org/install.php#configure-php for instructions |
| on how to enable Xdebug for PHP. |
| |
| Documentation is available online as well: |
| - A list of all settings: https://xdebug.org/docs-settings.php |
| - A list of all functions: https://xdebug.org/docs-functions.php |
| - Profiling instructions: https://xdebug.org/docs-profiling2.php |
| - Remote debugging: https://xdebug.org/docs-debugger.php |
| |
| |
| NOTE: Please disregard the message |
| You should add "extension=xdebug.so" to php.ini |
| that is emitted by the PECL installer. This does not work for |
| Xdebug. |
| |
+----------------------------------------------------------------------+
...[snip]...
Build process completed successfully
Installing '/usr/lib64/php/modules/xdebug.so'
install ok: channel://pecl.php.net/xdebug-3.0.4
configuration option "php_ini" is not set to php.ini location
You should add "zend_extension=/usr/lib64/php/modules/xdebug.so" to php.ini
生成された xdebug.so ファイルのパーミッションを変更します。
$ sudo chmod a+x /usr/lib64/php/modules/xdebug.so
/etc/php.d/30-xdebug.ini
ファイルを編集する必要はなかった。
Webサーバーを起動します。
$ sudo systemctl start php-fpm
$ sudo systemctl stop httpd
以上です。
5. 参考
- RHEL 8/Fedora 28で導入されたModularity – 赤帽エンジニアブログ (2018-12-14)