乐于分享
好东西不私藏

yum 安装包为什么总和镜像源有关?换源、离线安装和生产环境避坑(下)

yum 安装包为什么总和镜像源有关?换源、离线安装和生产环境避坑(下)
点击上方
蓝字
关注我,设置星标不迷路哈

上篇我们讲清楚了 yum 的底层逻辑。

它不是简单执行一个安装命令,而是围绕 repo 配置、镜像源、元数据、依赖关系和 RPM 数据库完成软件管理。

这一篇我们进入实操。

但先说一句很重要的话:

换 yum 源不是“提速小技巧”,而是在改变系统信任的软件来源。

测试机上可以大胆一点,生产环境里一定要谨慎。

一、换源前,先确认系统版本

换源之前,第一步不是复制命令,而是确认系统到底是什么。

cat /etc/os-release

你会看到类似信息:

NAME="Rocky Linux"VERSION="9.4 (Blue Onyx)"ID="rocky"VERSION_ID="9.4"

这一步非常关键。

CentOS 7、CentOS 8、Rocky Linux 9、AlmaLinux 9、Fedora 的仓库路径都不一样。

不要拿 CentOS 7 的 repo 文件去套 Rocky Linux 9。

也不要把已经停止维护的 CentOS Linux 8 当成普通 CentOS 8 镜像源来处理。

版本不匹配,是很多 yum 源故障的根源。

二、改源前一定要备份

repo 文件一般放在:

/etc/yum.repos.d/

改之前先备份:

sudo mkdir -p /etc/yum.repos.d/backupsudo cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/

这样改错了还能恢复:

