Techniical-support

Amazon Linux 2でPHP8.0をインストールしてみる

皆さんこんにちは。構築担当の川合です。

今回は、Amazon Linux 2 でPHP8.0をインストールしてみたお話になります。

Opevpnサーバをインストールして外部から接続してみたり、aws cli でリソースを操作してみたりしてAmazon Linux 2 は触っているのですが正式なLAMP環境としてはあまり触ってきていませんでした。

CentOS8の件もあり、これは今一度中身を理解しないといけないと思い色々触ってみました。
とは言え基本Ansibleを使って構築周りは自動化しているのですが、ちょうどPHP周りでエラーを吐いたので記事にしてみました。

エラーが起きた

Amazon Linux とは言えほとんどCentOSに近しいものという理解なので、Ansibleで同じコードを使ってミドルウェアのインストールを実行してみました。するとインストール処理の途中でエラーとなりインストールが途中で失敗してしまう自体が発生しました。

EPELのリポジトリやRemiのリポジトリも追加できていて、yum install のコマンドも実行しているようなのですがぱっと見た限り依存関係周りでエラーが発生しているようでした。

詳細な原因がわからなかったので、実際にサーバ上で同じコマンドを実行してみると以下の結果が返ってきました。

yum install --enablerepo=epel,remi,remi-php80 php

Dependencies Resolved

=====================================================================================================================
 Package                          Arch                Version                          Repository               Size
=====================================================================================================================
Installing:
 php                              x86_64              5.4.16-46.amzn2.0.2              amzn2-core              1.4 M
Installing for dependencies:
 generic-logos-httpd              noarch              18.0.0-4.amzn2                   amzn2-core               19 k
 httpd                            x86_64              2.4.46-1.amzn2                   amzn2-core              1.3 M
 httpd-filesystem                 noarch              2.4.46-1.amzn2                   amzn2-core               23 k
 httpd-tools                      x86_64              2.4.46-1.amzn2                   amzn2-core               87 k
 libzip010-compat                 x86_64              0.10.1-9.amzn2.0.5               amzn2-core               30 k
 mailcap                          noarch              2.1.41-2.amzn2                   amzn2-core               31 k
 mod_http2                        x86_64              1.15.14-2.amzn2                  amzn2-core              147 k
 php-cli                          x86_64              5.4.16-46.amzn2.0.2              amzn2-core              2.8 M
 php-common                       x86_64              5.4.16-46.amzn2.0.2              amzn2-core              563 k

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

インストールしようとしているPHP8.0ではなくOSに付随するPHP5.4がインストールされてしまう事が判明しました。

原因調査

何故かOSに付随するPHP5.4をインストールしようとしているので、リポジトリがうまく追加出来ていないのか?と思い調査してみました。

rpm -q epel-release
epel-release-7-11.noarch
rpm -q remi-release
remi-release-7.9-1.el7.remi.noarch

指定のリポジトリは追加出来ており、インストールコマンドを実行した際にもちゃんと読み込んでいるようです。

Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                    | 3.7 kB  00:00:00     
epel/x86_64/metalink                                                                          | 3.1 kB  00:00:00     
epel                                                                                          | 4.7 kB  00:00:00     
remi                                                                                          | 3.0 kB  00:00:00     
remi-php80                                                                                    | 3.0 kB  00:00:00     
(1/5): epel/x86_64/group_gz                                                                   |  95 kB  00:00:00     
(2/5): epel/x86_64/updateinfo                                                                 | 1.0 MB  00:00:00     
(3/5): epel/x86_64/primary_db                                                                 | 6.9 MB  00:00:00     
(4/5): remi-php80/primary_db                                                                  | 172 kB  00:00:01     
(5/5): remi/primary_db                                                                        | 2.8 MB  00:00:10 

なので、リポジトリ云々ではなくAmazon Linux 側の仕様がCentOSと違うのだと思い調査を継続しました。

解決

CentOSだと php php-devel と導入するパッケージ自体にはバージョンを記載しないのですが、amazon linux 2 では php80-php php80-php-devel とバージョンの後ろにパッケージを記載する必要がありました。

なので、以下のように実行するコマンドを書き換えた所問題なくインストールが完了しました。

yum install --enablerepo=epel,remi,remi-php80 php80-php php80-php-XX ・・・・

インストール自体はこれで問題なく出来たのですが、php.ini などの構成ファイルが少し異なる場所に配置されました。

通常は /etc/php.ini にあるかと思いますが /etc/opt/remi/php80/php.ini にありました。
phpinfo でも確認してみましたが、/etc/opt/remi/php80/ が認識されていました。
※php-fpm などで利用する www.conf も同ディレクトリ配下に設置されています

追記 2021/02/19

検証は少し前に実施していて記事を書くのが遅れていた間に、amazon-linux-extras にPHP8.0が追加されてしました。

amazon-linux-extras |grep php
 15  php7.2                   available    \
 17  lamp-mariadb10.2-php7.2  available    \
 31  php7.3                   available    \
 42  php7.4                   available    [ =stable ]
 51  php8.0                   available    [ =stable ]

ただ、インストール出来るバージョンは【8.0.0】でありremiでは【8.0.2】がインストール出来ます。
最新版を利用するには、remiを利用する必要がありますがamazon-linux-extrasを利用すれば上記の少し特殊な環境ではなく従来通りPHPを利用することが出来ます。

具体的には、インストールの際にphp80 と付ける必要もなく 構成ファイルも従来通りに/etc 配下に設置されています。

最新版の利用が必要でないのであれば、amazon-linux-extras を利用する方がいいのではと思います。

まとめ

何となくある程度を理解したつもりでいましたが、実際に色々試してみると詰まるところが多々ありました。CentOSとほとんど同じ雰囲気で操作することは可能ですが、パッケージ等のレベルまで落とし込んで考えてみると少しずつ違う部分がわかってきました。

利用できるミドルウェアも常に更新されていっているようなので、ベースはCentOS7に近しいですがCentOS8のAppstream の考え方も追加されているような印象です。

一度基礎設計を固めてしまえば大きな変更がないという訳ではなく、定期的に今はどんな感じなのかと確認を入れていく必要があると感じました。

Ansibleで今までのCentOSと同じように作業が自動化出来るように色々作りこんでいきたいと思います。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA