こちらに書いたやり方(amazon-linux-extras)で環境構築したAmazon Linux 2のPHP7.4に、php-imapが入っていなかったのでインストールしようとしたらハマったので、メモ。
ハマった理由というのは、amazon-linux-extrasのyumリポジトリには、そもそもphp-imapが入っていないからで、といって、他のリポジトリにあるphp-imapを入れようとするといろいろと衝突が起きてしまうわけです。
そこで、どうするかというと、ソースコードからPHPをビルドして、できあがったphp-imapのrpmファイルをインストールすれば良いというもの。
この方法(下記で説明する内容)は、こちらのサイトを参考にしました。ありがとうございます。
PHP7.4のソースコードをダウンロード
まず、PHP7.4のソースコードをダウンロードします。yumdownloader
を使うことで、現在yumでインストールされているPHPのソースコードがダウンロードできます。
yumdownloader --source php
コマンドの実行が完了したらダウンロードされたファイルがあるので、展開します。
rpm -ihv php-7.4.21-1.amzn2.src.rpm
php-imapを含んだビルドを行うように指示
rpmbuild/SPECS/php.spec
を下記のように、編集します。
これでビルド結果にphp-imapが含まれるようになります。
%global with_zip 1
%global with_libzip 1
# Not yet compatible with firebird 3
# https://bugs.php.net/bug.php?id=73512
%global with_firebird 0
%global with_dblib 0
%global with_libcclient 1 ←ここを0から1に変更
%global with_lmdb 0
%global with_argon 0
%global with_sodium 1
%global with_tidy 0
開発ツールのインストール
ビルド用のコマンドがいろいろと必要になるので、Development Tools
をグループインストールします。
yum groupinstall "Development Tools"
必要なパッケージの確認
PHPのビルドにいろいろと依存パッケージが必要になるので、下記のコマンド(ビルドのコマンドですが・・・)で、確認します。
rpmbuild -ba php.spec
いろいろと足りないパッケージが表示されるので、下記のようにインストールします。
yum install bzip2-devel curl-devel httpd-devel pam-devel openssl-devel sqlite-devel libedit-devel libtool-ltdl-devel libzip-devel systemtap-sdt-devel libacl-devel systemd-devel krb5-devel libc-client-devel cyrus-sasl-devel openldap-devel postgresql-devel unixODBC-devel libxml2-devel net-snmp-devel libxslt-devel libxml2-devel oniguruma-devel libjpeg-devel libpng-devel freetype-devel libXpm-devel libwebp-devel gmp-devel libdb-devel tokyocabinet-devel aspell-devel libicu-devel enchant-devel libsodium-devel
もう一度、同じコマンドを実行します。もともとビルドコマンドなので、依存パッケージの不足がなければ、ビルドが始まります。
rpmbuild -ba php.spec
ビルドにはしばらくかかります。
ビルドが終わると、rpmbuild/RPMS/x86_64
にいろいろとrpmファイルができているので、php-imapをyumでインストールします。
yum install rpmbuild/RPMS/x86_64/php-imap-7.4.21-1.amzn2.x86_64.rpm
これで、Amazon Linux 2のPHP7.4で、php-imapが使えるようになっているはずです。