如何避免YUM更新php-common时移除自制依赖RPM包?
解决YUM更新php-common时误删自定义RPM包的问题
我之前处理过好几起类似的自定义RPM依赖系统组件导致更新冲突的情况,结合你的需求(已经确认新版本php-common兼容你的mypackage),这里有几个可行的方案,从临时应急到长期根治都有:
方案一:版本锁定保护你的mypackage
这是最安全的临时解决方案,通过yum的版本锁定插件阻止yum移除或更新你的包:
- 先安装版本锁定插件(如果未安装):
yum install yum-plugin-versionlock - 锁定mypackage,防止它被yum操作:
yum versionlock add mypackage - 现在执行php-common的更新,yum会跳过对mypackage的移除操作:
yum update php-common - 后续如果需要更新或移除mypackage,记得先解锁:
yum versionlock delete mypackage
方案二:强制更新php-common并跳过依赖检查
如果你百分百确认新版本php-common完全兼容,也可以直接跳过依赖检查强制更新,但这个方法要谨慎使用(可能会影响其他依赖php-common的系统组件):
yum update php-common --nodeps
或者用rpm命令直接强制升级:
rpm -Uvh --force /path/to/php-common-new-version.rpm
注意:
--nodeps和--force会绕过所有依赖校验,只推荐在你完全清楚风险的情况下使用。
方案三:重构RPM包,修复依赖兼容问题
这是长期根治的最佳方案,修改你mypackage的spec文件,让它的依赖声明兼容php-common的新版本:
- 打开mypackage的spec文件,找到
Requires字段,原来的可能是类似:Requires: php-common = 7.4.33 - 修改为兼容更高版本的格式,比如允许php-common大于等于当前版本:
或者用通配符匹配主版本兼容:Requires: php-common >= 7.4.33Requires: php-common = 7.4* - 重新构建RPM包并安装,之后再更新php-common就不会触发移除mypackage的提示了。
方案四:临时禁用yum的冲突检查(不推荐)
还有一种更激进的方法,通过修改yum配置临时关闭冲突检查,但可能导致系统依赖混乱,只作为最后手段:
- 编辑yum的主配置文件
/etc/yum.conf,添加或修改:skip_broken=1 - 执行更新后,记得改回原来的配置,避免后续操作出现意外。
内容的提问来源于stack exchange,提问作者Arturo Garcia
相关产品推荐
相关产品推荐

