要查到可用的旧版本,必须使用yum --showduplicates list ,否则yum list available仅显示最新版;输出为空说明当前启用的仓库中确实没有该旧版本。

如何用 yum --showduplicates list 查到可用的旧版本
直接运行 yum list available <package_name></package_name> 通常只显示最新版;想看到历史版本,必须加 --showduplicates。这个参数会拉出仓库里所有已缓存的版本(包括已被更新覆盖但未清理的老包)。
常见错误是漏掉该参数,结果以为“没旧版本”,其实只是没列出来。
-
yum --showduplicates list nginx—— 列出所有 nginx 版本(含 el7、el8 等不同发行版适配的变体) - 输出中每行格式为:
nginx.x86_64 1:1.20.1-10.el7,其中1:是 epoch,1.20.1-10.el7才是真正要匹配的版本字符串 - 若输出为空,说明当前启用的 repo 没有该旧版本——不是命令错了,而是源里本来就没有
yumdownloader 下载指定版本 RPM 包的正确写法
yumdownloader 不支持直接写 nginx-1.16.1 这种模糊形式;必须带完整 NVR(Name-Version-Release),否则它会默认下载最新版,甚至报错 “no package matched”。
例如你从上一步查到目标是 nginx-1:1.16.1-10.el7,那就得这么下:
yumdownloader nginx-1:1.16.1-10.el7
容易踩的坑:
- 省略 epoch(即去掉
1:)会导致找不到包,因为 RPM 数据库里它就是带 epoch 存的 - 架构不匹配:默认下载当前系统架构(如
x86_64),如果目标环境是aarch64,得显式加--archlist=aarch64 - 依赖不自动下载:除非加
--resolve,否则只下主包;离线安装时大概率缺依赖
为什么 yum install --downloadonly 有时比 yumdownloader 更可靠
当你要的旧版本在仓库里存在,但 yumdownloader 死活找不到时,试试 yum install --downloadonly。它的依赖解析逻辑更贴近真实安装流程,对 epoch、多 repo 冲突、exclude 规则等处理更鲁棒。
操作步骤:
yum install --downloadonly --downloaddir=/tmp/old-nginx nginx-1:1.16.1-10.el7
注意点:
- 必须确保
yum-plugin-downloadonly已安装,否则提示 “No plugin matches: downloadonly” - 如果系统已装了新版本 nginx,
install会拒绝降级;此时改用yum reinstall --downloadonly(它不检查版本高低,只认包名+版本号) - 下载路径默认是
/var/cache/yum的子目录,用--downloaddir显式指定更可控
离线安装前务必验证 RPM 包签名和依赖完整性
从外网下载的 RPM 包拷进内网后,不能直接 rpm -ivh 就完事。两个关键检查常被跳过:
- 用
rpm -K <pkg.rpm></pkg.rpm>校验包是否损坏或被篡改(输出含OK才可信) - 用
rpm -qpR <pkg.rpm></pkg.rpm>看它声明依赖哪些库/包,再对照内网环境是否满足;尤其注意glibc、openssl-libs等基础依赖的版本范围 - 如果依赖缺失,别硬上
--nodeps—— 多数崩溃问题都源于此
最稳妥的做法是:用同一台联网机器先 yum install --downloadonly --resolve 把主包 + 所有依赖一起下全,再整体搬入内网用 yum localinstall 安装,由 yum 自动做依赖校验。


















