☰
CentOS Stream 10换清华源:repo替换与EPEL配置实战
2026/10/7 12:08:32 网站建设 项目流程

简介:面向CentOS Stream 10(ARM架构)的国内镜像源替换方案,聚焦解决默认软件源下载缓慢、更新不稳定等典型网络问题,帮助用户在国内环境中获得更顺畅的系统维护体验。资源包共3个文件,包含代码配置片段、HTML说明页和gitignore配置文件,整体大小仅7KB,内容轻量且便于快速对照操作;文件类型覆盖了配置参考、页面说明和版本控制辅助,基本满足镜像源梳理与验证所需。详细步骤覆盖仓库文件备份、BaseOS、AppStream、CRB等关键仓库的清华镜像地址替换,以及dnf clean all清缓存、makecache重建缓存、repolist all验证配置的完整流程,并提供了Ansible安装与安装结果确认的方法,便于用户将系统优化与自动化部署场景衔接。目前已有90人学习,适合具备一定Linux操作基础、需要为CentOS Stream 10配置国内镜像源或了解Ansible基本安装流程的开发者与运维人员。通过该资源,可快速生成适合自己环境的仓库配置内容,掌握dnf仓库管理命令的逻辑,减少摸索和试错时间,同时还能将配置经验迁移到其他CentOS版本或仓库源。 CentOS Stream 10 换清华源这事儿,看着简单,真上手的时候一堆人栽在 repo 文件路径、gpg 校验、EPEL 源这些细节上。我前阵子刚在一台新装的 Stream 10 机器上把源全部切到清华镜像,顺手把踩过的坑和可以直接抄的代码整理出来,照着操作就能省下大把时间。

先说清楚这文章解决什么问题:CentOS Stream 10 是滚动更新的发行版,官方源在国内访问速度不稳定,尤其yum makecache的时候动不动就超时。换成清华源(清华 TUNA 镜像站,全称 mirrors.tuna.tsinghua.edu.cn)之后,下载速度和稳定性都有明显提升。这篇不只给你现成的sed替换命令,还会把 Stream 10 和旧版本在目录结构上的差异、EPEL 源怎么配、报错怎么排查讲明白,适合刚装好 Stream 10 想配源的运维新手,也适合想搞清楚 repo 文件原理再动手的人。

1. 为什么 CentOS Stream 10 换清华源是绕不开的一步

CentOS Stream 10 的定位和传统的 CentOS Linux 不一样,它是 Fedora 和 RHEL 之间的滚动版本,仓库更新节奏更快。好处是能提前接触到比较新的软件包,坏处是官方源的服务器负载高、地理位置远,在国内环境下拉取元数据和安装包的时候,经常出现连接重置、速度掉到几十 KB 的情况。

清华源本质上是一个官方网站的同步镜像,它存储了 CentOS Stream 10 的 BaseOS、AppStream、Extras 等仓库数据,通过国内的带宽节点对外提供访问。换源的逻辑很简单:把系统里yum所指向的baseurl从mirror.centos.org改成mirrors.tuna.tsinghua.edu.cn的对应路径。

但这里有个关键点:Stream 10 的仓库路径和 Stream 8、Stream 9 并不完全一样,不能拿老教程硬套。我见过不少人直接把 Stream 9 的 repo 文件内容拷到 Stream 10 上,结果yum repolist直接报 404。后面我细讲路径差异,这里先记住一个原则:改完源之后一定要跑一遍yum repolist确认。

镜像源的选择上,清华源算是最稳妥的一个,同步频率高、带宽充足、文档也全。阿里源和华为源我也用过,效果接近,但清华源的目录结构更接近官方原版,排查问题时更容易对比。你只要认准一个源,别混着用就行。

2. 动手前的准备:确认系统版本并备份配置

2.1 确认你的系统真的是 Stream 10

这一步看起来多余,但实际翻车率极高。很多机器从 Stream 9 升级上来,/etc/redhat-release显示是 10,但/etc/yum.repos.d/里还残留着旧的 repo 文件。换源前先确认一下系统身份:

cat /etc/redhat-release cat /etc/os-release | grep VERSION_ID
# 我的输出示例 CentOS Stream release 10 VERSION_ID="10"

输出确实是 10 之后再继续。如果显示 9 或者 8,直接套用本文代码会出问题,因为目录结构和仓库名不一样。

顺手再确认一下/etc/yum.repos.d/下面的文件构成:

ls -l /etc/yum.repos.d/

Stream 10 默认会有CentOS-Stream-BaseOS.repo、CentOS-Stream-AppStream.repo、CentOS-Stream-Extras.repo这几个核心文件,还有CentOS-Stream-Extras-common.repo这类附加仓库。每个文件里定义的baseurl就是我们接下来要替换的对象。

2.2 备份原配置,永远不要跳过

改系统配置文件前备份,这是基本功。yum 的 repo 文件一旦改错,最轻的后果是yum命令报错,严重的会导致整个系统的包管理器不可用,到时候想还原都难。

