一、为什么CentOS转Rocky/Alma后yum源会失效

日常运维或服务器系统升级时,很多人会把已经停更的CentOS替换成Rocky或Alma这种兼容的社区分支,转完之后最头疼的就是yum用不了:装软件提示“找不到软件包”,更新依赖提示404,甚至连yum命令都跑不起来。这种场景特别常见,比如公司的旧服务器要继续用,又不想停更,转成Rocky或Alma是最优选择,但转完之后的yum源失效问题几乎100%会碰到。

二、失效的核心原因

很多人以为是系统转坏了,其实不是,本质是源地址的系统标识不匹配。你可以这么理解:每个Linux系统的yum源就像一个网上的书店,书店里的书分类是按系统版本放的,原来CentOS的书在“CentOS7”架子上,转成Rocky9后,书店的架子改成了“Rocky9”,但你之前的借书卡(yum源配置)还是写着“去CentOS7架子拿”,自然找不到书。

2.1 系统版本标识的变化

CentOS7对应的Rocky版本是7,CentOS8对应Rocky8,CentOS9对应Rocky9,Alma的对应规则也是一样的。转系统后,你的系统身份证号(/etc/os-release里的版本信息)已经变成新的,但原来的yum源配置文件里的变量还是老的,指向了CentOS的旧地址,而CentOS官方已经停更,旧地址根本没有Rocky的文件,所以失效。

2.2 yum源配置的变量失效

原来的CentOS源配置里,一般会用$releasever这个变量来代表系统版本,转成Rocky后,这个变量的值还是原来的CentOS版本号,而Rocky的官方源地址需要对应Rocky的版本号,所以变量不匹配,导致源地址拼接错误,找不到文件。

三、排查失效的实战步骤

排查很简单,跟着三步来,就能找到问题所在,不会像无头苍蝇一样瞎试。

3.1 查看旧的yum源配置文件

所有的yum源配置文件都放在/etc/yum.repos.d/这个固定目录里,后缀都是.repo,直接看里面的内容就能找到问题。

# 进入yum源配置的固定目录,别搞错路径,所有Linux发行版都统一放在这
cd /etc/yum.repos.d/
# 列出目录里的所有.repo文件,过滤一下,只看需要的
ls -la | grep .repo
# 打开其中一个旧源文件,比如原来的CentOS-Base.repo,看看里面的源地址
cat CentOS-Base.repo

你从这个文件里能看到baseurl(源地址)的内容,比如原来的是http://mirror.centos.org/$contentdir/$releasever/,这里的$releasever就是刚才说的老版本变量,转成Rocky后,这个变量的值不对,而且地址的域名还是centos.org,已经没人维护了,自然打不开。

3.2 确认新系统的标识

知道了旧源的问题,再确认新系统的正确标识,这样才能找到对应的Rocky/Alma的源地址。

# 查看系统的发行版本信息,能准确看到是Rocky还是Alma,以及版本号
cat /etc/os-release

输出里会有类似ID="rocky",VERSION_ID="9"的内容,说明你用的是Rocky9,那对应的源地址就要用Rocky9的,不能用Rocky8或者Alma的。

四、修复yum源的实战方法

修复的核心就是把旧的CentOS源换成对应Rocky/Alma的源,这里推荐用国内的镜像站,比如阿里、163,速度比官方源快很多,而且配置简单,新手也能直接复制命令用。

4.1 针对Rocky Linux的修复步骤

这里以Rocky9为例,步骤很明确,先备份旧源,再换国内镜像,最后生效:

