【问题标题】:Is yum confused or is it me?是百胜困惑还是我?
【发布时间】:2017-01-25 08:30:29
【问题描述】:

我正在 Centos/RHEL 6 上构建和安装自定义 RPM。在容器和 VM 上部署时,一切都按预期工作,但是,在生产机器上,我们有额外的内部存储库。 yum install my.rpm 导致与php70w-* 发生冲突:

错误:php70w-common 与 php-common-5.3.3-46.el6_7.1.x86_64 冲突 你可以尝试使用 --skip-broken 来解决这个问题你可以 尝试运行:rpm -Va --nofiles --nodigest

由于 RPM 的要求,选择的 php 版本应该是 5.3.3。 php-gd 列在 .spec 中,它强制执行:

---> Package php-gd.x86_64 0:5.3.3-46.el6_7.1 will be installed
--> Processing Dependency: php-common(x86-64) = 5.3.3-46.el6_7.1 for package: php-gd-5.3.3-46.el6_7.1.x86_64

有趣的是,如果我手动安装所有 php-* 软件包(完全按照 .spec 文件中列出的内容)然后安装该软件包,一切正常。 (这验证了冲突与 rest/non-php 依赖项无关)。请注意,我在规范中有AutoReqProv: no...

问题:

  • 我会假设 yum 会选择 php 5.3.3,因为所有依赖项都得到满足而没有冲突……为什么不这样做?
  • 我如何才能防止这种行为仅适​​用于 my.rpm 安装?

我考虑过的解决方案是:

  • 在所有 php 要求中明确声明版本 <=5.4。但是,由于我不知道是什么让 yum pick 版本 7,我不确定这是否可行。另外,如果可能的话,我更喜欢保持依赖版本少。一旦所有必需的 php 模块都在 php 7 中可用,或者一旦我们的软件发生更改并且我们删除了php-gd,那么在不更改规范中的所有版本的情况下移植到 php 7 会很好。

  • 在主机上的存储库定义中,我可以排除包。我想避免这种情况 - 我控制 RPM 规范,但存储库是由系统管理员设置的(使用 puppet)

  • 指示puppet先安装所有php依赖,再部署my.rpm。我不喜欢这个解决方案,因为我们将安装分为两个步骤和两个不同的系统:puppet 和 rpm。

任何帮助和/或想法将不胜感激

【问题讨论】:

    标签: php rpm rpm-spec rhel6


    【解决方案1】:

    php70w-common 看起来像一个 webtatic 或原子 repo 包。

    无论哪种方式,您都需要确定它属于哪个存储库,要么在安装时选择性地排除存储库,要么配置存储库优先级。

    您可以通过以下方式轻松找到:

    yum info php70w-common
    

    我更喜欢优先级方法,这种方法更简洁、更便携。

    https://wiki.centos.org/PackageManagement/Yum/Priorities

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-20
      • 2013-06-01
      • 2016-01-22
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      相关资源
      最近更新 更多