ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Armbian换源全指南:apt源与armbian.list正确配置,告别404和慢速

Armbian换源全指南:apt源与armbian.list正确配置,告别404和慢速 刷完Armbian之后第一件事是什么十个人里有八个会选择换源。我从N1盒子、各种开发板一路玩过来每次装好Armbian系统后第一件事确实是搞定apt源不然官方仓库那个速度apt update转上几分钟都是常事更别提后面装docker、装zerotier那种几十MB甚至几百MB的包了。但这里有个特别容易踩的坑网上一搜“换源”满屏都是Debian和Ubuntu的教程很多人照着改完sources.list发现速度确实快了可apt update还是会报错或者后续装Armbian独有软件包时一团糟。这个坑的本质就是没搞清楚Armbian的软件源结构和纯Debian不一样除了常规的sources.list还有一个专门管内核和固件的armbian.list。这篇文章就把我踩过的坑、最后的正确操作方式完整地讲一遍。1. 先搞懂Armbian和Debian源的真实关系1.1 Armbian基于Debian但绝不是“换个马甲”很多人觉得Armbian就是Debian这个理解大方向没错但细节上差得很远。Armbian在Debian的基础上做了大量深度定制内核、设备树Device Tree、GPU和网卡固件、启动脚本、armbian-config这个图形化配置工具以及针对各种开发板和盒子的硬件支持包全都是它自己的产物这些都不会出现在Debian官方仓库里。换句话说你的板子上跑着两套包来源一个是Debian的软件仓库提供bash、openssl、nginx这类通用的用户态软件另一个是Armbian自己的软件仓库提供linux-image-xxx内核、armbian-firmware固件、armbian-config配置工具这些和硬件深度绑定的包。这两个来源在系统里是并行存在的谁也不能替代谁。如果拿纯Debian的源文件直接替换整个Armbian的源最常见的结果就是基础包能更新了但apt update会出来一大片404因为Armbian独有的包在Debian仓库里根本不存在。更危险的是如果系统之前已经升级过内核你强行把源切成纯Debianapt在做依赖解析时可能找不到对应的Armbian内核包导致内核和内核模块版本错位重启后板子直接起不来。我见过不止一个朋友在折腾换源时把系统弄到无法开机最后只能重刷。所以换源前先接受一个事实Armbian是Debian的延伸不是Debian本身。1.2 sources.list和armbian.list的分工既然系统里有两套仓库那对应的配置文件自然也是两个。Armbian默认把普通的软件源放在 /etc/apt/sources.list把Armbian独有的软件源放在 /etc/apt/sources.list.d/ 目录下的 armbian.list。这是Armbian的设计目的就是把Debian基础软件和Armbian定制软件分开管理方便维护也方便备份和回滚。sources.list里的地址指向Debian官方仓库通常是deb.debian.org这类地址里面是标准的Debian包armbian.list里的地址指向Armbian官方仓库apt.armbian.com里面不仅有Armbian本身发布的内核、固件还有板卡相关的特殊驱动。有些刚入门的朋友会好奇为什么Armbian不直接把所有包都塞进Debian仓库非要单独搞一个源原因很简单Debian的仓库审核严格、发布节奏慢Armbian那些针对具体板子的内核和固件更新频繁很多都处在快速迭代阶段单独维护一个仓库才能跟上开发进度也不会污染Debian主线。明白了这一点换源的操作思路就清晰了两个文件都得改一个负责Debian基础包一个负责Armbian定制包。只改一个效率提升不完整或者系统稳不住。这就是我强调“Debian源不通用”的原因——Debian源只是半边天剩下半边得靠armbian.list去补。2. 换源之前先把三件事确认好2.1 确认系统用的Debian版本代号所有换源操作的基础是先弄清楚自己的系统到底基于哪个Debian版本。Armbian长时间以来主要提供基于Debian Bullseye和Bookworm的镜像近两年新版本普遍切到Bookworm但很多老设备上还在跑Bullseye另外还有基于Ubuntu的Armbian版本代号是jammy仓库路径写法又不一样。如果你不知道自己的版本代号直接拿网上教程里的bookworm路径硬套404几乎是必然的。查看版本代号很简单一条命令的事cat /etc/os-release | grep VERSION_CODENAME输出可能是bookworm、bullseye或jammy。这个代号在配置两个源文件时都会用到建议先复制到一个临时文件或者记下来。我习惯在改源之前顺手执行uname -a和cat /etc/os-release两条命令把系统信息完整看一遍确认无误再动手。这能省掉后面一堆排查时间尤其是玩过多块板子、记混版本的时候这条习惯特别有用。2.2 确认CPU架构是arm64还是armhf第二个要确认的是系统架构。现在的开发板和电视盒子99%都是64位CPU跑的是arm64也就是aarch64架构但也有一些老设备比如早期的某些树莓派镜像或者低配盒子可能是32位的armhf。查看架构命令uname -m dpkg --print-architectureuname -m如果输出aarch64dpkg --print-architecture一般输出arm64如果是32位系统uname -m会输出armv7ldpkg输出armhf。这个参数影响你在镜像站里下载的包版本也影响源文件里的组件判断。虽然绝大多数场景下不会输错但养成确认习惯没有坏处。尤其你手里有多块板子时很容易记混哪块板子是什么架构用错源的时间成本很高。2.3 确认镜像站有没有Armbian仓库这里我想特别说一下网上很多Debian和Ubuntu换源教程里的镜像站地址可能根本没有Armbian的仓库目录。比如你选了一个只做Debian镜像的源sources.list可以正常用armbian.list指向它却只会得到404。所以配置之前最好先用浏览器访问一下镜像站对应路径确认网址后面能正常列出目录结构。目前国内几个比较靠谱且长期支持Armbian仓库的镜像站我常用这几个清华TUNAmirrors.tuna.tsinghua.edu.cn/armbian、中科大mirrors.ustc.edu.cn/armbian、阿里云mirrors.aliyun.com/armbian。它们都有公网访问入口路径结构稳定适合在Armbian系统里配置。这里顺带说明一下开源软件镜像站是公开服务任何人按官方文档规范使用都没有问题这也是开源社区加速派发的标准做法。镜像站Armbian仓库地址特点清华TUNAmirrors.tuna.tsinghua.edu.cn/armbian同步及时目录规整中科大mirrors.ustc.edu.cn/armbian稳定性好包更全阿里云mirrors.aliyun.com/armbian国内节点多部分网络下更快3. 正确姿势两个文件一起换3.1 动手前先备份无论你对自己的操作多自信改系统配置前备份永远是第一原则。两个文件都要备份不只是sources.listsudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo cp /etc/apt/sources.list.d/armbian.list /etc/apt/sources.list.d/armbian.list.bak不要嫌麻烦。我自己就干过一回把armbian.list的仓库地址写错了apt update直接大量报错想恢复又记不清原始地址最后靠备份文件才救回来。备份文件只是多两个cp命令成本几乎为零收益是关键时刻能救命。每次重刷系统或换新板子我都会在改源前先执行这一步已经成了肌肉记忆。3.2 改sources.list这部分可以沿用Debian源先处理 /etc/apt/sources.list。以Bookworm为例用清华源的话可以改成deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware如果是Bullseye就把bookworm替换成bullseye。这一段其实就是普通Debian服务器的标准配法Armbian基础包部分直接复用是没问题的这也解释了为什么网上Debian换源教程能解决一半的问题——但仅仅是一半。关于security源有个细节很值得说。很多网上教程都会加一行 deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main但Armbian系统默认的sources.list里往往并没有单独启用security源因为Debian的安全更新会通过updates通道同步或者Armbian自己做了整合。如果你在Armbian里强行加入security源反而可能因为镜像站同步策略差异出现部分包版本比主仓库低、apt提示“这些包可以升级但未被升级”之类的怪问题。我的建议是先用系统默认的源结构只替换主机地址不要随意增删组件等跑通了再考虑要不要加security。3.3 改armbian.list核心中的核心接下来是重头戏/etc/apt/sources.list.d/armbian.list。这个文件原始内容大致是这样的deb [signed-by/usr/share/keyrings/armbian.gpg] https://apt.armbian.com/ bookworm main bookworm-utils bookworm-desktop注意看它和sources.list有一个明显区别开头多了 [signed-by/usr/share/keyrings/armbian.gpg] 这一段。这是仓库签名密钥的路径用来验证包有没有被篡改。很多人在改源时觉得这个参数没用随手删掉结果apt update报签名错误以为自己源写错了折腾半天。改法很简单把官方地址替换成镜像站地址即可。比如用清华源改成deb [signed-by/usr/share/keyrings/armbian.gpg] https://mirrors.tuna.tsinghua.edu.cn/armbian/ bookworm main bookworm-utils bookworm-desktop这里的路径结构解释一下/armbian/是镜像站里Armbian仓库的根目录bookworm是仓库分支对应系统版本main是核心组件bookworm-utils、bookworm-desktop则是Armbian额外维护的工具和桌面组件。组件名不需要你记照着原文件保留即可只需要把域名路径部分改掉。实际操作中我建议优先使用sed命令来做整行替换减少手打错误sudo sed -i s|https://apt.armbian.com|https://mirrors.tuna.tsinghua.edu.cn/armbian|g /etc/apt/sources.list.d/armbian.list这条命令将官方地址替换为清华镜像地址其他部分原样保留。替换完成后可以用cat检查一下文件内容确认没有多出空格或错别字。如果你习惯用nano编辑也可以直接用nano打开文件手动修改保存时注意编码和换行符不要在文件末尾留多余的空格。3.4 更新索引并验证最终效果两个都改完后执行sudo apt update正常执行后你会看到两条更新通道的信息一条来自Debian镜像一条来自Armbian镜像。如果都显示成功再执行一次sudo apt upgrade -y把系统基础包和内核包更新到仓库当前版本。这一步很重要因为如果系统刷机后一直没更新仓库里可能已经有较新的内核和依赖先升级到统一状态后续再装软件能少很多依赖冲突。我遇到过不少人在Armbian上装docker失败排查到最后发现是系统里的旧内核、旧依赖和仓库最新版本不匹配与其事后排错不如换源后直接来一次彻底升级。升级的时候系统可能会提示你重启如果提示内核更新了尽量重启一下让新内核生效。4. 那些年我遇到过的报错与排查思路4.1 404 Not Found先查版本代号再查镜像目录换源后最常见的报错就是404。如果看到类似这样的输出Err:14 https://mirrors.xxx/armbian/ buster InRelease 404 Not Found第一反应不应该是“镜像站挂了”而是“我的仓库路径写对没有”。这个报错的常见原因有两个一是系统实际版本是bookworm但你在armbian.list里写了bullseye镜像站根本没有bullseye对应的Armbian目录或者该镜像不维护老版本二是你选的镜像站根本不提供Armbian仓库。排查时先跑cat /etc/os-release确认代号再浏览器访问镜像站对应路径看目录存不存在。两步下来90%的404都能解决。4.2 签名验证失败signed-by不能删keyring要装全另一个高频报错是签名验证失败形如The following signatures couldnt be verified because the public key is not available这类问题的成因通常是两个一是armbian.list里的 [signed-by/usr/share/keyrings/armbian.gpg] 段被误删二是系统里缺少Armbian的公钥包。针对第一种情况把signed-by参数补回去即可针对第二种执行sudo apt install armbian-keyring安装Armbian的密钥包。较新的系统上armbian-keyring可能是预装的但精简版镜像或某些定制版会缺手动安装一下就能解决。需要注意的是现在新系统里apt-key命令已经废弃不要再被老教程带偏去用apt-key add正确方式就是安装keyring包或者确保gpg文件存在。还有一个小坑如果板子的系统时间不对年份差太多也会导致签名过期校验失败。遇到签名问题先执行date看一下时间如果时间不对先同步时间再回来检查密钥。这个坑看起来不起眼但排查起来真的很耽误时间我见过有人在密钥问题上耗了一晚上结果只是板子时间停在两年前。4.3 依赖冲突与部分软件装不上换源之后偶尔会遇到某些包安装时提示依赖版本不满足比如想要libxxx版本大于1.5但当前源里只有1.4。这种情况很多时候不是因为源写错了而是因为Debian仓库和Armbian仓库对某个依赖的版本要求不一致。排查思路是先确认两个仓库都成功update再确认系统已经完整升级最后再看具体是哪个包在冲突。如果确实冲突可以考虑从Armbian的另一个组件比如bookworm-utils里安装对应工具或者临时从官方源拉取一次相关索引。但要注意不要轻易用#把某个仓库注释掉因为你可能不知道哪些包依赖它注释之后反而引发更多依赖问题。我的习惯是先记录冲突包名然后在社区搜索确认通常能搜到对应的解决方案。比如zerotier这类工具在个别老版本Armbian里会依赖旧版内核模块升级内核后问题自然消失不需要跟源较劲。4.4 换源后速度依然没有明显提升有些人改完源发现速度还是慢第一反应是“镜像站不行”。其实还有两个容易被忽略的原因一个是apt update之后没真正下载大包速度感知不明显装一个小包当然看不出来另一个是如果系统内还有其他源文件比如 /etc/apt/sources.list.d/ 下还残留了其他.list文件apt会同时访问多个源慢的源头还在。排查时执行grep -r http /etc/apt/sources.list /etc/apt/sources.list.d/把系统里所有apt源地址打出来检查有没有漏网的境外地址。我见过一种情况刷机的镜像里预置了一个第三方源文件位置很隐蔽换完主源后速度还是慢用这条命令一查就发现了注释掉那个残留文件后速度立刻正常。5. 这套操作背后的一点个人心得5.1 换源的底层逻辑其实是“两个仓库都要管”踩过这些坑之后再回头看会发现Armbian换源这件事的难点根本不是命令怎么写而是认知层面有没有意识到系统里存在两个独立的apt源。只要知道sources.list负责Debian基础包、armbian.list负责Armbian定制包然后分别找到对应的国内镜像并正确配置整个操作就变得很清晰。所谓“Debian源不通用”本质上是拿一套Debian源想管住Armbian系统自然会失灵。5.2 镜像站不是越多越好稳定才是关键有些朋友喜欢在源文件里堆很多镜像站地址以为这样能自动负载均衡。实际上apt并不会自动做多源负载均衡多个源页面在同一个文件里反而可能造成包版本来源不一致甚至触发“Conflicting distribution”这类报错。更稳妥的做法是选一个主镜像源配好遇到同步延迟或者某个包缺失时临时切换到另一个镜像源执行一次apt update问题解决后再切回来。5.3 换完源之后的三个好习惯最后分享几个我这些年养成的习惯也算是对“正确姿势”的补充。第一每次换完源不只是跑apt update还要跑 apt list --upgradable 看一下有哪些包可以升级然后一次性 apt upgrade 完成升级避免系统长期停留在旧状态。第二升级完成后顺手把 /etc/apt/sources.list.d/armbian.list 文件内容复制一份到本地笔记记下板子型号、系统版本和使用的镜像站。这样下次重刷系统时照着笔记几分钟就配好了不用再重新想。第三每次重刷系统、安装新版Armbian镜像后先检查一下系统自带的源文件有没有变化Armbian偶尔会调整仓库路径和组件命名照搬旧笔记可能失效确认当前版本的实际结构再动手。5.4 如果你还在被apt慢、404、密钥报错折磨如果你正在被apt源慢、404、密钥报错这几个问题折磨不妨按这个顺序检查一遍系统版本代号对不对架构对不对armbian.list有没有单独配置signed-by参数有没有保留最后再用grep全局检查有没有残留的境外源地址。把这几项捋顺Armbian换源这件事基本就能一次搞定。我在实际使用中的体会是大部分换源翻车都不是源不好而是少处理了armbian.list这个“隐藏文件”只要能认识到它存在的意义后面的步骤就顺理成章了。希望这篇踩坑实录能帮你少走点弯路下次再遇到Armbian换源的问题至少不会再一头扎进“只改sources.list”的坑里了。
返回列表