はじめに

Red Hat社が AWS 上で配布するコミュニティ AMI を使用し、
EC2 上に起動した Red Hat Enterprise Linux 9 の環境において、
デフォルト状態では PHP 8.0系がインストールされる状態にあります。

PHP 8.0系は 2023/11/26 で EOL を迎えており、今から導入することは推奨されません。
本記事では最新の8.3系を導入するには?について記載しています。
Unsupported Branches

 

結論

PHP 8.2系および8.3系は remi リポジトリで提供がありますので、
subscription-manager を無効化した上で、Appstream を指定してインストールします。

# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y
# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
# cat /etc/yum/pluginconf.d/subscription-manager.conf
[main]
enabled=0

# When following option is set to 1, then all repositories defined outside redhat.repo will be disabled
# every time subscription-manager plugin is triggered by dnf or yum
disable_system_repos=0
# dnf module install php:remi-8.3 -y
# php -v
PHP 8.3.1 (cli) (built: Dec 20 2023 12:44:38) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies

 

EC2 インスタンス起動直後

本記事では RHEL 9.2 を使用します。

AMI名 AMI ID
RHEL-9.2.0_HVM-20230905-x86_64-38-Hourly2-GP2 ami-04fdeff70b7359022
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.2 (Plow)

デフォルト状態での有効なリポジトリは Red Hat社が提供する BaseOS, AppStream および
rhui-client-config-server-9 があります。

# dnf repolist
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

repo id repo name
rhel-9-appstream-rhui-rpms Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)
rhel-9-baseos-rhui-rpms Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs)
rhui-client-config-server-9 Red Hat Enterprise Linux 9 Client Configuration

利用可能な PHP バージョンを確認すると 8.1系の提供がありました。

# dnf module list php
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Last metadata expiration check: 0:00:41 ago on Wed 27 Dec 2023 05:25:50 AM UTC.
Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)
Name Stream Profiles Summary
php 8.1 common [d], devel, minimal PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

特に何も考えずに PHP をインストールすると、AppStream リポジトリ経由で 8.0.30 が入るようです。

# dnf install php -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Last metadata expiration check: 0:02:31 ago on Wed 27 Dec 2023 05:03:51 AM UTC.
Dependencies resolved.
============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
============================================================================================================================================================================================================================================
Installing:
php x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 8.8 k
Installing dependencies:
libxslt x86_64 1.1.34-9.el9 rhel-9-appstream-rhui-rpms 247 k
nginx-filesystem noarch 1:1.20.1-14.el9_2.1 rhel-9-appstream-rhui-rpms 11 k
oniguruma x86_64 6.9.6-1.el9.5 rhel-9-appstream-rhui-rpms 221 k
php-common x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 684 k
Installing weak dependencies:
php-cli x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 3.1 M
php-fpm x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 1.6 M
php-mbstring x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 470 k
php-opcache x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 512 k
php-pdo x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 85 k
php-xml x86_64 8.0.30-1.el9_2 rhel-9-appstream-rhui-rpms 138 k

Transaction Summary
============================================================================================================================================================================================================================================
Install 11 Packages
# php -v
PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies

一度アンインストールし、Stream 8.1 を選択した上で PHP を再度インストールすることで 8.1系が入りました。

# dnf module install php:8.1 -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Last metadata expiration check: 0:03:35 ago on Wed 27 Dec 2023 05:25:50 AM UTC.
Dependencies resolved.
============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
============================================================================================================================================================================================================================================
Installing group/module packages:
php-cli x86_64 8.1.14-1.module+el9.2.0+17911+b059dfc2 rhel-9-appstream-rhui-rpms 3.5 M
php-common x86_64 8.1.14-1.module+el9.2.0+17911+b059dfc2 rhel-9-appstream-rhui-rpms 687 k
php-fpm x86_64 8.1.14-1.module+el9.2.0+17911+b059dfc2 rhel-9-appstream-rhui-rpms 1.8 M
php-mbstring x86_64 8.1.14-1.module+el9.2.0+17911+b059dfc2 rhel-9-appstream-rhui-rpms 476 k
php-xml x86_64 8.1.14-1.module+el9.2.0+17911+b059dfc2 rhel-9-appstream-rhui-rpms 147 k
Installing dependencies:
libxslt x86_64 1.1.34-9.el9 rhel-9-appstream-rhui-rpms 247 k
nginx-filesystem noarch 1:1.20.1-14.el9_2.1 rhel-9-appstream-rhui-rpms 11 k
oniguruma x86_64 6.9.6-1.el9.5 rhel-9-appstream-rhui-rpms 221 k
Installing module profiles:
php/common
Enabling module streams:
php 8.1

