RPM依存ライブラリ不足の問題はYUMに聞こう!

RPMインストールでの依存ライブラリ問題

CentOSなどでrpmコマンドでRPMをインストールしようとする時、以下のような依存関係のエラーにぶつかることがよくあると思います。

エラー: 依存性の欠如:
         libc.so.6(GLIBC_2.7)(64bit) は zabbix-agent-2.0.2-1.el6.x86_64 に必要とされています
        libcurl.so.4()(64bit) は zabbix-agent-2.0.2-1.el6.x86_64 に必要とされています
        liblber-2.4.so.2()(64bit) は zabbix-agent-2.0.2-1.el6.x86_64 に必要とされています
        libldap-2.4.so.2()(64bit) は zabbix-agent-2.0.2-1.el6.x86_64 に必要とされています
        rpmlib(FileDigests) &<= 4.6.0-1 は zabbix-agent-2.0.2-1.el6.x86_64 に必要とされています
        zabbix = 2.0.2-1.el6 は zabbix-agent-2.0.2-1.el6.x86_64 に必要とされています
        rpmlib(PayloadIsXz) &<= 5.2-1 は zabbix-agent-2.0.2-1.el6.x86_64 に必要とされています

こんなとき、依存パッケージのインストールが必要なのですが、依存パッケージのパッケージ名を見つける方法をどうされているでしょうか? 「liblber-2.4.so.2()(64bit)」みたいなライブラリのsoファイル名を示されてもパッと分かりませんよね。エラーメッセージでググりますか?私も最初の頃はググっていました。でも、ググっても見つからない場合もありますし、ググった膨大な情報の中から関連情報を探すのに時間がかかる場合があります(あとバージョンが違って情報が古いとか)。

そんな時、もっと効率的なパッケージ名の探し方があります。それは、「YUMに聞いてみる」です。

yum whatprovides

yumコマンドにはwhatprovidesというオプションがあります。これは、特定のコマンドやライブラリがどのYUMパッケージの中に含まれているのかをレポジトリから検索するオプションです。そのため、soファイルからの検索もできます。

さっそく、先程の「liblber-2.4.so.2()(64bit)」のパッケージ名を検索してみましょう。

$ sudo yum whatprovides liblber-2.4.so.2

Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
epel/metalink                                                                                                 | 4.2 kB     00:00     
 * base: www.ftp.ne.jp
 * epel: ftp.iij.ad.jp
 * extras: www.ftp.ne.jp
 * remi: mirror5.layerjet.com
 * remi-test: mirror5.layerjet.com
 * updates: www.ftp.ne.jp
base                                                                                                          | 3.7 kB     00:00     
epel                                                                                                          | 4.3 kB     00:00     
epel/primary_db                                                                                               | 5.0 MB     00:00     
extras                                                                                                        | 3.5 kB     00:00     
remi                                                                                                          | 2.9 kB     00:00     
remi-test                                                                                                     | 2.9 kB     00:00     
updates                                                                                                       | 3.5 kB     00:00     
updates/primary_db                                                                                            | 5.1 MB     00:00     
openldap-2.4.23-26.el6.i686 : LDAP support libraries
Repo        : base
Matched from:
Other       : liblber-2.4.so.2

openldap-2.4.23-26.el6_3.2.i686 : LDAP support libraries
Repo        : updates
Matched from:
Other       : liblber-2.4.so.2

「openldap」のパッケージ名が出てきましたね。YUMのbaseとupdateのレポジトリの中のopenldapが、liblber-2.4.so.2のライブラリをサポートしているという事なので、openldapをYUMからインストールします。

$ sudo yum install -y openldap

これで依存パッケージを発見して、依存問題を1つ解決することが出来ました。これ、けっこう知っておくと便利です。

または、ダウンロードしてきたRPMファイルを指定して、

$ sudo yum install ******.rpm

とすると、依存関係のパッケージを見つけて列挙してインストール確認してくれます。こちらもかなり便利です。

yum whatprovidesの限界

もちろん、yum whatprovidesの限界もあります。あくまでそのサーバーの/etc/yum.repos.d/の中に登録されているレポジトリから探してくるので、未登録のサードパーティーレポジトリや野良RPMに含まれているライブラリならば、情報は出て来ません。

そのため、使い分ける必要があります。私はrpmコマンドで依存関係の問題が出たら、まずYUMに問い合わせを行なって、それでも見つからなかったらライブラリ名でググって情報を探すようにしています。大抵のライブラリはCentOS標準のYUMレポジトリか、epelまたはremiなどの拡張レポジトリに含まれているので、そんなにググる機会は多くないです。