このすみノート

Webエンジニアが技術や趣味を書くブログです。

Amazon Linux 2のamazon-linux-extrasでのPHPインストール

業務でAmazon Linux 2を扱っているのですが、初回インストール作業を整理する作業がありました。 ごく一般的なWEBシステムでプログラミング言語はPHPなのですが、インストール時にいくつか気づいたことがあったので、共有します。

amazon-linux-extrasとは

Amazon Linux 2に存在する、Extras Library と呼ばれるパッケージ群を利用するコマンドです。 わかりやすい解説などは、クラスメソッドさんの記事をご確認ください。

dev.classmethod.jp

特定パッケージにおいて各種新バージョンをインストールでき、かつ公式がサポートしている安心感があります。

簡単に言ってしまうと、Amazonが公式サポートした新バージョンをyumで扱えるようにする仕組みです。 https://www.nedia.ne.jp/blog/tech/aws/2019/04/16/13991

Extras Libraryで使えるPHPは、常に最新版というわけではない

PHP8.2がリリースされて一ヶ月経過したため、そろそろ使っても大丈夫かと思いPHP8.2でリリースしようかと思っていたのですが、amazon-linux-extrasにありませんでした。

実際に、amazon-linux-extrasで使えるPHPを出力してみたのが次のコマンドです。

$ docker run -it amazonlinux:2 /bin/bash
bash-4.2# amazon-linux-extras list | grep php
 42  php7.4                   available    [ =stable ]
 51  php8.0                   available    [ =stable ]
 66  php8.1                   available    [ =stable ]

PHP8.1に対応したのも最近の出来事である

最終的に公式フォーラムへたどりついたのですが、PHP8.1が扱えるようになったのは、思いのほか最近の出来事なようです。

rePost-User-2313392 a month ago (<= おおよそ一ヶ月前?)
Good news. Amazon-Linux-extras 8.1 is AVAILABLE NOW
https://repost.aws/questions/QUsfhDbww4SAy8i5Jmd4vcMg/amazon-linux-2-amazon-linux-extras-php-8-1-support

amazon-linux-extras install phpでインストールされるもの

amazon-linux-extras install php8.1 を、実際にやってみます。 何がインストールされるのか見てのとおりですが、PHP本体に加え、php-fpmもインストールする特徴があります。

bash-4.2# amazon-linux-extras install php8.1
Installing php-pdo, php-fpm, php-mysqlnd, php-cli, php-json
... 
==================================================================================================================
 Package                           Arch         Version                             Repository               Size
==================================================================================================================
Installing:
 php-cli                           x86_64       8.1.12-1.amzn2                      amzn2extra-php8.1       5.6 M
 php-common                        x86_64       8.1.12-1.amzn2                      amzn2extra-php8.1       1.2 M
 php-fpm                           x86_64       8.1.12-1.amzn2                      amzn2extra-php8.1       1.9 M
 php-mysqlnd                       x86_64       8.1.12-1.amzn2                      amzn2extra-php8.1       184 k
 php-pdo                           x86_64       8.1.12-1.amzn2                      amzn2extra-php8.1       125 k
Installing for dependencies:
 ... 省略

Transaction Summary
==================================================================================================================
Install  5 Packages (+30 Dependent packages)

amazon-linux-extras enable php

amazon-linux-extras installではなく、yumコマンドでインストールするアプローチがあります。 それが、amazon-linux-extras enable php8.1です。

enableを一度実行すると、yum installでのインストールが可能です。

bash-4.2# amazon-linux-extras enable php8.1
 ...省略
  _  php7.4                   available    [ =stable ]
  _  php8.0                   available    [ =stable ]
 66  php8.1=latest            enabled      [ =stable ]
 ...省略

Now you can install:
 # yum clean metadata
 # yum install php-cli php-pdo php-fpm php-json php-mysqlnd
bash-4.2#

yum install php

Now you can installに書いてあるとおりなのですが、enableした後にyum installを実行してみます。 Repositoryがphp8.1になっており、特定したバージョンでインストールされることがわかりました。

bash-4.2# amazon-linux-extras enable php8.1
bash-4.2# yum install php-cli
Loaded plugins: ovl, priorities
amzn2-core                                                                                 | 3.7 kB  00:00:00
amzn2extra-php8.1                                                                          | 3.0 kB  00:00:00

==================================================================================================================
 Package              Arch             Version                                  Repository                   Size
==================================================================================================================
Installing:
 php-cli              x86_64           8.1.12-1.amzn2                           amzn2extra-php8.1           5.6 M
Installing for dependencies:
 libedit              x86_64           3.0-12.20121213cvs.amzn2.0.2             amzn2-core                   93 k
 libzip               x86_64           1.3.2-1.amzn2.0.1                        amzn2-core                   62 k
 php-common           x86_64           8.1.12-1.amzn2                           amzn2extra-php8.1           1.2 M

Transaction Summary
==================================================================================================================
Install  1 Package (+3 Dependent packages)

Total download size: 7.0 M
Installed size: 34 M
Is this ok [y/d/N]:

php.iniはproductionがインストールされる

php.iniには大きく分けてphp.ini-developmentとphp.ini-productionがありますが、amazon-linux-extras installではproductionが入ります。

bash-4.2# cat /etc/php.ini | grep production
; in production environments and one that is recommended to be used in
; php.ini-production contains settings which hold security, performance and
; recommending using the production ini in production and testing environments.
; php.ini-development is very similar to its production variant, except it is
; This is php.ini-production INI file.

インストール後に実ファイルを探してみたら、php.ini-developmentはdoc配下に見つかりました。

bash-4.2# find / | grep php.ini
/etc/php.ini
/usr/share/doc/php-common-8.1.12/php.ini-development
/usr/share/doc/php-common-8.1.12/php.ini-production

あとがき

想定より言語バージョンアップへの公式対応が遅かったという欠点こそあるものの、Amazon公式である点とインストール作業自体は簡単でした。

Amazon Linux 2にPHPをインストールする選択肢としては、わりとお手軽で良さそうです。