CentOS Stream 10换清华源:repo替换与EPEL配置实战

📅 发布时间:2026/9/1 7:49:15
CentOS Stream 10换清华源:repo替换与EPEL配置实战 简介面向CentOS Stream 10ARM架构的国内镜像源替换方案聚焦解决默认软件源下载缓慢、更新不稳定等典型网络问题帮助用户在国内环境中获得更顺畅的系统维护体验。资源包共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_ID10输出确实是 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] nameCentOS Stream $releasever - BaseOS baseurlhttps://mirrors.tuna.tsinghua.edu.cn/centos-stream/10-stream/BaseOS/$basearch/os/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial如果gpgcheck1保留着那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/nullEPEL 的 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 makecacheclean 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的时间做一次记录。这样以后排查问题时能快速判断机器的源状态是什么时候调整的对应的同步节点可能有什么差异。这个小习惯在维护了一批机器之后特别有价值推荐你也试一下。本文还有配套的精品资源点击获取