Amazon Linux 2へPHP 7.4をインストールしたので備忘録がてら残しておく。
前提
- 2019/12/28 時点の情報
- Amazon Linux 2 ( ami-068a6cefc24c301d2 )
amazon-linux-extras
Amazon Linux 2には amazon-linux-extras
という便利コマンドがある。このコマンドを使うとサードパーティ製パッケージを割と新しめなバージョンでサクッとインストールできる。
だがしかし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リポジトリを使えるようにする
イカしたサードパーティ製ライブラリを提供する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リポジトリを使えるようにする
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!