rpm パッケージをインストールすると、次のメッセージが表示されることがあります。
libc.so.6(GLIBC_2.3)(64bit) is needed by xxx.rpm
RPMがこれをどのように把握するか、シンボルにチェックポイントを追加する方法を知りたいです。
これはrpmbuild中に完全自動プロセスのようですが、わかりません。
知っている人はいますか?
答え1
新しいrpmをビルドすると、このrpmbuild
コマンドはデフォルトでチェックされます。すべての依存関係このrpmに属するバイナリ(使用依存関係ジェネレータ)。通常、ヘルパースクリプト1があります。find-requires
2%files%
rpmsセクションで、すべてのファイルの依存関係を確認します。
$ echo /usr/bin/tree | /usr/lib/rpm/find-requires
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
次に、rpmメタデータに次の要件を追加します。
$ rpm --requires -q tree | grep libc
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
次の依存関係を使用してrpmリストを取得できます。
rpm --whatrequires -q 'libc.so.6(GLIBC_2.3)(64bit)'
どのパッケージかを確認することもできます。供給(または満たす) 次の依存関係を満たします。
$ rpm --whatprovides -q 'libc.so.6(GLIBC_2.3)(64bit)'
glibc-2.22-114.22.1.x86_64
1通常、このヘルパースクリプトはrpmbuild
。
2スクリプトは、他のヘルパーツールを使用して要件を抽出します。rpmdeps
またはelfdeps
:
$ /usr/lib/rpm/rpmdeps -R /usr/bin/tree
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
$ /usr/lib/rpm/elfdeps --requires /usr/bin/tree
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6()(64bit)