KUSONEKOの見る世界

CentOS 8 の PHP を 7.4 から 8.0 に上げた+使っているアプリの対処

CentOS 8 で、PHP7.4 から PHP8.0に上げた時のメモと、動かなくなったWebアプリケーションの対処のメモです。

PHP8.0はパフォーマンスがかなり上がっているということで、気になっていました。
ただ、remiリポジトリを使う必要があるので、避けていましたが、Nextcloudが重くなってきていたため、試す事にしました。

Remiリポジトリ追加

# rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-8.rpm

モジュールストリーム変更

# dnf module list php
GPG 鍵 0x5F11735A をインポート中:
(略)
これでよろしいですか? [y/N]: y

CentOS Linux 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             

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name               Stream                Profiles                                    Summary                            
php                remi-7.2              common [d], devel, minimal                  PHP scripting language             
php                remi-7.3              common [d], devel, minimal                  PHP scripting language             
php                remi-7.4              common [d], devel, minimal                  PHP scripting language             
php                remi-8.0              common [d], devel, minimal                  PHP scripting language             
php                remi-8.1              common [d], devel, minimal                  PHP scripting language             

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled

# dnf module enable php:remi-8.0
依存関係が解決しました。
エラー: モジュールの有効なストリームを切り替えることはできません。
モジュールからインストールされた全てのコンテンツを削除し、 'dnf module reset <module_name>' コマンドを使用してリセットすることが推奨されます。モジュールのリセット後、他のストリームをインストール可能です。

# dnf module reset php
========================================================================================================================
 パッケージ                  アーキテクチャー           バージョン                    リポジトリー                サイズ
========================================================================================================================
モジュールプロファイルの無効化中:
 php/common                                                                                                            
モジュールの再設定中:
 php                                                                                                                   

トランザクションの概要
========================================================================================================================

これでよろしいですか? [y/N]: y
完了しました!

# dnf module enable php:remi-8.0
依存関係が解決しました。
========================================================================================================================
 パッケージ                  アーキテクチャー           バージョン                    リポジトリー                サイズ
========================================================================================================================
モジュールストリームの有効化中:
 php                                                    remi-8.0                                                       

トランザクションの概要
========================================================================================================================

これでよろしいですか? [y/N]: y
完了しました!

# dnf module list php
CentOS Linux 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                       common [d], devel, minimal              PHP scripting language             

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name               Stream                    Profiles                                Summary                            
php                remi-7.2                  common [d], devel, minimal              PHP scripting language             
php                remi-7.3                  common [d], devel, minimal              PHP scripting language             
php                remi-7.4                  common [d], devel, minimal              PHP scripting language             
php                remi-8.0 [e]              common [d], devel, minimal              PHP scripting language             
php                remi-8.1                  common [d], devel, minimal              PHP scripting language             

ヒント: [d]efault, [e]nabled, [x]disabled, [i]nstalled

PHP8.0にアップデート

# dnf update
========================================================================================================================
 パッケージ                        アーキテクチャー   バージョン                         リポジトリー             サイズ
========================================================================================================================
アップグレード:
 libzip                            x86_64             1.8.0-1.el8.remi                   remi-modular              69 k
 php                               x86_64             8.0.12-1.el8.remi                  remi-modular             1.6 M
 php-bcmath                        x86_64             8.0.12-1.el8.remi                  remi-modular              87 k
 php-cli                           x86_64             8.0.12-1.el8.remi                  remi-modular             4.7 M
 php-common                        x86_64             8.0.12-1.el8.remi                  remi-modular             1.2 M
     置き換え  php-json.x86_64 7.4.6-4.module_el8.3.0+434+2ab5050a
 php-devel                         x86_64             8.0.12-1.el8.remi                  remi-modular             1.2 M
 php-fpm                           x86_64             8.0.12-1.el8.remi                  remi-modular             1.6 M
 php-gd                            x86_64             8.0.12-1.el8.remi                  remi-modular             102 k
 php-gmp                           x86_64             8.0.12-1.el8.remi                  remi-modular              88 k
 php-intl                          x86_64             8.0.12-1.el8.remi                  remi-modular             239 k
 php-ldap                          x86_64             8.0.12-1.el8.remi                  remi-modular              97 k
 php-mbstring                      x86_64             8.0.12-1.el8.remi                  remi-modular             525 k
 php-mysqlnd                       x86_64             8.0.12-1.el8.remi                  remi-modular             262 k
 php-opcache                       x86_64             8.0.12-1.el8.remi                  remi-modular             768 k
 php-pdo                           x86_64             8.0.12-1.el8.remi                  remi-modular             156 k
 php-pear                          noarch             1:1.10.13-1.el8.remi               remi-modular             366 k
 php-pecl-apcu                     x86_64             5.1.21-1.el8.remi.8.0              remi-modular              80 k
 php-pecl-zip                      x86_64             1.20.0-1.el8.remi.8.0              remi-modular              72 k
 php-process                       x86_64             8.0.12-1.el8.remi                  remi-modular             106 k
 php-xml                           x86_64             8.0.12-1.el8.remi                  remi-modular             238 k
依存関係のインストール:
 libicu69                          x86_64             69.1-1.el8.remi                    remi-safe                9.6 M
 libsodium                         x86_64             1.0.18-2.el8                       epel                     162 k
 oniguruma5php                     x86_64             6.9.7.1-1.el8.remi                 remi-safe                210 k
