ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu软件源更换实战指南:apt镜像源配置与提速技巧

Ubuntu软件源更换实战指南:apt镜像源配置与提速技巧 开头先自然引入200字前100字融入核心关键词玩 Ubuntu 的朋友应该都经历过这种场面装完系统兴冲冲跑sudo apt update结果进度条卡在某个连接上半天不动最后蹦出来一堆 “Failed to fetch” 的错误。原因不用多想十有八九是你还在用官方默认的软件源。所谓软件源Software Repository就是 apt 从哪儿拉取软件包和更新信息的远端仓库官方源服务器在国外网络请求的延迟和丢包率摆在那里速度慢是常态。这篇文章我打算把 Ubuntu 换源这件事从头到尾聊透——包括阿里源、华为源、清华源这几家主流镜像站怎么选、怎么配、踩过哪些坑以及换完源之后的更新流程和常见报错排查。无论你是刚装完 Ubuntu 的新手还是被 WSL、虚拟机、双系统环境下的源问题折磨过的老手这篇都能给你一份可以直接“抄作业”的方案。1. 先搞清楚软件源到底是个什么机制1.1 apt 源的工作原理一套“软件分发中心”逻辑很多人换源的时候其实就是照着网上教程复制粘贴根本不知道自己改的是什么。我建议你先花两分钟把源机制弄明白因为明白了原理之后后面遇到任何诡异报错你都能自己判断出问题出在哪。Ubuntu 的软件包管理默认基于 aptAdvanced Package Tool体系apt 本身不直接连接软件官网下载而是从一个“软件仓库”拉取。这个仓库本质上是一个目录结构里面存着 deb 格式的二进制包、元数据文件、依赖关系信息、校验值等。你的系统里有一个叫/etc/apt/sources.list的文件以及/etc/apt/sources.list.d/目录下的一堆.list文件它们共同告诉 apt“你应该去哪些服务器找软件包以及这些服务器上有哪些可用的软件包套件”。当你执行sudo apt update时apt 做的事情是去源列表里声明的每一个仓库地址下载一个叫做Packages.gz或Packages.xz的索引文件回来然后解析这些索引构建本地的软件包数据库。这一步不下载实际的软件安装包只是同步“货架清单”。之后你执行sudo apt install xxx时apt 才根据本地数据库里的信息告诉你这个包在哪个仓库的哪个路径下然后去对应位置下载 deb 文件进行安装。明白了这个过程你就能理解为什么换源是一劳永逸的事——你只改了仓库地址改的是“去哪里拉货架清单”的位置软件包体系本身完全不受影响。1.2 官方源慢的原因不只是“墙”的问题国内用户访问官方源慢原因其实不止一个。第一层是物理距离Ubuntu 的官方源和 Launchpad 相关服务主要部署在海外机房跨太平洋的 HTTP 请求要走海底光缆RTT往返时延通常在 150-300 毫秒这还只是建立连接的时间。第二层是带宽拥堵官方源面向全球用户对国内线路没有专门的优化节点高峰期经常遇到吞吐量极低。第三层是 DNS 解析问题有些地区解析archive.ubuntu.com时会被指向距离较远的节点进一步放大延迟。镜像站的思路就是解决这个问题国内机构如阿里云、华为云、清华大学 TUNA 协会定期把 Ubuntu 官方仓库的内容完整同步到国内服务器上你只需要把源地址从archive.ubuntu.com改成mirrors.aliyun.com之类的国内域名就能走国内的优质网络链路速度的提升可以说是肉眼可见——从几 KB/s 变成几 MB/s 是常态。1.3 镜像源和官方源的内容一致性放心用不纠结有人担心镜像源是不是“阉割版”其实完全多虑了。像阿里源、清华源这类大型镜像站同步机制基本都是定时全量同步不仅同步软件包本身还同步 Release 文件、索引、哈希校验值等元数据。也就是说你在官方源能装的软件在镜像源一样能装官方源的结构镜像源也完全保留。镜像站和官方源的差异最多就是同步时间上有几小时到一天左右的延迟对于普通使用场景完全感知不到。需要留意的是有些小众 PPAPersonal Package Archive仓库不会同步到这些国内大镜像站里所以如果你添加了某些 PPA 源那部分流量还是得走官方服务器这不属于本次换源的范围。2. 换源之前必须做好的三件事2.1 确认你的 Ubuntu 版本代号这一步至关重要。不同的 Ubuntu 版本对应的软件源地址是完全不同的比如 22.04 用的是 jammy、24.04 用的是 noble。如果你用旧版本代号去配新版本源轻则提示 Release 文件失效重则直接导致依赖关系错乱系统升级的时候把自己搞崩。查看系统版本号最直接的方式是执行lsb_release -a如果提示没有安装 lsb-release可以看/etc/os-releasecat /etc/os-release这里输出的VERSION_CODENAME字段就是当前系统的代号。另外uname -m可以告诉你架构x86_64、aarch64 等虽然大多数情况下我们用 amd64 架构源就够了但如果你用的是树莓派或者 ARM 服务器后面写源地址时架构路径也要对应上。2.2 备份源文件给后悔留条退路换源之前务必备份这句话我说给每一个找我帮忙解决系统问题的人。修改/etc/sources.list这种系统级文件出了问题不是重新跑一遍命令就能恢复的尤其是那些用了定制版系统比如 Kylin、Deepin 改版衍生版的朋友官方源地址可能和你想象的完全不一样。备份非常简单sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak如果你是 22.04 及之后的版本系统通常还带有/etc/apt/sources.list.d/ubuntu.sources新式 deb822 格式建议一起备份sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak有了备份之后哪怕你把源改成一堆乱七八糟的东西也只需要跑一句sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list就能回到原点心里完全不慌。2.3 选择一个与你网络环境匹配的镜像站国内主流镜像站其实不止标题里提到的三家但真正适合大众用户的、维护稳定且同步及时的主要就是阿里源mirrors.aliyun.com、华为源mirrors.huaweicloud.com、清华源mirrors.tuna.tsinghua.edu.cn、中科大源mirrors.ustc.edu.cn这几家。选择原则很简单如果你用的是阿里云 ECS 服务器优先选阿里源走内网链路如果你用的是华为云优先选华为源如果你在教育网环境清华源和中科大源通常有教育网免流量加成普通家用宽带用户三家差距不大选哪个都行。我个人的习惯是服务器上必配阿里或华为源本地虚拟机或 WSL 里用清华源。原因后面细说先继续走流程。3. 三种主流换源操作方式实测3.1 方式一手动编辑 sources.list最稳最通用手动编辑源文件是适用性最广的方式不管你是 Ubuntu 20.04 旧版、22.04 还是 24.04不管你是 x86 还是 ARM都能用这个方法搞定。先打开源文件sudo nano /etc/apt/sources.list如果你是 24.04 和 24.10 这些新版本默认源文件可能不在/etc/apt/sources.list而是/etc/apt/sources.list.d/ubuntu.sources打开方式类似。如果系统里两个文件都存在一般以ubuntu.sources为准sources.list里可能只有少量注释。打开文件之后把原来的archive.ubuntu.com和security.ubuntu.com统一替换为你要用的镜像站域名。以阿里源为例22.04 版本的内容大概是这样的deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse这里每一行的结构是软件包格式deb 镜像源地址 发行版代号 软件仓库组件。main是 Ubuntu 官方维护的自由软件restricted是专有驱动和设备固件universe是社区维护的自由软件multiverse是包含版权或法律限制的软件。写完保存退出然后执行sudo apt update看看是否正常拉取索引。3.2 方式二用 sed 命令秒换源适合远程操作手动编辑需要一层层进入文件不适合某些服务器环境——比如你通过 SSH 连上去只有一个终端窗口而且编辑器操作不熟练。这时候用 sed 命令直接替换是最省事的。以阿里源替换官方源为例sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list这两条命令的原理是把文件里的旧域名全局替换为新域名-i表示原地修改。如果你还担心安全更新源没换干净可以再多跑一条sudo sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list.d/ubuntu.sources不过 sed 方案有个缺点它只替换域名如果镜像源目录结构和官方源一致就没问题目前贴出来的这几家大镜像站都和官方保持同一目录结构所以这个方法是可行的。但如果你之前手动修改过源文件的目录路径或者用的是比较老的非 LTS 版本替换完最好先apt update验证一下。3.3 方式三Ubuntu 自带的“软件与更新”图形化工具如果你用的是桌面版 Ubuntu而且不想碰命令行也可以打开“软件与更新”Software Updates这个图形化工具。在“Ubuntu 软件”选项卡下的“下载自”下拉菜单里选择“其他站点...”在弹出的列表里能找到 China 一栏里面就有 aliyun、huawei、tuna 等镜像站域名供选择。这种方法的好处是完全可视化不会因为手误打错字导致源配置错误。缺点是不够灵活某些新版本里图形界面可能不会把sources.list.d里的自定义源显示全。还有一个麻烦点如果你改完源之后希望在终端里跑apt update还是要在图形界面里点一次“重新载入”按钮或者跑一行命令所以实际使用下来这条路径更适合对终端不熟的新手老手还是建议用前两种方式。4. 阿里源、华为源、清华源横向对比与选择建议4.1 三家镜像站的定位差异先说阿里源。阿里云是国内最早投入开源镜像站建设的云厂商之一它的同步频率高、节点覆盖广特别适合部署在阿里云 ECS 上的服务器。无论是内网免流量还是跨地域的 CDN 加速阿里源的表现都很稳定。个人用户如果家里是电信/联通宽带跑阿里源也很顺畅。再说华为源。华为云镜像站这几年的进步很快尤其是实现对 Ubuntu 官方仓库的完整同步之后速度表现很不错。如果你是华为云服务器用户那毫无疑问应该选华为源普通用户的话华为源和其他两家在体感上没有明显差异。清华源的运营方是清华大学 TUNA 协会这个组织在开源圈子里口碑很好镜像站点本身的历史也长。清华源有个独到优势是教育网内的访问速度和质量很多高校的校园网环境访问清华源可以获得相当高的吞吐量而且它是少数提供 IPv6 访问的镜像站之一。如果你在校园网环境中清华源基本是首选。表格对比如下对比维度阿里源华为源清华源域名mirrors.aliyun.commirrors.huaweicloud.commirrors.tuna.tsinghua.edu.cn同步频率较高较高高教育网优化一般一般优秀IPv6 支持支持支持支持云服务器适配阿里云内网链路极佳华为云内网链路极佳适合学术网/教育网适合场景云服务器、家庭宽带云服务器、家庭宽带高校用户、WSL/虚拟机4.2 Ubuntu 各版本的三家镜像源配置参考下面我直接给出几个主流 LTS 版本的三家源内容方便你按需复制。注意不同版本的代号不能混用这是换源翻车率最高的原因。20.04 的代号是 focal22.04 是 jammy24.04 是 noble。以 22.04 的阿里源为例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换成清华源只需要把域名换成https://mirrors.tuna.tsinghua.edu.cn/ubuntu/即可。华为源同理域名是https://mirrors.huaweicloud.com/ubuntu/。很多人分不清jammy-updates、jammy-backports、jammy-security这几个套件分别代表什么在这里统一解释一下jammy是基础发行版仓库只包含系统发布时的软件包版本jammy-updates是发布后持续推送的软件包更新版本jammy-backports是从未来版本回溯移植的软件包默认不启用jammy-security是安全漏洞修复更新这个必须启用否则系统漏洞没法及时修复。正常家用和服务器场景保留 main、universe、restricted、multiverse 以及updates、security组件就足够了backports建议保持注释状态。4.3 新版本 deb822 格式怎么改Ubuntu 24.04 开始系统默认使用 deb822 格式的源文件路径是/etc/apt/sources.list.d/ubuntu.sources。这个文件内容和老式的 sources.list 有较大差异它用键值对的方式描述源信息。比如 24.04 的默认文件里会有一大段以Types:、URIs:、Suites:开头的配置块。改 deb822 格式时你只需要把URIs:后面对应的域名替换成镜像站域名其他部分保持原样。比如把URIs: http://archive.ubuntu.com/ubuntu/改成URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu/对应的Suites:下面如果有noble、noble-updates、noble-security这些字段不需要动因为镜像站目录结构和官方是保持一致的。修改完成后还是老规矩跑sudo apt update验证。提示如果你在 24.04 里发现既有/etc/apt/sources.list又有/etc/apt/sources.list.d/ubuntu.sources优先修改后者并暂时将前者重命名或清空因为两个文件同时配置同一个软件源可能导致重复条目虽然 apt 一般不会报错但在 update 时会出现两遍相同数据源的信息看着碍眼。5. 换完源之后的更新流程5.1 apt update 和 apt upgrade 的区别别搞反换完源第一件事就是刷新软件包索引这一步很多人会误解成“顺便把软件都升级一遍”。其实apt update和apt upgrade是两码事必须分开理解。apt update做的事情是连接源里配置的仓库地址下载最新元数据索引刷新本地的软件包列表。它不下载安装包也不安装任何新东西。换源之后必须执行这一步让 apt 知道新源仓库里有哪些包可用。apt upgrade才是真正执行软件包更新的命令它会根据apt update刷新的索引对比本机已安装软件包的版本然后把能升级的全部升级到新源里对应仓库的最新版本。按要求执行即可sudo apt update sudo apt upgrade -y有些人在网上看到别人推荐apt dist-upgrade这个命令和upgrade的区别在于它会处理依赖关系变化可能会安装新依赖或删除旧包在换源场景下一般不必要只在跨版本升级时才用得上。5.2 update 输出里的信息怎么看跑完sudo apt update屏幕上会输出一大串内容。如果你的源配置正确正常会看到类似这样的信息Get:1 http://mirrors.aliyun.com/ubuntu jammy InRelease [270 kB] Get:2 http://mirrors.aliyun.com/ubuntu jammy-updates InRelease [120 kB] ... Reading package lists... Done Building dependency tree... Done Reading state information... Done All packages are up to date.每行Get:后面的数字表示下载进度和文件大小。如果出现Hit:而不是Get:说明对应文件的缓存有效apt 判断不需要重新下载这也属于正常输出。关键是看最后有没有W:或者E:开头的警告、错误。有W:说明有问题但不影响整体执行有E:说明有严重错误可能需要修复。还有一个很容易被忽略的点如果你的某个源配置有问题apt update 的输出里会有一段来自那个源的Err:行这种时候不要急着覆盖其他输出先把报错的那几行贴出来对照检查效率会高得多。6. 换源过程中的典型问题排查实录6.1 提示 Release 文件过期或失效这是换源后最常见的报错之一提示信息通常长这样E: The repository https://mirrors.xxx.com/ubuntu jammy Release does not have a Release file.这种报错大概率是你的 Ubuntu 版本代号和源地址不匹配。举个例子如果你用的是 23.10代号 mantic却复制了 22.04 的 jammy 源镜像站上当然找不到 mantic 的 Release 文件因为目录里根本没有对应的内容。排查方式很简单先用lsb_release -a确认系统代号然后检查源文件里每一行 URL 中的代号字段是否一致。记住镜像站不会好心帮你做版本自动匹配写错了就是错。6.2 出现 GPG 签名验证失败W: GPG error: https://mirrors.xxx.com/ubuntu jammy InRelease: The following signatures couldnt be verified because the public key is not available这个问题的原因是本机缺少对应仓库的公钥。官方源和镜像源都会使用 GPG 密钥对 Release 文件进行签名apt 在下载索引时会验证签名如果本机没有导入过对应密钥验证就会失败。22.04 及之后版本的 Ubuntu 通常会在系统安装时预置官方密钥所以这个问题更多出现在你手动添加新源比如 PPA 或第三方源时。解决办法是导入对应密钥以 Ubuntu 官方密钥为例sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 密钥ID不过apt-key在新版本中已经弃用推荐做法是把公钥文件放到/etc/apt/trusted.gpg.d/目录下。如果你只是换了官方源域名而报这个错误通常是因为系统时间不对先检查时间同步sudo timedatectl set-ntp true sudo hwclock --systohc6.3 出现 404 或“文件列表下载失败”Err: https://mirrors.xxx.com/ubuntu jammy-updates/main amd64 Packages 404 Not Found [IP: ...]这个问题几乎可以确定是源地址里的目录路径和你选择的镜像站实际目录结构不一致。部分小镜像站或者自建镜像站目录结构可能与官方源不完全一样比如有的源把dists/、pool/路径搞成了自定义结构。国内大厂和高校镜像站一般不会出现这种问题真遇到的话检查一下你是否在某个域名前缀后面多加了一层路径比如写了https://mirrors.xxx.com/ubuntu/ubuntu/这种双路径。6.4 换源之后 apt 依然访问官方源这种情况一般有两种原因。第一种你只改了/etc/apt/sources.list但系统里的实际生效源是/etc/apt/sources.list.d/ubuntu.sources。22.04/24.04 的默认配置确实有可能出现两个源文件共存的情况这时候 apt 会同时读取两者你没改的那个文件还在继续访问官方源。第二种你添加过 PPA。PPA 的源配置存放在/etc/apt/sources.list.d/目录下的独立文件里它们本身指向 launchpad.net 的官方服务器和你的 Ubuntu 主源无关。这些 PPA 不会因为你换了阿里源就自动跟着换它们依然走原地址访问。排查方式很简单apt-cache policy | grep -E http://|https:// | sed s/^ *// | sort -u这个命令会把当前所有软件源 URL 列出来一目了然。7. 顺手把 pip、conda、npm 等周边源也换掉7.1 pip 和 conda 的清华源配置既然系统源都换了Python 生态的包管理器默认源也建议一起换了。pip 默认从 PyPI 官方源下载包国内速度同样感人。配置清华 PyPI 镜像的方法是在用户目录下创建~/.pip/pip.conf[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cnconda 的话修改或创建~/.condarcchannels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud注意 conda 的源配置不只是换镜像地址那么简单如果你在channels里写了很多自定义 channel并且这些 channel 在镜像站上也存在就要按照上述格式在custom_channels里声明路径否则 conda 还是会去官方源拉包速度依然慢。7.2 npm、docker 的镜像加速配置npm 的默认源 registry.npmjs.org 在国内也时常抽风改成淘宝原 npmmirror 是常规操作npm config set registry https://registry.npmmirror.com/Docker 的话修改/etc/docker/daemon.json{ registry-mirrors: [https://docker.mirrors.ustc.edu.cn] }注意不同镜像站对 docker hub 的同步策略不同有些站因为政策和带宽原因已经停止 Docker Hub 镜像服务如果你发现配置后拉镜像依然报错可以多换几个镜像地址试试。这个领域变化较快以镜像站当前公告为准。提示以上这些周边源的配置跟 Ubuntu 系统源相互独立互不影响。加了这些配置之后你的开发环境整体都会有比较明显的网络体验提升尤其是在国内服务器上做持续集成、模型训练环境准备的时候省下的时间非常可观。8. 实际使用过程中的经验杂谈换个源说白了就是改几个域名的事但你在网上搜到的教程经常让人越看越迷糊原因就是很多人不区分系统版本、不区分源文件格式看到一个命令就贴。我自己的习惯是先看一眼系统版本和源文件的格式再决定用哪种方式改。还有一个值得记住的小知识点源里的 HTTPS 和 HTTP 都可以用镜像站基本都支持 HTTPS但 HTTPS 对 apt 来说首次握手多了 TLS 协商的开销在高延迟网络下会拖慢一点点速度。不涉及敏感数据的软件源请求用 HTTPS 主要求的是防篡改这个自己权衡。我个人在服务器上统一用 HTTPS图个安心在虚拟机和 WSL 里有时直接写 HTTP速度体感上稍微快一些实测差距在几秒钟以内。关于换源后要不要做一次完整的系统升级我的建议是如果你刚装完系统换完源之后执行sudo apt update sudo apt upgrade -y把系统补齐到最新状态如果你已经用了很久只是想解决下载慢的问题那执行完sudo apt update之后按需apt install即可不一定非要全量升级。全量升级有时候会带来驱动或内核层面的变化如果你机器上跑着重要的服务贸然升级风险并不低。最后再提醒一句很多人换完源就跑路再也没有回来检查过。镜像站有时候会做机房维护、域名调整、停止服务你的源配置文件里写着的地址可能某一天就失效了。隔一段时间执行一下sudo apt update看到报错及时处理这个习惯比换源本身更重要。我自己的服务器每隔几个月会批量检查一遍所有机器的源配置发现有失效的镜像站地址就直接切换到备用镜像站这个习惯帮我避开过不少坑。
返回列表