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

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

Required: somepackage >= 0.5.0 AND somepackage < 0.6.0 

所以只有部分包装0.5.x会自动安装。

是的,非常容易这样做。

只要写:

 Requires: somepackage >= 0.5.0, somepackage < 0.6.0 

到您的.spec文件。

添加版本要求

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

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

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

  • 需要与版本相同的软件包。

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

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

继续我们的例子,假设所需的包栏版本实际上至less是2.7,并且baz包必须是2.1版 – 没有其他版本可以。 以下是需求标记行的样子:require:bar> = 2.7,baz = 2.1

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

小心虚拟function/提供

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

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

可能会导致(如果你有这些包可用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,这可能是您预期已经安装的软件包。

(在这种情况下,解决scheme只需要postgresql84-server;但是,可能有其他的例子没有一个简单的解决scheme。)

如果您正在尝试构build一个软件包或安装一个软件包并“限制”它的依赖关系,我不清楚。

如果不重build软件包,我看不到第二种情况。

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

 Requires: somepackage = 0.5.0 

然后重build

 rpmbuild -bb -v yourpackage.spec 

如果你从来没有这样做,它似乎吓倒,但它解决了你的问题。 请记住,如果正在为发行版创build公共包,则可能需要阅读其指导原则,因为通常不build议使用这种方式设置依赖关系。