简介:这份资源面向需要在CentOS Stream 10(ARM架构)上配置国内镜像源的Linux用户与运维人员,提供从备份仓库配置到验证源可用性的完整操作参考。压缩包共3个文件,包含1个inscode工程配置、1个html说明页面与1个gitignore文件,整体约7KB,体积轻量便于随取随用。内容围绕BaseOS、AppStream、CRB等仓库替换为清华镜像源展开,并延伸至dnf缓存清理、缓存重建与仓库列表验证,最后演示Ansible服务的安装与结果确认,帮助读者在受限网络环境下提升软件包下载速度与稳定性。已有106人学习,适合具备一定Linux基础、希望快速完成镜像源切换并顺带搭建自动化运维工具链的开发者参考。
1. CentOS Stream 10 换清华源:为什么默认源慢到让人想砸键盘
刚装完 CentOS Stream 10 的虚拟机,第一件事往往是dnf update,然后你就看着进度条在mirrorlist.centos.org上转圈,十分钟过去还在Waiting for package metadata。这不是你的网络问题,是默认源在国内的物理距离和路由决定的。CentOS Stream 10 作为 RHEL 10 的上游滚动发行版,默认走的是官方 mirrorlist 机制,它会根据你的 IP 返回一个"最近"的镜像,但这个"最近"是按全球拓扑算的,国内访问经常被分配到亚太甚至美西节点。
换清华源(TUNA)本质上是把baseurl从动态 mirrorlist 改成固定的高速镜像地址,同时禁用 mirrorlist。这件事看起来只是改两个文件,但 Stream 10 在 repo 结构上跟 CentOS 7/8 有区别——它用了centos.repo和centos-addons.repo两个文件,而且 GPG 校验、metalink参数、countme统计这些细节如果处理不好,会出现"换了源但 dnf 报错"或者"更新到一半签名失败"的翻车现场。这篇笔记面向的是刚接触 Stream 10、想快速把包管理速度拉满的运维和开发,也适合那些从 CentOS 7 迁移过来、发现老教程对不上号的人。下面从原理到命令,再到踩坑,一步步走完。
2. 换源之前先搞懂:Stream 10 的 repo 结构和 mirrorlist 机制
2.1 为什么不能直接照搬 CentOS 7 的换源教程
CentOS 7 时代,换源就是改/etc/yum.repos.d/CentOS-Base.repo,把mirrorlist注释掉,baseurl指向清华的centos/7/os/x86_64/。但 Stream 10 的仓库文件命名和内容都变了。你ls /etc/yum.repos.d/会看到centos.repo和centos-addons.repo,没有CentOS-Base.repo。这两个文件里定义的仓库包括baseos、appstream、crb(CodeReady Builder,相当于以前的 PowerTools)、以及addons里的highavailability、nfv、rt等。
更关键的是,Stream 10 的 repo 配置里同时存在mirrorlist和metalink两个参数。metalink是比mirrorlist更高级的机制,它返回的是 metalink XML,里面包含校验和、时间戳等信息。如果你只注释mirrorlist而留着metalink,dnf 仍然会去访问官方 metalink 服务,速度照样慢。所以换源必须把这两个都处理掉,只保留baseurl。
2.2 清华源对 Stream 10 的目录布局
清华 TUNA 对 CentOS Stream 的镜像路径是https://mirrors.tuna.tsinghua.edu.cn/centos-stream/。注意不是centos/,Stream 是独立目录。进去之后按版本号分:10-stream/。再往下是BaseOS/x86_64/os/、AppStream/x86_64/os/、CRB/x86_64/os/等。这个大小写和路径层级必须和 repo 文件里的baseurl完全对应,否则 dnf 会报Failed to download metadata for repo。
我一般会先确认镜像站上有没有对应目录,用curl -I探一下:
# 检查清华源 Stream 10 的 BaseOS 元数据是否存在 curl -sI https://mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream/BaseOS/x86_64/os/repodata/repomd.xml | head -n 1 # 期望输出:HTTP/2 200如果返回 404,说明路径写错了或者镜像还没同步完。这一步花 5 秒,能省掉后面十分钟的排错。
2.3 备份与禁用官方 repo 的正确顺序
换源前必须备份,但备份不是简单cp一份就完事。因为 Stream 10 的 dnf 会缓存 repo 元数据,如果你改完文件不清理缓存,dnf 可能仍然用旧的 mirrorlist 结果。正确顺序是:先备份,再改文件,再dnf clean all,最后dnf makecache验证。
# 进入 repo 目录并备份原始配置 cd /etc/yum.repos.d/ sudo cp centos.repo centos.repo.bak sudo cp centos-addons.repo centos-addons.repo.bak # 查看当前启用的仓库列表,确认有哪些 repo 需要改 dnf repolist -v | grep -E "Repo-id|Repo-baseurl|Repo-mirrorlist"dnf repolist -v会打印每个仓库的 ID、baseurl 和 mirrorlist 状态。如果 mirrorlist 那一行有值,说明还在走官方动态源。这个输出也是后面验证换源是否成功的依据。
3. 动手换源:从备份到生效的完整命令与参数说明
3.1 用 sed 批量替换 centos.repo 里的 baseurl
最直接的方法是用sed把mirrorlist和metalink行注释掉,然后把baseurl指向清华。但 Stream 10 的centos.repo里每个 section 的baseurl默认是被注释的(以#baseurl=开头),所以需要先取消注释再替换值。下面这段脚本处理centos.repo:
# 备份后,用 sed 处理 centos.repo sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream|g' \ -e 's|^metalink=|#metalink=|g' \ -i.bak \ /etc/yum.repos.d/centos.repo逻辑说明:第一条s|^mirrorlist=|#mirrorlist=|g把所有以mirrorlist=开头的行注释掉;第二条把原本注释的#baseurl=http://mirror.centos.org替换成清华的baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream,注意这里保留了后面的路径部分,因为 Stream 10 的 repo 里baseurl后面通常跟着$stream变量或具体路径;第三条注释metalink。-i.bak表示原地修改并生成.bak备份。
参数说明:$stream是 CentOS 定义的一个变量,通常在/etc/dnf/vars/stream里,值为10-stream。所以替换后的baseurl会变成https://mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream/BaseOS/x86_64/os/。如果你不确定变量是否存在,可以cat /etc/dnf/vars/stream看一眼。
3.2 处理 centos-addons.repo 和 CRB 仓库
centos-addons.repo里包含crb、highavailability、nfv、rt等仓库。CRB 是很多开发包(比如cmake、gcc-toolset)的来源,必须一起换。处理方式类似,但路径里多了一层CRB或addons:
# 处理 centos-addons.repo sudo sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream|g' \ -e 's|^metalink=|#metalink=|g' \ -i.bak \ /etc/yum.repos.d/centos-addons.repo # 确认 CRB 仓库的 baseurl 是否正确指向了 CRB 目录 grep -A 5 '\[crb\]' /etc/yum.repos.d/centos-addons.repo如果grep出来的baseurl里没有CRB字样,说明 sed 替换后的路径不对。清华源的 CRB 路径是centos-stream/10-stream/CRB/x86_64/os/,而centos-addons.repo里原本的baseurl可能写的是$stream/CRB/$basearch/os/,替换后应该能拼出正确路径。如果拼不出来,就需要手动改。
3.3 清理缓存并验证换源结果
改完文件后,必须清理 dnf 缓存,否则旧的 mirrorlist 元数据还在/var/cache/dnf/里。然后重新生成缓存,观察下载速度:
# 清理所有缓存 sudo dnf clean all # 重新生成元数据缓存,观察是否从清华源下载 sudo dnf makecache # 查看当前生效的仓库 URL dnf repolist -v | grep -E "Repo-id|Repo-baseurl"dnf makecache的输出里会显示每个仓库的下载地址。如果看到mirrors.tuna.tsinghua.edu.cn,说明换源成功。如果仍然出现mirror.centos.org或mirrorlist.centos.org,说明还有 repo 文件没改到,或者metalink没注释干净。这时候用grep -r "mirror.centos.org" /etc/yum.repos.d/全局搜一下,把漏网之鱼找出来。
4. 避坑指南:换源后 dnf 报错的 5 种典型场景
4.1 报错 "Failed to download metadata for repo 'baseos'"
现象:dnf makecache时提示无法下载 baseos 的元数据,HTTP 404。原因通常是baseurl路径拼错了,比如把centos-stream写成了centos,或者版本号写成了10而不是10-stream。解决:用curl手动访问baseurl里的repodata/repomd.xml,确认能返回 200。如果 404,就对照清华源的实际目录结构修正路径。
4.2 GPG 签名校验失败
现象:dnf update时提示GPG signature verification failed。原因是你换了源,但 GPG key 还是旧的,或者清华源的包签名和官方一致但本地 key 过期。解决:重新导入 CentOS Stream 10 的 GPG key:
# 重新导入 GPG key sudo rpm --import https://mirrors.tuna.tsinghua.edu.cn/centos-stream/RPM-GPG-KEY-CentOS-Official # 如果上面这个地址不存在,就用系统自带的 key 文件 sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial注意:不要从非官方渠道下载 GPG key,否则可能引入安全风险。清华源上的 key 文件路径可能随版本调整,如果第一个地址 404,就用本地已有的 key。
4.3 换源后 dnf 仍然走官方 mirrorlist
现象:改完文件、dnf clean all之后,dnf repolist -v里仍然显示mirrorlist有值。原因:Stream 10 的 repo 文件里可能还有metalink没注释,或者 dnf 的vars目录里有个mirrorlist覆盖配置。解决:检查/etc/dnf/vars/下是否有自定义变量,以及grep -r "metalink" /etc/yum.repos.d/确认全部注释。另外,/etc/dnf/dnf.conf里如果有mirrorlist相关全局配置也要检查。
4.4 CRB 仓库启用后包冲突
现象:启用 CRB 后,dnf update提示某些包有多个版本冲突。原因:CRB 里的包版本可能比 BaseOS 里的新,但依赖关系没对齐。解决:如果不是必须用 CRB 里的开发包,可以临时禁用 CRB:sudo dnf config-manager --set-disabled crb。需要时再启用。或者用dnf --enablerepo=crb install <package>按需启用。
4.5 换源后系统时间不同步导致 SSL 证书错误
现象:dnf makecache报SSL certificate problem: certificate is not yet valid。原因:虚拟机挂起后时间漂移,导致 HTTPS 证书校验失败。解决:先同步时间sudo chronyc makestep或sudo timedatectl set-ntp true,再重试。这个坑跟换源本身无关,但换源后第一次访问 HTTPS 镜像时容易撞上,血泪经验是先把时间搞对。
5. 进阶技巧:用 dnf config-manager 管理多镜像源与回滚
5.1 用 config-manager 动态切换源,不手改文件
dnf config-manager可以在不编辑文件的情况下添加、启用、禁用仓库。比如你想临时加一个清华源的 repo:
# 添加一个自定义 repo,指向清华源 sudo dnf config-manager --add-repo=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream/BaseOS/x86_64/os/ # 查看新加的 repo ID dnf repolist --all | grep tuna但这种方式加的 repo 没有 GPG 校验配置,适合临时测试。生产环境还是建议手改centos.repo,因为可以精确控制gpgcheck、enabled、countme等参数。countme是 CentOS 用来统计安装量的,换源后可以设为0避免向官方发送统计信息。
5.2 多镜像源冗余配置:清华 + 其他国内镜像
单一镜像源有风险,万一清华源同步延迟或临时故障,dnf 就卡住了。可以在 repo 文件里配置多个baseurl,dnf 会按顺序尝试:
[baseos] name=CentOS Stream $releasever - BaseOS baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/$stream/BaseOS/$basearch/os/ https://mirrors.aliyun.com/centos-stream/$stream/BaseOS/$basearch/os/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial countme=0注意:多个baseurl要缩进对齐,dnf 会按顺序 fallback。但不要配太多,否则每次makecache都要遍历,反而慢。一般两个足够。
5.3 回滚到官方源的正确姿势
如果换源后出现无法解决的问题,回滚很简单:把备份文件覆盖回去,清理缓存即可。
# 回滚 centos.repo 和 centos-addons.repo sudo cp /etc/yum.repos.d/centos.repo.bak /etc/yum.repos.d/centos.repo sudo cp /etc/yum.repos.d/centos-addons.repo.bak /etc/yum.repos.d/centos-addons.repo sudo dnf clean all sudo dnf makecache回滚后dnf repolist -v应该重新显示mirrorlist.centos.org。如果回滚后仍然报错,检查是否有其他 repo 文件残留,比如之前用config-manager --add-repo加的临时文件,用dnf config-manager --set-disabled禁用或直接删除。
5.4 验证换源效果的量化方法
怎么确认换源真的提速了?不要凭感觉。用time命令对比dnf makecache的耗时:
# 换源前记录一次耗时(如果还没换) time sudo dnf makecache # 换源后再次记录 time sudo dnf makecache我实测在相同网络环境下,换清华源后makecache从 2 分多钟降到 10 秒以内。另外可以用dnf repolist -v看Repo-baseurl是否全部指向tuna.tsinghua.edu.cn,以及Repo-mirrorlist是否为空。这两个指标同时满足,才算换源成功。
最后说个我自己的习惯:每次换完源,我都会跑一遍sudo dnf update --refresh,观察前几个包的下载速度。如果速度稳定在几 MB/s,说明源没问题;如果还是几百 KB/s,那可能是本地网络限速或者镜像站临时拥堵,换个时间段再试。希望帮到你。
本文还有配套的精品资源,点击获取