Amazon Linux 2へPHP 7.4をインストールしたので備忘録がてら残しておく。
PHP 7.4.1
前提
2019/12/28 時点の情報
Amazon Linux 2 ( ami-068a6cefc24c301d2 )
amazon-linux-extras
Amazon Linux 2には amazon-linux-extras
という便利コマンドがある。このコマンドを使うとサードパーティ製パッケージを割と新しめなバージョンでサクッとインストールできる。
aws.amazon.com
だがしかしbut、12/28時点ではPHP 7.4はサポートされておらず、フォーラムを見る限り予定も不明確。
Thread: amazon-linux-extras support for PHP 7.4
なので現時点でAmazon Linux 2でPHP 7.4を使うには、自分で頑張ってインストールする必要がある。
P.S.
この記事を書いた時点では入れられなかったが、2020/09/17 現在はamazon-linux-extrasでPHP 7.4を入れられるようになっている。今からPHP 7.4を入れるならそっちの方法が正攻法だと思われる。
ただし、この記事で紹介している方法は新バージョンのリリースからamazon-linux-extrasで使えるようになるまでラグの間は有用な方法ではあるので記事としては残しておく。
ざっくり手順
EPELリポジトリを使えるようにする
remiリポジトリを使えるようにする
remiリポジトリを使って、PHP 7.4をインストールする
コマンドでいうとこちら
sudo amazon-linux-extras enable epel
sudo yum clean metadata
sudo yum install -y epel-release
sudo rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum install --enablerepo remi -y php74
sudo ln -sf /usr/bin/php74 /usr/bin/php
一つづつ解説していく。
解説
1. EPELリポジトリを使えるようにする
fedoraproject.org
イカしたサードパーティ製ライブラリを提供するyumリポジトリ。有名な先進OS Fedoraのメンテナがメンテしてるので安心。
EPELはamazon-linux-extrasでインストール出来る。
$ sudo amazon-linux-extras enable epel
0 ansible2 available [ =2.4.2 =2.4.6 =2.8 ]
2 httpd_modules available [ =1.0 ]
3 memcached1.5 available \
[ =1.5.1 =1.5.16 =1.5.17 ]
5 postgresql9.6 available [ =9.6.6 =9.6.8 ]
6 postgresql10 available [ =10 ]
8 redis4.0 available [ =4.0.5 =4.0.10 ]
9 R3.4 available [ =3.4.3 ]
10 rust1 available \
[ =1.22.1 =1.26.0 =1.26.1 =1.27.2 =1.31.0 =1.38.0 ]
11 vim available [ =8.0 ]
13 ruby2.4 available [ =2.4.2 =2.4.4 =2.4.7 ]
15 php7.2 available \
[ =7.2.0 =7.2.4 =7.2.5 =7.2.8 =7.2.11 =7.2.13 =7.2.14
=7.2.16 =7.2.17 =7.2.19 =7.2.21 =7.2.22 =7.2.23
=7.2.24 ]
16 php7.1 available \
[ =7.1.22 =7.1.25 =7.1.27 =7.1.28 =7.1.30 =7.1.31
=7.1.32 =7.1.33 ]
17 lamp-mariadb10.2-php7.2 available \
[ =10.2.10_7.2.0 =10.2.10_7.2.4 =10.2.10_7.2.5
=10.2.10_7.2.8 =10.2.10_7.2.11 =10.2.10_7.2.13
=10.2.10_7.2.14 =10.2.10_7.2.16 =10.2.10_7.2.17
=10.2.10_7.2.19 =10.2.10_7.2.21 =10.2.10_7.2.22
=10.2.10_7.2.23 =10.2.10_7.2.24 ]
18 libreoffice available [ =5.0.6.2_15 =5.3.6.1 ]
19 gimp available [ =2.8.22 ]
20 docker=latest enabled \
[ =17.12.1 =18.03.1 =18.06.1 =18.09.9 ]
21 mate-desktop1.x available [ =1.19.0 =1.20.0 ]
22 GraphicsMagick1.3 available [ =1.3.29 =1.3.32 ]
23 tomcat8.5 available \
[ =8.5.31 =8.5.32 =8.5.38 =8.5.40 =8.5.42 ]
24 epel=latest enabled [ =7.11 ]
25 testing available [ =1.0 ]
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 ]
28 firecracker available [ =0.11 ]
29 golang1.11 available \
[ =1.11.3 =1.11.11 =1.11.13 ]
30 squid4 available [ =4 ]
31 php7.3 available \
[ =7.3.2 =7.3.3 =7.3.4 =7.3.6 =7.3.8 =7.3.9 =7.3.10
=7.3.11 ]
32 lustre2.10 available [ =2.10.5 ]
33 java-openjdk11 available [ =11 ]
34 lynis available [ =stable ]
35 kernel-ng available [ =stable ]
36 BCC available [ =0.x ]
37 mono available [ =5.x ]
38 nginx1 available [ =stable ]
39 ruby2.6 available [ =2.6 ]
40 mock available [ =stable ]
41 postgresql11 available [ =11 ]
Now you can install:
# yum clean metadata
# yum install epel-release
$ sudo yum clean metadata
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
リポジトリーを清掃しています: amzn2-core amzn2extra-docker amzn2extra-epel
10 個の metadata ファイルを削除しました
4 個の sqlite ファイルを削除しました
0 個の metadata ファイルを削除しました
$ sudo yum install -y epel-release
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
amzn2-core | 2.4 kB 00:00:00
amzn2extra-docker | 1.3 kB 00:00:00
amzn2extra-epel | 1.3 kB 00:00:00
(1/5): amzn2-core/2/x86_64/group_gz | 2.5 kB 00:00:00
(2/5): amzn2-core/2/x86_64/updateinfo | 181 kB 00:00:00
(3/5): amzn2extra-epel/2/x86_64/primary_db | 1.8 kB 00:00:00
(4/5): amzn2extra-docker/2/x86_64/primary_db | 59 kB 00:00:00
(5/5): amzn2-core/2/x86_64/primary_db | 36 MB 00:00:00
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ epel-release.noarch 0:7-11 を インストール
--> 依存性解決を終了しました。
依存性を解決しました
=======================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
=======================================================================================================================================
インストール中:
epel-release noarch 7-11 amzn2extra-epel 15 k
トランザクションの要約
=======================================================================================================================================
インストール 1 パッケージ
総ダウンロード容量: 15 k
インストール容量: 24 k
Downloading packages:
epel-release-7-11.noarch.rpm | 15 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
インストール中 : epel-release-7-11.noarch 1/1
検証中 : epel-release-7-11.noarch 1/1
インストール:
epel-release.noarch 0:7-11
完了しました!
2.remiリポジトリを使えるようにする
rpms.remirepo.net
remiもイカしたサードパーティ製ライブラリを提供するyumリポジトリ。
$ sudo rpm -Uvh https://rpms.remirepo.net/enterprise/remi-release-7.rpm
https://rpms.remirepo.net/enterprise/remi-release-7.rpm を取得中
警告: /var/tmp/rpm-tmp.cwom6N: ヘッダー V4 DSA/SHA1 Signature、鍵 ID 00f97f56: NOKEY
準備しています... ################################# [100%]
更新中 / インストール中...
1:remi-release-7.7-1.el7.remi ################################# [100%]
3. PHP 7.4を入れる
あとはお目当てのものをインストールしていくだけ。
EPELもremiも、既存リポジトリと競合しないように無効化された状態でリポジトリ登録されているので、使うときはyumコマンドに --enablerepo remi
のようにオプションを付けて明示的に有効化する必要がある。
$ sudo yum install --enablerepo remi -y php74
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
(1/2): remi/primary_db | 2.6 MB 00:00:02
(2/2): remi-safe/primary_db | 1.7 MB 00:00:03
250 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php74.x86_64 0:1.0-1.el7.remi を インストール
...
インストール:
php74.x86_64 0:1.0-1.el7.remi
依存性関連をインストールしました:
audit-libs-python.x86_64 0:2.8.1-3.amzn2.1 checkpolicy.x86_64 0:2.5-6.amzn2
environment-modules.x86_64 0:3.2.10-10.amzn2.0.2 libX11.x86_64 0:1.6.5-2.amzn2.0.2
libX11-common.noarch 0:1.6.5-2.amzn2.0.2 libXau.x86_64 0:1.0.8-2.1.amzn2.0.2
libcgroup.x86_64 0:0.41-21.amzn2 libselinux-python.x86_64 0:2.5-12.amzn2.0.2
libsemanage-python.x86_64 0:2.5-11.amzn2 libxcb.x86_64 0:1.12-1.amzn2.0.2
ncurses-compat-libs.x86_64 0:6.0-8.20170212.amzn2.1.3 php74-php-cli.x86_64 0:7.4.1-1.el7.remi
php74-php-common.x86_64 0:7.4.1-1.el7.remi php74-php-json.x86_64 0:7.4.1-1.el7.remi
php74-runtime.x86_64 0:1.0-1.el7.remi policycoreutils-python.x86_64 0:2.5-22.amzn2
python-IPy.noarch 0:0.75-6.amzn2.0.1 setools-libs.x86_64 0:3.3.8-2.amzn2.0.2
tcl.x86_64 1:8.5.13-8.amzn2.0.2
完了しました!
php-mbstring
などのPHP拡張を入れたいときは、 php74-
というprefixをつける。 php-mbstring
の場合は php74-php-mbstring
、といった具合。
$ sudo yum install --enablerepo remi -y php74-php-mbstring
読み込んだプラグイン:extras_suggestions, langpacks, priorities, update-motd
250 packages excluded due to repository priority protections
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php74-php-mbstring.x86_64 0:7.4.1-1.el7.remi を インストール
...
インストール:
php74-php-mbstring.x86_64 0:7.4.1-1.el7.remi
依存性関連をインストールしました:
oniguruma5.x86_64 0:6.9.4-1.el7.remi
完了しました!
デフォルトでは php74
というコマンド名でインストールされる。symlinkを貼って php
で呼べるようにしておくと便利。
$ php --version
-bash: php: コマンドが見つかりません
$ which php74
/usr/bin/php74
$ sudo ln -sf /usr/bin/php74 /usr/bin/php
$ php --version
PHP 7.4.1 (cli) (built: Dec 17 2019 16:35:58) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
Happy PHP 7.4 Life!