1
1

Amazon Linux 2023でphp-imapを利用する

Last updated at Posted at 2023-11-23

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を少し編集する。

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

以上。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1