Amazon Linux 2023では、php-imapが使えない
Amazon Linux 2023では、デフォルトではphp-imapが使えません(パッケージとして配布されていません)。
RedHat系Linuxではありますが、EPELやRemiといった追加リポジトリも受け付けてくれません。
では、php-imapは使えないのかというとそうではありません。dnf(パッケージ管理ソフト)の大元である、rpm自体は削除されずに残っているようなので、rpmからビルドします。
※こちらの記事を参考にさせていただきました。ありがとうございます。
Amazon Linux 2 のPHP7.4にphp-imapをインストールする
参考サイトをもとに、Amazon Linux 2023のコマンドに読み替えていく
# phpのrpmをダウンロード
dnf download --source php
# mockbuildユーザー、mockグループを作成しておく(rpm実行時にエラーが出るため)
useradd -s /sbin/nologin mockbuild
groupadd mock
# rpmをインストール
rpm -ih php8.2-8.2.9-1.amzn2023.0.3.src.rpm
# ->rpmbuildというディレクトリが作成される。
# ビルド用のツールをインストール
dnf groupinstall "Development Tools"
rpmbuild/SPECS/php.spec
を少し編集する。
%package imap
Summary: A module for PHP %{phpver} applications that use IMAP
# All files licensed under PHP version 3.01
License: PHP
Provides: php-imap = %{version}-%{release}
Provides: php-imap%{?_isa} = %{version}-%{release}
Requires: php-common%{?_isa} = %{version}-%{release}
BuildRequires: pkgconfig(krb5)
BuildRequires: pkgconfig(krb5-gssapi)
BuildRequires: openssl-devel >= 1.0.2
#BuildRequires: libc-client-devel <- コメントアウト(後ほどソースからビルドするため)
ビルド用のコマンドを実行し、不足しているパッケージを導入していく。
rpmbuild -ba php.spec --with imap
#setting SOURCE_DATE_EPOCH=1694131200
#error: Failed build dependencies:
# aspell-devel >= 0.50.0 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# bzip2-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# gmp-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# httpd-devel >= 2.0.46-1 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# httpd-filesystem is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# krb5-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# libacl-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# libpq-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# libtidy-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# libtool-ltdl-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# lmdb-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# net-snmp-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# nginx-filesystem is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# openldap-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# openssl-devel >= 1.0.2 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pam-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(enchant-2) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(gdlib) >= 2.1.1 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(icu-i18n) >= 50.1 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(icu-io) >= 50.1 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(icu-uc) >= 50.1 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(krb5) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(krb5-gssapi) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libcurl) >= 7.29.0 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libedit) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libexslt) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libffi) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libpcre2-8) >= 10.30 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libsasl2) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libsodium) >= 1.0.9 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libsystemd) >= 209 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libxml-2.0) is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libxml-2.0) >= 2.7.6 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libxslt) >= 1.1 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(libzip) >= 0.11 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(oniguruma) >= 6.8 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# pkgconfig(sqlite3) >= 3.7.4 is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# smtpdaemon is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# tokyocabinet-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
# unixODBC-devel is needed by php8.2-8.2.9-1.amzn2023.0.3.x86_64
#これらをインストールする。
# pkgconfig経由で読み込むパッケージ類は、https://pkgs.org/search/などで検索してインストールする。
# 今回の場合は下記のようなコマンドになった。
dnf install \
aspell-devel \
bzip2-devel \
cyrus-sasl-devel \
enchant2-devel \
gd-devel \
gmp-devel \
httpd-devel \
httpd-filesystem \
krb5-devel \
krb5-devel \
libacl-devel \
libcurl-devel \
libedit-devel \
libffi-devel \
libicu-devel \
libpq-devel \
libsodium-devel \
libtidy-devel \
libtool-ltdl-devel \
libxslt-devel \
libzip-devel \
lmdb-devel \
net-snmp-devel \
nginx-filesystem \
oniguruma-devel \
openldap-devel \
openssl-devel \
pam-devel \
pcre2-devel \
smtpdaemon \
sqlite-devel \
systemd-devel \
tokyocabinet-devel \
unixODBC-devel
# また、gpgv2というコマンドが必要で、gnupg2というパッケージが必要だが、
# デフォルトでインストールされているgnupg2-minimalとコンフリクトしてしまうので、--allowerasingをつけて入れ替える。
dnf install gnupg2 --allowerasing
こで再度、ビルド用のコマンドを実行すすると、ある程度処理が進むようになる。
rpmbuild -ba php.spec --with imap
が、途中で下記のようなエラーが出る。
configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing. This should not happen. Check config.log for additional information.
これは、libc-clientをインストールしていない事によるエラー。libc-clientをビルドしていく。
libc-clientのビルド
php公式ドキュメントにも、php-imapを利用するにはlibc-clientが必要だと書いてある。
githubからソースコードをダウンロードする。
※このためだけにgitを設定するのは面倒なので、ソースのみダウンロードする。
#openssl 3系は、ライブラリの場所がちがうので、リンクを作ってやる。
cd /usr/local/
ln -s /usr ssl
cd
curl -LO https://github.com/uw-imap/imap/archive/refs/heads/master.tar.gz
tar xf master.tar.gz
cd imap-master
# ビルドする。
make lnp SSLTYPE=unix EXTRACFLAGS=-fPIC
# ソースのインストール
cp -p c-client/*.h /usr/local/include
cp c-client/c-client.a /usr/local/lib/libc-client.a
# php8.2では、c-clientというディレクトリを作成する必要?(こうすると何故か通る)
mkdir /usr/local/c-client/
cp c-client/c-client.a /usr/local/c-client/libc-client.a
phpのパッケージを作成する。
ふたたび、rpmbuild/SPECS/php.spec
のある場所へ移動し、ビルドコマンドを実行。
すると、ビルドが走り出す(インスタンスタイプによっては、かなり時間がかかる)
rpmbuild -ba php.spec --with imap
完了すると、rpmbuild RPMS/x86_64
に色々とrpmファイルができているので、インストールします。
php8.2-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-bcmath-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-bcmath-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-cli-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-cli-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-common-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-common-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-dba-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-dba-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-dbg-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-dbg-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-debugsource-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-devel-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-embedded-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-embedded-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-enchant-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-enchant-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-ffi-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-ffi-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-fpm-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-fpm-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-gd-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-gd-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-gmp-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-gmp-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-imap-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-imap-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-intl-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-intl-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-ldap-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-ldap-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-mbstring-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-mbstring-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-mysqlnd-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-mysqlnd-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-odbc-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-odbc-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-opcache-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-opcache-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-pdo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-pdo-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-pgsql-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-pgsql-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-process-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-process-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-pspell-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-pspell-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-snmp-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-snmp-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-soap-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-soap-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-tidy-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-tidy-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-xml-8.2.9-1.amzn2023.0.2.x86_64.rpm
php8.2-xml-debuginfo-8.2.9-1.amzn2023.0.2.x86_64.rpm
すべて、このrpmからインストールします。
デフォルトのリポジトリからのビルドと混ざってしまうと、インストールはできるものの正常に動作しない関数が出てきます。
dnf install --disablerepo=* \
php8.2{,-{cli,common,devel,fpm,gd,imap,mbstring,opcache,pdo,pgsql,process,xml}}-8.2.9-1.amzn2023.0.2.x86_64.rpm
以上。