PHPのバージョンアップ

 ワードプレスの管理画面でPHPのバージョンを上げるようにとの警告が出ることがある。
 raspbianをupgradeすればPHPのバージョンも最新のものになるだろうくらいの事を考えていたのだが、いざやってみると現在使っているStrechではphp7.0のままで枝番が多少上がる程度でワードプレスが要求する7.4にはとてもならない。

 raspbianもBusterにすると7.3にはなるようである。
 そこで以前トライしたことのあるraspbianのバージョンをStrechからBusterに上げようとしてみた。

 SDカード全体のバックアップをWin32DiskImagerで取りそれから別のSDcardに書き出したもので試してみた。
 しかし、raspbianそのもののBusterへのアップは成功したが、SSLを使っているせいかApache2が立ち上がらない。

 SSLの設定に絡むようであるが現サーバーのSSL化をどのようにしたのか全く覚えておらず、これを解読するには相当時間が掛かりそうである。

 そこで別の方法としてStrechのままでPHPを上げてみることとした。

 raspbianでは通常のupdate upgradeでは最新バージョンにならないので外部リポジトリ情報を追加することでやってみた。しかし、これはraspbianのStrechでは確認が取れていないようで何回か警告が出たがワードプレスが要求しているので無理やりインストールすることとなった。状況は以下の通りであるが、一応成功してワードプレスの警告は出なくなるとともに応答も早くなったような気がする。

 概要は以下の通りである。

◎Strech編

  〇外部リポジトリ情報追加
packages.sury.org/php の GPG 公開鍵を登録する。

$ sudo wget -O - https://packages.sury.org/php/apt.gpg | apt-key add -

packages.sury.org/php のリポジトリ情報を追加し、パッケージ・リストの更新を行う。

# echo "deb https://packages.sury.org/php/ stretch main" >> /etc/apt/sources.list.d/php.list

という情報であったが私の場合php.listなるファイルが無かったので

$ sudo vi /etc/apt/sources.list.d/php.list

で先頭行に deb https://packages.sury.org/php/ stretch main を書き込み保存した。

$ sudo apt-get update

で更新し、PHPの情報を確認する。

〇 外部リポジトリからのPHPインストール情報の確認

PHPの外部リポジトリからインストールできる、PHPパッケージの版数情報を確認する。

pi@raspberrypi:~ $ sudo apt-cache policy php php: インストールされているバージョン: 1:7.0+49 候補: 2:7.4+79+0~20201210.30+debian9~1.gbpedaf15 バージョンテーブル: 2:7.4+79+0~20201210.30+debian9~1.gbpedaf15 500 500 https://packages.sury.org/php stretch/main armhf Packages *** 1:7.0+49 500 500 http://raspbian.raspberrypi.org/raspbian stretch/main armhf Packages 100 /var/lib/dpkg/status

で7.4がインストール出来そうであることが分かる。そこで

sudo apt-get install php
警告: 以下のパッケージは認証されていません!
  php-common php7.4-common php7.4-json php7.4-opcache php7.4-readline
  libargon2-1 libpcre2-8-0 libsodium23 php7.4-cli libapache2-mod-php7.4 php7.4
  php
検証なしにこれらのパッケージをインストールしますか? [y/N] y
警告が出るが構わず続行する。

終了後

$ php -v

で確認すると7.4がインストールされていることが分かる。次はapach2の設定である。

〇アパッチでの設定
現在使っている7.0を外して7.4を組み入れる。

$ sudo a2dismod php7.0
$ sudo a2enmod php7.4

phpのバージョンが変わるのでそれに対応するphp-mysql拡張もインストールする。

sudo apt-get install php-mysql
警告: 以下のパッケージは認証されていません!
  php7.4-mysql php-mysql
検証なしにこれらのパッケージをインストールしますか? [y/N] y
構わずインストールする。

最後にapache2の再スタートをすることで変更が有効となる。

$ sudo /etc/init.d/apache2 restart

これでワードプレスの管理画面を見てみると警告が消えており無事バージョンアップ出来ているようである。

〇apache2のモジュール組み込み状況
7.0の時はphp7.0用のファイルが二個ある。
pi@raspberrypi:~ $ ls /etc/apache2/mods-enabled/
access_compat.load  autoindex.load  mime.conf         rewrite.load
alias.conf          dav.load        mime.load         setenvif.conf
alias.load          dav_fs.conf     mpm_prefork.conf  setenvif.load
auth_basic.load     dav_fs.load     mpm_prefork.load  socache_shmcb.load
authn_core.load     deflate.conf    negotiation.conf  ssl.conf
authn_file.load     deflate.load    negotiation.load  ssl.load
authz_core.load     dir.conf        php7.0.conf       status.conf
authz_host.load     dir.load        php7.0.load       status.load
authz_user.load     env.load        reqtimeout.conf
autoindex.conf      filter.load     reqtimeout.load
これをa2dismod php7.0とすることでここでのphp関連ファイルが無くなり
a2enmod php7.4で新しいモジュールが追加される。
これは対apache2でのことでphp7.0関連のファイルは残っているので何時でも元に帰せる。
pi@raspberrypi:~ $ ls /etc/apache2/mods-enabled/
access_compat.load  autoindex.load  mime.conf         rewrite.load
alias.conf          dav.load        mime.load         setenvif.conf
alias.load          dav_fs.conf     mpm_prefork.conf  setenvif.load
auth_basic.load     dav_fs.load     mpm_prefork.load  socache_shmcb.load
authn_core.load     deflate.conf    negotiation.conf  ssl.conf
authn_file.load     deflate.load    negotiation.load  ssl.load
authz_core.load     dir.conf        php7.4.conf       status.conf
authz_host.load     dir.load        php7.4.load       status.load
authz_user.load     env.load        reqtimeout.conf
autoindex.conf      filter.load     reqtimeout.load
最後に今回は動画ファイルを登録するために行った変更なのでphpが制限しているアップロードファイルのサイズを以下の内容で書き換えた。

/etc/php/7.4/apache2/php.ini

memory_limit = 350M
post_max_size = 310M
upload_max_filesize = 300M

以上でワードプレス対応の修正は終了である。

◎Buster編

以上の内容はStrchに関してであり、Busterについては少し事情が違っていた。
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update

これでphp7.4が候補になった
pi@raspberrypi:~ $ sudo apt policy php
php:
  インストールされているバージョン: 2:7.3+69
  候補:               2:7.4+79+0~20201210.30+debian10~1.gbpedaf15
  バージョンテーブル:
     2:7.4+79+0~20201210.30+debian10~1.gbpedaf15 500
        500 https://packages.sury.org/php buster/main armhf Packages
 *** 2:7.3+69 500
        500 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages
        100 /var/lib/dpkg/status
後はStrechと同様sudo apt-get install php7.4 でインストールしapache2の設定、php-mysqlのインストール、最後にapache2のリスタートで7.4が使えるようになる。