Fedora 作为一个以“前沿”和“快速迭代”著称的发行版,其软件更新频率极高。对于国内用户来说,默认的官方源(mirrorlist.fedoraproject.org)往往因为网络延迟、DNS 污染或者服务器负载问题,导致 dnf 或 yum 下载速度龟速,甚至直接超时失败。这不仅仅是网速慢的问题,更是安装软件包时不断报错 Error: Failed to download metadata for repo 'updates' 的根源。
别担心,这个问题非常经典,解决起来也极其简单。我们不需要去修改复杂的底层配置文件,只需要告诉 Fedora 的包管理器:“嘿,别去国外排队了,去最近的国内高速服务区加油。”
下面我将带你一步步完成配置,并解释为什么这样做有效,同时提供几种主流国内镜像源的对比选择。
第一步:确认当前环境
在开始之前,我们需要知道你现在用的是哪个版本的 Fedora。不同的版本代号(Codename)对应的镜像路径可能略有不同。打开终端,输入以下命令查看版本信息:
cat /etc/fedora-release
你会看到类似这样的输出:
Fedora Linux release 39 (Thirty Nine)
这里的 39 就是你的版本号,后续配置中会用到。如果是 Fedora Workstation、Server 或者 Silverblue,操作逻辑是一样的,只是部分非核心仓库可能需要额外处理。
第二步:备份原有配置(好习惯)
虽然直接覆盖通常没问题,但为了安全起见,我们先把现有的仓库配置备份一下。这样如果新配置有问题,我们可以随时回退。
sudo cp -r /etc/yum.repos.d/ /etc/yum.repos.d.bak
这一步相当于给你的系统配置买了份“保险”。
第三步:选择国内镜像源
目前在国内,口碑较好且维护稳定的 Fedora 镜像源主要有以下几家:
- 清华大学 (TUNA):
mirrors.tuna.tsinghua.edu.cn- 特点:稳定、速度快、同步及时,是许多技术用户的首选。
- 阿里云 (Aliyun):
mirrors.aliyun.com- 特点:带宽巨大,访问压力小,适合大多数场景。
- 网易 (163):
mirrors.163.com- 特点:老牌镜像站,兼容性极好。
- 中科大 (USTC):
mirrors.ustc.edu.cn- 特点:高校网络友好,稳定性不错。
这里我们以清华大学 TUNA 镜像为例进行演示,因为它在 Fedora 社区的支持度非常高。如果你偏好其他源,只需替换 URL 即可。
第四步:一键更换源脚本(推荐)
手动逐个修改 .repo 文件既繁琐又容易出错。最优雅的方式是使用 Fedora 官方推荐的 dnf config-manager 或者直接使用社区维护的脚本。但为了让你彻底理解原理,我们采用一种更通用、更透明的方法:生成新的 repo 文件。
我们将创建一个名为 fedora-custom.repo 的文件,覆盖默认的源设置。
请在终端中执行以下命令:
# 删除旧的默认源配置(谨慎操作,确保已备份)
sudo rm -rf /etc/yum.repos.d/fedora*.repo
sudo rm -rf /etc/yum.repos.d/fedora-updates*.repo
sudo rm -rf /etc/yum.repos.d/fedora-modular*.repo
sudo rm -rf /etc/yum.repos.d/fedora-updates-modular*.repo
# 创建新的配置文件
sudo tee /etc/yum.repos.d/fedora.repo << 'EOF'
[fedora]
name=Fedora $releasever - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/$basearch/os/
enabled=1
countme=1
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
[fedora-debuginfo]
name=Fedora $releasever - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/$basearch/debug/
enabled=0
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
[fedora-source]
name=Fedora $releasever - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/source/tree/
enabled=0
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
EOF
sudo tee /etc/yum.repos.d/fedora-updates.repo << 'EOF'
[fedora-updates]
name=Fedora $releasever - $basearch - Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates/$releasever/Everything/$basearch/
enabled=1
countme=1
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
[fedora-updates-debuginfo]
name=Fedora $releasever - $basearch - Updates - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates/$releasever/Everything/$basearch/debug/
enabled=0
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
[fedora-updates-source]
name=Fedora $releasever - Source Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates/$releasever/Everything/source/tree/
enabled=0
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
EOF
代码解析:
- 我们使用了
tee命令配合<< 'EOF'heredoc 语法,将多行文本直接写入文件,避免使用echo多次追加导致的格式混乱。 baseurl指向了清华 TUNA 的 Fedora 目录。注意$releasever是一个变量,dnf 会自动将其替换为你当前的版本号(如 39)。enabled=1表示启用该源,enabled=0表示禁用(如 debug 和 source 源通常不需要,故设为 0 以节省资源)。gpgcheck=1保留了 GPG 签名检查,这是保证软件包完整性和安全性的关键,千万不要随意关闭,除非你非常清楚自己在做什么。
第五步:清理缓存并重建元数据
修改完源之后,必须让 dnf 重新下载最新的软件列表(元数据)。如果不做这一步,系统可能还在读取旧的、无法访问的索引。
sudo dnf clean all
sudo dnf makecache
执行 sudo dnf makecache 后,你应该能看到类似以下的输出,显示从新源下载元数据的速度非常快:
Fedora 39 - x86_64 1.2 MB/s | 15 MB 00:12
Fedora 39 openh264 (From Cisco) - x86_64 1.5 kB/s | 2.3 kB 00:01
Metadata cache created.
如果在这里报错,比如 Failed to download metadata for repo 'fedora',请检查:
- 网络连接是否正常。
- 是否拼写错误(特别是
$releasever变量是否被正确解析)。 - 尝试切换其他镜像源(如阿里云)。
第六步:验证与测试
现在,让我们试着安装一个小软件来验证效果。比如安装 htop(一个常用的系统监控工具):
sudo dnf install htop -y
观察下载速度,你会发现它从原来的几十 KB/s 飙升至几 MB/s 甚至更高。安装成功后,运行 htop 确认软件正常工作。
进阶技巧:使用 dnf-automatic 自动更新
既然源已经优化,我们可以顺便配置一下自动更新,让系统保持最新。
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer
这样,你的 Fedora 系统会在后台自动检查更新,并在你方便的时候提醒安装,无需手动干预。
常见问题排查
Q1: 我使用的是 Fedora Server 或 KDE/GNOME 桌面版,还需要额外配置吗?
A: 上述配置覆盖了核心的 fedora 和 fedora-updates 仓库。对于大多数用户来说,这已经足够了。如果你使用的是 Fedora Silverblue 或 Kinoite,它们基于 CoreOS 理念,软件安装主要通过 Flatpak,但系统层面的包管理依然使用 dnf,因此上述配置同样适用。
Q2: 为什么有些第三方源(如 RPM Fusion)还是很慢?
A: RPM Fusion 是一个独立的第三方仓库,不包含在 Fedora 官方源中。你需要单独配置它的镜像。例如,配置 RPM Fusion 的清华镜像:
sudo dnf install https://mirrors.tuna.tsinghua.edu.cn/rpmfusion/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.tuna.tsinghua.edu.cn/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm -y
然后编辑 /etc/yum.repos.d/rpmfusion-free.repo 和 rpmfusion-nonfree.repo,将 baseurl 中的 download1.rpmfusion.org 替换为 mirrors.tuna.tsinghua.edu.cn/rpmfusion。
Q3: 遇到 GPG 密钥错误怎么办?
A: 如果提示 GPG key retrieval failed,可以尝试重新导入密钥:
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
或者更简单地,强制忽略 GPG 检查(不推荐用于生产环境,仅用于调试):
sudo dnf install --nogpgcheck <package_name>
总结
通过更换国内镜像源,你不仅解决了下载速度慢的问题,还极大地提高了软件安装的稳定性。Fedora 的快速迭代特性意味着你经常会遇到新的软件包,一个稳定的源能让你更专注于开发和使用,而不是等待下载进度条。
记住,技术世界的规则很简单:找到正确的路径,比盲目奔跑更重要。 希望这篇指南能帮助你顺畅地使用 Fedora Linux,享受开源带来的自由与速度。如果在操作中遇到任何奇怪的报错,欢迎随时回来查阅或提问,我会一直在这里为你提供支持。
