已存在对应包时Yum仍抛出依赖错误的排查求助
解决Yum依赖错误:Release标签不匹配导致的版本校验失败
看起来你遇到的问题是Yum在版本校验时严格区分了包的release后缀——你的app-platform包是基于CentOS 7(el7.centos)构建的,而从Webtatic下载的PHP包使用的是Webtatic自己的release标签(w7)。Yum默认会把release后缀作为版本的一部分进行比较,哪怕主版本号满足要求,也会判定为不匹配。
下面是一步步的排查和解决方案:
1. 确认问题根源
先通过命令验证两个包的release差异:
# 查看PHP包的release信息 rpm -qi php72w-mbstring-7.2.16-1.w7.x86_64 # 查看app-platform包的release信息 rpm -qi app-platform-20190921-6.el7.centos.x86_64
你会看到输出里的Release字段,一个是1.w7,另一个是6.el7.centos,这就是Yum报错的核心原因。
2. 推荐的生产环境解决方案:重新构建适配release标签的PHP包
这是最规范的长期解决方案:
- 找到
php72w-mbstring和php72w-ldap的.spec文件(如果没有,可以用rpm -qp --scripts php72w-mbstring-7.2.16-1.w7.x86_64.rpm提取,或者从Webtatic的源码包中获取) - 修改.spec文件中的
Release字段,将w7替换为el7或el7.centos,比如把Release: 1.w7改成Release: 1.el7.centos - 用
rpmbuild重新构建RPM包:rpmbuild -bb php72w-mbstring.spec rpmbuild -bb php72w-ldap.spec - 将新构建的包替换到你的
repo_php仓库中,然后更新仓库元数据:createrepo --update /path/to/repo_php
之后再尝试安装app-platform,Yum就能正确识别版本匹配了。
3. 临时应急方案(不推荐生产环境)
如果暂时无法重新构建包,可以用以下方法绕过Yum的严格版本校验:
方法一:单次安装时忽略release检查
执行安装命令时添加--setopt=strict=0参数,关闭Yum的严格版本匹配:
yum install app-platform-20190921-6.el7.centos.x86_64 --setopt=strict=0
方法二:先手动安装依赖包再安装主程序
先手动指定安装仓库中的PHP包,再安装app-platform:
yum install php72w-mbstring-7.2.16-1.w7.x86_64 php72w-ldap-7.2.16-1.w7.x86_64 yum install app-platform-20190921-6.el7.centos.x86_64
如果还是报错,可以尝试用rpm强制安装(注意:可能会破坏系统依赖链,谨慎使用):
rpm -ivh /path/to/app-platform-20190921-6.el7.centos.x86_64.rpm --nodeps
4. 为什么修改app-platform的spec文件没生效?
你提到修改了app-platform的rpmspec中Requires标签但没解决,可能是以下原因:
- 修改后没有重新构建
app-platform包并替换到repo_app仓库中,旧包的依赖规则依然生效 - 修改的规则不够宽松:比如你需要把
Requires: php72w-mbstring >= 7.2.16-1改成Requires: php72w-mbstring >= 7.2.16(去掉release部分),或者使用通配符匹配release:Requires: php72w-mbstring = 7.2.16-1*
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

