CentOS 7 で remi リポジトリを用いた PHP 7.2 から 7.4 へのアップデート

はじめに

先日「PHP + MariaDB で出る Malformed communication packet エラーをプログラムの変更で回避する方法」で PHP 7.2 + MariaDB 10.2.35 で障害が発生していることと、その暫定的な対処方法をご紹介しました。

そちらでもご紹介しましたが PHP 7.2 のサポート期限は 2020年11月30日 までなので、
これを機にバージョンアップを行おうと考え PHP 7.4 への入れ替えを行いました。

今日は僕が実際に行った作業を元に、CentOS 7remi リポジトリを使ってインストールしたPHP 7.2PHP 7.4 にアップデートする方法をご紹介します。

以下に掲載した手順は VirtualBox で構築した環境で検証したものです。

この記事では root ユーザーで作業してますが sodo で作業した方が安全だと思います。

目次
  1. 不慣れな方(不安な方)へ
  2. 既存 PHP の確認
  3. 導入済モジュール確認 & php.ini バックアップ
  4. データのバックアップ(省略可)
  5. PHP 7.4 にアップデート
  6. phpMyAdmin インストール
  7. ファイルの整理と削除
  8. おわりに

2. 既存 PHP の確認

インストール済の PHP について yum list installed コマンドで確認します。
ここで重要なのは remi でインストールされているかです。

remi を使っていない場合は、この記事で紹介する手順とは異なりますのでご注意ください。

一般的な調べ方は下記2つでしょうか。どちらで確認していただいても構いません。

# yum list installed php*
...
php.x86_64         7.2.34-1.el7.remi  @remi-php72
php-cli.x86_64     7.2.34-1.el7.remi  @remi-php72
php-common.x86_64  7.2.34-1.el7.remi  @remi-php72
...
# yum list installed | grep php
oniguruma5php.x86_64  6.9.6-1.el7.remi   @remi
php.x86_64            7.2.34-1.el7.remi  @remi-php72
php-cli.x86_64        7.2.34-1.el7.remi  @remi-php72
php-common.x86_64     7.2.34-1.el7.remi  @remi-php72
...

余談ですが oniguruma5php というのは正規表現用のライブラリみたいです。

3. 導入済モジュール確認 & php.ini バックアップ

PHP に組み込まれているモジュールは php コマンドの m オプションで確認できます。

# php -m
[PHP Modules]
bz2
calendar
Core
...

今回は PHP 7.4 へ更新した後に、7.2 と同じモジュールが組み込まれたか確認するために、この結果を下記のようにファイルに残しておきます。

今回は /root/backup に置いていますが、別な場所でも差支えありません。

# mkdir /root/backup
# cd /root/backup
# php -m > modules_php72.txt
# cat modules_php72.txt
[PHP Modules]
bz2
calendar
Core
...

また php.ini も後ほど比較したいため、バックアップを取っておきます。
php.ini は /etc の中にあります。

# cd /etc
# cp php.ini php-72.ini
# ls -l php*.ini
-rw-r--r--. 1 root root 63205 Nov 13 12:34 php-72.ini
-rw-r--r--. 1 root root 63205 Nov 13 01:23 php.ini

4. データのバックアップ(省略可)

今回の作業でファイルが消失する可能性は低いと思いますが、僕は念のためバックアップを取るようにしています。

例えば下記コマンドでは /var/www/html を圧縮して /root/backup に保存しています。
ファイル名の末尾につけた数字はタイムスタンプ(年月日-時分)です。

# cd /var/www
# tar czvf /root/backup/html_201113-1234.tar.gz html

バックアップを取るときにはファイル名にタイムスタンプを入れると、ファイルが増えた場合などに役立つと思います。 フォーマットを揃えるのがポイントです。

データベースのダンプには下記コマンドが便利です。

# mysqldump -u root -p sampledb | gzip > /root/backup/sampledb_201113-1234.sql.gz

5. PHP 7.4 にアップデート

アップデート作業は、最初に PHP 7.2 をアンインストールし、次に PHP 7.4 をインストーする流れで行います。

僕は PHP 7.2 をアンインストールする前に httpd を停止しましたが、稼働したままでも作業可能です。

