首页/系统/信创系统运维速查/RPM 依赖机制与常见冲突
命令与包管理65 条

RPM 依赖机制与常见冲突

理解 requires/provides 模型:缺依赖报 Failed dependencies、文件冲突报 conflict;处理哲学是补源找包,而不是无脑 --force。

信创系统运维速查系统更新于 2026-10-13

RPM 依赖机制讲清楚

RPM 用能力(capability)模型表达依赖:每个包提供若干能力(provides),同时声明需要的能力(requires)。安装时解析器把需求匹配到某个包的提供项,匹配不上就报 Failed dependencies。另一类报错是文件冲突(conflict),两个包想装同一路径。处理哲学是补源、找提供者、交给 dnf 统一解析,而不是无脑 --force 或 --nodeps;后者装上去的包在后续升级中极易破碎。

基本信息

适用平台rpm 系:openEuler、银河麒麟、RHEL/CentOS、Fedora
查依赖rpm -qpR 包文件 / rpm -qR 已装包名
找提供者dnf repoquery --whatprovides '能力名'
查文件归属rpm -qf 路径
正确处理优先 dnf install ./包文件,让解析器补齐依赖

典型使用场景

  • 手工装离线包报缺依赖:定位到底缺哪个能力、由谁提供
  • 文件冲突排错:确认路径属于哪个包,判断覆盖还是改包
  • 离线环境依赖闭环:把 rpm -qpR 的结果人工凑齐一整套离线包
  • 升级失败排查:旧包残留或版本锁死导致解析失败
  • 自研包打包:检查自己打的包是否声明了正确的依赖能力

依赖排查

依赖排查
rpm -qpR ./pkg.rpm | head -20              # 看这个包依赖哪些能力
rpm -qR nginx | head -20                    # 看已装包的依赖清单
dnf repoquery --whatprovides 'libxx.so*'     # 找谁能提供该依赖
dnf repoquery --requires ./pkg.rpm           # 用 dnf 解析包文件依赖
rpm -qf /usr/lib64/libxx.so.1                # 反查某文件属于哪个包
dnf install ./pkg.rpm                        # 交给 dnf 自动补齐依赖
rpm -qp --conflicts ./pkg.rpm                # 查看该包声明了哪些冲突

报错与处理对照

报错含义处理方式
Failed dependencies: libxx.so needed缺少被依赖的能力找提供者装包,或让 dnf 解析
file /usr/bin/x conflicts两个包安装同一路径rpm -qf 查归属,决定覆盖或换包
package X is already installed同名同版本已存在确认版本后加 --replacepkgs 或先卸载
package X is obsoleted by Y被其他包取代装 Y,不要硬装 X
nothing provides /usr/bin/python3脚本依赖的文件型能力缺失装对应解释器或提供该文件的能力包
loop in dependency chain依赖成环用 dnf 而非 rpm 单独安装
文件冲突往往说明两个包职责重叠:先用 rpm -qf 查清路径归属再决定处理方式,不要直接加 --force 覆盖别人的文件。
rpm -qpR 输出里的能力名可能带 ()(64bit) 之类修饰,这是 RPM 的能力语法,搜索时按原样带引号查询才能命中。

易错点

  • --nodeps 或 --force 装上的包在后续升级、校验与补丁中更易破碎,只作为临时手段并记录原因。
  • 用 rpm -i 手工装包时依赖不满足直接失败,且不会像 dnf 那样自动补齐,先改用 dnf install ./包。
  • 离线环境缺少依赖时反复重下同一个包,问题在没凑齐整条依赖链,应按 rpm -qpR 输出逐项闭环。
  • 遇到文件冲突直接 --force,覆盖掉另一个包的文件后该软件出现异常,排查时很难联想到这次安装。
  • 把库文件名里的 ()(64bit) 修饰手动去掉再搜,导致查不到提供者,误以为没有对应包。

数据来源与参考

  • RPM 依赖文档
  • dnf 依赖解析说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