Linux

CentOS Stream 8 の PHP 7.2 を 7.4 に変更する

投稿日:2021年6月8日 更新日:

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. 参考

📂-Linux

執筆者:labo


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Linux

systemctl コマンドの引数の順番は不便?

最近の Linux では、systemd というツールが導入されています。 systemd にはいろいろな役割があるのですが、その中でも大きいのが「各サービスの管理(操作)」です。 本記事は、この操作 …

CentOS

CentOS 8 で spacewalk を削除する

目次1. spacewalk に関する警告が表示される2. spacewalk を削除する3. 参考 1. spacewalk に関する警告が表示される 2020年のある日、CentOS 8 で dn …

CentOS

CentOS Stream release 8 で「Configuration: OptionBinding with id “failovermethod” does not exist」というエラーが表示される

CentOS Stream release 8 で「Configuration: OptionBinding with id “failovermethod” does not exist」というエラーが表示される場合の対応についてです。

CentOS

CentOS 8 標準の Apache と PHP の関係について

CentOS 8 における Apache と PHP の関係について説明します。

Linux

ドキュメントルートに chmod コマンドを実行する際、指定すると便利なモード引数

目次1. はじめに2. chmod に関する前提知識3. ディレクトリは rwxr-xr-x ファイルは rw-r–r– にする解説4. ディレクトリは rwxrwxr-x ファイルは rw-rw …