使 RPM 满足其他已安装包的依赖需求

Jon*_*Jon 5 linux rpm centos dependencies

因此,我正在安装我编写的使用 jnetpcap 的 Java 应用程序。这需要至少 v1.0.0 的 libpcap。我的 CentOS 5.8 只有 libpcap 0.9.4,这是其他安装包所需要的。我已经为 libpcap 1.4.0 构建了 RPM,但是当我尝试安装它时,我得到以下信息:

# rpm -Uvh /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm
error: Failed dependencies:
        libpcap.so.0.9.4 is needed by (installed) ppp-2.4.4-2.el5.i386
        libpcap.so.0.9.4 is needed by (installed) isdn4k-utils-3.2-56.el5.i386
        libpcap >= 14:0.8.3-6 is needed by (installed) ppp-2.4.4-2.el5.i386
Run Code Online (Sandbox Code Playgroud)

并检查其中之一的依赖项:

# rpm -qR ppp-2.4.4-2.el5.i386
...
libpcap >= 14:0.8.3-6
libpcap.so.0.9.4
Run Code Online (Sandbox Code Playgroud)

更新操作系统是不可能的,而且,它是一个封闭系统,从不联网,所以它无关紧要。现在,我也许可以删除那些拖延的包,但是,假设我不能,我如何强制安装这个包,这样它才能满足旧的依赖要求?即:让它“提供” libpcap 0.9.4 soas 以满足已安装软件的要求。

小智 1

我建议您更改此文件的源 rpm;编辑文件将安装到的路径,以免在您要安装的文件与提供的文件之间产生冲突libpcap.so.0.9.4(不得安装两个在同一路径上提供相同文件的 rpm:s) 。

或者从源 rpm 中删除那些与您已安装的文件冲突的文件,它可能是: /usr/lib/libpcap.so.0也可能是/usr/share/man/man3/pcap.3.gz. (一个是符号链接,另一个是手册页)来自 src rpm:s .spec 文件,然后 rpmbuild 它。

/root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm 然后您可以与 libpcap-0.9.4 一起安装(而不是升级),以便这些版本可以在您的系统上和平共存。

如果您正在使用 yum,那么您可能需要编辑您的/etc/yum.conf以添加libpcap到您的 列表中installonlypkgs,这样 yum 就不会用您刚刚创建的版本替换旧版本的 libpcap ( man 5 yum.conf)。(如果您使用 yum 而不是普通的 rpm,那么它可以使用 来跟踪所有事务yum history。它非常强大)。您还可以将源 rpm 中的文件中的名称更改.spec为类似 的名称libpcap14,这就是我通常所做的。

$LD_LIBRARY_PATH然后在启动程序的脚本/命令中添加安装包的路径,它应该可以工作。(或者LD_PRELOAD使用较新版本的 libpcap)。

您也可以执行 slm 建议的操作,这是迄今为止实现目标的最快方法:rpm2cpio /root/rpmbuild/RPMS/i386/libpcap-1.4.0-1.i386.rpm > libpcap-1.4.0-1.i386.cpio然后在一个单独的文件夹中提取存档并使用上述文件。然而,rpm 是 CentOS 传送程序的方式,我认为从长远来看它很混乱且难以维护。

另一个行动原因可能是您重新构建所有依赖于 libpcap v0.9.4 到 v1.0.0 的内容并升级它们。通常,这意味着未来的更新会出现问题,但由于您似乎使用的是 CentOS 5,因此您不必担心,因为它已经停产了。

您要考虑的最后一个选项是yum remove libpcap,查看它想要删除多少个软件包(yum在您点击 Y 按钮并按 Enter 之前实际上不会删除任何内容),因为您也许能够删除这些软件包并使用 yum,如果它事实证明你毕竟不能,你可以用yum history undo命令回滚(我不记得这是在 yum 的哪个版本中实现的,所以首先检查这个子命令是否对你可用)。另外,请确保您的存储库指向包含这些文件的可用存储库。