咱们先聊聊为什么 Fedora 用户总想换源。Fedora 官方源(特别是 updates 和 main)在国外的服务器,国内下载时那个速度简直让人心碎,有时候 dnf install 跑两分钟只下几 KB,看着进度条不动,心情能好才怪。换源是提升 Fedora 体验最直接、最有效的手段,而清华(TUNA)和中科大(USTC)是国内最稳定、更新最快的镜像站。
但是,网上很多教程过时了,或者步骤太简单,导致大家照着做时遇到“依赖冲突”、“GPG 检查失败”或者“源依然不可达”的问题。今天这篇指南,我会把原理掰开揉碎讲清楚,让你不仅会操作,还知道为什么要这么操作。
第一步:理解 Fedora 的源结构,别急着复制粘贴
在动手之前,你必须知道 Fedora 的 dnf 配置存在哪里。所有 repo 配置文件都在 /etc/yum.repos.d/ 目录下。Fedora 默认会启用 fedora.repo 和 fedora-updates.repo。
这里有一个关键概念:Base URL 和 Metalink。
很多旧的教程让你直接修改 .repo 文件里的 baseurl。但对于 Fedora 35 及以上版本,默认配置通常是 metalink(金属链接),它会动态返回多个可用的镜像地址。如果你直接改 baseurl,可能会丢失某些特性,或者因为镜像站架构不同而导致路径错误。
更稳妥的方式是:保留原有的配置结构,只在镜像站层面进行替换,或者使用 DNF 官方推荐的 mirrorlist 指向国内镜像。
不过,为了彻底解决依赖冲突和速度问题,我们推荐采用“清理旧源 + 配置国内大源 + 重建缓存”的标准化流程。
第二步:备份与清理(防止依赖冲突的核心)
依赖冲突往往源于“混合源”。比如,你同时用了官方源和某个第三方源,且两者的版本编号不一致;或者你之前的换源操作不完整,留下了一些指向已失效地址的 .repo 文件。
在终端中执行以下命令,我们先做个快照,再清理:
# 1. 备份整个 yum.repos.d 目录,万一搞砸了可以一键还原
sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup
# 2. 清空之前的缓存,强制 dnf 重新获取元数据
sudo dnf clean all
sudo rm -rf /var/cache/dnf
# 3. 检查当前有哪些 repo 文件
ls /etc/yum.repos.d/
正常情况下,你会看到 fedora.repo 和 fedora-updates.repo。如果还有 rpmfusion-*.repo 或其他第三方源,暂时不用管,我们主要解决官方源的速度问题。
第三步:配置清华大学 TUNA 源(推荐)
清华源的优势在于维护极其规范,且对 Fedora 的支持非常及时,包括 rawhide 分支。
方法 A:使用 DNF 的 dnf-config 自动脚本(最简单,适合新手)
Fedora 官方其实提供了一个工具来简化这个过程,但有时网络不通导致脚本也跑失败。我们可以手动模拟这个过程,更可控。
方法 B:手动修改 .repo 文件(最稳定,推荐)
我们需要修改 fedora.repo 和 fedora-updates.repo。
打开编辑器:
sudo nano /etc/yum.repos.d/fedora.repo找到
metalink这一行。你会看到类似这样的内容:metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
关键操作:将这一行注释掉(在前面加 #),然后新增一行 baseurl,指向清华源:
# metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/$basearch/os/
注意:$releasever 和 $basearch 是变量,dnf 会自动替换,所以直接复制这一行即可。
同样修改
fedora-updates.repo:sudo nano /etc/yum.repos.d/fedora-updates.repo找到 metalink 行,注释掉,替换为:
# metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates/$releasever/Everything/$basearch/保存并退出(在 nano 中按
Ctrl+O,Enter,Ctrl+X)。
方法 C:中科大 USTC 源(备选)
如果你发现清华源有时卡顿,中科大是极好的替代。操作逻辑完全一样,只是 URL 不同:
fedora.repo:
baseurl=https://mirrors.ustc.edu.cn/fedora/releases/$releasever/Everything/$basearch/os/
fedora-updates.repo:
baseurl=https://mirrors.ustc.edu.cn/fedora/updates/$releasever/Everything/$basearch/
第四步:解决 GPG 密钥和依赖冲突问题
很多人换源后,运行 dnf makecache 报错说 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch,但下载失败。
原因:你替换了 baseurl,但 GPG 密钥的文件名可能因为版本差异导致路径对不上,或者本地缓存的密钥过期。
解决方案:重新导入并信任密钥。
# 导入 Fedora 官方 GPG 密钥
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-primary
# 如果上面报错找不到文件,可以尝试从镜像站下载密钥
sudo curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/$releasever/Everything/$basearch/os/RPM-GPG-KEY-fedora-$releasever-$basearch
关于依赖冲突的特别说明:
如果你之前安装了某些从非官方源(如 RPM Fusion 或 Copr)来的软件,换源后提示依赖冲突,通常是因为软件包版本不匹配。比如,你之前从官方源下载了 package-a 的 v1.0,现在换源后,系统元数据更新了,但本地缓存里还是旧的依赖关系。
强制刷新并解决冲突:
sudo dnf distro-sync
这条命令非常重要。它会将系统中所有的软件包更新到当前仓库中的最新版本,或者将版本回退到与仓库一致。这是解决“依赖冲突”的神器。它不是简单地安装,而是同步整个系统的软件包版本状态。
如果 distro-sync 提示有冲突包无法解决,可以加上 --allowerasing 参数(慎用,这会允许删除可能冲突的包):
sudo dnf distro-sync --allowerasing
或者,如果你只想更新核心系统而不碰第三方软件,可以先排除第三方 repo:
sudo dnf distro-sync --disablerepo='*' --enablerepo=fedora --enablerepo=fedora-updates
第五步:验证与测试
配置完成后,不要急着重启,先测速和验证。
# 清除旧缓存,强制重新下载元数据
sudo dnf clean all
# 生成新缓存
sudo dnf makecache
# 查看输出,确认源地址是否变成了 mirrors.tuna.tsinghua.edu.cn 或 mirrors.ustc.edu.cn
你可以用 speedtest 或者简单的下载测试来验证速度:
# 测试从清华源下载一个小文件的速度
curl -o /dev/null -w "%{speed_download}\n" https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/40/Everything/x86_64/os/repodata/repomd.xml
如果 speed_download 的值是几千甚至上万(单位是 bytes per second),说明源配置成功。
常见问题排查(FAQ)
Q1: 换了源后,dnf update 依然很慢?
A: 检查是否还有其他 repo 文件在使用官方源。运行 dnf repolist -v 查看所有启用的源。如果有 rpmfusion-free 或 rpmfusion-nonfree 等第三方源也想加速,需要单独修改它们的 .repo 文件,或者使用 mirrorlist 指向国内的 RPM Fusion 镜像(有些镜像站如清华也镜像了 RPM Fusion)。
Q2: 报错 “Invalid repository file” 或 “Could not parse meta…“?
A: 通常是 baseurl 拼写错误,或者路径不对。Fedora 的目录结构是 releases/$releasever/... 和 updates/$releasever/...。一定要检查 $releasever 是否被正确解析。你可以临时在命令中指定版本测试,比如把 $releasever 换成具体的 40 或 41,看哪个路径能通。
Q3: 我想一键恢复官方源怎么办?
A: 你之前做了备份。
sudo rm /etc/yum.repos.d/fedora*.repo
sudo mv /etc/yum.repos.d.backup/yum.repos.d/fedora*.repo /etc/yum.repos.d/
sudo dnf clean all
sudo dnf makecache
Q4: 为什么我不推荐用 sed 一行命令批量替换?
A: 虽然网上有很多 sed -i 's/metalink/baseurl/' 的教程,但这种方式很危险。因为它会无差别地修改所有匹配的行,包括那些你不想改的 repo(比如 EPEL 或第三方源)。手动编辑或使用专门的配置脚本更安全,能让你清楚地知道每一行改动的后果。
总结
换源不是简单地复制粘贴 URL,它是一个涉及备份、配置、密钥验证、依赖同步的系统工程。
- 备份永远是第一步,防止误操作后无法恢复。
- 清华源优先,中科大源备选,URL 路径要对应好
releases和updates的区别。 dnf distro-sync是解决依赖冲突的关键命令,不要害怕使用它。- GPG 密钥要确保有效,否则 dnf 会拒绝安装任何包。
按照这个流程操作,你的 Fedora 下载速度应该能从几 KB/s 提升到几 MB/s,彻底告别等待的焦虑。如果有具体的报错信息,可以把错误日志贴出来,那通常是路径或密钥的小问题,针对性解决即可。祝你在 Linux 的世界里玩得开心!
