CentOS Stream 8のPHPを7.4から8.0にアップグレード
PHP 7.4が2022年11月28日でサポート終了になったのでdnf経由で8.0にアップグレードしたときの覚書。
PHP: Supported Versions
環境: CentOS Stream 8, ImageMagick 6.9.12-67 Q16
1.PHP8.0をインストール
現在のモジュールを確認
# dnf module list php
CentOS Stream 8 - AppStreamName Streamphp 7.2 [d]php 7.3php 7.4 [e]php 8.0Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
仮想環境なのでスナップショットをとっておく。
モジュールを7.4から8.0に切り替える
# dnf module reset php
# dnf module enable php:8.0
# dnf --allowerasing distro-sync
確認
# php --version
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), /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 0PHP Warning: PHP Startup: mecab: Unable to initialize moduleModule compiled with module API=20190902PHP compiled with module API=20200930These options need to matchin Unknown on line 0PHP 8.0.20 (cli) (built: Jun 8 2022 00:33:06) ( NTS gcc x86_64 )
ImageMagickとMecabのPHPモジュールのアップデートが必要。
まずはphp.dから削除しておく。
# cd /etc/php.d/
# rm -f imagick.ini mecab.ini
ファイル権限が変更されているので再設定
# chown nginx.www -R /var/lib/php/*
nginx用の設定ファイルはいらない
# cd /etc/nginx/conf.d/
# ls
# mv php-fpm.conf bak/
phpの設定確認
# less /etc/php-fpm.d/www.conf
# less /etc/php.ini
upload_max_filesize = 2M
post_max_size = 12M
memory_limit = 256M
WordPressの使用メモリ上限はデフォルトで最大256MB。
参考: WP_MAX_MEMORY_LIMIT – WordPress私的マニュアル
2.php-imagickをビルドしてインストール
ビルドに必要な環境は設定済み。
参考: CentOS Stream8 + ImageMagick + php-imagickをインストール
コマンドを実行するだけ
# pecl install imagick
# echo "extension=imagick.so" > /etc/php.d/imagick.ini
php-fpmを再起動して確認
# systemctl restart php-fpm
# php -i | grep imagick
3.php-mecabをビルドしてインストール
ビルドに必要な環境は設定済み。
参考: CentOS7のPHP 7.2をPHP 7.3にYUM経由でアップデート
php-mecabのPHP8対応しているリポジトリがあったのでそちらに切り替えてビルドする。
元のリポジトリ: rsky/php-mecab: MeCab binding for PHP
切替先: emmatools/php-mecab: MeCab binding for PHP
# cd /opt/software/php-mecab/
# git remote set-url origin https://github.com/emmatools/php-mecab.git
# git pull
ビルド実行
# cd mecab
# make clean
# phpize
# ./configure --with-mecab=/usr/local/bin/mecab-config
# make
# make test
# make install
# echo "extension=mecab.so" > /etc/php.d/mecab.ini
php-fpmを再起動して確認
# systemctl restart php-fpm
# php -i | grep mecab
/etc/php.d/mecab.inimecabmecab.default_dicdir => no value => no valuemecab.default_rcfile => no value => no valuemecab.default_userdic => no value => no valuePWD => /opt/software/php-mecab/mecabOLDPWD => /opt/software/php-mecab$_SERVER['PWD'] => /opt/software/php-mecab/mecab$_SERVER['OLDPWD'] => /opt/software/php-mecab
ん?$_SERVER['PWD']が設定されている。
ちゃんと動作確認する必要がありそう。
4.動作確認
開発環境で動かしてみる。
本番環境でアップグレードしたらログを確認する。
# tail -f /var/log/nginx/error.log