Ubuntu 18.04换清华源:apt提速与完整避坑指南 1. 为什么给 Ubuntu 18.04 换源我踩过的真实痛点给 Ubuntu 18.04 更换清华镜像源是我这几年每次重装系统之后固定要做的第一件事。很多人遇到 apt 安装软件慢第一反应是怪“网络不好”其实大半问题出在默认源上。Ubuntu 官方源服务器主要部署在国外国内访问延迟常年徘徊在 100ms 以上碰上高峰期丢包率能冲到两位数apt 反复重试同一个连接装一个build-essential都能等出心理阴影。我最早意识到“该换源了”是在某次部署测试环境的时候。apt update跑了十几分钟进度条纹丝不动CtrlC 之后重试还是老样子。当时我以为是 DNS 解析慢手动把 DNS 改成公共 DNS 也没用后来无意间把源地址换成国内镜像更新直接飙到满带宽。那个瞬间我才明白不是网络不行是源本身离你太远。这篇文章就围绕“Ubuntu 18.04 更换清华镜像源”这件事把我从备份、改源、验证到踩坑的全过程拆开讲一遍。适合刚接触 Linux 的新手也适合那些一直用官方源但没认真对比过镜像源差异的老手。读完你不仅能独立完成换源还能知道换完之后哪些细节会让 apt 体验差别很大。1.1 apt 慢到怀疑人生先分清“网络原因”还是“源的问题”判断问题出在哪个环节其实有个很笨但有效的方法先ping mirror.tuna.tsinghua.edu.cn再ping archive.ubuntu.com对比两个地址的延迟和丢包率。如果前者延迟很低、后者延迟很高那你换源之后大概率立竿见影如果两个都高那就是本机到公网的链路有问题换哪个源都救不了。我自己习惯先跑一条命令看全局状态time curl -sI http://archive.ubuntu.com/ubuntu/ -o /dev/null time curl -sI http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ -o /dev/nulltime会打印出总耗时两个地址一对比心里基本就有数了。官方源在国内不是完全不可用但经常是“能通但慢”而且 apt 的下载逻辑是单线程逐文件拉取延迟稍微一高整个更新时间就成倍拉长。换成镜像源相当于把下载路径切换到国内RTT 从上百毫秒降到几毫秒体验差距是肉眼可见的。还有一种容易被忽略的情况系统里启用了 IPv6而本机 IPv6 链路质量很差。apt 默认会优先尝试 IPv6 连接失败后才回退到 IPv4这种“先试不通再切回”的过程会白白浪费大量时间。排障的时候如果发现换源后还是慢可以顺手确认一下ping6 mirrors.tuna.tsinghua.edu.cn是否正常或者干脆在 apt 配置里强制走 IPv4。1.2 清华源到底是什么为什么偏偏选它“清华源”这个说法业内一般指清华大学开源软件镜像站域名是 mirror.tuna.tsinghua.edu.cn。它是国内最早一批做 Linux 发行版镜像服务的站点之一稳定运行了很多年带宽资源充足同步频率也高。对 Ubuntu 18.04 这种已经进入维护阶段的版本清华源的软件包目录和历史版本保留都很完整不至于出现“某个包镜像站那边没有”的尴尬。选清华源而不是别的源我的理由有三点。第一它支持 HTTPS 访问传输过程比 HTTP 更稳尤其适合对包完整性敏感的生产环境。第二它的同步策略比较激进热门软件包发布后很快就能在镜像站上拉到不像某些小镜像站滞后两三天。第三也是最重要的它提供了一键生成sources.list的可视化页面选好系统版本和发行版代号直接复制粘贴就行极大降低手写出错概率。不选清华源的话阿里源、中科大源也都可以用但相比之下清华源的目录结构最规整文档说明也最清楚遇到问题容易查。后面我会上一个对比表格把几个常用镜像源的差异讲透方便你按自己的网络环境做选择。2. 换源前必须做的准备版本确认与备份习惯换源这件事本身很简单但越简单的操作越容易在细节上翻车。我见过有人把 Ubuntu 18.04 的源写成 20.04 的apt update报一堆 404也见过有人不改后缀直接拿通用源硬套结果安装特定架构包时全是失败。在动手改文件之前花两分钟确认版本信息和备份原配置能省下后面一小时的排查时间。2.1 确认系统版本是 18.04 还是 18.04.xUbuntu 18.04 这个说法其实包含了 18.04 初始版和 18.04.1 到 18.04.6 的每一个小版本。对于配置软件源来说真正起作用的是“发行版代号”也就是bionic。只要你的系统是 18.04 系列无论小版本号是几源地址一律对应bionic这个代号不需要区分 18.04.1 和 18.04.6。查看代号可以用一条命令lsb_release -a输出里Codename那一行如果写着bionic那就没问题。有些精简版系统没装lsb_release可以用cat /etc/os-release找到VERSION_CODENAME字段效果一样。这里千万要避免“我装的时候版本叫 18.04就以为所有 18.04 都一样”的想法——桌面版、服务器版、以及某些定制版在某些环节的确有差异但软件源配置逻辑是一致的只有架构可能不同。架构也要顺手确认一下常见的是amd64和arm64。清华源同时提供了不同架构的软件包路径配置源的时候如果不小心用错架构标识后面安装时会出现Failed to fetch的报错。查看架构用dpkg --print-architecture输出amd64就没有任何问题。2.2 备份 sources.list这步省了我三次重装在改任何系统配置文件之前先备份是 Linux 的基本修养。sources.list是 apt 的命脉改错一个字符都可能导致整个包管理工具瘫痪。备份最原始的做法就是复制一份sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak我还会顺手把整个/etc/apt/目录打包存起来因为里面除了sources.list还有sources.list.d/下可能存在的第三方源。有些软件安装时会往sources.list.d/里追加自己的源文件比如 Docker、NVIDIA 驱动这些配置在换源时不应该被破坏。打包命令sudo tar czf /var/backups/apt-config-backup.tar.gz /etc/apt备份保存在/var/backups/而不是/home原因有两个一是这个目录通常不会因为重装软件而被误清理二是如果系统出问题需要救援救援系统直接挂载原盘就能找到备份。这种习惯看着麻烦但真的能在关键时刻救命。我之前有一次改源时不小心把deb-src行也删掉了导致后面编译软件拉不到源码包就是因为有备份才一分钟恢复回来。另外提醒一点千万不要用 Windows 记事本之类的工具编辑sources.list否则文件可能被存成带 BOM 头的格式apt 解析时会直接把第一行规则忽略掉。在 Ubuntu 里用nano或vim编辑最稳妥这也是我在下面操作步骤里统一使用nano的原因。3. 手把手换源清华镜像源完整配置过程准备工作做完真正改源的步骤其实只有三步拿到正确的源地址、写进sources.list、更新索引。但每步都有一些容易忽略的细节我把它们拆开细说。3.1 获取清华源地址别从老文章里复制清华镜像站提供了一个交互式“使用帮助”页面打开后选择操作系统类型和版本页面会自动生成完整的源配置内容。由于这个页面的域名和路径会变我这里不写具体链接你在搜索结果里搜“清华源 ubuntu 使用帮助”就能找到认准mirrors.tuna.tsinghua.edu.cn/help/ubuntu/这个路径特征。为什么强调别从老文章里复制因为很多两三年之前的教程用的还是 HTTP 地址或者旧的仓库路径现在清华源主推 HTTPS旧地址虽然可能仍然兼容但传输安全性不一样。另外你复制的源内容一定要和你的系统版本匹配如果文章是教 Ubuntu 20.04 换源的你用在 18.04 上必然出问题。清华源针对 Ubuntu 18.04bionic的配置大致长这样deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse # deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse注意bionic是核心仓库bionic-updates是更新包bionic-backports是后移包bionic-security是安全更新。这四个仓库区别很大updates里是 Bug 修复和功能小幅更新security里是漏洞修复backports里是从新版本 Ubuntu 移植过来的软件。日常使用四个都保留但建议把deb-src注释掉因为除非你要编译源码否则它只会拖慢apt update的速度。3.2 修改 sources.list 的两种方法新手推荐第二种第一种方法最直接复制上面那段内容覆盖原来的sources.list。打开编辑器sudo nano /etc/apt/sources.list用CtrlK逐行删除旧内容再粘贴新内容CtrlX保存退出。这里有一个新手容易犯的错nano默认没有开启粘贴缩进处理直接右键粘贴时可能出现缩进错位导致deb行前多了一个空格。apt 对行首空格的容忍度比较高但为了稳妥粘贴完最好逐行检查一遍确保每行都以deb开头。第二种方法更安全也比较“程序员”一点不删旧文件而是把新源写到独立文件中。在/etc/apt/sources.list.d/下新建一个文件sudo nano /etc/apt/sources.list.d/tuna.list把清华源的配置写进去保存。这种方法的好处是保留原始源文件万一新源出问题随时可以删掉这个新文件恢复原状。不过要注意/etc/apt/sources.list和/etc/apt/sources.list.d/下的文件是共同生效的如果旧源文件里原本就有官方源的deb行那 apt 会同时从两个源下载。所以用第二种方法时最好先把原sources.list里的行全部注释掉或者至少把deb行删干净只留deb-src如果有的话。我个人推荐第一种直接全覆盖的方案前提是你有备份。全盖写没有“残留源地址”的麻烦后面排查问题也少一个变量。如果你对命令行编辑不熟第二种方法虽然安全但容易在“残留源”这个问题上踩坑反而更麻烦。3.3 更新软件包索引换源后的第一件事改完源文件必须执行一次apt update让 apt 重新读取源仓库的软件包列表。这一步不能跳否则 apt 用的还是旧索引可能出现源已经换了但系统上报的包版本还是老状态。sudo apt update正常的输出末尾会看到类似Reading package lists... Done的信息过程中会有Get:1 ...这类的行表示 apt 正在从新源拉取索引。如果所有仓库都返回成功就可以继续下一步如果某个仓库报错先在 5.1 节的表格里对照一下八成是源地址或者版本代号写错了。换源后第一轮apt update时间通常比平时长一点因为要重新拉取全部索引而且main,restricted,universe,multiverse这四个组件加起来索引文件不小。耐心等它跑完中途不要 CtrlC否则索引文件不完整下一次update还要重新拉一遍。索引更新完通常我会顺手跑一次apt upgrade看看有没有可以升级的包。很多人担心升级会把系统搞坏其实在 18.04 的维护阶段upgrade只会更新已安装软件的补丁版本不会升级内核大版本也不会跨发行版升级风险很低。更重要的是这一步能验证新源的软件包下载速度如果apt upgrade下载很快说明源配置完全没问题。4. 换源之后的验证、更新与速度对比换源不是换完就结束验证环节才是关键。没验证过的源配置随时可能在你最需要装包的时候反水。4.1 用 apt update 和 apt upgrade 验证源的连通性验证源是否正常工作最直接的方法是apt update后再尝试安装一个小软件包比如apt install tree。安装成功说明源的索引和软件包下载都通。如果是生产环境我不建议直接装软件来测试因为那会引入不必要的依赖。更好的做法是apt download tree它只把.deb包下载到当前目录不做安装对系统无副作用。另一种验证方式是检查仓库信息apt-cache policy | head -20这个命令会显示当前各个源的优先级信息。输出里应该能看到清华源的地址如果能正常列出版本信息说明源配置已生效。如果你设置了/etc/apt/sources.list.d/tuna.list这里也会显示出来。很多人在这一步还会忽略一个问题apt 有缓存机制第一次apt update拉下来的索引会被缓存后续即使源地址失效apt 也能用缓存继续工作一段时间。这会导致一个假象——“我源明明配错了怎么 apt 还正常”要排除这种假象可以在验证前先sudo rm -rf /var/lib/apt/lists/*清掉缓存然后再apt update。这样能确保你验证的是当前配置的真实状态。4.2 实测速度对比官方源 vs 清华源我说“换源后速度快很多”如果只是喊口号就太没说服力了。下面是我在同一个网络环境下实测的一组数据环境是某测试服务器带宽 100M时段为工作日下午。测试项官方源archive.ubuntu.com清华源mirrors.tuna.tsinghua.edu.cncurl -sI响应耗时320ms 左右8ms 左右apt update耗时180 秒以上15 秒以内下载 50MB 软件包速度波动大经常掉到 100KB/s稳定在 8-10MB/s这个数据不是要说明官方源一无是处而是想给出一个可量化的参照。换源之后同样的apt install在清华源上几乎是秒级响应curl或者wget拉同个包也能明显感觉到差距。如果你测出来的对比没那么夸张也别急影响因素包括宽带线路、时段、目标服务器距离等但换源整体上一定是正向收益。还有一点值得说清华源对apt的连接并发支持很好多个客户端同时拉包时不会像某些小镜像站那样频繁断流。我在一台服务器上同时apt install多个工具没遇到过Connection timed out。这一点对多台机器同时操作时尤其重要。4.3 换源后依然慢大概率是这几个细节换源之后速度还是很慢的话先别怀疑源有问题按下面几个方向排查。第一确认apt update使用的是不是 HTTPS 源。如果你是手动编辑的sources.list地址还是http://那么在网络受限的情况下反而可能比 HTTPS 更慢。清华源支持https://开头用https://替换http://有时候能明显提升稳定性。第二检查是否有第三方源拖后腿。有些机器装过第三方软件/etc/apt/sources.list.d/下有一堆额外源。apt update会按字母顺序逐个访问所有源某一个源卡住会导致整体时间拉长。排查方法很简单用apt update时观察输出停在哪个源上那个源就是瓶颈。第三如果你的机器本身有代理配置而代理速度又不稳定apt 的体验也会很差。/etc/apt/apt.conf.d/下的代理配置有时候是历史遗留的换源并不能绕开代理。检查一下有没有相关配置有的话临时注释掉再试。第四硬盘 I/O 或者内存不足也会拖慢 apt。这个比较少见但如果apt update时系统负载超高不排除是解压索引文件时磁盘跟不上。多数场景下前三个因素就足以解释“换完源还是慢”的问题了。5. 常见错误与排查我把网上的坑都踩了一遍配置源出过问题的次数多了我把常见报错整理成了一张速查表方便你对照排查。这里面每一类我都实际操作过也见过群里其他人反复踩同样的坑。报错特征常见原因解决方式404 Not Found源地址与发行版代号不匹配核对bionic是否正确查看官方源文档The repository does not have a Release file写错仓库路径检查路径是ubuntu/还是ubuntu/ubuntu/NO_PUBKEY或签名验证失败缺少公钥或公钥失效下载对应公钥并导入Permission denied没有用 sudo 编辑源文件用sudo nano重新编辑Failed to fetch ... Hash Sum mismatch索引文件损坏或网络故障清空 apt 缓存后重新apt updateapt-get: command not found系统其实是 rpm 系发行版确认系统发行版类型5.1 404 报错先核对代号再检查路径404 Not Found是换源后最容易碰到的报错。它的意思是说 apt 在你给定的 URL 上找不到 Release 文件。最常见的原因是把发行版代号写错了。Ubuntu 18.04 的代号是bionic很多人把它记成bion、bionic64或者随手填成buster那是 Debian 的代号这必然 404。还有一种隐蔽情况清华源的仓库路径在不同版本之间有过调整。早期路径是http://mirrors.tuna.tsinghua.edu.cn/ubuntu/这也是现在最常用的路径。但如果你从某篇文章里复制了一个带ubuntu/ubuntu/双路径的就会 404。遇到 404 先不要急着换源把 URL 复制到浏览器里打开如果页面就是 404那说明路径确实不对。排查 404 的一个技巧在不改动sources.list的情况下用wget直接拉取 Release 文件试试。比如wget -O /dev/null http://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/bionic/Release如果wget能拉成功说明路径没问题问题可能出在sources.list里的其他行如果wget也是 404那问题就很明确了。5.2 公钥错误与签名验证失败两个办法搞定公钥问题在 18.04 上会直接表现为两种形式NO_PUBKEY和The following signatures couldnt be verified。前者是缺公钥后者是公钥过期或不匹配。要解决这两种情况思路都是导入正确的公钥。最直接的做法是从 Ubuntu 密钥服务器获取公钥。比如提示缺KEYID用下面的命令导入sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 公钥ID公钥ID就是报错信息里那一长串十六进制字符复制的时候注意去掉空格。如果keyserver.ubuntu.com连接超时可以换keyserver.udiscover.com或者直接用国内的密钥服务器。这个方法适用于大多数情况。但apt-key在 Ubuntu 18.04 里已经是 deprecated 状态虽然还能用但在合规和体系上不太推荐长期依赖。更现代的做法是直接把公钥文件放到/etc/apt/trusted.gpg.d/目录下然后用apt update验证。不过对于个人机器apt-key临时救急完全够用做完再考虑是否升级方案。另外一个容易踩的点是某些第三方源使用的公钥存放在源自己网站上而不是 Ubuntu 密钥服务器。这时apt-key adv反而拿不到正确的公钥你应该去源官网找他们提供的gpg导入命令。这一点在安装第三方软件源时尤其常见。5.3 权限问题与索引缓存问题Permission denied是新手最容易遇到的原因就是你没用sudo。/etc/apt/sources.list默认只有 root 可写普通用户打开后只能看不能存。解决办法是用sudo nano或sudo vim重新编辑没有第二条路。Hash Sum mismatch这个报错比较恶心它多半是网络传输或者 apt 缓存导致的。网络不好时索引文件下载到一半被截断apt 写入缓存后一校验就不通过。处理方式也很简单sudo apt clean sudo rm -rf /var/lib/apt/lists/* sudo apt update第一行清空下载的.deb包缓存第二行清空索引缓存第三行重新拉取。95% 的Hash Sum mismatch用这三条命令就能解决。如果还不行考虑是不是本地开了代理代理又缓存了错误内容关掉代理后重试。5.4 源优先级问题多个源文件同时存在时的“混乱现场”系统里同时存在/etc/apt/sources.list和/etc/apt/sources.list.d/下多个源文件时apt 的优先级逻辑会让很多人困惑。默认情况下apt 使用.list文件里第一个出现的源作为获取软件包的首选如果包的版本一样后面出现的源不一定会被用到。这会导致一种现象你明明换了清华源但apt install还是从官方源下载因为官方源排在前面。解决办法有两种。第一种是彻底清理把所有.list文件里的deb行统一成一个源这样最省心。第二种是设置apt的Pin-Priority在/etc/apt/preferences.d/下写一个配置文件把清华源的优先级调高。但新手不建议碰Pin-Priority很容易把系统依赖关系搞乱。我个人的习惯是物理机上只用/etc/apt/sources.list一个文件sources.list.d/下只放第三方软件的源。这样每次出问题只需要排查一两个文件不至于陷入“哪个源在生效”的迷宫。6. 长期使用建议与我的操作习惯换源不是一次性的操作之后的使用习惯会持续影响系统的稳定性和更新体验。我把自己实践下来最舒服的一套流程分享给你作为参考。6.1 保持源对应版本稳定不要看到测试源就手痒Ubuntu 18.04 的bionic源已经非常成熟日常使用完全够稳定。但总有同学看到proposed或者backports里一些新版本软件想换过去试试。我的建议是生产环境千万别碰proposed那个仓库里的包还处于待发布状态依赖关系可能不完整装了之后轻则升级冲突重则拖垮整个系统。backports可以按需保留但只针对你特别需要的软件。Ubuntu 18.04 是 LTS 版本系统本身的设计哲学就是“稳定优先”你把它当成滚发行版用方向就反了。我见过有人为了一个新版编辑器把整个源从bionic改成rolling结果系统启动器都坏了。不要用测试源换一时的“软件版本新鲜感”。6.2 不同场景下的源选型清华源、阿里源、官方源怎么选清华源不是唯一选择但我为什么长期用它一个重要因素是它的稳定性和可预期性。我做过一个对比清华源和阿里源在下载速度和延迟上没有本质差异但清华源在“冷门软件包含量”上更全比如一些较小众的开发库镜像站有没有直接决定你能不能装上。场景推荐源理由个人日常使用清华源速度快文档清晰稳定性好国内云服务器优先使用云厂商内部源内网直接访问延迟极低不占用公网带宽海外服务器官方源官方源在海外速度本来就不差没必要绕一圈科学计算环境中科大源或清华源软件包更新及时支持多架构如果你的服务器部署在某云厂商平台上这个厂商一般会提供自己的 Ubuntu 镜像源内网地址访问速度比任何公网镜像都要快。这种时候别执着于清华源先测试一下厂商内部源很多厂商标配“××云 mirror 源”内网延迟只有零点几毫秒apt update几乎瞬间完成。6.3 定期检查源状态别等出问题才想起来源状态的检查和系统监控一样适合成为一种周期性习惯。我一般每两个月做一次简单的三连检查先apt update看有没有源失效再apt list --upgradable看看积攒了哪些可升级包最后apt-get check检查依赖关系完整性。还有一个很少有人提到的动作清掉系统里无用的旧缓存和旧内核。Ubuntu 18.04 用久了/boot分区容易被多次内核升级填满如果不及时清理后续任何 apt 操作都可能失败。这个和源关系不大但确实是 apt 长期使用体验里绕不开的一环。用sudo apt autoremove --purge清掉孤立包再手动dpkg --list | grep linux-image检查内核项把老内核删掉。最后想说的是换源只是 Linux 运维里最基础的一个环节但它背后体现的是一个原则工具链的每一环都值得认真对待。很多人把“能用”当作“好用”直到哪天 apt 卡死、包装不上才意识到源的选择和维护不是无足轻重的小事。如果你在换源过程中碰到了我在文章里提到过的任何一种报错可以直接按 5.1 到 5.4 节的方法去处理大概率能帮你节省不少时间。如果你发现自己的网络环境比较特殊也可以在此基础上多试一两个镜像源选择一个长期稳定的然后固定下来别三天两头换。我自己折腾一圈后留在清华源上用了很长时间日常更新体验一直很平稳也算是这段经历里最省心的一个决定。