【发布时间】: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。
任何帮助和/或想法将不胜感激
【问题讨论】: