因此,我正在安装一个我编写的使用 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 中实现的,所以首先检查这个子是否命令可供您使用)。另外,请确保您的存储库指向包含这些文件的可用存储库。