rpm -ivh 经常失败是因为它不联网、不解依赖,仅校验、解压、写库并执行脚本;遇缺失或版本不匹配的依赖(如libcurl >= 7.29.0但系统只有7.28)即报“Failed dependencies”退出,不会自动安装或升级依赖。

直接用 rpm -ivh 安装离线 .rpm 包,只在依赖已全部满足时才真正可行;多数情况下会卡在 Failed dependencies,此时必须换策略。
为什么 rpm -ivh 经常失败
因为 rpm 命令本身不解决依赖——它只校验、解压、写数据库、执行安装脚本。一旦包声明了 Requires: libcurl >= 7.29.0,而系统里只有 7.28,就会报错退出,不会尝试找或装新版 libcurl。
- 错误典型提示:
error: Failed dependencies: libxxx.so.1()(64bit) is needed by xxx-1.0-1.x86_64 - 即使你手动下载了那个
libxxx.rpm,rpm -ivh也不会自动识别并先装它 -
--nodeps强制安装极危险:程序可能启动就段错误,或运行时缺符号崩溃
优先用 dnf install /path/to/*.rpm(RHEL 8+/CentOS 8+/Fedora)
dnf 是现代替代方案,离线依赖求解能力远超旧版 yum。它能扫描目录下所有 .rpm 文件,构建完整依赖图,按拓扑序安装。
- 把主包和所有依赖包(包括
mysql-community-common、mysql-community-client等)统一放一个目录,比如/mnt/rpms - 执行:
sudo dnf install /mnt/rpms/*.rpm - 它会列出将要安装的全部包(含隐式依赖),输入
y后自动完成,不联网、不查源 - 如果提示冲突(如已装旧版 MySQL),加
--allowerasing允许卸载旧包(谨慎评估)
CentOS 7/RHEL 7 用 yum localinstall
yum localinstall 是 yum 提供的离线专用命令,原理类似 dnf install *.rpm,但依赖解析逻辑较旧,对复杂循环依赖支持弱。
- 确保所有
.rpm在同一目录,例如/opt/mysql-rpms - 进入该目录后执行:
sudo yum localinstall *.rpm - 它会尝试从当前目录匹配依赖,但不会跨目录或从系统缓存找;若缺某个依赖包,仍会失败
- 注意:
yum localinstall在 RHEL 8+ 已被废弃,dnf install是唯一推荐路径
实在没得选才用 rpm -ivh(仅限确认依赖齐全)
适合内网标准化环境,比如你已用 dnf --downloadonly 提前拉全依赖并验证过,或部署的是无依赖的纯二进制工具包(如某些 CLI 工具)。
- 检查依赖是否满足:
rpm -qpR package.rpm查看声明的依赖,再用rpm -q逐个确认系统已装 - 安装命令必须带完整路径:
sudo rpm -ivh /tmp/mysql-community-server-8.0.38-1.el7.x86_64.rpm(不能只写文件名) - 留意输出中两个
100%:第一个是预处理,第二个才是安装完成;只看到一个就别以为成功了 - 安装后务必运行
rpm -ql package-name确认关键文件(如/usr/bin/mysqld、/etc/my.cnf)确实存在
最容易被忽略的是架构和 glibc 版本兼容性——uname -m 和 ldd --version 必须跟 RPM 包名里的 x86_64 或 aarch64、以及包说明里的 glibc2.12 严格对应,否则连 rpm -qpR 都可能报错“not an rpm package”。


