弱い依存関係のインストール:
 php-fedora-autoloader             noarch             1.0.1-2.el8.remi                   remi-safe                 13 k
 php-sodium                        x86_64             8.0.12-1.el8.remi                  remi-modular              94 k

トランザクションの概要
========================================================================================================================
インストール     5 パッケージ
アップグレード  20 パッケージ

ダウンロードサイズの合計: 24 M
これでよろしいですか? [y/N]: y

GPG 鍵 0x5F11735A をインポート中:
(略)
これでよろしいですか? [y/N]: y

(略)
PHP Warning:  PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /usr/lib64/php/modules/imagick.so (/usr/lib64/php/modules/imagick.so: undefined symbol: instanceof_function_ex), /usr/lib64/php/modules/imagick.so.so (/usr/lib64/php/modules/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

Warningが出ましたが、php-imagickがなかったようなので、インストールします。
ついでにNextcloudの高速化のために、php-redisもインストールしました。

# dnf install php-redis php-imagick
========================================================================================================================
 パッケージ                       アーキテクチャー   バージョン                          リポジトリー             サイズ
========================================================================================================================
インストール:
 php-pecl-imagick-im6             x86_64             3.5.1-3.el8.remi.8.0                remi-modular             186 k
 php-pecl-redis5                  x86_64             5.3.4-1.el8.remi.8.0                remi-modular             267 k
依存関係のインストール:
 ImageMagick6-libs                x86_64             1:6.9.12.29-1.el8.remi              remi-safe                2.4 M
 liblqr-1                         x86_64             0.4.2-11.el8.remi                   remi-safe                 51 k
 liblzf                           x86_64             3.6-16.el8                          epel                      28 k
 php-pecl-igbinary                x86_64             3.2.6-1.el8.remi.8.0                remi-modular             160 k
 php-pecl-msgpack                 x86_64             2.1.2-1.el8.remi.8.0                remi-modular              65 k


トランザクションの概要
========================================================================================================================
インストール  7 パッケージ

ダウンロードサイズの合計: 3.2 M
インストール後のサイズ: 11 M
これでよろしいですか? [y/N]: y
(略)
PHP Warning:  Module "imagick" is already loaded in Unknown on line 0

今度は、imagickが既にロードされていると出ました。

# ls /etc/php.d/
10-opcache.ini         20-exif.ini      20-intl.ini      20-simplexml.ini  20-xml.ini         40-apcu.ini
10-opcache.ini.rpmnew  20-fileinfo.ini  20-ldap.ini      20-sockets.ini    20-xmlwriter.ini   40-apcu.ini.rpmnew
20-bcmath.ini          20-ftp.ini       20-mbstring.ini  20-sodium.ini     20-xsl.ini         40-igbinary.ini
20-bz2.ini             20-gd.ini        20-mysqlnd.ini   20-sqlite3.ini    30-mysqli.ini      40-imagick.ini
20-calendar.ini        20-gettext.ini   20-pdo.ini       20-sysvmsg.ini    30-pdo_mysql.ini   40-msgpack.ini
20-ctype.ini           20-gmp.ini       20-phar.ini      20-sysvsem.ini    30-pdo_sqlite.ini  50-redis.ini
20-curl.ini            20-iconv.ini     20-posix.ini     20-sysvshm.ini    30-xmlreader.ini   opcache-default.blacklist
20-dom.ini             20-imagick.ini   20-shmop.ini     20-tokenizer.ini  30-zip.ini

dnfにより、40-imagick.iniが追加され、20-imagick.iniと重複していました。片方を削除しておきます。

rm /etc/php.d/20-imagick.ini
rm: 通常ファイル '/etc/php.d/20-imagick.ini' を削除しますか? y
# systemctl restart php-fpm

Nextcloud

ログインできない

ログインしようとしても、ログイン画面から変わりません。
いつもの事ですが、以下ディレクトリにNginxがアクセスできるようにします。

# chown -R nginx. /var/lib/php/session/

RedisのインストールとNextcloudで有効化

# dnf install redis
=============================================================================================================================
 パッケージ          アーキテクチャー     バージョン                                           リポジトリー            サイズ
=============================================================================================================================
インストール:
 redis               x86_64               5.0.3-5.module_el8.4.0+955+7126e393                  appstream               927 k
モジュールストリームの有効化中:
 redis                                    5                                                                                 

トランザクションの概要
=============================================================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 927 k
インストール後のサイズ: 3.2 M
これでよろしいですか? [y/N]: y

# systemctl enable redis.service
# systemctl start redis.service

赤字部分を追加

# vi /var/www/html/nextcloud/config/config.php
(略)
  'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'redis' => array(
    'host' => 'localhost',
    'port' => 6379,
  ),
  'default_phone_region' => 'JP',
);

rep2

今まで使っていたp2-phpが、PHP8.0に対応しておらず、500エラーとなっていました。

PHP8.xに対応したgitを使いました。

現状のp2-phpを退避

# cd /var/www/html/
# mv rep2-php/ /root/

PHP8 対応p2-phpをインストール

# git clone https://github.com/mikoim/p2-php.git
# cd rep2-php/
# curl -O https://getcomposer.org/download/1.10.19/composer.phar
# php -d detect_unicode=0 composer.phar install

データのリストア

# cp -rf /root/p2-php/data/ /var/www/html/p2-php/

nginxにアクセス権の付与

# chown nginx. -R /var/www/html/p2-php/