跳转到内容
搜索 Fedora 文档

    浏览当前文档目录

    Fedora 国内加速源:dnf、pip、npm、Maven、Cargo、容器与 Flatpak

    国内用 Fedora,第一件事是把源换掉。但 F45 有个变化让老教程全部失效:仓库配置文件搬家了。先讲这个,再给可照抄的配置。

    国内加速要覆盖的镜像面:dnf/EPEL、pip/npm、Cargo/Maven、容器 registry、Remi、Flathub 与模型下载

    Terminal window
    ls /usr/share/dnf5/repos.d/
    fedora.repo fedora-cisco-openh264.repo fedora-updates.repo ...

    F44 及以前在 /etc/yum.repos.d/,F45 移到了 /usr/share/dnf5/repos.d/(详见仓库配置迁到 /usr)。

    所以:

    你想做的事该动哪里
    改官方源地址直接改 /usr/share/dnf5/repos.d/*.repo(升级会被覆盖)
    加自己的源写 /etc/yum.repos.d/*.repo(优先级更高,不会被覆盖)

    推荐后者:在 /etc/yum.repos.d/ 新建文件,用 enabled=0 停掉原来的。

    Fedora 45 尚未正式发布,各镜像站状态不一致,实测(2026-10-28):

    站点releases/45/releases/test/45_Beta/
    阿里云404200
    清华 TUNA404404
    中科大 USTC404404

    目前只有阿里云同步了 F45 Beta 仓库。 等 GA 之后 releases/45/ 才会在各站出现,那时换成正式路径即可。

    配置写法:

    Terminal window
    sudo tee /etc/yum.repos.d/99-lab-cn.repo >/dev/null <<'EOF'
    [lab-cn-base]
    name=Aliyun Fedora 45 Beta (base)
    baseurl=https://mirrors.aliyun.com/fedora/releases/test/45_Beta/Everything/x86_64/os/
    enabled=1
    gpgcheck=0
    skip_if_unavailable=True
    EOF

    关掉原来的 metalink 源(它们会因为找不到 fedora-45 而报错):

    Terminal window
    sudo dnf config-manager setopt fedora.enabled=0 updates.enabled=0
    sudo dnf makecache

    验证:

    Terminal window
    dnf list --available nodejs | tail -2
    nodejs.x86_64 1:22.23.1-4.fc45 lab-cn-base

    F45 实测:/etc/yum.repos.d 里的阿里云源文件、makecache 成功、dnf list 显示 nodejs 来自 lab-cn-base

    源f45 状态说明
    Remi已支持(仅基础仓库)https://mirrors.aliyun.com/remi/fedora/45/remi/x86_64/ 可用;但 f45 下没有 remi-php83/84 这类版本化仓库,只提供扩展与更新
    RPM Fusion尚无releases/45/ 返回 404,44 可用。装 NVIDIA 驱动、多媒体解码要等

    Remi 配置:

    Terminal window
    sudo tee /etc/yum.repos.d/remi-cn.repo >/dev/null <<'EOF'
    [remi-cn]
    name=Remi's RPM repository (Aliyun)
    baseurl=https://mirrors.aliyun.com/remi/fedora/45/remi/x86_64/
    enabled=0
    gpgcheck=0
    EOF
    sudo dnf --enablerepo=remi-cn makecache

    enabled=0 是刻意的:Remi 会替换大量系统包,只在需要时用 --enablerepo=remi-cn 打开。

    Terminal window
    mkdir -p ~/.config/pip
    cat > ~/.config/pip/pip.conf <<'EOF'
    [global]
    index-url = https://pypi.tuna.tsinghua.edu.cn/simple
    trusted-host = pypi.tuna.tsinghua.edu.cn
    EOF

    注意这条不总是更快,实测数据见下节。

    Terminal window
    npm config set registry https://registry.npmmirror.com
    npm config get registry
    https://registry.npmmirror.com

    改回官方:npm config set registry https://registry.npmjs.org。

    Terminal window
    mkdir -p ~/.m2
    cat > ~/.m2/settings.xml <<'EOF'
    <settings>
    <mirrors>
    <mirror>
    <id>aliyun</id>
    <name>Aliyun Maven</name>
    <url>https://maven.aliyun.com/repository/public</url>
    <mirrorOf>central</mirrorOf>
    </mirror>
    </mirrors>
    </settings>

    Gradle 用一个 init 脚本全局生效:

    Terminal window
    mkdir -p ~/.gradle
    cat > ~/.gradle/init.gradle <<'EOF'
    allprojects {
    repositories {
    maven { url 'https://maven.aliyun.com/repository/public' }
    }
    }
    EOF
    Terminal window
    cat > ~/.cargo/config.toml <<'EOF'
    [source.crates-io]
    replace-with = 'tuna'
    [source.tuna]
    registry = "sparse+https://mirrors.tuna.tsinghua.edu.cn/crates.io-index/"
    EOF

    rustup 本身也能换源:

    Terminal window
    export RUSTUP_DIST_SERVER=https://mirrors.tuna.tsinghua.edu.cn/rustup
    export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.tsinghua.edu.cn/rustup/rustup

    Podman 默认从 Docker Hub 拉取,国内经常超时。改 /etc/containers/registries.conf.d/:

    Terminal window
    sudo tee /etc/containers/registries.conf.d/99-cn.conf >/dev/null <<'EOF'
    unqualified-search-registries = ["docker.io"]
    [[registry]]
    prefix = "docker.io"
    location = "docker.m.daocloud.io"
    EOF

    之后 podman pull nginx 会自动走镜像站。

    Terminal window
    go env -w GOPROXY=https://goproxy.cn,direct
    go env GOPROXY
    Terminal window
    flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
    flatpak remote-ls --app flathub | head -5

    Flatpak 的国内镜像在部分高校站有同步(USTC、SJTU 均有 /flathub 目录),但路径结构与官方不同,换源前先用 flatpak remote-ls 验证能列包,免得换完装不上。

    同一台机器(F45,千兆内网),2026-10-28 实测:

    操作官方源国内源结果
    dnf install firewalld(11 个包)因 DNS/metalink 失败无法完成阿里云 4.0 MiB/s 成功国内源解决的是可用性
    npm view express version1817 msnpmmirror 439 ms快 4 倍
    pip download numpy(16 MB)PyPI 2300 ms清华 3652 ms官方更快
    #!/bin/bash
    # Fedora 国内加速(按需注释掉不需要的行)
    set -e
    # 1) dnf:官方源换阿里(GA 后把 45_Beta 换成 45)
    sudo tee /etc/yum.repos.d/99-cn.repo >/dev/null <<'EOF'
    [cn-base]
    name=Aliyun Fedora
    baseurl=https://mirrors.aliyun.com/fedora/releases/test/45_Beta/Everything/x86_64/os/
    enabled=1
    gpgcheck=0
    skip_if_unavailable=True
    EOF
    sudo dnf config-manager setopt fedora.enabled=0 updates.enabled=0
    # 2) npm
    npm config set registry https://registry.npmmirror.com
    # 3) pip
    mkdir -p ~/.config/pip
    printf '[global]\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\n' > ~/.config/pip/pip.conf
    # 4) go
    command -v go >/dev/null && go env -w GOPROXY=https://goproxy.cn,direct
    # 5) 容器
    sudo mkdir -p /etc/containers/registries.conf.d
    printf 'unqualified-search-registries = ["docker.io"]\n\n[[registry]]\nprefix = "docker.io"\nlocation = "docker.m.daocloud.io"\n' \
    | sudo tee /etc/containers/registries.conf.d/99-cn.conf >/dev/null
    echo "done"
    现象原因
    改了 /etc/yum.repos.d/ 却不生效F45 官方源在 /usr/share/dnf5/repos.d/,两处同名 repo id 时 /etc 优先,但只改 /usr 那份会被升级覆盖
    Failed to download metadata for repo 'updates'metalink 找不到 fedora-45,需先关掉原源
    装完包签名告警gpgcheck=0 的代价,GA 后必须改回
    pip 换源后更慢线路本身好,镜像多一跳;用上面的 curl 先测
    podman pull 仍然超时只配了 unqualified-search-registries 没配 [[registry]] 重写,或需要 podman system reset 后重试