YUM 安装失败;不识别JDK

YUM 安装失败;不识别JDK

我正在尝试使用 YUM 安装一些软件包。我正在使用的命令是:

sudo yum repo-pkgs [my repo] install

这会产生以下结果:

 Error: Package: [package name] ([my repo])
       Requires: jdk >= 2000:1.8.0
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

这个错误令人困惑,因为我已经安装了 JDK /user/java/jdk1.8.0_25,根据错误消息,它应该是一个足够新的版本。

我需要做些什么才能让 YUM 识别 JDK 吗?

欢迎任何建议,谢谢。

答案1

正如 @Arthur 所说,问题在于系统上的内容与 RPMDB 中的内容之间的脱节。虽然 RPMDB 确实有一个它知道已安装的 JDK,但该 JDK 可能无法满足您尝试安装的包的包依赖关系 - 事实上它肯定不满足,否则您不会收到特定的错误消息。您从这里到哪里将取决于您希望解决方案的“干净”程度(而不是“快速”)。

您可以按照@Arthur的建议创建一个虚拟包。该包应该依赖于jdk,并且应该提供jdk 1.8.02000 或更大的纪元。它应该没有有效负载 - 甚至没有符号链接,这就是 @Arthur 的建议失败的地方。

您还可以使用 来安装软件包--nodeps,这是一种快速而肮脏的解决方案,但如果您有依赖于当前软件包的其他软件包或者您尝试更新它,则可能会导致出现依赖性问题。

最后,正如我们的讨论最终发现的那样,您可以更改规范文件中的 Requires: 行,因为您是构建此包并将其放入存储库中的人。

答案2

确实有 JDK,但它不在转速数据库,yum 和其他类似的自动包管理器使用它来了解安装了哪些包并获取相应的版本。

最好的解决方案可能是运行,sudo yum install jdk这样您就可以获得带有 yum 和 rpm 的版本。

您也可以考虑按照它的建议添加该--skip-broken选项,但是它与 PS 中的第二点有相同的问题

运行这些rpm -Va东西可能会帮助 RPM 找到丢失的包和文件。如果您认为您是通过 RPM 安装 Java 的,请尝试一下。

PS:起初我考虑创建一个虚拟包,就像 dpkg 用户可能做的那样,但是:

  1. 在 RPM 下制作软件包非常复杂,因为您必须编写很长的规范。 RPM 还使用文件列表来查找库依赖项,因此您必须为其提供相当长的文件列表。
    可能的解决方法:自动%files生成find大量 shell。
  2. 即使您完成了虚拟包的制作并安装了它,如果您的包使用一些硬编码逻辑来导航到 jdk 包安装的 Java,它也很可能无法找到您的 java。 (大多数打包者不使用像 这样的奇怪目录/user,如果您不幸找到一个由一个什么都不知道的人编写的包java_home......)
    可能的解决方法:符号链接。

更新:

看来你的JDK的包名是jdk1.8.0_25.由于您已经使用 RPM 安装了一个包,因此创建一个虚拟包会更容易、更干净,尽管它在某种程度上仍然是一种肮脏的黑客行为。

只需为所需版本的软件包编写一个规范jdk,并使其依赖于jdk1.8.0_25。然后向块添加一些符号链接,%files以便您的程序可以找到它。最后,真正创建符号链接并执行rpmbuild -bb dummy_jdk.spec

相关内容