嘿,朋友!如果你刚把 Fedora Linux 装在电脑上,第一次运行 sudo dnf update 或者尝试安装一个新软件时,看到屏幕上一行行滚动的进度条慢得像蜗牛爬,甚至最后红字报错“Failed to download metadata”,那种挫败感我懂。别慌,这通常不是系统坏了,而是软件源(Mirror)的问题。
Fedora 默认的软件源服务器大多在美国,对于国内用户来说,延迟高、速度慢、连接不稳定是常态。配置一个靠谱的镜像源,就像给电脑修了一条高速公路,不仅下载快,安装软件也丝般顺滑。今天我们就把这件事彻底讲透,从最简单的配置,到各种疑难杂症的排查,一步步带你搞定。
为什么我们要换源?
在动手之前,先搞懂一个基本概念。软件源本质上是一个托管了成千上万个 .rpm 安装包的服务器。当你需要安装软件时,Fedora 的包管理器 DNF 会去这个服务器下载文件并安装。
默认情况下,Fedora 会尝试自动选择一个地理上最近的服务器。但在国内,这个“自动选择”经常抽风,可能会给你挑到一个香港或者日本的节点,甚至有时候直接连着美国的服务器。这就导致了:
- 下载速度慢:可能只有几十 KB/s,装个大点的游戏或开发环境能等到天荒地老。
- 连接超时:网络波动频繁,安装到一半断连,还得重头再来。
- 404 错误:某些特定的源维护不当,索引文件缺失,导致 DNF 找不到包。
国内主流的 Fedora 镜像站主要有两个:清华大学开源软件镜像站(Tuna) 和 阿里巴巴开源镜像站。它们的同步速度极快,基本能做到与 Fedora 官方服务器实时同步,稳定性也经过无数用户验证。
第一步:识别你的 Fedora 版本
在换源之前,你必须知道自己在用什么版本的 Fedora。Fedora 的版本迭代很快,不同的版本(如 Fedora 38、39、40)对应的软件包路径完全不同。混用了版本会导致严重的依赖冲突,让系统直接瘫痪。
打开终端,输入以下命令查看版本信息:
cat /etc/fedora-release
你会看到类似 Fedora Linux release 39 (Workstation Edition) 的输出。这里的 39 就是你的版本号。另外,建议再确认一下架构,绝大多数个人电脑都是 x86_64(也就是 Intel 或 AMD 的 64 位处理器):
uname -m
如果输出是 x86_64,那就放心,我们后面配置的都是针对这个架构的源。如果是 aarch64(比如某些 ARM 芯片的电脑),配置会略有不同,但原理一样。
第二步:配置清华镜像源(推荐)
清华大学 TUNA 镜像站以其干净、无广告、更新及时著称,是许多 Linux 老用户的首选。
2.1 备份原有的源配置
在修改任何系统配置文件之前,备份是铁律。万一配错了,我们还能一键还原。Fedora 的仓库配置文件通常位于 /etc/yum.repos.d/ 目录下。
# 创建一个备份目录
sudo mkdir -p /etc/yum.repos.d/backup
# 将所有现有的 .repo 文件移动到备份目录
sudo mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/
执行完这条命令后,你的 /etc/yum.repos.d/ 目录下应该空空如也,而所有的旧配置都安全地躺在 backup 文件夹里。
2.2 创建新的源配置文件
现在,我们需要创建一个名为 fedora-tuna.repo 的新文件。你可以使用 vim、nano 或者 tee 命令。为了简单起见,我们直接用 tee 写入:
sudo tee /etc/yum.repos.d/fedora-tuna.repo << 'EOF'
[fedora]
name=Fedora $releasever - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
[fedora-debuginfo]
name=Fedora $releasever $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/$basearch/debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
[fedora-source]
name=Fedora $releasever Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/source/tree/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
[fedora-updates]
name=Fedora $releasever - $basearch - Updates
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
[fedora-updates-debuginfo]
name=Fedora $releasever $basearch - Updates - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates/$releasever/Everything/$basearch/debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
[fedora-updates-source]
name=Fedora $releasever Updates - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates/$releasever/Everything/source/tree/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
EOF
代码解读:
[fedora]和[fedora-updates]是我们主要关心的两个部分,分别对应系统初始安装包的“主仓库”和后续的“更新仓库”。enabled=1表示启用该仓库,enabled=0表示禁用(比如源码包和调试包,普通用户一般用不到,禁用可以加快刷新速度)。gpgcheck=1很重要,它开启 GPG 密钥校验,确保你下载的包没有被篡改,保持系统安全。baseurl里的$releasever和$basearch是变量,DNF 会自动替换成你当前的版本号和架构,所以不需要手动修改。
2.3 验证配置
配置写好后,清理一下缓存,看看 DNF 能不能正常读取新源:
sudo dnf clean all
sudo dnf makecache
如果不出意外,你会看到一堆绿色的 Metadata cache created 或者类似的成功提示,而且速度应该比之前快得多。如果报错,请记录下错误信息,我们后面会讲如何处理。
第三步:配置阿里镜像源(备选方案)
如果你发现清华源在某些特定软件上下载慢,或者网络链路不通,阿里巴巴的镜像站是个极好的备选。阿里的服务器带宽巨大,稳定性也很强。
3.1 备份并创建阿里源
同样的,先备份,再新建文件。这次我们创建 fedora-alibaba.repo:
# 再次确保之前的备份还在,如果刚才已经备份过,可以跳过这步,直接覆盖或新建
sudo rm -f /etc/yum.repos.d/fedora-tuna.repo
sudo tee /etc/yum.repos.d/fedora-alibaba.repo << 'EOF'
[fedora]
name=Fedora $releasever - $basearch
baseurl=https://mirrors.aliyun.com/fedora/releases/$releasever/Everything/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
[fedora-debuginfo]
name=Fedora $releasever $basearch - Debug
baseurl=https://mirrors.aliyun.com/fedora/releases/$releasever/Everything/$basearch/debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
[fedora-source]
name=Fedora $releasever Source
baseurl=https://mirrors.aliyun.com/fedora/releases/$releasever/Everything/source/tree/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
[fedora-updates]
name=Fedora $releasever - $basearch - Updates
baseurl=https://mirrors.aliyun.com/fedora/updates/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
[fedora-updates-debuginfo]
name=Fedora $releasever $basearch - Updates - Debug
baseurl=https://mirrors.aliyun.com/fedora/updates/$releasever/Everything/$basearch/debug/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
[fedora-updates-source]
name=Fedora $releasever Updates - Source
baseurl=https://mirrors.aliyun.com/fedora/updates/$releasever/Everything/source/tree/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$basearch
EOF
注意,阿里云的 URL 结构是 mirrors.aliyun.com/fedora/...,这与清华的 mirrors.tuna.tsinghua.edu.cn/fedora/... 略有不同,请务必照抄,不要自行修改路径。
3.2 切换并测试
sudo dnf clean all
sudo dnf makecache
观察输出,如果成功,说明阿里源配置完毕。你可以根据实际网速选择保留其中一个,或者两个都保留(DNF 会自动选择最快的),但新手建议先只保留一个,排除干扰,确认稳定后再做其他尝试。
第四步:日常维护与检查
换完源不是一劳永逸的, Fedora 更新很勤快,版本升级(比如从 39 升到 40)时,源的路径也会变。
4.1 检查当前生效的源
你可以随时查看当前系统正在使用哪些源,以及它们的状态:
dnf repolist
你会看到一个表格,列出所有启用的仓库名称和包数量。如果某个仓库显示为 0 或者报错,说明那个源可能不可用。
4.2 清理缓存
当源配置更新,或者你怀疑缓存数据有问题时,清理缓存是首选动作:
sudo dnf clean all
sudo dnf makecache
clean all 会删除所有缓存的元数据和包文件,makecache 会重新从服务器下载最新的元数据。这个过程很快,建议在每次重大系统更新前执行。
4.3 版本升级后的源调整
当你使用 sudo dnf system-upgrade reboot 将系统从 Fedora 39 升级到 40 后,旧的 repo 文件里的 $releasever 变量会自动更新为新版本号。但是,为了保险起见,升级完成后,建议重新执行一遍 sudo dnf clean all 和 sudo dnf makecache,确保下载的是新版本的软件包列表。
第五步:常见故障排除
即使配置了国内镜像,有时也会遇到各种奇葩问题。别急,我们来逐个击破。
5.1 错误:Failed to download metadata for repo ‘fedora’
这是最常见的错误。通常意味着服务器返回了错误信息。
排查思路 1:检查网络连接
首先确认你能上网。打开浏览器,访问 https://mirrors.tuna.tsinghua.edu.cn,看能不能打开。如果浏览器能打开但 DNF 不行,可能是 DNS 问题或者代理问题。
排查思路 2:检查 GPG 密钥 有时候,密钥文件过期或丢失。你可以尝试重新导入密钥:
sudo rpm --import https://mirrors.tuna.tsinghua.edu.cn/fedora/RPM-GPG-KEY-fedora-$releasever-$basearch
如果是最新版本,可能密钥文件路径在 /etc/pki/rpm-gpg/ 下,直接检查该目录下是否有对应的 GPG 文件。
排查思路 3:URL 格式错误
仔细检查 .repo 文件中的 baseurl。特别是 $releasever 和 $basearch 是否被错误地替换成了字面量。确保没有多余的空格或特殊字符。
5.2 错误:Could not resolve host: mirrors.tuna.tsinghua.edu.cn
这明显是 DNS 解析失败。你的电脑找不到清华镜像的 IP 地址。
解决方案:
- 重启网络服务:
sudo systemctl restart NetworkManager - 更换 DNS 服务器:编辑
/etc/resolv.conf,将 nameserver 改为114.114.114.114或8.8.8.8(注意:在较新的 Fedora 版本中,这个文件可能被 NetworkManager 管理,直接修改可能会失效,建议通过设置网络连接属性来更改 DNS)。 - 检查 hosts 文件:查看
/etc/hosts是否有异常的屏蔽记录。
5.3 错误:No module named ‘librepo’
这通常发生在 Python 环境或者 DNF 自身依赖库出现问题的情况,比较少见,但一旦遇到很头疼。
解决方案: 尝试重新安装 librepo 和 dnf:
sudo dnf reinstall librepo python3-librepo dnf
sudo dnf clean all
sudo dnf makecache
5.4 错误:SSL handshake failed
如果看到 SSL 相关的错误,说明加密连接出了问题。可能是防火墙拦截,或者中间人干扰。
解决方案:
- 关闭代理:如果你设置了 http_proxy 或 https_proxy 环境变量,临时取消它们试试:
unset http_proxy unset https_proxy sudo dnf makecache - 检查系统时间:SSL 证书验证依赖于准确的时间。如果你的系统时间不对,证书会被认为无效。运行
date命令检查时间,如果不对,使用chronyd或systemd-timesyncd同步时间。
5.5 错误:Metadata file does not match checksum
这说明下载的元数据文件在传输过程中损坏了,或者镜像源服务器本身数据不一致。
解决方案: 强制清理元数据缓存并重新下载:
sudo rm -rf /var/cache/dnf
sudo dnf clean all
sudo dnf makecache
如果问题依旧,可能是清华源暂时故障,这时候切换回阿里源,或者暂时使用官方源(如果网络允许)作为临时方案。
进阶技巧:如何使用 DNF 配置管理多个源
有些用户喜欢同时保留清华和阿里源,让 DNF 自动选择最快的。你可以创建两个 repo 文件,DNF 会并发尝试。
但是,强烈不建议新手这么做。因为两个源的元数据文件可能因为同步延迟微小差异导致版本不一致,进而引发依赖冲突。最好的做法是:选一个最稳的,用到底。除非你遇到特定软件在某个源上下载失败,再临时切换测试。
给新手的最后建议
- 不要随意禁用 GPG 检查:虽然
gpgcheck=0可以绕过一些密钥错误,但这会让你的系统暴露在恶意包的风险中。除非你非常清楚自己在做什么,否则请保持gpgcheck=1。 - 定期更新:Fedora 是滚动更新理念(虽然分版本发布,但生命周期短),保持系统更新能让你获得最新的 bug 修复和安全补丁。养成每周
sudo dnf upgrade的习惯。 - 记录操作:在进行系统级修改前,养成备份配置文件的习惯。就像我们刚才做的
mv *.repo backup一样,多这一步,少十次慌。 - 善用社区:如果遇到死活解决不了的问题,去 Fedora 中文社区或者 Reddit 的 r/Fedora 提问。记得附上你的错误日志(
dnf --refresh update的输出)和系统版本信息,这样别人才能帮你。
配置软件源只是 Linux 使用的一小步,但它能让你之后的体验顺畅得多。希望这篇指南能帮你扫清障碍,让你在 Fedora 的世界里自由驰骋。如果在操作中遇到任何奇怪的现象,欢迎随时回来对照排查。祝你好运!
