皆さんこんにちは。構築担当の川合です。
今回は、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と同じように作業が自動化出来るように色々作りこんでいきたいと思います。
プロフィール
サーバ構築周り全般を対応しております。
LINK
クラウドベリージャム:プロフィールページ