RPM:设置必需:somepackage >= 0.5.0 AND somepackage < 0.6.0

cox*_*oxx 17 rpm

是否可以像这样设置依赖版本要求:

Required: somepackage >= 0.5.0 AND somepackage < 0.6.0
Run Code Online (Sandbox Code Playgroud)

所以只有somepackage 0.5.x会自动安装。

Mik*_*eyB 21

是的,这样做很容易。

写就好了:

Requires: somepackage >= 0.5.0, somepackage < 0.6.0
Run Code Online (Sandbox Code Playgroud)

进入你的.spec档案。

添加版本要求

当一个包有更严格的需求时,可能需要一个包的某些版本。所需要做的就是添加所需的版本号,前面是以下比较运算符之一:

  • 需要版本低于指定版本的包。

  • 需要版本小于或等于指定版本的包。

  • 需要版本与指定版本相同的包。

  • 需要版本等于或大于指定版本的包。

  • 需要版本高于指定版本的包。

继续我们的例子,让我们假设所需的包 bar 版本实际上至少需要 2.7,而 baz 包必须是版本 2.1——没有其他版本可以做到。下面是 requires 标记行的样子: requires: bar >= 2.7, baz = 2.1

来源:http : //rpm.org/user_doc/more_dependencies.html

当心虚拟功能/提供

上述系统适用于大多数软件包;但是,如果您想要的包是作为 [虚拟功能][1] 提供的,或者是由不同名称的包(彼此不冲突)以其他方式提供的(即“提供:”关键字),那么您最终可能会安装两个不同的软件包,每个软件包都单独满足您的一项要求。例如,如果您的规范文件包含:

Requires: postgresql-server >= 8.4, postgresql-server < 9.0
Run Code Online (Sandbox Code Playgroud)

可能会导致(如果您有这些软件包可用于 yum)安装:

  • postgresql-server 8.1.23-6.el5_8 (postgresql-server < 9.0)
  • postgresql92-server 9.2.5-1PGDG.rhel5 (postgresql-server >= 8.4)

不会安装 postgresql84-server,这可能是您希望安装的软件包。

(在这种情况下,解决方案只是需要 postgresql84-server;但是,可能还有其他示例没有简单的解决方案。)


seb*_*elk 1

我不清楚您是否正在尝试构建包或安装包并“限制”其依赖项。

我没有找到一种方法可以在不重建软件包的情况下实现第二种情况。

您可以检索 SRPM 并编辑规范文件,并将条目 Requires 添加/修改(您想要 somepackage 0.5.x ,不是吗?),如下所示:

Requires: somepackage = 0.5.0
Run Code Online (Sandbox Code Playgroud)

然后重建

rpmbuild -bb -v yourpackage.spec
Run Code Online (Sandbox Code Playgroud)

如果您从未这样做过,它看起来很吓人,但它解决了您的问题。请记住,如果要为发行版创建公共包,您可能需要阅读其指南,因为通常不建议以这种方式设置依赖关系。

  • 我不能真正代表OP发言,但有时您想要特定版本系列中的最新更新,而不仅仅是特定版本。例如,您可能知道您需要 Apache 2.2.x,因为 2.4.x 无法与您的包一起正常工作。特别要求 2.2.23 将不允许安装 2.2.x 中的未来更新。 (5认同)