RPMはシンボルが必要であり、存在するかどうかを確認しますか?

RPMはシンボルが必要であり、存在するかどうかを確認しますか?

rpm パッケージをインストールすると、次のメッセージが表示されることがあります。

libc.so.6(GLIBC_2.3)(64bit) is needed by xxx.rpm

RPMがこれをどのように把握するか、シンボルにチェックポイントを追加する方法を知りたいです。

これはrpmbuild中に完全自動プロセスのようですが、わかりません。

知っている人はいますか?

答え1

新しいrpmをビルドすると、このrpmbuildコマンドはデフォルトでチェックされます。すべての依存関係このrpmに属するバイナリ(使用依存関係ジェネレータ)。通常、ヘルパースクリプト1があります。find-requires2%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)

関連情報