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


14

是否可以设置如下依赖版本要求:

Required: somepackage >= 0.5.0 AND somepackage < 0.6.0

因此,只会自动安装某些软件包0.5.x。

Answers:


18

是的,这样做很容易。

写吧:

Requires: somepackage >= 0.5.0, somepackage < 0.6.0

到您的.spec文件中。

添加版本要求

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

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

  • 要求软件包的版本小于或等于指定的版本。

  • 需要版本等于指定版本的软件包。

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

  • 需要版本大于指定版本的软件包。

继续我们的示例,让我们假设所需的package bar版本实际上必须至少为2.7,并且baz软件包必须为2.1版-没有其他版本可以使用。这是require标签行的样子:require:bar> = 2.7,baz = 2.1

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

提防虚拟功能/提供

上述系统适用于大多数包装;但是,如果您要提供的软件包是[虚拟功能] [1]提供的,或者是由其他名称(互不冲突)的软件包提供的(即“ Provides:”关键字),则您可能最终会安装两个不同的软件包,每个软件包分别满足您的要求之一。例如,如果您的规范文件包含:

Requires: postgresql-server >= 8.4, postgresql-server < 9.0

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

  • PostgreSQL服务器8.1.23-6.el5_8(postgresql服务器<9.0)
  • postgresql92服务器9.2.5-1PGDG.rhel5(postgresql服务器> = 8.4)

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

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


我对“ somethingdev(name)> = 1.0.14”具有虚拟依赖关系,但是当我去yum install ...时,尽管在RPM存储库中,虚拟依赖关系仍未安装所需的版本。我不得不将虚拟依赖项更改为RPM的名称“ something-name-dev> = 1.0.14”,然后它起作用了。
Trevor Boyd Smith,

1

对于我来说,尚不清楚是要构建软件包还是安装软件包并“限制”其依赖关系。

我没有一种方法可以在不重建软件包的情况下制作出第二种情况。

您可以检索SRPM并编辑规范文件,并添加/修改Requires条目(您需要0.5.x软件包,对吗?),如下所示:

Requires: somepackage = 0.5.0

然后用

rpmbuild -bb -v yourpackage.spec

如果您从未这样做过,它看上去会令人生畏,但它可以解决您的问题。请记住,如果要为发行版创建公共包,则可能需要阅读其指南,因为通常不建议使用这种方式设置依赖项。


2
我不能真正代表OP,但是有时候您需要特定版本系列中的最新更新,而不仅仅是特定版本。例如,您可能知道您想要Apache 2.2.x,因为2.4.x无法与您的软件包一起正常工作。明确要求2.2.23将不允许将来安装2.2.x中的更新。
艾伦·克鲁格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.