cp -a /etc/yum.repos.d /etc/yum.repos.d.bak.$(date +%Y%m%d)

-a参数会保留文件权限和属性,备份目录带上日期,方便以后区分。这个备份命令跑完,就算后面把源改废了,也能一条命令恢复:

rm -rf /etc/yum.repos.d && mv /etc/yum.repos.d.bak.$(date +%Y%m%d) /etc/yum.repos.d

我在实际工作中还遇到过一种情况:服务器上有其他同事手动添加过的第三方仓库,比如 docker-ce 的源,yum repolist能看到一堆仓库。这时候备份整个目录就特别重要,因为你不知道哪些文件是别人调试过的,盲目重建目录容易误删。

3. 核心实操:用代码完成清华源替换

3.1 先搞懂 Stream 10 的源路径长什么样

很多人失败的根源是清华源 URL 拼错了。Stream 10 在清华镜像站的路径是:

https://mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream/BaseOS/x86_64/os/

注意中间这个10-stream,不是10,也不是stream/10。这个是 Stream 系列的目录命名规则,跟传统 CentOS 的7、8、9目录不一样。官方源的原始路径结构是:

http://mirror.stream.centos.org/10-stream/BaseOS/$basearch/os/

所以替换的方式就是把mirror.stream.centos.org/10-stream换成mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream,仓库名、架构目录、os 子目录都保持不变。

用清华源页面打开确认过之后,再对$basearch这个变量有疑惑的朋友可以放心:它在 repo 文件中会自动展开成x86_64或aarch64,不需要手动填死。

3.2 一条 sed 命令完成全量替换

既然知道了源路径的差异,最直接的替换方案就是用sed批量处理。Stream 10 默认的 repo 文件里多是以#baseurl=注释形式存在的地址和mirrorlist=开头的动态地址,需要把mirrorlist注释掉,再启用baseurl并替换掉。

我实际用的命令是:

cd /etc/yum.repos.d # 1. 把所有 mirrorlist 行注释掉(防止 yum 走官方动态列表) sed -i 's/^mirrorlist=/#mirrorlist=/' CentOS-Stream-*.repo # 2. 取消 baseurl 的注释 sed -i 's/^#baseurl=/baseurl=/' CentOS-Stream-*.repo # 3. 将官方源地址替换为清华源地址 sed -i 's|mirror.stream.centos.org/10-stream|mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream|g' CentOS-Stream-*.repo

解释一下这三条命令的意图:

第一条先把mirrorlist=注释掉。mirrorlist是官方提供的镜像列表动态解析机制,它会根据你的 IP 返回一个最近的官方镜像地址。但它在国内解析后的结果往往不理想,所以我们要强制使用固定的 baseurl。

第二条把原有被注释的#baseurl=启用。官方 repo 文件默认把 baseurl 注释掉,优先走 mirrorlist,现在反过来。

第三条是整个操作的核心,sed的定界符用了|,避免 URL 里的斜杠和分隔符冲突。替换前是/10-stream/,替换后是/centos-stream/10-stream/,这是清华源特有的路径层级。

多问一句:为什么不用s|mirror.centos.org|mirrors.tuna.tsinghua.edu.cn|g这种简单粗暴的替换?因为这种替换出来的 URL 可能是https://mirrors.tuna.tsinghua.edu.cn/stream/...,缺了centos-stream目录,会 404。一定要把 Stream 10 的完整路径写对。

3.3 手动核对一个 repo 文件作为验证

跑完sed之后,我习惯打开 BaseOS 仓库文件看一眼:

cat /etc/yum.repos.d/CentOS-Stream-BaseOS.repo

正常情况下关键部分应该长这样:

[baseos] name=CentOS Stream $releasever - BaseOS baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream/BaseOS/$basearch/os/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

如果gpgcheck=1保留着,那gpgkey也要能访问到。Stream 10 的 GPG 公钥文件路径和旧版本略有不同,如果发现gpgkey指向的文件不存在,可以从清华源的10-stream/根目录下载对应的公钥文件放到/etc/pki/rpm-gpg/下,或者直接用官方源的同名文件。这一块最容易在后续yum makecache的时候弹Public key for ... is not installed的报错。

手动核对这一步别省,sed批量替换在绝大多数情况下是对的,但万一某个 repo 文件里路径写法和默认模板不一样,就只有亲眼看过才放心。

3.4 EPEL 源加上才能装更多软件

CentOS Stream 10 的默认源只包含核心软件包,像htop、jq、ncdu这类常用工具往往在 EPEL 里。清华源同样提供 EPEL 的镜像,配置方式如下。

先确认 epel-release 是否已经安装:

rpm -q epel-release

如果没装,直接从清华源拉取对应的 rpm 包(注意架构):

