CentOS-8のremi レポジトリーのphp-7.3をphp-7.4にアップデートする

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

# 0. はじめに

CentOS-8 で動いているPHP7.3をPHP7.4にアップデートした、というなんのヒネりもない話です。

※補足：NextcloudはPHPで動くサーバーアプリケーションですが、remiレポジトリーのPHPをこれまでずっと使ってきました。CentOS-8でも、ありがたく使わせて頂いているわけですが、CentOS-8になってからPHPのバージョン毎のレポジトリーの切り替え方法がちょっと変わっていて、その話です。

# 1. インストールされているPHP

インストールされているPHPは、`remi-php7.3`です。
`dnf module info` で確認します。
streamのremi-7.3に`[e] [a]`が付いていて、enabledでactiveだというのを示しています。

```bash
dnf module info php:remi-7.3
Last metadata expiration check: 0:46:59 ago on Wed 25 Nov 2020 05:43:05 PM JST.
Name             : php
Stream           : remi-7.3 [e] [a]
Version          : 20201125071936
Context          : 00000000
Architecture     : x86_64
Profiles         : common [d], devel, minimal
Default profiles : common
Repo             : remi-modular
Summary          : PHP scripting language
Description      : Alternative php 7.3 module. The remi-7.3 stream provides more recent versions and more packages than default 7.3 stream.
Requires         : platform:[el8]
<<<--- 略 --->>>
```

<details><summary>インストールされているPHPパッケージのリスト</summary>
<div>

```
# yum list installed php\*
Installed Packages
php-bcmath.x86_64                                                     7.3.25-1.el8.remi                                                   @remi-modular
php-cli.x86_64                                                        7.3.25-1.el8.remi                                                   @remi-modular
php-common.x86_64                                                     7.3.25-1.el8.remi                                                   @remi-modular
php-devel.x86_64                                                      7.3.25-1.el8.remi                                                   @remi-modular
php-fpm.x86_64                                                        7.3.25-1.el8.remi                                                   @remi-modular
php-gd.x86_64                                                         7.3.25-1.el8.remi                                                   @remi-modular
php-gmp.x86_64                                                        7.3.25-1.el8.remi                                                   @remi-modular
php-intl.x86_64                                                       7.3.25-1.el8.remi                                                   @remi-modular
php-json.x86_64                                                       7.3.25-1.el8.remi                                                   @remi-modular
php-ldap.x86_64                                                       7.3.25-1.el8.remi                                                   @remi-modular
php-mbstring.x86_64                                                   7.3.25-1.el8.remi                                                   @remi-modular
php-mysqlnd.x86_64                                                    7.3.25-1.el8.remi                                                   @remi-modular
php-opcache.x86_64                                                    7.3.25-1.el8.remi                                                   @remi-modular
php-pdo.x86_64                                                        7.3.25-1.el8.remi                                                   @remi-modular
php-pecl-apcu.x86_64                                                  5.1.19-1.el8.remi.7.3                                               @remi-modular
php-pecl-igbinary.x86_64                                              3.1.6-1.el8.remi.7.3                                                @remi-modular
php-pecl-imagick.x86_64                                               3.4.4-10.el8.remi.7.3                                               @remi-modular
php-pecl-mcrypt.x86_64                                                1.0.3-1.el8.remi.7.3                                                @remi-modular
php-pecl-redis4.x86_64                                                4.3.0-2.el8.remi.7.3                                                @remi-modular
php-pecl-zip.x86_64                                                   1.19.2-1.el8.remi.7.3                                               @remi-modular
php-process.x86_64                                                    7.3.25-1.el8.remi                                                   @remi-modular
php-smbclient.x86_64                                                  1.0.0-1.el8.remi.7.3                                                @remi-modular
php-soap.x86_64                                                       7.3.25-1.el8.remi                                                   @remi-modular
php-xml.x86_64                                                        7.3.25-1.el8.remi                                                   @remi-modular
```
</div></details>


# 2. remi php-7.3モジュールをresetする


```bash
dnf module reset php:remi-7.3
Last metadata expiration check: 0:49:13 ago on Wed 25 Nov 2020 05:43:05 PM JST.
Only module name is required. Ignoring unneeded information in argument: 'php:remi-7.3'
Dependencies resolved.
=======================================================================================================================================================
 Package                             Architecture                       Version                              Repository                           Size
=======================================================================================================================================================
Resetting modules:
 php

Transaction Summary
=======================================================================================================================================================

Is this ok [y/N]: y
Complete!
```

`dnf module reset php` でよかったみたい。。

# 3. remi php-7.4を有効化する

```bash
dnf module enable php:remi-7.4
Last metadata expiration check: 0:49:39 ago on Wed 25 Nov 2020 05:43:05 PM JST.
Dependencies resolved.
=======================================================================================================================================================
 Package                             Architecture                       Version                              Repository                           Size
=======================================================================================================================================================
Enabling module streams:
 php                                                                    remi-7.4

Transaction Summary
=======================================================================================================================================================

Is this ok [y/N]: y
Complete!
```


# 4. インストールされたモジュールを確認する

