RPM が他のインストール済みパッケージの依存関係要件を満たすようにする

RPM が他のインストール済みパッケージの依存関係要件を満たすようにする

そこで、jnetpcap を使用する自分で作成した Java アプリをインストールします。これには少なくとも v1.0.0 の libpcap が必要です。私の CentOS 5.8 には、他のインストール済みパッケージに必要な libpcap 0.9.4 しかありません。libpcap 1.4.0 の RPM をビルドしましたが、インストールしようとすると、次のメッセージが表示されます。

# rpm -Uvh /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm
error: Failed dependencies:
        libpcap.so.0.9.4 is needed by (installed) ppp-2.4.4-2.el5.i386
        libpcap.so.0.9.4 is needed by (installed) isdn4k-utils-3.2-56.el5.i386
        libpcap >= 14:0.8.3-6 is needed by (installed) ppp-2.4.4-2.el5.i386

そして、そのうちの 1 つの依存関係を確認します。

# rpm -qR ppp-2.4.4-2.el5.i386
...
libpcap >= 14:0.8.3-6
libpcap.so.0.9.4

OSのアップデートは無理だし、ネットに接続されていない閉じたシステムなので、あまり意味がない。さて、私は5月処理を遅らせているパッケージを削除することはできますが、それができないと仮定した場合、古い依存関係の要件を満たすようにこのパッケージのインストールを強制するにはどうすればよいでしょうか。つまり、すでにインストールされているソフトウェアの要件を満たすように libpcap 0.9.4 を「提供」するようにします。

答え1

このファイルのソース rpm を変更することをお勧めします。インストールしようとしているファイルと によって提供されるファイルとの間に競合が発生しないように、ファイルがインストールされるパスを編集しますlibpcap.so.0.9.4(同じパスに同じファイルを提供する 2 つの rpm をインストールすることはできません)。

または、ソース rpm から、インストールした内容と競合するファイル (次の ファイルと/usr/lib/libpcap.so.0、おそらく/usr/share/man/man3/pcap.3.gz. (1 つはシンボリックリンクで、もう 1 つはマニュアル ページ)) を src rpm:s .spec ファイルから削除し、rpmbuild を実行します。

その後、インストールできます(アップグレードではありません)/root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm libpcap-0.9.4と一緒にシステム上でバージョンが問題なく共存できるようにするためです。

yum を使用している場合は、 を編集してのリストに/etc/yum.conf追加する必要があります。そうすることで、yum が古いバージョンの libpcap を、作成したバージョン ( ) に置き換えないようにすることができます。(プレーンな rpm の代わりに yum を使用すると、 のすべてのトランザクションを追跡できます。これは非常に強力です)。また、ソース rpm のファイル内の名前をのように変更することもできます。私は通常、この方法を採用しています。libpcapinstallonlypkgsman 5 yum.confyum history.speclibpcap14

次に、プログラムを起動するスクリプト/コマンドに、パッケージをインストールした場所へのパスを追加すると$LD_LIBRARY_PATH、プログラムが動作するはずです。(または、LD_PRELOAD代わりに libpcap の新しいバージョン)

slm が提案したことを実行することもできます。これは、目標に到達する最も早い方法です。rpm2cpio /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm > libpcap-1.4.0-1.i386.cpioその後、別のフォルダーでアーカイブを抽出し、上記のようにファイルを使用します。ただし、rpm は CentOS がプログラムを出荷する方法であり、長期的には煩雑で保守が難しいと思います。

もう 1 つの対処方法としては、libpcap v0.9.4 に依存するすべてのものを v1.0.0 に再構築してアップグレードすることが考えられます。通常、これは将来のアップデートで問題が発生することを意味しますが、CentOS 5 を使用しているようですので、EOL であるため心配する必要はありません。

最後に検討すべきオプションはyum remove libpcap、削除したいパッケージの数を確認することです(yumYボタンを押してEnterキーを押すまで実際には何も削除されません)。5月これらのパッケージを削除して yum を使用できるようにし、結局できなかった場合は、yum history undoコマンドを使用してロールバックできます (yum のどのバージョンでこれが実装されたかは覚えていないので、まずこのサブコマンドが使用できるかどうかを確認してください)。また、リポジトリがこれらのファイルを使用できるリポジトリを指していることを確認してください。

関連情報