有时,当我要求 Zypper 安装某些东西时,我会收到类似以下内容的消息:
Problem: foo-tools requires foo-lib, but this requirement cannot be provided
Problem: foo-tools requires foo-lib, but this requirement cannot be provided
uninstallable providers: foo-lib.7.31.13.x86_64
Solution 1: do not install foo-tools
Solution 2: break foo-tools by ignoring some of its dependencies
为什么 Zypper 认为我出于这个确切原因故意提供的 RPM 是“可卸载的提供程序”?这条消息是什么意思意思是? RPM 文件无法读取吗?拱门错了?版本错误?到底在烦恼什么??
答案1
事实证明它foo-lib
本身有未满足的依赖关系。添加这些解决了问题。
但问题是……为什么 Zypper 没有说这就是问题所在?通常,如果发生依赖关系问题,它会告诉您无法找到的特定包。为什么我收到这条不透明的“可卸载提供程序”消息?
答案2
RPM 在系统中保存已安装文件(例如二进制可执行文件和共享库)的数据库。
某些软件(例如 foo-tools)需要其他软件(例如 foo-lib)才能正常运行。该依赖信息由 RPM 打包程序决定。
如果您有 foo-lib 和 foo-tools 可作为 RPM 文件使用,但两者都没有安装,您可以在命令行上将它们(全部)提供给 RPM(或以 zypper 等效的方式),以使 RPM 看到所有依赖性将得到满足。另一种选择是首先安装必备包。
如果 foo-lib 又具有自己的依赖项,那么它们也必须得到满足。如果不是,则 foo-lib 不是 foo-lib 的可安装提供程序。
不推荐:确保通过其他方式满足先决条件(手动安装所需的东西,可能是从源代码安装,并强制 Zypper 忽略依赖项。这样做会在以后引起问题,所以不要这样做。