RPM 4.8.0和'Prereq'

时间:2014-10-31 16:49:11

标签: rpm

我正在尝试使用rpm 4.8.0安装一大堆非常旧的软件包,并且事务顺序导致安装失败。

具体来说,

  • 我有一个包(tzdata),上面写着:Prereq:/ bin / cp
  • '/ bin / cp'位于'coreutils'

然而,'coreutils'在安装顺序 tzdata之后仍然是

查看源代码(rpm 4.8.0)我可以看到这个区域的设计已经发生了很大的变化但似乎的意图是仍然支持旧的'Prereq'标志。

/* map legacy prereq to pre/preun as needed */
if (isLegacyPreReq(dsflags)) {
    flags |= (teType == TR_ADDED) ?
             RPMSENSE_SCRIPT_PRE : RPMSENSE_SCRIPT_PREUN;
}

这听起来不错吗?

基于代码注释,我也强烈认识到有时会忽略提供/需要关系以消除依赖循环。我想知道是否/何时发生这种情况,但似乎没有任何消息发出,即使在调试级别,这样的事件(“丢弃”关系)。

任何人都可以建议如何在事务输出中生成和/或解释调试信息,以了解为什么没有观察到这个特定的排序线索?

1 个答案:

答案 0 :(得分:2)

rpm-4.8.0中的代码选择重新映射Prereq :(尝试 强制在当前包之前安装包),就好像 它是一个Requires(pre):(标志着需要的依赖关系 通过%pre scriptlet)与最初在rpm中实现的相反。

是:依赖循环将处理“尽力而为”,以便 安装不会因依赖循环而停止。处理循环的一种粗略方法是 丢弃循环中的所有依赖项。另一个更好的方法是处理循环是尝试 将所有包作为单个实体安装在循环中。在这两种情况下 由循环中的依赖项确定的顺序是不确定的并且是问题 就像你在报道可以/将会发生。

使用rpm -Uvv进行安装会显示所有依赖项的LOOP消息 被忽略了。验证您是否有包含包的LOOP 参与安装tzdata。

同时,使用2个事务来保证已知先决条件的安装, 或者在安装过程中使用带有--nodeps / - noorder的手工制作/订购包清单 包装缺陷和改变可能是你最好的工作 在Prereq的语义/实现中:在rpm。