当我安装 rpm 包时,有时会报告如下消息:
libc.so.6(GLIBC_2.3)(64bit) is needed by xxx.rpm
我想知道 RPM 如何计算出这一点,以及如何在符号上添加我自己的检查点。
这似乎是 rpmbuild 期间的一个全自动过程,但我对此不确定。
有人知道吗?
答案1
当构建新的 rpm 时,该rpmbuild
命令默认检查所有依赖项属于该 rpm 的二进制文件(使用依赖生成器)。它通常有一些辅助脚本1例如find-requires
2检查 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)