是否可以像这样设置依赖版本要求:
Required: somepackage >= 0.5.0 AND somepackage < 0.6.0
所以只有一些软件包 0.5.x将自动安装。
答案1
是的,非常容易做到。
写吧:
Requires: somepackage >= 0.5.0, somepackage < 0.6.0
放入您的.spec
文件中。
添加版本要求
当软件包的要求稍微严格一些时,可能需要软件包的特定版本。只需添加所需的版本号,并在其前面加上以下比较运算符之一:
需要版本低于指定版本的包。
需要版本小于或等于指定版本的包。
需要与指定版本相同的版本包。
需要版本等于或高于指定版本的包。
需要版本高于指定版本的包。
继续我们的例子,假设包 bar 所需的版本实际上至少需要 2.7,而包 baz 必须是 2.1 版本 — 其他版本都不行。requires 标记行如下所示:requires: bar >= 2.7, baz = 2.1
来源:http://rpm.org/user_doc/more_dependencies.html
警惕虚拟能力/提供
上面描述的系统适用于大多数软件包;但是,如果你需要的软件包是作为 [虚拟功能][1] 提供的,或者以其他方式提供(即“Provides: ”关键字),则不同的名称相同(彼此不冲突),那么你最终可能会安装两个不同的包,每个包单独满足你的一个要求。例如,如果你的 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,这可能是您希望安装的软件包。
(在这种情况下,解决方案只是需要 postgresql84-server;但是,可能还有其他示例没有简单的解决方案。)
答案2
我不清楚您是否试图构建一个包或安装一个包并“限制”其依赖关系。
我看不出有什么办法可以在不重建包的情况下实现第二种情况。
您可以检索 SRPM 并编辑规范文件并添加/修改条目 Requires (您想要 somepackage 0.5.x,不是吗?) 到这样的内容:
Requires: somepackage = 0.5.0
然后重建
rpmbuild -bb -v yourpackage.spec
如果你从未这样做过,这看起来有点吓人,但它可以解决你的问题。请记住,如果你正在为发行版创建公共包,你可能需要阅读其指南,因为通常不建议以这种方式设置依赖项。