RPM 如何确定符号是否需要且存在?

RPM 如何确定符号是否需要且存在?

当我安装 rpm 包时,有时会报告如下消息:

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

我想知道 RPM 如何计算出这一点,以及如何在符号上添加我自己的检查点。

这似乎是 rpmbuild 期间的一个全自动过程,但我对此不确定。

有人知道吗?

答案1

当构建新的 rpm 时,该rpmbuild命令默认检查所有依赖项属于该 rpm 的二进制文件(使用依赖生成器)。它通常有一些辅助脚本1例如find-requires2检查 rpms%files%部分中所有文件的依赖关系:

$ 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)

相关内容