sudo cp /etc/yum.repos.d/backup/*.repo /etc/yum.repos.d/

这一步看起来普通,但在生产环境里很重要。

很多线上故障不是因为技术多复杂,而是因为改配置前没有留退路。

三、换源后要清理并重建缓存

repo 文件改完之后,建议清理旧缓存,再重新生成缓存。

sudo yum clean allsudo yum makecache

如果系统使用的是 dnf:

sudo dnf clean allsudo dnf makecache

clean all 会清理旧的仓库缓存。

makecache 会重新下载仓库元数据。

很多人换源后仍然报错,就是因为系统还在使用旧缓存,或者新仓库元数据还没正确下载。

你还可以查看当前启用的仓库:

yum repolist

较新的系统也可以用:

dnf repolist

四、找不到包时,不要只会换源

遇到:

No package nginx available.

很多人的第一反应是换源。

但更稳的排查顺序应该是这样。

先确认仓库列表:

yum repolist

再搜索包名:

yum search nginx

如果包确实不在基础仓库里,再考虑启用额外仓库。

在 CentOS 7、RHEL 兼容发行版里,很多常用扩展包来自 EPEL。

sudo yum install -y epel-release

然后再次生成缓存:

sudo yum makecache

注意,EPEL 不是万能源。

它是 Extra Packages for Enterprise Linux,提供很多基础仓库之外的软件包,但必须和你的发行版版本匹配。

生产环境启用 EPEL 前,最好先确认公司是否允许使用,以及是否需要固定版本。

五、离线安装不要乱用 --nodeps

原文里最需要修正的一点,是离线安装方式。

很多教程会教你把 RPM 包拷到离线机器上,然后执行:

rpm -Uvh --force --nodeps *.rpm

这条命令不建议作为常规方案。

--nodeps 会跳过依赖检查。

--force 会强制覆盖或替换某些内容。

它们能让命令“看起来执行成功”,但可能把系统依赖关系搞乱,后面排查会非常痛苦。

更稳的做法,是在同版本、同架构、同仓库配置的联网机器上,把目标包和依赖一起下载下来。

CentOS 7 可以先安装工具:

sudo yum install -y yum-utils

然后下载目标包和依赖:

mkdir -p /tmp/nginx-rpmsyumdownloader --resolve --destdir=/tmp/nginx-rpms nginx

把整个目录拷贝到离线机器后,进入目录安装:

cd /tmp/nginx-rpmssudo yum localinstall -y ./*.rpm

如果是 dnf 系统,也可以使用:

dnf download --resolve --destdir=/tmp/nginx-rpms nginx

更规范的企业做法,是在内网搭建本地 yum 仓库,而不是每次手工拷一堆 RPM。

可以用 createrepo 生成本地仓库元数据,再让离线服务器统一指向内网 repo。

六、装错版本了,怎么回退

先查看仓库里有哪些可用版本:

yum --showduplicates list nginx

如果仓库里仍然保留旧版本,可以尝试降级:

sudo yum downgrade nginx

或者指定版本:

sudo yum downgrade nginx-版本号

但这里要注意边界。

降级不是任何时候都能成功。

它取决于仓库是否还提供旧版本,以及相关依赖是否也能匹配。

生产环境里,服务版本回退最好配合配置备份、数据备份和灰度验证。

不要把 yum downgrade 当成万能撤销按钮。

七、yum update 和 yum upgrade 有什么区别

在 yum 里,update 和 upgrade 很接近。

通常可以这样理解:

yum update

用于更新已安装的软件包。

yum upgrade

大体相当于:

yum update --obsoletes

它会额外处理被新包替代的旧包。

但不要简单理解成“upgrade 一定会删除旧内核”。

RHEL 系系统对内核通常有特殊的 installonly 机制,会保留多个内核版本,具体保留数量还受 installonly_limit 等配置影响。

真正需要新手记住的是:

生产环境不要随手执行全量 yum update -y

因为它可能一次性升级大量软件包。

更稳的方式是先看会升级什么:

yum check-update

如果只想更新某个包,可以指定包名:

sudo yum update nginx

对生产服务器来说,升级前最好先在测试环境验证,再安排维护窗口。

八、yum 缓存可以清理,但别把它当万能修复

yum 缓存通常位于:

/var/cache/yum/

清理缓存可以用:

sudo yum clean all

重建缓存:

sudo yum makecache

换源后执行这两步很常见。

但如果问题是系统版本停止维护、repo 地址写错、网络不通、仓库没有目标包,清缓存并不能从根上解决问题。

所以缓存问题要排查,但不要把所有 yum 报错都归结为缓存。

九、从 yum 到 dnf,变的是工具,不变的是思路

现在很多新系统默认使用 dnf。

你会看到:

dnf install nginxdnf remove nginxdnf search nginx

命令和 yum 很像。

dnf 改进了 yum 的一些实现问题,比如依赖解析、性能和插件机制,但它背后的管理思路仍然类似:

  • 读取仓库配置
  • 下载仓库元数据
  • 解析依赖关系
  • 安装 RPM 包
  • 维护本地软件包数据库

所以学 yum 的价值,不只是为了会用 CentOS 7。

更重要的是理解 Linux 软件管理的通用思维。

当你以后接触 dnf、apt、zypper,也会发现它们名字不同,但都在解决同一类问题:让软件安装、升级、卸载变得可追踪、可维护、可自动化。

十、全文总结

yum 镜像源这件事,表面上是在解决下载速度。

但往深一层看,它其实关系到软件包来源、依赖解析、版本兼容和系统安全。

你真正需要掌握的不是某一条换源命令,而是这套判断逻辑:

我是什么系统版本?启用了哪些仓库?包是否存在于这些仓库?镜像源是否可访问?缓存是否需要重建?软件包来源是否可信?生产环境是否有回滚方案?

如果能按这个顺序排查,yum 就不再是一堆记不住的命令,而是一套清晰的软件管理方法。

学 Linux,不要只背命令。

命令会变,发行版会变,工具也会从 yum 变成 dnf。

但只要你理解了“软件源、依赖、元数据、版本、签名、回滚”这几个关键词,以后遇到安装包问题,就不会慌。

文章末尾互动提问

你第一次遇到 yum 报错,是下载慢、找不到包、依赖冲突,还是换源后更乱了?

可以把具体报错整理出来,下一篇我们可以专门拆解 yum 常见报错应该怎么一步步定位。

END

yum 安装包为什么总和镜像源有关?先搞懂 Linux 软件仓库这套逻辑(上)

Linux 为什么没有 C 盘?从目录结构讲清 Linux 的设计逻辑