【问题标题】:How to ignore conflicts in rpm installs如何忽略 rpm 安装中的冲突
【发布时间】:2013-07-09 02:22:05
【问题描述】:

我在一个文件夹中有一堆 rpm 文件。我正在尝试使用以下方法安装它们: rpm -ivh *.rpm 所以 rpm 可以处理正确的安装顺序。

在其中一些 rpm 上,我的系统中安装了较新的版本,因此例如:

package info-5.0-1 (which is newer than info-4.13a-2) is already installed

/opt/freeware/man/man1/infokey.1 from install of info-4.13a-2 conflicts with file from package info-5.0-1

有没有办法忽略旧的 .rpm 文件并使用已安装的新版本解决依赖关系?我想到了 --force 选项。但是 --force 如何解决冲突呢?用旧版本覆盖它们还是忽略它们而离开新版本?

欢迎提出任何想法。

【问题讨论】:

    标签: linux unix rpm aix


    【解决方案1】:

    从上下文来看,冲突是由包的版本引起的。
    我们来看看rpm的手册:

    --force
        Same as using --replacepkgs, --replacefiles, and --oldpackage.
    
    --oldpackage
        Allow an upgrade to replace a newer package with an older one.
    

    所以,您可以执行命令rpm -Uvh info-4.13a-2.rpm --force 来解决您的问题。

    【讨论】:

    • 那没有回答我的问题。就像我说的那样,我想保留安装的新包。不要用旧的替换它...
    【解决方案2】:

    尝试刷新命令:

    rpm -Fvh *.rpm
    

    【讨论】:

    • Freshening 命令只更新系统中已经存在的包。如果我想安装一个新的包没有用...
    • 我不认为我们可以在服务器上安装两个不同版本的包。
    【解决方案3】:

    --force 选项将重新安装已安装的软件包或覆盖其他软件包中已安装的文件。你通常不想要这个。

    如果您告诉rpm 从某个目录安装所有 RPM,那么它就是这样做的。 rpm 不会忽略列出的安装 RPM。您必须手动从列表(或目录)中删除不需要的 RPM。无论您按什么顺序执行,它都会用“已安装最新的 RPM”覆盖文件。

    您可以删除旧 RPM,rpm 将使用已安装 RPM 的较新版本解决依赖关系。但这只有在没有要安装的 RPM 完全依赖于旧版本的情况下才有效。

    如果你真的需要同一个 RPM 的不同版本,那么 RPM 必须是relocatable。然后您可以告诉rpm 将特定的RPM 安装到不同的目录。如果文件不冲突,那么你可以用rpm -i 安装不同的版本(zypper in 不能安装同一个RPM 的不同版本)。我在工作中将例如 ruby​​ gem 打包为可重定位的 RPM。所以我可以安装同一个 gem 的不同版本。

    我不知道您的 RPM 与哪些文件发生冲突,但如果所有这些都是“只是”手册页,那么您可能可以简单地用 rpm -i --replacefiles 覆盖新的手册页。唯一的问题是,它可能会使正在阅读旧手册页并认为它适用于实际版本的人感到困惑。另一个问题是rpm --verify 命令。如果旧包覆盖了一些文件,它将抱怨新包。

    这可能与https://serverfault.com/questions/522525/rpm-ignore-conflicts 重复吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-28
      • 1970-01-01
      • 2016-02-17
      • 2014-10-05
      • 2015-10-05
      • 2020-12-19
      • 2021-12-25
      • 1970-01-01
      相关资源
      最近更新 更多