1. 为什么你的树莓派Ubuntu换源后总是404嘿朋友们今天咱们来聊聊一个让很多树莓派新手甚至一些老手都头疼不已的问题给树莓派上的Ubuntu系统更换国内软件源结果一运行sudo apt update满屏都是刺眼的404 Not Found错误。这事儿我当年也踩过坑折腾了大半天气得差点想把树莓派给扔了。后来才明白这根本不是网络问题也不是你操作错了而是一个非常典型的“水土不服”问题。简单来说你手里的树莓派它的大脑——CPU架构和我们常用的电脑x86_64不一样。树莓派用的是ARM架构的芯片比如ARM64也叫aarch64。而Ubuntu官方和很多国内镜像站为不同的CPU架构准备了不同的软件仓库。当你把为普通电脑准备的软件源地址直接套用在树莓派上时系统就会去一个根本不存在的“文件夹”里找软件包自然就报404了。这就像你去一家餐厅照着隔壁桌的菜单x86菜单点菜但后厨根本没有为你这桌ARM桌准备那些食材厨师只能两手一摊告诉你“抱歉没有。”原始文章里提到的错误信息非常典型http://mirrors.aliyun.com/ubuntu/dists/trusty/main/binary-arm64/Packages 404 Not Found。这里的关键词是binary-arm64。它说明系统正在寻找ARM64架构的软件包列表。如果镜像站没有为这个Ubuntu版本比如例子里的trusty即14.04提供ARM64的仓库或者你用的源地址根本就不是给ARM设备用的那这个404错误就必然会出现。所以解决这个问题的核心思路就两个第一找到支持ARM架构的国内镜像源第二确保你写的源地址格式完全正确。接下来我就带你一步步把这个问题彻底搞定。2. 深度解析404错误的根源与ARM架构的“特殊待遇”要彻底解决问题我们得先当一回“侦探”把404错误的来龙去脉摸清楚。这能帮你以后遇到类似问题自己就能快速定位。2.1 理解APT源地址的结构当你执行sudo apt update时系统会去读取/etc/apt/sources.list文件里的那些网址。一个完整的源地址比如deb http://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse可以拆解成几个部分deb 这表示这是一个二进制软件包仓库。如果是deb-src那就是源代码仓库我们一般用不到。http://mirrors.ustc.edu.cn/ubuntu-ports/ 这是镜像站的基础URL是最关键的部分。注意看这里有个ubuntu-ports/。这个-ports就是为“移植”架构准备的通常就包含了ARM、PowerPC等非x86架构的软件包。focal 这是你的Ubuntu系统版本代号。比如20.04是focal22.04是jammy18.04是bionic。用错了版本代号就像去了不对的楼层肯定找不到房间。main restricted universe multiverse 这些是软件仓库的组件代表了不同授权和来源的软件集合。通常我们把它们都写上确保软件最全。导致404的罪魁祸首往往就是第2部分——那个基础URL。很多朋友直接搜索“Ubuntu 国内源”找到的教程给的地址通常是http://mirrors.xxx.com/ubuntu/没有-ports。这个/ubuntu/路径下默认只存放x86架构的包。树莓派ARM去这里找当然什么都找不到。2.2 树莓派的ARM架构与“ports”仓库Ubuntu官方为ARM、PowerPC等架构维护了一个专门的仓库叫做ubuntu-ports。国内那些对树莓派友好的镜像站比如中国科学技术大学USTC、清华大学Tuna都会同步这个ubuntu-ports仓库。所以为树莓派Ubuntu换源的黄金法则就是寻找并使用带有-ports后缀的镜像源地址。你可以这样简单理解http://mirrors.xxx.com/ubuntu/-给普通电脑Intel/AMD用的http://mirrors.xxx.com/ubuntu-ports/-给树莓派等ARM设备用的原始文章里成功的关键就是把源换成了中国科学技术大学USTC的ubuntu-ports镜像。这就是对症下药。除了USTC还有几个非常靠谱的选择我后面会详细对比。2.3 如何确认你的系统架构和版本在动手改之前我们先确认一下“战场”情况。打开树莓派的终端输入下面两条命令# 查看系统架构 uname -m如果返回的是aarch64那你的系统就是64位的ARMARM64。如果是armv7l那就是32位的ARMARMhf。树莓派3B及之后的型号通常都运行64位系统。# 查看Ubuntu系统版本代号 lsb_release -cs这个命令会直接输出你的版本代号比如jammy、focal等。请牢牢记住这个代号写源地址时全靠它。3. 手把手实战备份、更换与验证附多个国内源选择理论说完了咱们直接上手干。跟着我的步骤走保证你能避开所有坑。3.1 第一步万无一失的备份改系统文件前先备份这是铁律。万一改乱了我们能瞬间恢复。sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup这样就创建了一个名为sources.list.backup的备份文件。如果后续操作失败只需执行sudo cp /etc/apt/sources.list.backup /etc/apt/sources.list就能还原。3.2 第二步选择合适的国内镜像源这里我为你整理了几个对树莓派ARM架构支持非常友好的国内主流源。你可以根据网络情况任选一个。镜像站名称基础URL用于ARM设备特点与评价中国科学技术大学 (USTC)http://mirrors.ustc.edu.cn/ubuntu-ports/原始文章推荐非常稳定可靠。教育网线路公网访问速度也不错是我个人最常用的。清华大学 (Tuna)https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/北方用户速度可能更快同步及时社区活跃文档清晰。阿里云http://mirrors.aliyun.com/ubuntu-ports/注意必须用-ports版本阿里云普通的/ubuntu/源不支持ARM。用对地址后速度非常快。华为云https://mirrors.huaweicloud.com/ubuntu-ports/后起之秀网络质量很好尤其适合华为云生态用户。提示选择哪个源其实差别不大核心是URL必须正确。你可以都试试看哪个在你的网络环境下apt update速度最快。3.3 第三步编辑sources.list文件两种方法现在我们要清空旧源写入新源。我推荐使用nano编辑器对新手更友好。方法一使用nano编辑器推荐新手sudo nano /etc/apt/sources.list用方向键移动光标直接按CtrlK剪切每一行把文件里所有旧内容全部删掉。然后将下面为你准备好的对应版本的源内容整段复制粘贴进去。以Ubuntu 22.04 LTS (Jammy Jellyfish)为例如果你用的是清华大学源deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse粘贴完成后按CtrlO保存回车确认文件名再按CtrlX退出nano。方法二使用sed命令一键替换适合老手如果你确定要换某个源可以用这条命令快速替换。这里以换成中科大USTC源为例假设系统是focalsudo sed -i s|http://.*.ubuntu.com/ubuntu/|http://mirrors.ustc.edu.cn/ubuntu-ports/|g /etc/apt/sources.list sudo sed -i s|http://security.ubuntu.com/ubuntu/|http://mirrors.ustc.edu.cn/ubuntu-ports/|g /etc/apt/sources.list然后还需要手动把文件里所有的版本路径如focal-security修正为正确的组件格式。对于新手我还是更推荐方法一清晰可控。3.4 第四步更新软件列表并验证最关键的一步来了执行更新sudo apt update这时你应该会看到一串串的Get:XX信息从镜像站飞速地拉取列表。如果一切顺利最后会显示“All packages are up to date”或列出了可以升级的软件包数量没有任何404、Failed to fetch或Ign忽略的错误。为了进一步验证可以尝试安装一个小软件sudo apt install -y htop如果htop一个系统监控工具能顺利安装那就百分之百说明你的软件源配置完全正确树莓派现在“吃饱喝足”再也不会抱怨找不到软件了。4. 进阶排查与常见问题锦囊即使按照上面的步骤可能还是有朋友会遇到问题。别急我把这些年遇到的“妖魔鬼怪”都总结在这里了。4.1 如果还是报404逐项检查清单请按照这个清单像医生问诊一样检查你的系统URL是否带了-ports再仔细看一遍/etc/apt/sources.list里的地址确保中间是/ubuntu-ports/不是/ubuntu/。版本代号写对了吗用lsb_release -cs确认你的代号。把jammy写成focal或者把ubuntu-ports错写成ubuntu-ports/多一个斜杠都会导致错误。镜像站本身是否暂时故障你可以用浏览器或curl命令测试一下地址是否能访问。例如curl -I http://mirrors.ustc.edu.cn/ubuntu-ports/dists/如果返回200 OK说明镜像站正常。如果返回404可能是你路径写错了如果连不上可以尝试换一个镜像源。系统版本太老已停止支持如果你安装的是非常古老的Ubuntu版本如文章例子里的14.04 Trusty官方早已停止维护国内镜像站也可能同步清理了老旧版本的仓库。唯一的解决办法就是升级系统到受支持的LTS版本如20.04 Focal, 22.04 Jammy。4.2 关于“Release”文件无效或Hash校验和不符的错误有时候错误不是404而是The repository ‘xxx’ does not have a Release file或者Hash Sum mismatch。这通常是网络问题导致的文件下载不完整。解决方案换一个更快的源用我之前给的表格里的其他源试试。清理本地缓存再重试sudo rm -rf /var/lib/apt/lists/* sudo apt update如果是Hash Sum mismatch这往往是网络波动导致多重复几次sudo apt update命令可能就好了。4.3 为特定软件源换源如Docker、Pi-hole除了系统源有时候我们还需要为一些第三方软件换源比如Docker。它的源是独立的也需要区分架构。例如更换Docker的APT源为国内镜像以阿里云为例ARM64架构# 安装依赖 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common # 添加Docker的GPG密钥 curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # 添加Docker软件源注意arch参数 sudo add-apt-repository deb [archarm64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable # 更新并安装 sudo apt-get update sudo apt-get install docker-ce关键就在于[archarm64]这个参数它明确指定了这是给ARM64架构的仓库。5. 写在最后让树莓派飞起来的其他小贴士解决了软件源这个根本问题你的树莓派Ubuntu才算真正“安家落户”。这里再分享几个让树莓派更好用的小经验。首先定期更新系统是个好习惯。在换源成功后你可以放心地执行sudo apt update sudo apt upgrade -y现在升级过程会非常快速和稳定。其次如果你在树莓派上做开发尤其是Python强烈建议配置Python PIP源。在用户目录下创建或编辑~/.pip/pip.conf文件内容如下[global] index-url https://pypi.tuna.tsinghua.edu.cn/simple trusted-host pypi.tuna.tsinghua.edu.cn这能让你用pip install安装Python包时速度提升几十倍。最后关于系统选择。对于树莓派4B或更新的型号我实测下来Ubuntu Server 64-bit LTS版本的稳定性和性能表现最好资源占用也比带桌面环境的版本低很多更适合做服务器或跑后台服务。如果你刚开始玩树莓派遇到软件源404这个问题恭喜你你正在解决一个最经典、也最关键的入门难题。跨过这道坎后面海阔天空。