【问题标题】:rpm yum install : how to put conflicts on an already installed package?rpm yum install:如何在已安装的包上放置冲突?
【发布时间】:2016-09-20 15:44:40
【问题描述】:

如果我已经安装了特定版本的软件包,我会尝试停止安装 rpm。

假设我要安装 2 个软件包 A-7.1.1.rpm 和 Main_package-1.0.rpm。

我已经在机器上安装了 A-1.4.0.rpm。所以我想要实现的是,如果安装的 A

我尝试将 Conflicts 标签放入 Main_package 的规范文件中,如下所示。
Conflicts : A
并执行yum install *.rpm

这里 yum 在目录(即 A-7.1.1.rpm)中找到最新版本的包 'A',它不冲突。我要检查的是,机器是否有特定版本的包 A。

我找不到可以在规范文件中使用的任何其他标签。
有什么办法可以实现吗?

注意:我不能在随后调用 yum install *.rpm 的脚本中进行此检查

我只能执行yum install *.rpm,没有别的。

【问题讨论】:

  • Conflicts 是正确的标签。当你调用yum install;你说不冲突。 Yum 应该允许安装 A-7.1.1,但不能与您的 main_package 一起安装。 yum 是否允许同时安装两者?您也可以检查 main_package 是否设置了正确的冲突标签;使用rpm -qp /path/to/Main_package-1.0.rpm --conflicts
  • PS:不要在两个网站上一起提问!请删除您在 unix/linux 上的问题!
  • 嗨,克里斯,是的。 rpm -qp 显示正确的冲突。如果我同时安装两者 - 安装正在进行,因为 yum 看到我有一个版本 > 而不是我在冲突标签中提到的版本。但是如果我尝试单独安装 main_package,冲突就会起作用。我要比较的是针对已经安装的包 A-1.4.0 是的。我会从其他网站删除问题。
  • yum 工作正常;当你问他要做什么时,你只是不清楚......你要求他安装 main_package,它与 A
  • 嗯。是的,yum 正在按预期工作。如果 yum 在我执行 yum install *.rpm 时发现已安装的特定版本的软件包,有没有办法停止安装

标签: upgrade rpm yum rhel rpm-spec


【解决方案1】:

有一个解决方案,但不是很干净,不推荐:你可以在你的包A的前面部分检查是否安装了其他版本并中止安装:

%pre
if [[ $(rpm -q A --qf "%{VERSION}-%{RELEASE}") == "1.4.0" ]]
then
    # abort installation in this case!
    exit 1
fi

有关更多信息,请参阅此related question。

我确实认为你应该重新考虑你的设计,因为它是一个非常丑陋的解决方案(请注意,A-7.1.1 不会有这个 %pre 部分,因此仍然可以毫无问题地安装)

【讨论】:

  • 您也可以写信给stderr,让用户查看为什么安装中止以及推荐的解决方案
  • 我还没试过 %pre。我的目录中有 4-5 个 rpm。当我运行 yum install *.rpm 时,这将是一个单一的事务。在第一个 rpm 在其 %pre 部分失败后,yum 将尝试安装剩余的 rpm,因为它是单个事务。这是我的理解。如果我错了,请纠正我。
  • 我想做的另一件事是在之前的安装过程中触摸一个虚拟文件,在升级过程中,我将使用“requires”标签检查该文件是否存在。但是“需要:文件位置”并没有帮助我。
  • 你错了 :) yum 确实会进行一笔大交易;如果 A-7.1.1 无法安装,那么 Main_package 也不会安装;由于缺少依赖
  • 要求对非 rpm 包安装的文件不起作用
【解决方案2】:

yum 有办法通过 CLI 选项或配置按模式配置“不升级包 XXX”。见https://access.redhat.com/solutions/10185

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 2017-07-28
    • 1970-01-01
    • 2016-02-17
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    相关资源
    最近更新 更多