```
# dnf module info php:remi-7.4
Last metadata expiration check: 1:06:47 ago on Wed 25 Nov 2020 05:43:05 PM JST.
Name             : php
Stream           : remi-7.4 [e] [a]
Version          : 20201125071937
Context          : 00000000
Architecture     : x86_64
Profiles         : common [d], devel, minimal
Default profiles : common
Repo             : remi-modular
Summary          : PHP scripting language
Description      : Alternative php 7.4 module. The remi-7.4 stream provides more recent versions and more packages than default 7.4 stream.
Requires         : platform:[el8]
--- 略 ---
```

# 5. パッケージをphp-7.4にアップデートする

`yum update` でインストールされているパッケージがPHP7.3のものからPHP7.4へアップデートされる。

```
yum update
Last metadata expiration check: 1:10:53 ago on Wed 25 Nov 2020 05:43:05 PM JST.
Dependencies resolved.
=======================================================================================================================================================
 Package                                Architecture                Version                                    Repository                         Size
=======================================================================================================================================================
Installing:
 php-pecl-redis5                        x86_64                      5.3.2-1.el8.remi.7.4                       remi-modular                      265 k
     replacing  php-pecl-redis4.x86_64 4.3.0-2.el8.remi.7.3
Upgrading:
 php-bcmath                             x86_64                      7.4.13-1.el8.remi                          remi-modular                       83 k
 php-cli                                x86_64                      7.4.13-1.el8.remi                          remi-modular                      4.6 M
 php-common                             x86_64                      7.4.13-1.el8.remi                          remi-modular                      1.2 M
 php-devel                              x86_64                      7.4.13-1.el8.remi                          remi-modular                      1.1 M
 php-fpm                                x86_64                      7.4.13-1.el8.remi                          remi-modular                      1.6 M
 php-gd                                 x86_64                      7.4.13-1.el8.remi                          remi-modular                       92 k
 php-gmp                                x86_64                      7.4.13-1.el8.remi                          remi-modular                       83 k
 php-intl                               x86_64                      7.4.13-1.el8.remi                          remi-modular                      241 k
 php-json                               x86_64                      7.4.13-1.el8.remi                          remi-modular                       76 k
 php-ldap                               x86_64                      7.4.13-1.el8.remi                          remi-modular                       96 k
 php-mbstring                           x86_64                      7.4.13-1.el8.remi                          remi-modular                      528 k
 php-mysqlnd                            x86_64                      7.4.13-1.el8.remi                          remi-modular                      259 k
 php-opcache                            x86_64                      7.4.13-1.el8.remi                          remi-modular                      335 k
 php-pdo                                x86_64                      7.4.13-1.el8.remi                          remi-modular                      143 k
 php-pecl-apcu                          x86_64                      5.1.19-1.el8.remi.7.4                      remi-modular                       83 k
 php-pecl-igbinary                      x86_64                      3.1.6-1.el8.remi.7.4                       remi-modular                      161 k
 php-pecl-imagick                       x86_64                      3.4.4-10.el8.remi.7.4                      remi-modular                      182 k
 php-pecl-mcrypt                        x86_64                      1.0.3-1.el8.remi.7.4                       remi-modular                       35 k
 php-pecl-zip                           x86_64                      1.19.2-1.el8.remi.7.4                      remi-modular                       66 k
 php-process                            x86_64                      7.4.13-1.el8.remi                          remi-modular                       98 k
 php-smbclient                          x86_64                      1.0.0-7.el8.remi.7.4                       remi-modular                       50 k
 php-soap                               x86_64                      7.4.13-1.el8.remi                          remi-modular                      227 k
 php-xml                                x86_64                      7.4.13-1.el8.remi                          remi-modular                      214 k
Installing dependencies:
 php-pecl-msgpack                       x86_64                      2.1.1-1.el8.remi.7.4                       remi-modular                       65 k

Transaction Summary
=======================================================================================================================================================
Install   2 Packages
Upgrade  23 Packages

Total download size: 12 M
Is this ok [y/N]:
```

# 6. 念のため、.rpmnewファイルを確認しておく

問題ないと思うが、rpmnewファイルが2つできているのでdiffを取って確認する

```
warning: /etc/php.ini created as /etc/php.ini.rpmnew
warning: /etc/php.d/10-opcache.ini created as /etc/php.d/10-opcache.ini.rpmnew
```

/etc/php.iniは、2カ所修正
/etc/php.d/10-opcache.iniは、問題なかった

phpのバージョンを確認しておく

```
# php -v
PHP 7.4.13 (cli) (built: Nov 24 2020 10:03:34) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.13, Copyright (c), by Zend Technologies

# php-fpm -v
PHP 7.4.13 (fpm-fcgi) (built: Nov 24 2020 10:03:34)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.13, Copyright (c), by Zend Technologies
```

# 7. 問題ないのでサービスを起動する

```
systemctl start php-fpm
systemctl start nginx
```

# 8. 障害対応

Nextcloudでログインしようとしたが、ログインできなくなっていた。
どうも、パスワードハッシュのタイプが変わってしまっていて、
`php-sodium.x86_64` が必要になっていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/bff77318-db64-f7ab-e005-5a40df6561c4.png)

PHP: 下位互換性のない変更点 - Manual
https://www.php.net/manual/ja/migration74.incompatible.php

Unable to login after Fedora 31>32 upgrade · Issue #21100 · nextcloud/server
https://github.com/nextcloud/server/issues/21100