说实话,刚装上 Fedora 的时候,我也曾对着那个永远转个不停的下载进度条怀疑人生。那种“明明就在网上,却死活下不下来”的挫败感,谁懂?尤其是当你在国外的 VPS 或者网络环境不太友好的地方开发时,默认的 Fedora 官方源简直就像是在用蜗牛爬长城。今天咱们不聊虚的,直接来点硬核的,把中科大(USTC)和清华(TUNA)这两个国内最强镜像源安排得明明白白,让你的 dnf 快得像坐火箭。
为什么官方源会“卡成PPT”?
首先得让你明白,这不是你的电脑坏了,也不是 Fedora 本身烂。Fedora 的官方服务器主要在海外,虽然 CDN 做得不错,但对于国内用户来说,跨洋数据包的损耗和路由跳转简直是噩梦。有时候一个包只有几 MB,下载却要花好几分钟,甚至中途报错“Failed to download metadata”。
更糟糕的是,如果你在某些特殊网络环境下,甚至会出现“包找不到”的情况——这通常是因为仓库元数据(Metadata)加载失败,dnf 找不到软件包列表,自然也就装不了任何东西了。换个国内镜像源,就像是给网络修了一条直达的高速公路,速度提升往往是十倍甚至百倍。
准备工作:先备份,再折腾
在动手改任何配置文件之前,咱们得有个好习惯:先备份。万一改错了,还能恢复原状。Fedora 的软件源配置主要存放在 /etc/yum.repos.d/ 目录下。
你可以用下面这个命令,把所有 repo 文件打包备份一下:
sudo cp -r /etc/yum.repos.d /etc/yum.repos.d.backup
这样,就算后面手滑把系统搞崩了,你也有个后悔药吃。
方案一:一键替换为中科大镜像源(推荐新手)
中科大镜像源(mirrors.ustc.edu.cn)是国内老牌且稳定的选择,更新速度快,兼容性好。我们不需要手动去改每一个 .repo 文件,只需要替换掉主配置文件即可。
Fedora 22 以后的版本,主要的配置文件是 fedora.repo 和 fedora-modular.repo。不过,为了省事且保险,我们可以直接下载中科大提供的模板,或者手动替换 URL。
这里我提供一个最稳妥的脚本方式,它会自动检测你的 Fedora 版本(代号),然后替换源地址。你可以直接在终端里运行:
# 切换到源目录
cd /etc/yum.repos.d
# 备份原有的配置(以防万一)
sudo mv fedora.repo fedora.repo.bak
sudo mv fedora-modular.repo fedora-modular.repo.bak
# 下载中科大的 fedora repo 配置
sudo wget http://mirrors.ustc.edu.cn/fedora/releases/$(/usr/bin/rpm -E %{fedora})/Everything/x86_64/os/configs/fedora.repo -O fedora.repo
sudo wget http://mirrors.ustc.edu.cn/fedora/releases/$(/usr/bin/rpm -E %{fedora})/Everything/x86_64/os/configs/fedora-modular.repo -O fedora-modular.repo
# 同样处理 updates 源
sudo wget http://mirrors.ustc.edu.cn/fedora/updates/$(/usr/bin/rpm -E %{fedora})/Everything/x86_64/configs/fedora-updates.repo -O fedora-updates.repo
sudo wget http://mirrors.ustc.edu.cn/fedora/updates/$(/usr/bin/rpm -E %{fedora})/Everything/x86_64/configs/fedora-updates-modular.repo -O fedora-updates-modular.repo
等等,上面的 wget 路径可能因为 Fedora 版本迭代而失效。为了更稳健,我建议你直接修改现有的 repo 文件内容。下面这个命令更安全,它通过 sed 直接替换 URL 中的 download.fedoraproject.org 为中科大的镜像地址:
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux|baseurl=http://mirrors.ustc.edu.cn/fedora|g' /etc/yum.repos.d/fedora.repo
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora-updates.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates|baseurl=http://mirrors.ustc.edu.cn/fedora/updates|g' /etc/yum.repos.d/fedora-updates.repo
# 对 modular 源做同样处理
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora-modular.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux|baseurl=http://mirrors.ustc.edu.cn/fedora|g' /etc/yum.repos.d/fedora-modular.repo
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora-updates-modular.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates|baseurl=http://mirrors.ustc.edu.cn/fedora/updates|g' /etc/yum.repos.d/fedora-updates-modular.repo
这套命令的逻辑很简单:先把金属链接(metalink,用于自动选择最快服务器)注释掉,然后强行指定 baseurl 为中科大的镜像地址。
方案二:清华 TUNA 镜像源(备选方案)
如果你觉得中科大偶尔不稳定,或者你所在的地区连接清华更好,那咱们就换清华源。清华 TUNA 的界面友好,文档齐全,也是很多人的首选。
替换逻辑和中科大一样,只是 URL 不同:
# 清空或备份现有配置后,执行以下替换
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux|baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora|g' /etc/yum.repos.d/fedora.repo
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora-updates.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates|baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates|g' /etc/yum.repos.d/fedora-updates.repo
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora-modular.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux|baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora|g' /etc/yum.repos.d/fedora-modular.repo
sudo sed -i 's|^metalink=|metalink=#|g' /etc/yum.repos.d/fedora-updates-modular.repo
sudo sed -i 's|^#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates|baseurl=https://mirrors.tuna.tsinghua.edu.cn/fedora/updates|g' /etc/yum.repos.d/fedora-updates-modular.repo
注意看,清华源推荐用 https,安全性更高,而且速度在某些情况下甚至比中科大还快。
第三步:清理缓存,刷新配置
改完配置文件,就像你换了新的导航地图,必须得重启导航系统才能生效。在 Linux 里,这一步叫“清理并重新生成缓存”:
sudo dnf clean all
sudo dnf makecache
dnf clean all 会清除旧的缓存文件,dnf makecache 则会从新的源下载最新的元数据。如果这一步跑得飞快,几秒钟就搞定了,说明源换成功了;如果还卡顿或者报错,那就要回头检查刚才的 URL 写对了没有。
验证:看看速度是不是起飞了
怎么证明你的改法有效?很简单,装个东西试试。找一个平时下载很慢的大包,比如 steam 或者 firefox 的完整包,或者干脆执行一个系统更新:
sudo dnf update -y
这时候你应该能看到下载速度飙到几 MB 甚至十几 MB 每秒,而不是之前那种几 KB 每秒的蜗牛速度。
另外,你也可以用 dnf repolist -v 查看当前的源配置,确认 Baseurl 已经变成了 mirrors.ustc.edu.cn 或 mirrors.tuna.tsinghua.edu.cn。
一些进阶小贴士
1. 启用多个镜像源?
其实没必要。Fedora 的 metalink 机制本来就是为了找最快的源。我们手动指定一个国内源,就是为了绕过那些绕地球半圈才能连上的海外服务器。指定一个稳定的就够了,多了反而可能引起冲突。
2. 第三方源怎么办?
如果你还装了 RPM Fusion 或者其他第三方源,那些源也可能需要单独替换。比如 RPM Fusion 的非自由源,你可以去 RPM Fusion 的官网找对应的国内镜像地址,用同样的 sed 方法修改。但大多数时候,官方源快起来,第三方源的问题就没那么突出了。
3. 如果某次更新后源又失效了?
Fedora 版本升级(比如从 39 升到 40)后,路径可能会变化。这时候最好重新跑一遍上面的脚本,或者手动检查 /etc/yum.repos.d/ 里的文件,确保 URL 里的版本号($releasever 展开后的值)是正确的。
总结一下
配好 Fedora 的软件源,其实就三步:备份、替换 URL、清缓存。别被那些术语吓到,本质上就是告诉 dnf:“别去美国下载了,来咱们学校仓库拿”。
我见过太多新手因为下载慢而怀疑人生,甚至放弃 Fedora。其实只要跨过源配置这道坎,你会发现 Linux 的世界真香。希望这篇教程能帮你省下大把时间,把精力花在真正有价值的开发和学习上。如果你在执行过程中遇到任何奇怪的报错,记得先检查网络,再回头看这里的代码有没有敲错——毕竟,键盘上的每一个键,都可能决定你接下来的快乐程度。