Transaction Summary
============================================================================================================================================================================================================================================
Install 8 Packages
# php -v
PHP 8.1.14 (cli) (built: Jan 4 2023 17:23:14) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.1.14, Copyright (c) Zend Technologies

ただ、8.1系は本記事を書いている段階で EOL を迎えるまで1年を切っており、
2024/11/25 でサポートが終了となります。

8.2系もしくは8.3系をインストールする方法を確認します。
Supported Versions

 

EPEL, remiリポジトリ追加

Appstream リポジトリでは現状PHP 8.1系の提供になるため、EPEL, remi リポジトリを追加します。

# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm -y
# dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm -y
# dnf repolist
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

repo id repo name
epel Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264 Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
remi-modular Remi's Modular repository for Enterprise Linux 9 - x86_64
remi-safe Safe Remi's RPM repository for Enterprise Linux 9 - x86_64
rhel-9-appstream-rhui-rpms Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)
rhel-9-baseos-rhui-rpms Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs)
rhui-client-config-server-9 Red Hat Enterprise Linux 9 Client Configuration Red Hat Enterprise Linux 9 Client Configuration

両リポジトリを追加した後、8.2系および8.3系がインストール可能になります。

# dnf module list php
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Remi's Modular repository for Enterprise Linux 9 - x86_64 248 kB/s | 644 kB 00:02
Safe Remi's RPM repository for Enterprise Linux 9 - x86_64 317 kB/s | 973 kB 00:03
Last metadata expiration check: 0:00:01 ago on Wed 27 Dec 2023 05:44:01 AM UTC.
Remi's Modular repository for Enterprise Linux 9 - x86_64
Name Stream Profiles Summary
php remi-7.4 common [d], devel, minimal PHP scripting language
php remi-8.0 common [d], devel, minimal PHP scripting language
php remi-8.1 common [d], devel, minimal PHP scripting language
php remi-8.2 common [d], devel, minimal PHP scripting language
php remi-8.3 common [d], devel, minimal PHP scripting language

Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)
Name Stream Profiles Summary
php 8.1 [e] common [d] [i], devel, minimal PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

 

subscription-manager 無効化

EPEL や Remi リポジトリ経由でパッケージのインストールを試みると、
subscription-manager でサブスクリプション登録を促すメッセージが表示されます。

# dnf module install php:remi-8.3 -y
Updating Subscription Management repositories.
Unable to read consumer identity

This system is not registered with an entitlement server. You can use subscription-manager to register.

Last metadata expiration check: 0:01:50 ago on Wed 27 Dec 2023 05:44:01 AM UTC.
Dependencies resolved.
The operation would result in switching of module 'php' stream '8.1' to stream 'remi-8.3'
Error: It is not possible to switch enabled streams of a module unless explicitly enabled via configuration option module_stream_switch.
It is recommended to rather remove all installed content from the module, and reset the module using 'dnf module reset ' command. After you reset the module, you can install the other stream.

実際には RHEL AMI には、アップデートやメンテナンスによる修正を受ける、
基本サブスクリプションが含まれているため、subscription-manager に登録する必要はありません。

subscription-manager はデフォルト状態で enabled=1 (有効) になっているので enabled=0 (無効) にします。

# cat /etc/yum/pluginconf.d/subscription-manager.conf
[main]
enabled=0

# When following option is set to 1, then all repositories defined outside redhat.repo will be disabled
# every time subscription-manager plugin is triggered by dnf or yum
disable_system_repos=0

 

PHP 8.3系のインストール

以下の通り、晴れて8.3系をインストールすることができました。

# dnf module install php:remi-8.3 -y
Last metadata expiration check: 0:17:30 ago on Wed 27 Dec 2023 05:44:01 AM UTC.
Dependencies resolved.
============================================================================================================================================================================================================================================
Package Architecture Version Repository Size
============================================================================================================================================================================================================================================
Upgrading:
php-cli x86_64 8.3.1-1.el9.remi remi-modular 5.5 M
php-common x86_64 8.3.1-1.el9.remi remi-modular 1.2 M
php-fpm x86_64 8.3.1-1.el9.remi remi-modular 1.9 M
php-mbstring x86_64 8.3.1-1.el9.remi remi-modular 575 k
php-xml x86_64 8.3.1-1.el9.remi remi-modular 216 k
Installing dependencies:
oniguruma5php x86_64 6.9.9-1.el9.remi remi-safe 219 k
Installing module profiles:
php/common
Enabling module streams:
php remi-8.3

Transaction Summary
============================================================================================================================================================================================================================================
Install 1 Package
Upgrade 5 Packages
# php -v
PHP 8.3.1 (cli) (built: Dec 20 2023 12:44:38) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.1, Copyright (c) Zend Technologies