检查rpm包中已使用库的版本

时间:2016-06-10 16:43:06

标签: linux bash rpm qpid

我在RHEL 7上安装了qpid,并想知道它是否正在使用正确版本的boost。如何使用rpm命令检查它是否使用了正确的lib集。它不必是rpm命令,我只想知道是否使用正确版本的boost。

4 个答案:

答案 0 :(得分:2)

您可以使用rpm -qa检查已安装的RPM,并检查结果。例如,来自我的机器(Fedora 23,但同样的校长应该适用于RHEL):

mureinik@computer ~$ rpm -qa | grep boost
ibus-typing-booster-1.4.5-1.fc23.noarch
boost-thread-1.58.0-11.fc23.x86_64
boost-date-time-1.58.0-11.fc23.x86_64
boost-iostreams-1.58.0-11.fc23.x86_64
boost-system-1.58.0-11.fc23.x86_64

答案 1 :(得分:1)

也许这会有所帮助。

rpm -qa将列出所有已安装的程序。

如果您知道应该使用的提升版本,那么您可以使用rpm -qa | grep <program_name>

rpm -qi <package_name>可以为您提供有关软件包版本的更多具体信息。 -qi标志为您提供版本,发布,安装日期,大小等。

答案 2 :(得分:0)

这通常不是您通过RPM安装的软件需要处理的问题,只要您避免覆盖rpm / yum / dnf的依赖性检查。 RPM将指定库依赖关系到库SONAME,并且包安装/升级/删除验证是否满足这些库依赖关系并保持满意。

但是,如果您在混合中的某个地方有错误的软件包,或者您安装了任何未打包的软件,或者您使用--force来覆盖依赖性检查,那么可能会出现rpm问题的库问题打包软件,更不用说其他软件了。可能有多个库使用相同的SONAME安装,动态链接器可以选择不同的库,而不是您想要的。或者你可能有不满意的库依赖。

因此,您可能希望确定哪些库将动态链接到给定的可执行文件,而与包装无关。您可以通过ldd命令执行此操作。例如,在我的CentOS 6系统上:

$ ldd /bin/rpm
    linux-vdso.so.1 =>  (0x00007ffdabd77000)
    librpmbuild.so.1 => /usr/lib64/librpmbuild.so.1 (0x0000003708600000)
    librpm.so.1 => /usr/lib64/librpm.so.1 (0x0000003709200000)
    libmagic.so.1 => /usr/lib64/libmagic.so.1 (0x0000003707a00000)
    librpmio.so.1 => /usr/lib64/librpmio.so.1 (0x0000003709600000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003707e00000)

[...]

    libnspr4.so => /lib64/libnspr4.so (0x0000003716200000)

这对于检测完全不满足的库依赖性也很有用;再一次,这对于RPM打包的软件来说很少是一个问题,但我不时会遇到其他类型的包装中预先构建的软件。

答案 3 :(得分:0)

对于给定的包,您可以使用library(raster) # example raster and points data r <- raster(ncols=10, nrows=5) n <- 100 x <- runif(n) * 360 - 180 y <- runif(n) * 180 - 90 xy <- cbind(x, y) rp <- rasterize(xy, r, fun=function(x,...)length(x)) as.data.frame(rp) 来显示其依赖项,然后为每个依赖项rpm -qR显示实际的包名称。我在构建日志中执行此操作,以跟踪我构建的内容,使用脚本格式化rpm -q --whatprovides中的列表以便于阅读。

例如,给定一个已安装的&#34; ncurses6&#34;,脚本首先执行此操作:

rpm

我得到这样的输出:

rpm -qR ncurses6

我的脚本会生成如下报告:

/bin/sh
/usr/bin/pkg-config
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)
libformw6.so.6()(64bit)
libformw6.so.6(NCURSESW6_5.1.20000708)(64bit)
libgcc_s.so.1()(64bit)
libgcc_s.so.1(GCC_3.0)(64bit)
libm.so.6()(64bit)
libmenuw6.so.6()(64bit)
libmenuw6.so.6(NCURSESW6_5.1.20000708)(64bit)
libncurses++w6.so.6()(64bit)
libncursesw6.so.6()(64bit)
libncursesw6.so.6(NCURSESW6_5.1.20000708)(64bit)
libncursesw6.so.6(NCURSESW6_5.3.20021019)(64bit)
libncursesw6.so.6(NCURSESW6_5.4.20040208)(64bit)
libncursesw6.so.6(NCURSESW6_5.5.20051010)(64bit)
libncursesw6.so.6(NCURSESW6_5.6.20061217)(64bit)
libncursesw6.so.6(NCURSESW6_5.7.20081102)(64bit)

(脚本是200行Perl,计算评论和空白:一个好的学生练习。)