百胜是混淆还是我?

时间:2017-01-25 08:30:30

标签: php rpm rpm-spec rhel6

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

  

错误:php70w-与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,强制执行:{/ p>

---> 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文件中列出的那样),然后安装包,一切正常。 (这验证冲突与其余/非PHP依赖关系无关)。请注意,我在规范中有AutoReqProv: no

问题:

  • 我会假设yum会选择php 5.3.3,因为所有的依赖都是满足而没有冲突...为什么不这样做呢?
  • 如何仅针对my.rpm安装阻止此行为?

我考虑的解决方案是:

  • 在所有php要求中明确声明版本<=5.4。但是,由于我不知道是什么让yum选择版本7,我不确定这是否会奏效。另外,如果可能的话,我更喜欢保持依赖版本的版本。一旦所有需要的php模块在php 7中可用或者我们的软件更改后我们删除php-gd,最好移植到php 7而不更改规范中的所有版本。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

您可以轻松找到:

yum info php70w-common

我更喜欢优先级方法,它更清洁,更便携。

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