PHPのインストールでzip(php74-php-pecl-zip)のインストールに依存関係の問題で少しはまったのでメモ。php -m で「zip」が表示されてない状態。
環境:PHP/7.4 OS/Amazon Linux2
結論からいうと、Amazon Linux2のリポジトリが邪魔して、依存関係を解決できない状態になってました。
1.libzip-1.3.2-1.amzn2.0.1.x86_64が邪魔してインストールできない
[root@ ~]# yum install php74-php-pecl-zip
--> トランザクションの確認を実行しています。
---> パッケージ php74-php-pecl-zip.x86_64 0:1.19.3-2.el7.remi を インストール
--> 依存性の処理をしています: libzip5(x86-64) >= 1.8.0 のパッケージ: php74-php-pecl-zip-1.19.3-2.el7.remi.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ **libzip5.x86_64 0:1.8.0-2.el7.remi** を インストール
--> 依存性の処理をしています: libzstd(x86-64) >= 1.3.6 のパッケージ: libzip5-1.8.0-2.el7.remi.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: libzip5-1.8.0-2.el7.remi.x86_64 (remi-safe)
要求: libzstd(x86-64) >= 1.3.6
インストール: **libzstd-1.3.3-1.amzn2.0.1.x86_64** (@amzn2-core)
libzstd(x86-64) = 1.3.3-1.amzn2.0.1
利用可能: libzstd-1.3.3-1.amzn2.x86_64 (amzn2-core)
libzstd(x86-64) = 1.3.3-1.amzn2
よく読むと必要なパッケージにremiって書いてあります。
2.libzip-1.3.2-1.amzn2.0.1.x86_64を削除
yum remove libzip-1.3.2-1.amzn2.0.1.x86_64
3.amzn2-coreをrepoを対象から外す。
yum update --disablerepo=amzn2-core
ここがちょっと盲点でした。
まさかAmazon Linux2のリポジトリが邪魔してるなんて思いもしませんでした。
4.改めてphp74-php-pecl-zipをインストール
[root@ ~]# yum install php74-php-pecl-zip
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php74-php-pecl-zip.x86_64 0:1.19.3-2.el7.remi を インストール
--> 依存性の処理をしています: libzip5(x86-64) >= 1.8.0 のパッケージ: php74-php-pecl-zip-1.19.3-2.el7.remi.x86_64
--> 依存性の処理をしています: libzip.so.5()(64bit) のパッケージ: php74-php-pecl-zip-1.19.3-2.el7.remi.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ libzip5.x86_64 0:1.8.0-2.el7.remi を インストール
--> 依存性解決を終了しました。
依存性を解決しました
インストール:
php74-php-pecl-zip.x86_64 0:1.19.3-2.el7.remi
依存性関連をインストールしました:
libzip5.x86_64 0:1.8.0-2.el7.remi
今回の問題の直接的な解決には繋がらなかったけど、パッケージのリポジトリまわりはこの記事が参考になりました。どのリポジトリがきいてるとか、このパッケージはこのリポジトリから入れてるよってのも知ることができます。
https://qiita.com/SwuBHj8aKGqBKHet/items/5dba7a80d63c52d89b82
rpmでハマったことは何度もあったけど、yumでハマることはあんまりなかったので、yumまわりの仕組みがいろいろわかりました。Remiってずっとなんだと思ったけど、人の名前でした。Remi Colletさん。