【问题标题】:RPM - manage dependencies of dependenciesRPM - 管理依赖项的依赖项
【发布时间】:2014-10-20 16:25:43
【问题描述】:

我有一个 java 应用程序,我将其打包为 RPM,它运行良好了一段时间,直到我推出了更新的 java-1.7.0-oracle-devel 包。

用于构建我的 java-1.7.0-oracle-devel 包的规范文件大致基于:https://github.com/puzzle/java-oracle-rpm/blob/master/java-1.7.0-oracle-devel.spec,它管理“替代方案”,但与其他 java 版本没有冲突声明。

应用的要求是:

  • 包必须用ant编译,使用java-1.6.0-openjdk-devel
  • 编译后的包必须在java-1.7.0-oracle-devel下运行

我使用的 ant 包(通过 BuildRequires 指定)是来自基本存储库的标准 CentOS 包,这需要 java-devel >= 0:1.5.0。 java-1.6.0-openjdk-devel 和 java-1.7.0-oracle-devel 都提供 java-devel,因此它正在抓取提供此功能的最新包。

我尝试在规范文件中指定 java-devel,它比 java-devel 1.7.0 需要的更少,但这不起作用 - 构建过程仍然在 java-1.6.0-openjdk-devel和 java-1.7.0-oracle-devel(作为 ant 的依赖项)。

BuildRequires:  java-devel >= 1.6.0
BuildRequires:  java-devel < 1.7.0

我在这里有一个解决方法,因为我使用的是 mock,我可以简单地禁用包含 java-1.7.0-oracle-devel 的 repo,但如果可能的话,我希望能够在 RPM 规范中实现这一点: 我想声明“java-devel”是由 java-1.6.0-openjdk-devel 提供的。

RPM 规范是否有能力以这种方式管理依赖项的依赖关系?

【问题讨论】:

    标签: java ant packaging rpm


    【解决方案1】:

    我不相信 RPM 能够编码这样的需求(包括多个部分)。

    我相信你有两个选择。要么专门指定一个版本(即BuildRequires: java-devel = 1.6.0),要么放弃最低版本规范(因为你假设在你的环境中会满足)并且只包含BuildRequires: java-devel &lt; 1.7.0条目。

    【讨论】:

    • 我认为您在这里误解了我的问题 :) 指定大于 X 但小于 Y 如上所述对于正在构建的包工作正常,但问题是管理构建依赖项的依赖项(在本例是 ant 包),它的 java-devel > 1.5.0,因此作为依赖,它将拉入提供 java-devel 的最新包。通过对该主题进行更多研究,我认为此功能可以由过滤器提供:rpm.org/wiki/PackagerDocs/DependencyGenerator 虽然尚未设法使其工作:(
    • @rdark 你确定双 BuildRequires 确实工作正常吗?我真的不认为 rpm 可以真正处理这个问题(它可能被解释为就像我建议的那样“小于”先决条件,所以“工作”正确(你必须伪造一个 java-devel = 1.4.0 提供包作为唯一提供者来真正测试我认为的)。你不能对BuildRequires 依赖的依赖做任何事情,你能做的最好的就是用你的包的BuildRequires 增加那个包的要求,这样你就可以断言你需要什么也是。
    • @rdark 生成器用于从文件内容中自动检测构建包的依赖关系。 perl/python/etc 的方式。我相信依赖生成器会处理模块依赖检测。我知道他们对BuildRequires 无能为力。
    • 是的 - 双 BuildRequires 完美运行(如这里对 Requires 所述> serverfault.com/a/411506) - 我有 java-1.6.0-openjdk 和 java-1.7.0-openjdk 可用,它正确地选择了 java-1.6.0-openjdk。 java-1.7.0-oracle-devel 正在被 ant 拉进来。
    • @rdark 同时拥有1.6.01.7.0 并选择1.6.0 完全兼容它不起作用,只有使用java-devel &lt; 1.7.0 才需要输入。仅凭这一点,您不能断言这两个测试都有效(因此我之前的 1.4.0 评论)。您无法控制系统上已经引入了哪些其他包。您可以控制当您的需求同时满足另一个包的需求时引入的内容时间。如果您的要求尚未满足,但其他软件包已满足,则 yum 不会为您解决此问题(通过降级)。
    猜你喜欢
    • 2020-01-03
    • 1970-01-01
    • 2011-09-04
    • 2010-10-26
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2015-03-20
    相关资源
    最近更新 更多