跳转到内容
搜索 CentOS Stream 文档

    浏览当前文档目录

    切换国内镜像源加速 CentOS Stream

    适用:CentOS Stream 9 与 Stream 10(x86_64 / aarch64)· 核对日:2026-11-01 · 官方依据:mirror.stream.centos.org 与仓库文件本身(/etc/yum.repos.d/centos.repo)。

    国内拉取 mirror.stream.centos.org 的速度取决于出口线路。本页把仓库指向国内镜像:一条 sed 完成,回滚只需要删掉加的行。命令在 Stream 9 容器实测(aarch64,dnf 4.14.0),Stream 10 的文件结构相同,仅 GPG key 文件名不同(见 CS-MIR-5)。

    • 一台 Stream 9/10 系统,sudo 权限;
    • 回退点:/etc/yum.repos.d/centos.repo 与 centos-addons.repo 是系统自带的原始文件,切换前先各拷一份,回滚时还原即可:
    备份仓库文件(回退点)
    $ sudo cp -a /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.bak.$(date +%s)
    $ sudo cp -a /etc/yum.repos.d/centos-addons.repo /etc/yum.repos.d/centos-addons.repo.bak.$(date +%s)

    先看清楚官方仓库文件长什么样

    Section titled “先看清楚官方仓库文件长什么样”
    查看仓库文件清单
    $ ls /etc/yum.repos.d/

    预期输出(Stream 9 实测):

    centos-addons.repo
    centos.repo

    与 CentOS 7/8 时代「一个仓库一个文件」不同,Stream 收敛成两个文件:centos.repo 装着 baseos / appstream / crb 三条主线(各带 debug 与 source 变体),centos-addons.repo 装 highavailability、nfv、rt、resilientstorage、extras-common。默认启用的只有 baseos 与 appstream(enabled=1 各 2 条)。每一段的取址方式是 metalink=(一个会按速度挑镜像的重定向服务),这就是国内速度不稳的来源——切换国内镜像就是把这个重定向换成固定地址。

    URL 里要用 $stream 而不是 $releasever:

    确认 $stream 变量值
    $ cat /etc/dnf/vars/stream

    预期输出:

    9-stream # Stream 10 上是 10-stream

    镜像目录路径是 …/centos-stream/9-stream/BaseOS/x86_64/os/ 这一层级,其中 9-stream 这一段必须来自 $stream;如果写成 $releasever,拼出来的是 …/centos-stream/9/…,这个路径不存在。

    三家镜像的目录结构一致(都以 centos-stream/ 为根)。任选一家:

    镜像baseurl 根
    清华 TUNAhttps://mirrors.tuna.tsinghua.edu.cn/centos-stream/
    中科大 USTChttps://mirrors.ustc.edu.cn/centos-stream/
    阿里云https://mirrors.aliyun.com/centos-stream/

    用 sed 把 centos.repo 里每一段的 metalink 注释掉、加一行 baseurl(以 TUNA 为例):

    切换到清华 TUNA(baseos/appstream/crb 三段一起换)
    $ sudo sed -i -e 's|^metalink=|#metalink=|' \
    -e '/^\[baseos\]/,/^\[appstream-debuginfo\]/ s|^#metalink=|baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/$stream/BaseOS/$basearch/os/\n#metalink=|' \
    /etc/yum.repos.d/centos.repo

    不想管分段边界的更朴素写法是逐段处理:对 [baseos]、[appstream]、[crb] 三段各做一次「注释 metalink + 在其后插入 baseurl」。AppStream 段的仓库目录是 AppStream/,CRB 段是 CRB/,把上面命令里的 BaseOS 换掉即可。

    先不动 centos-addons.repo:addons 里是 highavailability、rt 这些默认未启用的附加仓库,等你真启用它们时再照同样办法换。

    验证:清缓存重建元数据,确认走的是新地址:

    重建缓存并确认可用
    $ sudo dnf clean all
    $ sudo dnf makecache

    预期输出(关键行):

    CentOS Stream 9 - BaseOS kB/s | ... 00:00
    CentOS Stream 9 - AppStream kB/s | ... 00:00
    Metadata cache created.

    本站的容器实测用的是等价的单仓验证:dnf --disablerepo='*' --enablerepo=baseos --setopt=baseos.baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/os/ makecache 输出 Metadata cache created.(TUNA 9-stream BaseOS x86_64)。

    GPG 注意:两代 Stream 的 key 文件名不同

    Section titled “GPG 注意:两代 Stream 的 key 文件名不同”

    两个版本的仓库段都写 gpgcheck=1,校验靠 /etc/pki/rpm-gpg/ 里的 key 文件,而两代的文件名不一样:

    版本centos.repo 里的 gpgkey
    Stream 9RPM-GPG-KEY-centosofficial
    Stream 10RPM-GPG-KEY-centosofficial-SHA256

    切换镜像只改 baseurl,不改 gpgkey 行——签名校验仍然用本地 key 文件进行,与镜像无关,所以这条操作不引入「镜像被篡改」的新风险面。

    单次命令可以用 --setopt 覆盖 baseurl,不落盘,适合脚本里试一个镜像通不通:

    临时指定 baseurl(不修改仓库文件)
    $ sudo dnf --disablerepo='*' --enablerepo=baseos \
    --setopt=baseos.baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos-stream/9-stream/BaseOS/x86_64/os/ \
    makecache
    还原备份
    $ sudo cp -a /etc/yum.repos.d/centos.repo.bak.<时间戳> /etc/yum.repos.d/centos.repo
    $ sudo dnf clean all && sudo dnf makecache

    还原后 grep metalink /etc/yum.repos.d/centos.repo 应看到未注释的 metalink 行。

    现象原因处理
    makecache 报 Cannot find a valid baseurlbaseurl 路径拼错(如用了 $releasever)改回 $stream;cat /etc/dnf/vars/stream 核对值
    某一段 404段名与目录名不匹配(CRB 段要用 CRB/ 目录)逐段核对目录大小写
    GPG key 报错误删了 gpgkey 行或改了 key 文件名还原备份;两代 key 文件名见上表
    速度没有提升出口对该镜像不友好换另一家(USTC / 阿里云)再试