# x86_64 架构 dnf install -y https://mirrors.tuna.tsinghua.edu.cn/epel/epel-release-latest-10.noarch.rpm # 如果上面这个 URL 404,就去清华源页面查看 epel 目录下的实际文件名

装完后再把 epel 源也切换到清华镜像:

cd /etc/yum.repos.d sed -i 's/^metalink=/#metalink=/' epel*.repo epel-testing*.repo 2>/dev/null sed -i 's/^#baseurl=/baseurl=/' epel*.repo epel-testing*.repo 2>/dev/null sed -i 's|download.example/pub/epel|mirrors.tuna.tsinghua.edu.cn/epel|g' epel*.repo 2>/dev/null

EPEL 的 repo 文件在配置里通常写的是https://download.example/pub/epel/这种占位符,安装时通过dnf自动替换成实际地址。手动切换源就得把这个占位符改成清华的实际地址。

这里有个小坑:EPEL 的目录路径是epel,不是epel-stream,跟 CentOS 的 Stream 路径没关系。别把 EPEL 的 URL 里也加上10-stream,那绝对 404。

4. 验证源是否生效,以及缓存命令的正确用法

4.1 重建缓存并确认仓库列表

替换完 repo 文件之后,不能直接yum install,先让系统重新拉取元数据:

dnf clean all dnf makecache

clean all会清掉/var/cache/dnf下的旧元数据和软件包缓存。makecache会按照新源地址重新下载各仓库的元数据。这一步如果网速正常,跑完会看到类似Metadata cache created的提示。

然后确认仓库列表:

dnf repolist

正常情况下应该能看到baseos、appstream、extras等仓库,State 列是 enabled,仓库名前面没有任何报错。如果只显示一个仓库或者报 404,那十有八九是 URL 路径问题,回到 3.1 再核对一遍。

4.2 实际安装一个小包做最终验证

光看 repolist 还不够,直接装个包实测更踏实。随便挑一个没装过的常用工具:

dnf install -y htop

装成功的标志是能看到类似Complete!的输出,整个下载过程速度稳定。如果在这个步骤出现 GPG 签名报错,一般不是源本身的问题,而是gpgkey路径不对或者 key 文件缺失,按 3.3 里的方法补上就行。

装完之后顺手卸载测试包也行,留着也行,不影响系统。核心目的是验证源的可达性、签名校验流程、依赖解析都正常走了一遍。

5. 常见问题与排查:我踩过的 Stream 10 换源坑

5.1 makecache 报 404

这是最高频的问题。排查思路固定三步:先看 repo 文件里的 URL 是不是10-stream路径;再用浏览器或 curl 手动访问确认目录是否存在;最后看看是不是架构目录写错了($basearch没有自动展开的时候,试试手动改成x86_64或aarch64)。

我在实际排查时最爱用的一条命令:

curl -I https://mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream/BaseOS/x86_64/os/repodata/repomd.xml

返回 200 就代表路径完全正确。如果返回 404,逐步去掉路径层级测试,直到定位到出错的那一级目录。

5.2 替换完源后 dnf 命令直接报错

这种情况多半是 repo 文件语法被改坏了。比如sed的|定界符用错了,把 URL 里的字符也替换掉,导致baseurl=变成了一堆乱码。处理方式很简单:用备份恢复,重新按步骤跑一遍。

如果没备份,那就手动检查每个 repo 文件的语法。重点看[仓库名]这行顶格写没有、baseurl有没有重复、行尾有没有多余的空格或看不见的特殊字符。

5.3 EPEL 源装不上 epel-release

装 epel-release 的时候最常见的问题是清华源上找不到epel-release-latest-10.noarch.rpm这个文件。因为 EPEL 10 的 rpm 包命名规则跟 8、9 不完全一样,这时候先去清华源的epel根目录页面看一眼实际的包名和路径,再拼接 URL。

5.4 生产环境要不要全量换源

如果是公网业务服务器,换清华源完全没问题,清华源本身就有企业级的高可用保障。如果是内网环境,更推荐的做法是找一台内网服务器做同步缓存,或者用现有的离线 yum 仓库工具统一管理。别在几百台服务器上手工跑sed,那是在给自己埋雷。

6. 换源后的日常维护小技巧

配置好了不代表一劳永逸。镜像站偶尔会有同步延迟,遇到元数据版本不一致的情况,先dnf clean all再dnf makecache往往就解决了。

如果团队里有多个同事都要操作服务器,建议把换源的整套命令写成一个 Shell 脚本放到服务器上备案,这样每个人上手都能用同一套逻辑,而不是各自改各自的,最后 repo 文件五花八门没法维护。脚本里加上最基础的判断,比如当前系统必须是 Stream 10 才执行替换,避免误操作。

我个人习惯是每台服务器换完源之后,把repolist的结果和dnf makecache的时间做一次记录。这样以后排查问题时能快速判断机器的源状态是什么时候调整的,对应的同步节点可能有什么差异。这个小习惯在维护了一批机器之后特别有价值,推荐你也试一下。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询