12

rpmbuild を使用してビルドした rpm があります。それが sample.rpm だとしましょう。正常にビルドされます。rpmには実行可能ファイルがあります(initと呼びましょう)。

を使用してインストールしようとすると、rpm -ivh sample.rpm失敗した依存関係が表示されます。

エラーはFailed dependency for: example.so、rpm がこの共有オブジェクト ファイルを見つけることができないことを意味するとします。(同じディレクトリに so ファイルが存在しますが)。

そのため、rpm を as としてインストールしますrpm -ivh sample.rpm --nodeps(必要な so ファイルがあることがわかっているため)。

rpm がこれらの rpm をインストールできないのはなぜですか? オブジェクトファイルはどこで検索されますか? (Linuxローダーはこれらの.soを探しますか)。これらの .so へのパスを含めるための LD_LIBRARY_PATH があるため、インストールされたファイル (init) を rpm から実行すると実行されます。

では、rpm が sample.rpm をインストールできないのはなぜですか (依存関係を正確に探す場所はどこですか)。rpmのビルド時に指定する必要があるものですか?

4

1 に答える 1

12

RPM ファイルの依存関係は、その.specファイルの「Requires:」行に指定されています。

サンプル SPEC ファイル:

Summary: <Summary for my Linux project>
Name: <Name for my Linux project>
Version: 2.5.1
Release: GA
Requires: libx1.so >= 2.6.3
BuildArch: i586
Group: System / Applications
License: GPL 2.0
Vendor: <my organization>

次のコマンドを実行して、必要な依存関係を判断することもできます。

$ rpm -q --requires <my_rpm>
libx1.so.2
$

依存関係libx1.so自体は、RPM を介してインストールする必要があります。これにより、その存在が RedHat Package Manager によって維持されるデータベースに入力されます。つまり、ファイル システム上に が物理的に存在することはlibx1.so、依存関係テストの基準ではありません。

依存関係を提供するパッケージを見つけるには、次のコマンドを実行します。

$ rpm -q --whatprovides libx1

パッケージが を提供しない場合、「Requires:」行からlibx1.so削除しない限り、RPM は依存関係エラーを表示し続けます。libx1.so

.spec依存関係の自動検出を無効にするには、これをファイルに追加します。

AutoReqProv: no

より多くの情報がrpm.orgおよびrpm5.orgにあります。

于 2012-07-13T03:17:47.010 に答える