CentOS Stream 9 にPHP8.1をDNFでインストール
篠原 隆司
アフィリエイト広告を利用しています
このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です
さくらのVPSにCentOS Stream 9をインストールした覚書です。
今回は、PHPの最新版であるPHP8.1をインストールします。
ソースインストールではなく、 dnf インストールですので、ソースインストールをお探しの場合は下記をご覧ください。
CentOS Stream 8にPHP8.0.11をソースインストール
なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。
環境
実施日 | 2022-03-27 |
サーバ | さくらのVPS 2G |
OS | CentOS Stream 9 |
cat /etc/redhat-release
CentOS Stream release 9
PHP8.1のインストール
remiからインストールします。
選択可能なバージョンを確認してみます。
dnf module list php
Last metadata expiration check: 1:20:55 ago on Mon 28 Mar 2022 10:06:10 PM JST.
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
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
7.4 から 8.1 までが選択できるようになっています。
ということで、PHP8.1 をインストールします。
dnf module install php:remi-8.1
次のようなエラーが出るときは、mbstring なので oniguruma します。
Error:
Problem: cannot install the best candidate for the job
- nothing provides libonig.so.105()(64bit) needed by php-mbstring-8.1.4-1.el9.remi.x86_64
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
# 鬼車をインストール
dnf --enablerepo=remi install oniguruma5php
# php をインストール
dnf module install php:remi-8.1
余談 (必要になったときに再確認します)
▼でバージョンの切り替え
dnf module reset php:remi-8.1
dnf module install php:remi-8.0
確認
# バージョン
php -v
# php.ini の場所
php -i | grep php.ini
# php-fpm の場所
which php-fpm
# php-fpm のバージョン
php-fpm -v
php-fpm の設定
# 現在の状態を確認
systemctl status php-fpm
# 起動
systemctl start php-fpm
# 終了
systemctl stop php-fpm
# 自動起動の有効化
systemctl enable php-fpm
# 自動起動の解除
systemctl disable php-fpm
php-zip
dnf --enablerepo=remi install php-zip
PHPを実行して、次のようなエラーが出た場合にインストールします。
zip機能を使わないPHPプログラムだとインストールしなくてもOKです。
PHP Fatal error: Uncaught Error: Class 'ZipArchive' not found in ・・・
php-bcmath
dnf --enablerepo=remi install php-bcmath
# エラーになった場合はこちらを試す
# dnf --enablerepo=epel,remi install php-bcmath
PHPを実行して、次のようなエラーが出た場合にインストールします。
GA4を使うために composer から google/analytics-data を使う場合に必要になります。
PHP Fatal error: Uncaught Error: Call to undefined function bccomp() in ・・・
mysql
dnf --enablerepo=remi install php-mysqlnd
gd
dnf --enablerepo=remi install php-gd
image magick
# PowerTools は無くても良さそう。ってか、Stream 9 からは PowerTools が無い?
dnf --enablerepo=epel install ImageMagick ImageMagick-devel
dnf install php-devel php-pear make
pecl install imagick
Please provide the prefix of Imagemagick installation [autodetect] : /usr/local/ImageMagick-6.9.12
Build process completed successfully
Installing '/usr/lib64/php/modules/imagick.so'
Installing '/usr/include/php/ext/imagick/php_imagick_shared.h'
install ok: channel://pecl.php.net/imagick-3.7.0
configuration option "php_ini" is not set to php.ini location
You should add "extension=imagick.so" to php.ini
vi /etc/php.ini
extension=imagick.so
アップデートでエラーが出る場合は下記を参考にしてください。
ImageMagickが原因でDNFのアップデートがエラーになったときの対処
その他
必要に応じて
dnf --enablerepo=remi install php-opcache
dnf --enablerepo=remi install php-pecl-apcu
dnf --enablerepo=remi install php-pear
dnf --enablerepo=remi install php-xmlrpc
dnf --enablerepo=remi install php-intl
# mcrypt はPHP7.2以降で廃止
# dnf --enablerepo=remi install php-pecl-mcrypt
php.iniを設定
# タイムゾーンを Asia/Tokyo に変更
sed -i -e "s/^;date\.timezone =[^A-Za-z]*$/date.timezone =/g" /etc/php.ini
sed -i -e "s/^date\.timezone =[^A-Za-z]*$/date.timezone = Asia\/Tokyo/g" /etc/php.ini
# OPcacheの設定 (公式のデフォルトで設定)
# http://php.net/manual/ja/opcache.installation.php
sed -i -e "s/^;opcache.memory_consumption=/opcache.memory_consumption=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.interned_strings_buffer=/opcache.interned_strings_buffer=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.max_accelerated_files=/opcache.max_accelerated_files=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.revalidate_freq=/opcache.revalidate_freq=/g" /etc/php.d/10-opcache.ini
sed -i -e "s/^;opcache.enable_cli=/opcache.enable_cli=/g" /etc/php.d/10-opcache.ini
vi /etc/php.d/10-opcache.ini
opcache.fast_shutdown=1
が無いと思うので末尾あたりに追記する
# 次の3つの .sock は yum でMySQLをインストールした場合の位置
sed -i -e "s/^mysql\.default_socket =$/mysql.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /etc/php.ini
sed -i -e "s/^mysqli\.default_socket =$/mysqli.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /etc/php.ini
sed -i -e "s/^pdo_mysql\.default_socket=$/pdo_mysql.default_socket = \/var\/lib\/mysql\/mysql.sock/g" /etc/php.ini
確認
# php.iniのタイムゾーン
grep -E 'date.timezone|default_socket' /etc/php.ini
# php.ini
vi /etc/php.ini
バージョン
php -v
PHP 8.1.4 (cli) (built: Mar 15 2022 20:18:41) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.4, Copyright (c) Zend Technologies
with Zend OPcache v8.1.4, Copyright (c), by Zend Technologies
定期的なメンテナンス
dnf update --enablerepo=epel,remi
dnf update でエラーになる場合は下記をお試しください
スクリプトにして cron で自動化しても良いです
dnf update mysql-community-server
# ▲で GPGエラーになる場合
ls -la /etc/pki/rpm-gpg/
wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023 https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
ls -la /etc/pki/rpm-gpg/
vi /etc/yum.repos.d/mysql-community.repo
2023 に書き換える
dnf clean all
dnf update mysql-community-server
dnf --enablerepo=remi install したものを定期的に update します。
dnf update には含まれないものなので別途行う必要があります。
dnf --enablerepo=remi update php-zip
dnf --enablerepo=remi update php-bcmath
dnf --enablerepo=remi update php-mysqlnd
dnf --enablerepo=remi update php-gd
dnf --enablerepo=remi update php-opcache
dnf --enablerepo=remi update php-pecl-apcu
dnf --enablerepo=remi update php-pear
dnf --enablerepo=remi update php-xmlrpc
dnf --enablerepo=remi update php-intl