仅在安装时强制yum依赖项更新

时间:2019-09-25 21:09:06

标签: rpm yum rpm-spec

我有一些RPM软件包编号。一个软件包是始终安装的主软件包。其他软件包是可选的,并提供一些附加功能。我想确保这些软件包与软件版本保持同步。如果将主要RPM软件包更新为'yum update mypackage',我也想强制更新可选软件包,但仅在安装了它们的情况下

我考虑放入RPM SPEC文件:

Requires: optionalPackage1 >= 3.4.5

该版本将是我当前的mainPackage版本(所有软件包将具有相同的版本)。但是我的理解是,如果使用 yum update mainPackage 时当前未安装optionalPackage1,它将始终安装。

我想要在SPEC文件中添加以下内容:

RequiresIfInstalled: optionalPackage1 > 3.4.5
RequiresIfInstalled: optionalPackage2 > 3.4.5
RequiresIfInstalled: optionalPackage3 > 3.4.5

然后,如果我这样做:

yum update mainPackage

并且已经安装了optionalPackage1,但是在3.4.1版中,它将更新为3.4.5,但是如果未安装optionalPackage2,则目前不会安装。

有什么办法可以在RPM SPEC文件中指定它?

2 个答案:

答案 0 :(得分:1)

由于您的主程序包和可选程序包的编号一起发展,我可以假定它们是由相同的spec文件生成的吗?在那种情况下,我只是把依赖关系转过来。

在规格文件中:

name: main-package

%package -n optionalPackage1
Requires %{name} = %{version}-%{release}

这样,将要求可选软件包与主软件包安装在一起,并且版本完全相同。因此,当两种情况都可行时:

  • 仅更新主程序包即可
  • 在安装optionalPackage1时更新主软件包,将强制将optionalPackage1更新到完全相同的版本。

注意:当您的主软件包和可选软件包不在同一个存储库中时,您也可以应用此方法,但这意味着您需要对所有可选软件包的所有规范进行更改每次您生成新的软件包时。

注意2 :这不适用于>=,因为随后将主程序包从1.2.3更新到2.0.0不会强制更新optionalPackage1,这需要main >= 1.2.3 ... 如果您不希望有确切的要求,则可以选择某种“范围”策略,例如:

Requires: main >= 1.2
Requires: main < 1.3

答案 1 :(得分:0)

RPM的概念是“ recommends”,但这是一个相当新的概念,我不确定哪个发行版支持它。没有任何版本信息的Fedora mentions it in the Packaging Guidelines