# 第一步:备份所有旧的源文件,一定要做!如果改错了,还能恢复
mkdir -p /etc/yum.repos.d/backup/
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
# 第二步:下载阿里提供的Rocky9的官方源配置,分Base、Extras、Plus三个基础源
curl -o /etc/yum.repos.d/Rocky-Base.repo https://mirrors.aliyun.com/repo/rocky/rocky-base-9.repo
curl -o /etc/yum.repos.d/Rocky-Extras.repo https://mirrors.aliyun.com/repo/rocky/rocky-extras-9.repo
curl -o /etc/yum.repos.d/Rocky-Plus.repo https://mirrors.aliyun.com/repo/rocky/rocky-plus-9.repo
# 第三步:清理旧的yum缓存,防止旧的无效源缓存干扰
yum clean all
# 第四步:重建新的yum缓存,让新的源生效,这一步必须做,否则还是找不到包
yum makecache
# 第五步:测试,装一个小软件,比如tree,确认yum能用
yum install -y tree

如果执行到第五步,能顺利安装tree,说明yum源已经修复好了。

4.2 针对AlmaLinux的修复步骤

Alma的修复步骤和Rocky几乎一样,只是源地址换成Alma的,还是以Alma9为例:

# 备份旧源,和Rocky一样
mkdir -p /etc/yum.repos.d/backup/
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
# 下载阿里的Alma9源配置
curl -o /etc/yum.repos.d/Alma-Base.repo https://mirrors.aliyun.com/repo/almalinux/almalinux-base-9.repo
curl -o /etc/yum.repos.d/Alma-Extras.repo https://mirrors.aliyun.com/repo/almalinux/almalinux-extras-9.repo
# 清理和重建缓存
yum clean all
yum makecache

测试方式一样,装tree就可以。

4.3 补充第三方源(EPEL)的安装

很多时候我们需要装一些官方源没有的软件,比如监控工具、开发库,这时候就要装EPEL源,Rocky/Alma都支持,安装也简单:

# 装Rocky9的EPEL源,用阿里的镜像
yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-9.noarch.rpm
# 清理和重建缓存
yum clean all && yum makecache

这里要注意,EPEL的版本必须和你的Rocky/Alma版本对应,比如Rocky9就要装latest-9,不能装latest-8。

五、技术优缺点分析

修复后的yum源,不同类型的源有不同的好坏:

5.1 国内镜像源(阿里、163)

优点:下载速度快,国内访问延迟低,不会像官方源那样有时候连不上;配置简单,都是现成的文件,直接复制命令就能用。 缺点:如果镜像站维护不及时,可能会有少量包的延迟,不过一般不会影响核心软件的安装。

5.2 官方源

优点:完全适配Rocky/Alma的所有版本,不会有兼容问题,安全性有保障; 缺点:国外地址,国内访问速度慢,有时候甚至连不上,服务器在国内的话不推荐用。

5.3 第三方源(EPEL)

优点:提供了大量官方源没有的软件包,满足各种开发和运维需求; 缺点:部分包可能和官方源的包冲突,安装前要确认版本,尽量选知名的镜像站的EPEL源。

六、注意事项

修复的时候一定要记住这几点,避免踩坑:

  1. 必须备份旧源文件:万一下载错了源,或者源不对,把原来的源移回去就行,不用重装系统;
  2. 源版本必须和系统版本对应:Rocky9就要装Rocky9的源,Alma8就要装Alma8的源,不能跨版本,比如不能把Rocky9的源装到Rocky8上;
  3. 不要用CentOS的旧源:CentOS官方已经停更,旧源地址里的文件早就删了,用了只会提示404,浪费时间;
  4. 尽量用国内镜像:除非你在国外,否则用阿里、清华的镜像源,能省很多下载时间;
  5. 转系统的时候尽量选同版本迁移:比如CentOS7转Rocky7,不要转成Rocky9,避免版本不兼容,yum源更难匹配。

七、实战总结

CentOS转Rocky或Alma后yum源失效,本质是源地址的系统标识不匹配,只要按照“备份旧源→下载对应新系统的国内镜像源→清理重建yum缓存→测试”这四个步骤,就能100%解决问题,整个过程10分钟左右,不需要复杂的操作,即使是第一次接触Linux的新手也能跟着做完,不会出错。另外,补充的EPEL源也能满足大部分第三方软件的安装需求,整体来说,转CentOS到兼容分支后的yum源问题,是非常容易修复的,不用怕踩坑。