2

我正在尝试从一个 RPM 安装中安装多个 RPM。我已将规范文件放入 %post 部分中,我使用命令安装了另一个 rpm。

 %post
 rm -f /var/lib/rpm/__db.0*
 rpm --rebuilddb
 rpm -ivh xyz.rpm

但是当安装主 RPM 时,它会为另一个 rpm 安装获得锁定而不是释放。所以它会给出以下警告并停止安装过程。然后无限等待。所以任何解决方案。

4

3 回答 3

4

如果我正确理解您的问题,您应该使用Requires 标签

于 2013-01-01T07:30:48.517 回答
1

所以不会让我对以前的答案附加评论,但我想强调一件事:

您在 %post 期间执行 rpm-i 的计划不会奏效。从架构上讲,由于您提到的确切原因,它不会发生:rpm 锁定 RPMdb,它这样做是为了防止竞争条件和一些损坏。因此,您将需要找到另一种解决方案。

有一个解决方案,到目前为止,Requires: bit 就是其中之一。我知道您想在当前的 rpm 之后安装您的 xyz rpm,但没有“安装后”,因为没有后要求,原因与我们使用“转到”而不是“来自”的原因相同。

因此,使用 Requires: 标签。如果您的订购不完美,仅使用您的 abc.rpm 取决于 xyz.rpm,或 xyz.rpm 取决于 abc.rpm,请构建第三个“虚拟”RPM,它不提供有效负载但需要它们两者:至少,最后一个解决方案将确保安装这两个软件包。

虽然其他人都推荐了 Requires: 标签,并在 %post 中讨论了 rpm-i 的替代方案,但我没有找到任何人直接在 %post 中解决使用 rpm 的可能性;我想确保 OP 知道在不久的将来,拟议的计划没有发挥作用的潜力。

于 2015-12-30T17:07:13.520 回答
1

你可以rm -rf /var/lib/rpm/.rpm.lock在你的 %post 脚本中做

于 2020-05-06T11:44:45.790 回答