Skip to content
Search CentOS Stream

This page uses Chinese content. Search opens the Chinese documentation.

    Browse this documentation

    切换国内镜像源加速 CentOS Stream

    This content is not available in your language yet.

    适用: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 / 阿里云)再试