【问题标题】:SPEC file builds two RPMs, but dependency makes -Uvh upgrade impossibleSPEC 文件构建两个 RPM,但依赖使 -Uvh 无法升级
【发布时间】:2023-08-03 19:53:02
【问题描述】:

我正在处理一个规范文件 (foo.spec),该文件在构建时会产生两个 RPM:foo-1-1.i386.rpm(主程序)和 libfoo-1-1.i386.rpm(所需的库文件)。 foo.spec 文件指出 foo 需要相同版本和发布级别的 libfoo:

Requires: libfoo = %{version}-%{release}

foo-1-1 安装得很好:

rpm -ivh libfoo-1-1.i386.rpm

安装依赖库,然后:

rpm -ivh foo-1-1.i386.rpm

但是由于依赖于库,升级到新版本 (foo-2-1) 不起作用:

$ rpm -Uvh libfoo-2-1.i386.rpm
error: Failed dependencies:
       libfoo = 1-1 is needed by (installed) foo-1-1.i386

$ rpm -Uvh foo-2-1.i386.rpm
error: Failed dependencies:
       libfoo = 2-1 is needed by foo-2-1.i386

所以我被困住了。我希望用户能够执行 rpm -Uvh 来升级 foo 包(要求他们忽略依赖项等对新手用户要求太多)。

有什么想法可以解决这个问题,以便在有新版本可用时使用 rpm -Uvh 来升级软件包的所有部分?

提前致谢。

【问题讨论】:

  • IIRC,你可以运行rpm -Uvh foo-2.1.i386.rpm libfoo-2-1.i386.rpm同时升级两者
  • 如果您想保持耦合,是否可以将所有库(libfoo 的内容)存储到 foo RPM 中?将 libfoo 的版本/发布与 foo 的当前版本联系起来有点违背了单独 RPM 的目的,因为更新一个需要您更新另一个。此外,为了使您的升级示例正常工作,您必须在更新 libfoo 之前先删除 foo-1-1。或者您可以使用 yum 来处理所有这些:yum update foo。不过,这需要设置一个(本地)存储库。

标签: linux rpm rpmbuild


【解决方案1】:

rpm 不应也不允许您单独更新这些 RPM,因为安装第一个 RPM 和第二个 RPM 之间的状态无效。

正如 Hasturkun 指出的那样,您可以在同一个命令中安装它们:

rpm -Uvh libfoo-2-1.i386.rpm foo-1-1.i386.rpm

FWIW,如果您创建一个 yum 存储库并使用它来更新,您会发现更新一个 RPM 会自动拖入另一个。

【讨论】: