Codable Tech Blog

iPhoneアプリケーション開発と AWS(Amazon Web Service)活用に関する記事を配信

パッケージインストール時にパッケージの衝突が発生した時の原因追及について

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 "グループ名"