試しに VirtualBox 環境で httpd を稼働したまま下記手順で作業を行い、PHP 7.4 をインストールして reload httpd をする直前で phpinfo() のページにアクセスしたところ、PHP 7.2 と表示されました。

削除後も Apache のリロードや再起動しなければ PHP で動くようですが、作業中は何が起こるか分からないので静的なメンテ画面を表示するのがいいのかなと思います。

PHP 7.2 のアンインストールは yum remove で行います。

# yum remove php*

削除を実行する前に、一覧の中に消してはいけないものがないかを確認してください。

例えば phpMyAdmin を yum で入れている場合は、それも削除対象になります。

phpMyAdmin の再インストール方法は後述しますが、
削除したくないものがある場合は、コマンド内の php* の部分を変更するなどの対応が必要になります。

完了したら PHP 7.4 をインストールします。
末尾にある「php-gd など」のモジュール指定は適宜変更&追加して、必要なものをインストールしてください。

# yum install --enablerepo=remi,remi-php74 php php-devel php-gd など

念のため PHP のバージョンを確認して、サーバをリロードします。

# php -v
PHP 7.4.12 (cli) (built: Oct 27 2020 15:01:52) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
# systemctl reload httpd

次に設定ファイルの差異を確認し、必要に応じて変更します。
差分の確認には diff コマンドが使えます。

diff が使えると書きつつも、僕は設定ファイルをローカルに落とし、使い慣れている VSCode の 「File: Compare ActiveFile With」コマンドで確認しました。

# cd /etc
# diff -y --left-column php.ini php-72.ini

次にモジュールの差異が無いか確認しましょう。
先に紹介した php -m と diff を使って差分を確認します。

# cd /root/backup
# php -m > modules_php74.txt
# diff -y --left-column modules_php72.txt modules_php74.txt
      > sodium
...
wddx  <

僕の環境では上記のように sodium が追加されて、wddx が無くなっていました。

sodium については PHP 公式ドキュメントに情報がありますが、僕はつかったことがありません。

wddx が必要な場合は、PHP 7.4 以降は手動でインストールする必要があるそうです。

6. phpMyAdmin のインストール

phpMyAdmin が必要な方は、同様に yum でインストールすれば OK です。

# yum install --enablerepo=remi,remi-php74 phpmyadmin

yum remove コマンドで phpMyAdmin をアンインストールしても、設定ファイルは /etc/phpMyAdmin/config.inc.php.rpmsave に残ります。

前の phpMyAdmin で設定変更をされていた方は、diff 等を使いながら config.inc.php を編集してください。

また Apache 用の設定ファイル phpMyAdmin.conf も
/etc/httpd/conf.d/phpMyAdmin.conf.rpmsave として残りますので、
こちらも必要に応じて変更を行っていただければと思います。

403 Forbidden が出る方は、/etc/httpd/conf.d/phpMyAdmin.conf の
<Directory /usr/share/phpMyAdmin/> にある
Require local を Require all granted に変更してみてください。

ただし phpMyAdmin は狙われやすいので、何らかのアクセス制限を設けるのが望ましいと思います。

最後に httpdreload して phpMyAdmin に接続できるようにします。

# systemctl reload httpd

7. ファイルの整理と削除

このステップも大切だと思うのですが、どうしても後回しになりがちで、そのまま忘れて放置しちゃったりしますよね。

一時的に置いたバックアップなどのファイルは、決められた場所に移動したり、ローカルに落としてから削除するのがオススメです。

バックアップファイルは、いざというときにすぐ使えるように整理整頓しておくと安心です。

8. おわりに

ミドルウェアのバージョンアップ作業はやはり準備が大切だと思います。

特に不慣れな方は手順をまとめてリハーサルを行い、またデータのバックアップを取っておくことで、緊張や焦りを軽減することができます。

また、手順書を作る際には複数の情報源を参考にして、成功率や作業効率を高めるようにして頂ければと思います。

実サーバでの作業を担当することは、スキルアップのチャンスでもあります。
少しでも前向きな気持ちで取り組んでいただけると良いなと思います。