
直接用 rpm -ivh 会失败,因为不解决依赖
Linux 手动安装 RPM 包时,rpm -ivh package.rpm 最常报错:Failed dependencies。这不是命令写错了,而是 rpm 工具本身不联网、不查仓库、不自动装依赖——它只做“校验+解压+注册”,依赖得你亲手凑齐。
常见错误现象包括:
error: Failed dependencies: libxxx.so.5 is needed by xxx- 装完后运行报
command not found或libxxx.so.6: cannot open shared object file - 反复下载多个 RPM,却始终卡在某个未满足的依赖上
优先用 yum 或 dnf 替代 rpm 命令
如果你的系统有网络且配置了可用仓库(RHEL/CentOS 7/8、Fedora、AlmaLinux 等),根本不需要手动下 RPM。用包管理器能自动拉依赖:
- CentOS 7 / RHEL 7:
yum localinstall package.rpm(注意不是install) - RHEL 8+ / Fedora / CentOS Stream:
dnf install ./package.rpm(路径必须带./或绝对路径) - 两者都支持
--nogpgcheck跳过签名验证(仅限可信源)
原理上,yum localinstall 和 dnf install ./xxx.rpm 会解析该 RPM 的 Requires 字段,然后从已启用的 repo 中匹配并安装所有缺失依赖,顺序和版本都由 resolver 决定。
真要手动装,用 rpm -qpR 查依赖,再用 dnf download 拉齐
离线环境或需精确控制版本时,可分步处理:
- 查依赖:
rpm -qpR package.rpm—— 输出全是libc.so.6(GLIBC_2.14)(64bit)这类符号依赖,不是包名 - 转成包名:
dnf provides "libc.so.6(GLIBC_2.14)(64bit)"(在线)或查rpm -qf /lib64/libc.so.6看本机提供者 - 批量下载依赖:
dnf download --resolve --destdir ./deps/ package.rpm(--resolve是关键) - 最后统一装:
rpm -ivh ./deps/*.rpm
注意:dnf download 需要 dnf-plugins-core 包;若系统没 dnf(如旧版 CentOS 6),只能靠 yum-plugin-downloadonly + yum install --downloadonly 组合,但兼容性差很多。
rpm --force --nodeps 是危险操作,仅限临时调试
强行忽略依赖(rpm -ivh --nodeps package.rpm)或覆盖安装(--force)会导致:
- 程序运行时动态链接失败(
undefined symbol或version mismatch) - 后续用
yum/dnf update可能破坏已手动装的包状态 -
rpm -V校验全红,无法判断文件是否被篡改
唯一合理场景:你明确知道缺失的依赖已在系统中(比如自编译的库放在 /usr/local/lib64),但 rpm 数据库没记录——此时应先用 rpm -i --replacepkgs 装对应 -devel 或 -libs 包,而不是跳过依赖检查。
真正难的从来不是装上,而是让依赖链里每个 .so 版本号、ABI、加载路径都对得上。别省那几秒 dnf provides 的时间。










