先日、EC2環境でPHPを8.2にバージョンアップする機会があったので、つまずきポイントについて書き留めます。
PHP8.2の新機能についてはこちらで詳しく紹介されてます。
バージョンアップの流れはこんなイメージです。
- 既存バージョンをアンインストールする
- パッケージリポジトリをアップデートする
- 新バージョンをインストールする
1. 既存バージョンをアンインストールする
現行バージョンを確認します。
$ 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
現行インストールされているパッケージも確認しておきます。
$ yum list installed PHPphp*
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
226 packages excluded due to repository priority protections
インストール済みパッケージ
php81.x86_64 8.1-1.el7.remi @remi-safe
php81-php-cli.x86_64 8.1.4-1.el7.remi @remi-safe
php81-php-common.x86_64 8.1.4-1.el7.remi @remi-safe
php81-php-gd.x86_64 8.1.4-1.el7.remi @remi-safe
php81-php-mbstring.x86_64 8.1.4-1.el7.remi @remi-safe
php81-php-mysqlnd.x86_64 8.1.4-1.el7.remi @remi-safe
php81-php-pdo.x86_64 8.1.4-1.el7.remi @remi-safe
php81-php-pecl-zip.x86_64 1.20.0-1.el7.remi @remi-safe
php81-php-xml.x86_64 8.1.4-1.el7.remi @remi-safe
php81-runtime.x86_64 8.1-1.el7.remi @remi-safe
現行バージョンをアンインストールします。
$ sudo yum remove "php*"
・・・
・・・
削除しました:
php81.x86_64 0:8.1-1.el7.remi php81-php-cli.x86_64 0:8.1.4-1.el7.remi
php81-php-common.x86_64 0:8.1.4-1.el7.remi php81-php-gd.x86_64 0:8.1.4-1.el7.remi
php81-php-mbstring.x86_64 0:8.1.4-1.el7.remi php81-php-mysqlnd.x86_64 0:8.1.4-1.el7.remi
php81-php-pdo.x86_64 0:8.1.4-1.el7.remi php81-php-pecl-zip.x86_64 0:1.20.0-1.el7.remi
php81-php-xml.x86_64 0:8.1.4-1.el7.remi php81-runtime.x86_64 0:8.1-1.el7.remi
完了しました!
2. パッケージリポジトリをアップデートする
・パッケージリポジトリを更新します
$ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
remi-release-7.rpm | 27 kB 00:00:00
/var/tmp/yum-root-49dq_S/remi-release-7.rpm を調べています: remi-release-7.9-5.el7.remi.noarch
・・・
更新:
remi-release.noarch 0:7.9-5.el7.remi
完了しました!
3. 新バージョンをインストールする
・yum からPHPをインストールします
$ sudo yum install --enablerepo=epel,remi.,remi-php82, php php-cli php-common php-gd php-mbstring php-mysqlnd php-pdo php-xml
インストール:
php.x86_64 0:8.0.25-1.amzn2 php-cli.x86_64 0:8.0.25-1.amzn2 php-common.x86_64 0:8.0.25-1.amzn2 php-gd.x86_64 0:8.0.25-1.amzn2
php-mbstring.x86_64 0:8.0.25-1.amzn2 php-mysqlnd.x86_64 0:8.0.25-1.amzn2 php-pdo.x86_64 0:8.0.25-1.amzn2 php-xml.x86_64 0:8.0.25-1.amzn2
完了しました!
$ yum list installed |grep php
gd3php.x86_64 2.3.3-4.el7.remi @remi-safe
oniguruma5php.x86_64 6.9.7.1-1.el7.remi @remi-safe
php.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-cli.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php-common.x86_64 8.0.25-1.amzn2 @amzn2extra-php8.0
php82-php-common.x86_64 8.2.1-1.el7.remi @remi-safe
php82-php-pecl-zip.x86_64 1.21.1-1.el7.remi @remi-safe
php82-runtime.x86_64 8.2-2.el7.remi @remi-safe
バージョンが8.1から8.0へバージョンダウンしてました。。
$ php -v
PHP 8.0.25 (cli) (built: Oct 31 2022 22:42:34) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.25, Copyright (c) Zend Technologies
原因は、
EC2ではamazon-linuxリポジトリが優先され、—enablerepo
で別のリポジトリを指定しても有効にならないためのようです。
amazon-linux-extrasに登録されてるパッケージを確認してみると、PHP8.2は入っていませんでした。。。amazon-linuxのリポジトリを封じたい。
$ amazon-linux-extras list
0 ansible2 available \
[ =2.4.2 =2.4.6 =2.8 =stable ]
2 httpd_modules available [ =1.0 =stable ]
3 memcached1.5 available \
[ =1.5.1 =1.5.16 =1.5.17 ]
6 postgresql10 available [ =10 =stable ]
9 R3.4 available [ =3.4.3 =stable ]
10 rust1 available \
[ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 =1.38.0
=stable ]
18 libreoffice available \
[ =5.0.6.2_15 =5.3.6.1 =stable ]
19 gimp available [ =2.8.22 ]
20 docker=latest enabled \
[ =17.12.1 =18.03.1 =18.06.1 =18.09.9 =stable ]
21 mate-desktop1.x available \
[ =1.19.0 =1.20.0 =stable ]
22 GraphicsMagick1.3 available \
[ =1.3.29 =1.3.32 =1.3.34 =stable ]
23 tomcat8.5 available \
[ =8.5.31 =8.5.32 =8.5.38 =8.5.40 =8.5.42 =8.5.50
=stable ]
24 epel=latest enabled [ =7.11 =stable ]
25 testing available [ =1.0 =stable ]
26 ecs available [ =stable ]
27 corretto8 available \
[ =1.8.0_192 =1.8.0_202 =1.8.0_212 =1.8.0_222 =1.8.0_232
=1.8.0_242 =stable ]
29 golang1.11 available \
[ =1.11.3 =1.11.11 =1.11.13 =stable ]
30 squid4 available [ =4 =stable ]
32 lustre2.10 available \
[ =2.10.5 =2.10.8 =stable ]
33 java-openjdk11 available [ =11 =stable ]
34 lynis available [ =stable ]
36 BCC available [ =0.x =stable ]
37 mono available [ =5.x =stable ]
38 nginx1 available [ =stable ]
39 ruby2.6 available [ =2.6 =stable ]
40 mock available [ =stable ]
41 postgresql11 available [ =11 =stable ]
43 livepatch available [ =stable ]
44 python3.8 available [ =stable ]
45 haproxy2 available [ =stable ]
46 collectd available [ =stable ]
47 aws-nitro-enclaves-cli available [ =stable ]
48 R4 available [ =stable ]
49 kernel-5.4 available [ =stable ]
50 selinux-ng available [ =stable ]
51 php8.0=latest enabled [ =stable ]
52 tomcat9 available [ =stable ]
53 unbound1.13 available [ =stable ]
54 mariadb10.5 available [ =stable ]
55 kernel-5.10 available [ =stable ]
56 redis6 available [ =stable ]
57 ruby3.0 available [ =stable ]
58 postgresql12 available [ =stable ]
59 postgresql13 available [ =stable ]
60 mock2 available [ =stable ]
61 dnsmasq2.85 available [ =stable ]
62 kernel-5.15 available [ =stable ]
63 postgresql14 available [ =stable ]
64 firefox available [ =stable ]
65 lustre available [ =stable ]
_ php8.1 available [ =stable ]
67 awscli1 available [ =stable ]
解決策、
amazon-linuxリポジトリを--disablerepo
で無効にしてあげます。
$ sudo yum -y install php php-cli php-common php-gd php-mbstring php-mysqlnd php-pdo php-pecl-zip php-xml runtime --enablerepo=epel,remi,remi-php82 --disablerepo=amzn2-core,amzn2extra-php8.0
$ yum list installed |grep php
gd3php.x86_64 2.3.3-4.el7.remi @remi-safe
oniguruma5php.x86_64 6.9.7.1-1.el7.remi @remi-safe
php.x86_64 8.2.1-1.el7.remi @remi-php82
php-cli.x86_64 8.2.1-1.el7.remi @remi-php82
php-common.x86_64 8.2.1-1.el7.remi @remi-php82
php-gd.x86_64 8.2.1-1.el7.remi @remi-php82
php-mbstring.x86_64 8.2.1-1.el7.remi @remi-php82
php-mysqlnd.x86_64 8.2.1-1.el7.remi @remi-php82
php-pdo.x86_64 8.2.1-1.el7.remi @remi-php82
php-pecl-zip.x86_64 1.21.1-1.el7.remi.8.2 @remi-php82
php-sodium.x86_64 8.2.1-1.el7.remi @remi-php82
php-xml.x86_64 8.2.1-1.el7.remi @remi-php82
無事、バージョンアップすることができました!
$ php -v
PHP 8.2.1 (cli) (built: Jan 3 2023 18:40:55) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.1, Copyright (c) Zend Technologies
ステージング環境ではすんなりバージョンアップできたので油断してましたが、おかげでパッケージリポジトリの知識が深まりました。めでたし、めでたし。