使 RPM 满足其他已安装软件包的依赖关系要求

使 RPM 满足其他已安装软件包的依赖关系要求

因此,我正在安装一个我编写的使用 jnetpcap 的 java 应用程序。这需要 libpcap 至少为 v1.0.0。我的 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

并检查其中之一的依赖关系:

# rpm -qR ppp-2.4.4-2.el5.i386
...
libpcap >= 14:0.8.3-6
libpcap.so.0.9.4

更新操作系统是不可能的,而且它是一个封闭的系统,从不联网,所以没什么关系。现在我可能能够删除那些拖延时间的软件包,但是,假设我不能,我如何强制安装这个软件包,以便它满足旧的依赖关系要求?即:让它“提供”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。它非常强大)。您还可以将.spec源 rpm 中的文件中的名称更改为类似 的名称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 中这是在 yum 中实现的,所以首先检查这个子是否命令可供您使用)。另外,请确保您的存储库指向包含这些文件的可用存储库。

相关内容