パッケージインストール時にパッケージの衝突が発生した時の原因追及について
Red Hat系Linuxではパッケージ管理システムとしてyumを利用する。 yumを用いたパッケージ管理において衝突が発生した時どのように問題を解消していくかを記述する。
準備
まずはパッケージのインストール。今回はgroupinstallコマンドを用いてPHP関連のパッケージを一挙にインストールする
sudo yum groupinstall "PHP Support"
衝突(confict)発生
次に個別にMySQLドライバをインストール。このタイミングで衝突が発生した旨のエラーメッセージが表示される
sudo yum install php-mysql
表示されるエラーメッセージ
Error: php56-pdo conflicts with php-pdo-5.3.29-1.8.amzn1.x86_64
Error: php56-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
原因特定
原因を推測するためにインストールしようとしたパッケージの情報をyum infoコマンドで取得
yum info php-mysql
yum infoで表示されるメッセージを一部抜粋
Available Packages
Name : php-mysql
Arch : x86_64
Version : 5.3.29
yum install php-mysqlではバージョン5.3のphp-mysqlがインストールされることがわかる。一方、groupinstallでインストールしたphpのバージョンが5.6だった。このことからphpバージョンとphp-mysqlのバージョンが合っていないため競合が発生したことが判明する。
問題解決
バージョンを一致させるために5.6バージョンのMySQLドライバーをインストールする。5.6バージョンのMySQLドライバーのパッケージ名を調べるためにyum listコマンドを使用する。
yum list php*mysql*
以下のようにバージョンごとにどのパッケージをインストールさればよいか表示される。(一部抜粋)
php54-mysqlnd.x86_64 5.4.45-1.75.amzn1 amzn-main
php55-mysqlnd.x86_64 5.5.38-2.119.amzn1 amzn-main
一覧情報から5.6バージョンのMySQLドライバーのパッケージ名は「php56-mysqlnd」と判明。このパッケージをyum installでインストールする。
sudo yum install php56-mysqlnd
大事なのは競合が発生した時、競合に関連する情報の洗い出しを行うこと。 yum infoは競合発生時の情報の洗い出しに役立つコマンドなので知っておくと競合解決に役立つ。
補足
group installでインストールされるパッケージ情報一覧の取得
yum group info "グループ名"