尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Ubuntu apt换国内源详解:原理、镜像选择与常见坑

Ubuntu apt换国内源详解:原理、镜像选择与常见坑 刚接触Ubuntu的时候最让人崩溃的一件事就是装软件。跑到一个教程里看到sudo apt install后面跟个包名结果进度条就像被什么东西卡住一样在 0% 附近磨磨蹭蹭偶尔跳到几十KB/s等几分钟然后直接给你报个网络超时。这是很多新人的第一道坎apt 默认连的是 Ubuntu 官方源服务器在海外国内访问就是慢。解决办法其实很直接——把源地址换成国内镜像站的也就是常说的给 apt 换国内源。这篇文章就把换源的原理、具体操作步骤、还有各种常见坑一次说清楚涵盖 Ubuntu 24.04、22.04、20.04 等主流版本不管你是自己电脑上装的桌面版、虚拟机里的系统还是 WSL 里的 Ubuntu都适用。1. 换源之前先把这几件事弄明白1.1 apt 源到底是个什么东西apt 是 Ubuntu 的软件包管理器你执行apt install 软件名的时候它其实是从一个“软件仓库”里下载安装包。这个仓库的地址列表就是所谓的“源”。Ubuntu 默认帮你配置好的源地址指向archive.ubuntu.com或security.ubuntu.com这些服务器都在国外。源的配置文件传统上放在/etc/apt/sources.list这个文件里另外/etc/apt/sources.list.d/目录下还会有一些第三方软件的独立配置文件比如 Docker、VS Code 这些软件安装时加的源。系统更新软件包索引时会把这些位置全部读一遍。传统sources.list里一行一个源格式长这样deb http://archive.ubuntu.com/ubuntu/ jammy main restricted universe multiverse拆开来看deb表示这是二进制软件包仓库deb-src则是源代码包仓库中间是一段 URL 地址jammy是 Ubuntu 的版本代号决定了这套源属于哪个系统版本最后那几个单词是组件分类。main是官方维护的自由软件universe是社区维护的自由软件restricted是专有驱动等受限软件multiverse是包含版权或法律限制的软件。在 Ubuntu 22.04 及更早的版本里源文件是上面这种单行格式到了 Ubuntu 24.04系统改用了一种叫 deb822 的新格式配置文件路径也变了放在/etc/apt/sources.list.d/ubuntu.sources。这个格式看起来更像 INI 文件每段用Types、URIs、Suites、Components等字段描述一套源。很多人抄网上的老教程改 24.04 时发现找不到sources.list就懵了其实就是这个原因。1.2 为什么换了国内源就能变快官方源服务器在海外意味着每次下载都要跨越大半个地球的网络路径中间还要经过国际出口高峰期丢包率高、带宽有限速度自然惨不忍睹。国内镜像站做的事情简单说就是“搬运工”。它们在位置上来讲离你更近而且通过这种大量服务器同步保持着和 Ubuntu 官方仓库的一致带宽资源也充足。你从旁边的镜像站下载网络路径短了瓶颈少了速度自然上去。打个比方官方源就像你在国内想去楼下便利店买瓶水但是必须先坐飞机去国外仓库提货再飞回来中间还各种堵车国内镜像站就是你家楼下新开的分店货物定期从总仓库补过来你下楼就能买到。换源后实测下来的体感差距是巨大的。我之前在一台普通云服务器上用官方源跑apt update经常要十几分钟换成国内镜像后一分钟内搞定下载一个几十MB的软件包速度能差几十倍。但你也要理解换源解决的是“下载慢”的问题它和代理是两回事不需要也不应该通过任何代理类工具去实现合规的网络优化路径就是直接使用国内镜像源。2. 镜像站选型清华、阿里、中科大有啥区别2.1 主流国内 apt 镜像源横向对比国内有不少高校和云厂商都维护着 Ubuntu 镜像比较常用的是这么几个镜像站访问地址适合场景特点清华 TUNAmirrors.tuna.tsinghua.edu.cn校园网、教育网、个人开发者同步频率高带宽大各类 Linux 发行版镜像都有阿里云mirrors.aliyun.com阿里云服务器、公网环境云厂商维护国内节点多速度快稳定中科大 USTCmirrors.ustc.edu.cn校园网、公网老牌镜像站文档完善覆盖大量发行版华为云mirrors.huaweicloud.com华为云服务器、公网跟阿里类似云厂商资源充足网易mirrors.163.com公网较老牌更新速度稍逊于前几个如果你用的是阿里云、腾讯云、华为云这类国内云服务器其实不用纠结直接选同厂商的镜像站一般效果最好因为云厂商内网访问自己家的镜像往往有加速。如果是在个人电脑或者虚拟机里清华、中科大这种高校镜像也很稳。我自己的选择习惯是云服务器优先用阿里云/华为云本地电脑用清华源基本没出过问题。选好镜像站后可以先测一下你机器到它的连通性。比如想测清华源就执行curl -I https://mirrors.tuna.tsinghua.edu.cn/ubuntu/看返回的 HTTP 状态码是不是 200以及响应时间怎么样。这个过程可以对比几个镜像站挑速度最好的用。2.2 版本代号与源地址之间的关键对应换源时最容易犯的一个错误就是把别的 Ubuntu 版本的源地址硬套到自己系统上结果刷出来一堆 404。根源在于 Ubuntu 的源地址里包含版本代号不同版本代号不同软件源内容也不一样。几个主流版本的对应关系Ubuntu 版本版本代号源地址里写的值18.04bionicbionic20.04focalfocal22.04jammyjammy24.04noblenoble24.10oracularoracular怎么看自己系统是什么版本执行lsb_release -a或者看/etc/os-release文件也行。记住你系统对应的代号后面配置模板里凡是出现jammy、noble这样的词都改成你自己的代号。老版本系统比如 18.04有的镜像站已经停止同步或者移到了旧版本目录这种时候更要以镜像站官方文档为准不要照抄新版本的模板。3. 完整实操Ubuntu 24.04 和 22.04 一键换源3.1 改源之前先把原始文件备份好换源这个操作本质是修改系统配置文件。改之前做好备份是最基本的安全意识万一改错了或者系统升级时出了兼容性问题还能一键还原。如果你用的是 Ubuntu 24.04配置文件在/etc/apt/sources.list.d/ubuntu.sources备份命令sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak如果是 22.04 及更早版本备份文件是sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak备份文件放在同目录下就行后面想恢复就直接cp回去。顺便提醒一句换源前先ls /etc/apt/看一眼目录结构明确自己的系统是哪种配置文件格式别一上来就照着老教程去改一个不存在的文件。3.2 新版 Ubuntu 24.04deb822 格式的换法Ubuntu 24.04 的默认源文件/etc/apt/sources.list.d/ubuntu.sources初始内容大概是这样的Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: http://security.ubuntu.com/ubuntu/ Suites: noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg换源的核心就是改URIs这个字段的值。改成清华源的话把文件内容替换成Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg Types: deb URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ Suites: noble-security Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg改成阿里云源的话对应的地址就是https://mirrors.aliyun.com/ubuntu/其他字段不变。实际操作时你可以用编辑器直接改文件sudo nano /etc/apt/sources.list.d/ubuntu.sources也可以偷个懒用 sed 命令文本替换。比如把官方域名全换成清华源地址sudo sed -i s//.*archive.ubuntu.com//mirrors.tuna.tsinghua.edu.cng; s//security.ubuntu.com//mirrors.tuna.tsinghua.edu.cng /etc/apt/sources.list.d/ubuntu.sources注意这里把security.ubuntu.com也替换成了镜像站地址因为清华、阿里这些镜像站会把安全更新内容同步在主目录下不需要单独指向security.ubuntu.com。改完后运行sudo apt update看到输出里大量Get并且最后一个版本代号对应的源没有报错说明换源成功。3.3 旧版 Ubuntu 22.04 及更早版本的换法对于 Ubuntu 22.04、20.04、18.04 这些使用sources.list单行格式的版本直接修改/etc/apt/sources.list文件为清华源模板sudo nano /etc/apt/sources.list把内容替换成下面这样以 22.04 jammy 为例deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse阿里云源则替换为deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse如果你的系统是 20.04 focal就把上面的jammy全部换成focal其他保持不变。如果你想获取软件包的源码版本可以在每组前面加一行deb-src开头的条目。不过对大多数场景来说deb-src用不到而且会拖慢apt update的速度通常建议注释掉或者直接不写。改完执行sudo apt update如果输出里没有Err、404这类报错就说明源已经生效。3.4 图形化方式桌面版用“软件与更新”工具如果你用的是带图形界面的 Ubuntu 桌面版不想折腾命令行还有一个更直观的换源方法打开“软件与更新”Software Updates工具在 Ubuntu 软件 选项卡下方找到“下载自”下拉框点进去选择“其他站点…”然后在弹出的列表里找到中国的镜像源比如 mirrors.tuna.tsinghua.edu.cn点击“选择服务器”系统会提示你输入密码并自动刷新软件源。这个方式的底层原理和手改配置文件完全一样只是帮你把地址替换的活干了。不过它只在桌面版自带这个工具的 Ubuntu 上可用服务器版或者 WSL 里没有图形界面还是要走命令行。另外补充一个命令行下的小工具安装方式。如果你用的桌面版系统里没有“软件与更新”可以装一下sudo apt install software-properties-common这个包提供add-apt-repository等命令是后续添加第三方源时经常用到的工具。4. 换源之后必做的验证与高频问题排查4.1 update 和 upgrade 有什么区别换完源先跑哪个换完源之后第一件事必须是sudo apt update。update做的事情是更新软件包索引也就是把源里的软件列表拉取到本地让系统知道当前源有哪些软件、什么版本、依赖关系是什么。它不会安装或升级任何软件只是“刷新商品货架”。upgrade才是真正根据这个列表去升级系统里已安装的软件到新版本。经常有人把这两步混在一起执行或者换完源直接apt upgrade。这样做在绝大多数情况下没事但万一官方镜像源同步有延迟新源列表和旧软件版本之间可能出现依赖不一致的情况所以我个人习惯是先update确认源没问题再考虑要不要upgrade。执行sudo apt update时观察输出内容Get表示成功获取到了软件包列表Hit表示本地缓存已是最新无需重新下载Ign表示忽略了一些可选项比如某些索引文件不存在Err表示出错这种就需要看具体错误信息来排查了。只要没有Err并且最后没有提示“无法下载”之类的信息就说明换源成功。4.2 常见排错404、签名失效、Hash 校验和不符换源这事新手最常遇到就这么几类报错我一个个说404 Not Found。这类错误一般是源地址里的版本代号写错了。比如你是 24.04 却写了jammy或者你是 20.04 却写了focal以外的代号镜像站对应目录下没有这些文件就会出现一排 404。解决方式就是lsb_release -a确认自己的版本代号然后改对。公钥签名验证失败。报错信息里会出现The following signatures couldnt be verified because the public key is not available: NO_PUBKEY xxxx。这说明系统缺少验证源签名所需的公钥。解决办法比较简单直接根据报错里给的公钥 ID 手动添加sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 公钥ID不过在 Ubuntu 24.04 上apt-key已经废弃推荐换成下面这种方式把公钥放到/etc/apt/keyrings/下再在源配置里Signed-By引用。大多数常用镜像站比如清华源它的官方文档里都有对应的公钥安装说明直接照着做就行。Hash Sum mismatch。这类报错一般是之前下载了一半的缓存文件损坏导致的。解决方法是清掉缓存再更新sudo apt clean sudo apt updateThe repository does not have a Release file。这个一般也是源地址或者版本代号不对镜像站里根本没有对应的目录结构把配置和镜像站文档对照检查一遍就好。4.3 一个容易忽略的坑第三方源配置不要乱动换源时很多人只盯着sources.list或ubuntu.sources却忘了/etc/apt/sources.list.d/目录下可能还有一些第三方软件的源配置。比如你装过 Docker这个目录下会有一个docker.list装过 VS Code 之类的软件也会有类似文件。这些第三方软件的源地址指向的是该软件官方的仓库它们和 Ubuntu 本身的源是两码事。换 Ubuntu 系统源的时候不要顺手把这些第三方源也改成国内镜像除非你确认该软件在国内有官方镜像且同步正常。否则一个不小心可能导致第三方软件无法更新甚至无法安装。遇到这类源的下载问题优先去对应软件官方文档查一下它们推荐的国内镜像配置方式。还有一个小坑是 WSL 里的 Ubuntu。WSL 同样可以用本文的方法换源步骤跟实体机完全一致只是有些发行版初始源里会包含 WSL 专属的软件包目录换源时如果发现apt update报错回看一下是不是有个变量$WSL之类没替换干净按镜像站模板调整就行。4.4 想还原官方源怎么办换源之后如果遇到镜像站同步异常或者系统大版本升级时需要回到官方源也不用慌。之前备份的文件就是干这个用的sudo cp /etc/apt/sources.list.bak /etc/apt/sources.listdeb822 格式同理sudo cp /etc/apt/sources.list.d/ubuntu.sources.bak /etc/apt/sources.list.d/ubuntu.sources执行完恢复操作后记得sudo apt update刷新一遍。根据我个人操作多台 Ubuntu 机器的经验有一点特别想提醒大家如果你打算把系统从旧版本升级到新版本比如从 22.04 升到 24.04升级工具会把源配置重置回官方默认值这属正常现象升级完成后再重新按新版本代号换一次源就好了。别到时候看到源被“改回去”还以为是自己把系统搞坏了。最后再分享一个实用小技巧多个镜像站的源模板之间其实只差一个域名你可以把几个常用镜像源的地址存在备忘里哪个出问题就临时切换到另一个没必要非得在某个镜像上死磕。换源这件事本身不复杂核心就是找到适合自己的镜像、写对版本代号、改完记得 update熟练之后全程一分钟都用不了。
返回列表