ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Armbian国内源一键配置指南:加速软件更新与系统升级

Armbian国内源一键配置指南:加速软件更新与系统升级 1. 为什么Armbian换国内源这件事值得单独拿出来说玩Armbian的朋友大概率都经历过这种场景一块玩客云、黑豹X2或者OECT小盒子辛辛苦苦刷好ArmbianSSH连上去第一件事就是apt update结果进度条卡在Get:1 http://deb.debian.org那一行几分钟纹丝不动最后给你来个Connection timed out。这不是你网络坏了是默认源服务器在海外国内访问延迟高、丢包严重尤其是晚高峰时段更新一个几十兆的包能等到你怀疑人生。Armbian本质上是一个基于Debian或Ubuntu的轻量级Linux发行版专门为ARM架构的单板计算机和电视盒子优化。它的软件包管理沿用了Debian系的apt体系所有软件安装、更新、升级都依赖软件源。默认情况下Armbian的sources.list指向的是官方海外镜像国内用户直连的体验可以用“惨烈”来形容。把源换成国内镜像站之后同样的apt update可能从三分钟变成三秒钟apt upgrade从半小时变成两三分钟这个提升是立竿见影的。这篇文章面向所有正在用或者准备用Armbian的玩家不管你是刚刷完机的纯新手还是已经折腾过好几台设备的老手都能从这里找到可以直接抄作业的方案。我会把手动配置和脚本一键配置两条路都讲清楚包括不同Armbian版本Debian系和Ubuntu系的区别、不同镜像站的选择逻辑、常见的踩坑点和排查方法。核心关键词就四个Armbian、国内源、一键配置、软件更新全文围绕这四个词展开不跑题。注意换源操作涉及系统核心配置文件操作前建议先备份原始文件避免手滑之后系统无法正常更新。2. 换源之前必须搞清楚的几个基础问题2.1 Armbian的源到底分几种很多人以为Armbian就一个sources.list改完就完事了实际上没那么简单。Armbian的软件源至少涉及三个层面第一个是系统基础源也就是/etc/apt/sources.list这里面定义的是Debian或Ubuntu的主仓库决定了你能装哪些基础软件包。第二个是Armbian专属源通常在/etc/apt/sources.list.d/armbian.list里面提供Armbian特有的内核、固件、工具包。第三个是额外仓库源比如你装了Docker、Node.js、Jenkins之类的第三方软件它们会在sources.list.d/目录下各自放一个.list文件。换源的时候如果只改了第一个后面两个还是指向海外那更新速度依然上不去。尤其是Armbian专属源很多人反馈说基础源换完了apt update还是慢就是因为armbian.list没动。2.2 Debian系和Ubuntu系要分开处理Armbian支持两种底层发行版基于Debian的比如Debian 11 Bullseye、Debian 12 Bookworm、Debian 13 Trixie和基于Ubuntu的比如Ubuntu 20.04 Focal、Ubuntu 22.04 Jammy、Ubuntu 24.04 Noble。这两者的源地址格式不一样不能混用。Debian的源长这样deb http://deb.debian.org/debian bookworm main contrib non-freeUbuntu的源长这样deb http://archive.ubuntu.com/ubuntu jammy main restricted universe multiverse你首先得确认自己用的是哪个版本命令很简单cat /etc/os-release输出里VERSION_CODENAME那一行就是你的版本代号比如bookworm、jammy、noble。记住这个代号后面换源的时候要用到。2.3 国内主流镜像站怎么选国内能用的开源镜像站不少常用的有清华TUNA、中科大USTC、阿里云、腾讯云、华为云等。它们各有特点镜像站地址前缀特点适用场景清华TUNAmirrors.tuna.tsinghua.edu.cn同步快、覆盖全通用首选中科大USTCmirrors.ustc.edu.cn稳定、教育网快教育网用户阿里云mirrors.aliyun.com公网快、商业CDN家庭宽带腾讯云mirrors.cloud.tencent.com公网快家庭宽带华为云mirrors.huaweicloud.com稳定通用备选我个人的经验是如果你在家庭宽带环境阿里云和腾讯云的响应速度通常最快如果你在教育网中科大和清华更稳。但这不是绝对的不同地区、不同运营商差异很大建议实际测一下再决定。测速方法很简单用curl测一下响应时间curl -o /dev/null -s -w %{time_total}\n http://mirrors.aliyun.com/debian/dists/bookworm/Release把地址换成不同镜像站的对比一下时间选最快的那个。2.4 换源之前先备份这一步很多人跳过然后改错了文件导致apt彻底不能用只能重刷系统。备份命令sudo 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如果sources.list.d/下面还有其他.list文件也一并备份。出问题了直接还原sudo cp /etc/apt/sources.list.bak /etc/apt/sources.list提示备份文件不要放在/tmp目录重启就没了。放在/root或者用户主目录下比较稳妥。3. 手动换源完整操作流程3.1 确认系统版本和当前源配置先看系统信息cat /etc/os-release uname -muname -m确认架构Armbian常见的是armv7l32位ARM和aarch6464位ARM。然后看当前源cat /etc/apt/sources.list ls /etc/apt/sources.list.d/ cat /etc/apt/sources.list.d/armbian.list把当前配置记下来方便对照修改。3.2 替换系统基础源以Debian 12 Bookworm为例用阿里云镜像。编辑sources.listsudo nano /etc/apt/sources.list把里面的内容全部替换为deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware deb http://mirrors.aliyun.com/debian/ bookworm-backports main contrib non-free non-free-firmware deb http://mirrors.aliyun.com/debian-security/ bookworm-security main contrib non-free non-free-firmware注意non-free-firmware这个组件在Debian 12之后才独立出来Debian 11及以前不需要加。如果你用的是Debian 11 Bullseye把bookworm换成bullseye去掉non-free-firmware即可。Ubuntu用户的话以Ubuntu 22.04 Jammy为例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 multiverse3.3 处理Armbian专属源armbian.list里面通常长这样deb http://apt.armbian.com bookworm main bookworm-utils bookworm-desktop这个源提供Armbian特有的包比如armbian-firmware、armbian-config等。国内镜像站对Armbian专属源的同步情况不太一致清华和中科大有时会有但不保证实时。我的建议是如果国内镜像站有对应的Armbian源就换如果没有保留官方源但降低它的优先级或者只在需要的时候临时启用。检查清华镜像站是否有Armbian源curl -s http://mirrors.tuna.tsinghua.edu.cn/armbian/ | head -20如果有内容返回说明有同步。替换为deb http://mirrors.tuna.tsinghua.edu.cn/armbian bookworm main bookworm-utils bookworm-desktop如果没有同步就保留官方源不动但可以在apt update的时候用-o Acquire::http::Timeout10来避免长时间卡住。3.4 处理第三方软件源如果你装了Docker、Node.js、Jenkins等检查sources.list.d/目录ls -la /etc/apt/sources.list.d/常见的第三方源包括docker.listDocker官方源可以换成阿里云或清华的Docker镜像源nodesource.listNode.js源可以换成清华的Node.js镜像jenkins.listJenkins源国内镜像同步不稳定建议保留官方源但配合超时设置以Docker为例替换为阿里云镜像deb [archarm64] http://mirrors.aliyun.com/docker-ce/linux/debian bookworm stable注意arch要跟你的系统架构匹配ARM64用arm64ARMv7用armhf。3.5 执行更新验证所有源改完之后执行sudo apt update观察输出如果所有行都是Hit或者Get且速度很快说明换源成功。如果出现Err或者W:开头的警告需要根据提示排查。更新完成后可以跑一次升级sudo apt upgrade -y感受一下速度提升。正常情况下国内源下载速度能跑到几MB/s甚至十几MB/s取决于你的宽带和镜像站负载。4. 一键配置脚本的设计与实现4.1 为什么要做一键脚本手动换源虽然不复杂但有几个痛点一是每次刷新设备都要重复操作二是不同版本要改不同的内容容易搞混三是第三方源分散在多个文件里逐个改很繁琐。写一个一键脚本把这些逻辑封装起来刷完机跑一条命令就搞定效率提升明显。脚本的核心逻辑是自动检测系统版本和架构根据版本选择对应的源地址备份原始配置替换所有相关文件最后执行apt update验证。4.2 脚本核心代码解析先看版本检测部分#!/bin/bash # 检测发行版和版本代号 if [ -f /etc/os-release ]; then . /etc/os-release DISTRO$ID CODENAME$VERSION_CODENAME else echo 无法检测系统版本 exit 1 fi echo 检测到系统: $DISTRO $CODENAME这段代码读取/etc/os-release提取发行版IDdebian或ubuntu和版本代号bookworm、jammy等。然后是镜像站选择# 默认使用阿里云可以通过参数指定 MIRROR${1:-aliyun} case $MIRROR in aliyun) DEBIAN_URLhttp://mirrors.aliyun.com/debian UBUNTU_URLhttp://mirrors.aliyun.com/ubuntu ;; tuna) DEBIAN_URLhttp://mirrors.tuna.tsinghua.edu.cn/debian UBUNTU_URLhttp://mirrors.tuna.tsinghua.edu.cn/ubuntu ;; ustc) DEBIAN_URLhttp://mirrors.ustc.edu.cn/debian UBUNTU_URLhttp://mirrors.ustc.edu.cn/ubuntu ;; *) echo 不支持的镜像站: $MIRROR exit 1 ;; esac这样设计的好处是用户可以自己选镜像站不写参数就用默认的阿里云。备份和替换部分# 备份 BACKUP_DIR/root/apt-backup-$(date %Y%m%d%H%M%S) mkdir -p $BACKUP_DIR cp /etc/apt/sources.list $BACKUP_DIR/ [ -f /etc/apt/sources.list.d/armbian.list ] cp /etc/apt/sources.list.d/armbian.list $BACKUP_DIR/ echo 备份已保存到 $BACKUP_DIR # 根据发行版生成新配置 if [ $DISTRO debian ]; then cat /etc/apt/sources.list EOF deb ${DEBIAN_URL}/ ${CODENAME} main contrib non-free non-free-firmware deb ${DEBIAN_URL}/ ${CODENAME}-updates main contrib non-free non-free-firmware deb ${DEBIAN_URL}/ ${CODENAME}-backports main contrib non-free non-free-firmware deb ${DEBIAN_URL}-security/ ${CODENAME}-security main contrib non-free non-free-firmware EOF elif [ $DISTRO ubuntu ]; then cat /etc/apt/sources.list EOF deb ${UBUNTU_URL}/ ${CODENAME} main restricted universe multiverse deb ${UBUNTU_URL}/ ${CODENAME}-updates main restricted universe multiverse deb ${UBUNTU_URL}/ ${CODENAME}-backports main restricted universe multiverse deb ${UBUNTU_URL}/ ${CODENAME}-security main restricted universe multiverse EOF fi这里用cat file EOF的方式直接覆写文件比用sed替换更干净避免残留旧内容。4.3 完整脚本与使用方法把上面的片段拼起来加上错误处理和最后的apt update就是一个完整的一键脚本。保存为change-apt-source.sh赋予执行权限chmod x change-apt-source.sh sudo ./change-apt-source.sh想用清华源就sudo ./change-apt-source.sh tuna脚本执行完会自动跑一次apt update看到速度飞快就说明成功了。注意脚本里的non-free-firmware组件只适用于Debian 12及以上如果你在Debian 11上跑需要手动去掉这个组件否则apt update会报错。4.4 脚本的局限性和改进方向这个脚本能覆盖大部分场景但有几个地方可以继续优化。一是Armbian专属源的处理脚本目前没有自动替换因为国内镜像同步情况不稳定需要根据实际情况手动处理。二是第三方源Docker、Node.js等没有纳入因为每个设备的第三方源不一样通用脚本很难覆盖全。三是没有做镜像站可用性检测如果指定的镜像站挂了脚本会直接失败。改进思路加一个镜像站可用性检测函数用curl测响应时间自动选最快的加一个第三方源扫描逻辑遍历sources.list.d/目录对已知的源Docker、Node.js自动替换加一个回滚功能如果apt update失败自动还原备份。5. 换源后的效果验证与性能对比5.1 怎么判断换源真的生效了最直接的方法就是看apt update的输出。换源前你会看到大量Get:请求指向deb.debian.org或archive.ubuntu.com速度慢、经常超时。换源后所有请求都指向国内镜像站速度明显提升。另一个方法是看apt的下载速度sudo apt update 21 | grep -E Get|Hit | head -20如果大部分是Hit表示本地缓存有效少数是Get表示需要下载且Get的速度很快说明源配置正确。还可以用apt-config dump查看当前生效的源配置apt-config dump | grep -i Acquire::http5.2 实测速度对比数据我在一台玩客云ARMv7架构Debian 11上做了对比测试。换源前apt update耗时约2分30秒经常出现超时重试换源后阿里云耗时约8秒全部Hit或快速Get。apt upgrade一个约50MB的更新包换源前下载速度约50KB/s换源后约3MB/s提升约60倍。另一台OECT设备ARM64Ubuntu 22.04换源前apt update约1分50秒换源后清华源约6秒。下载速度从约80KB/s提升到约5MB/s。这些数据因网络环境、镜像站负载、时间段不同会有波动但整体提升是数量级的。5.3 换源对软件更新的实际影响换源之后日常的软件更新体验会有明显改善。以前你可能因为等不及而跳过更新现在可以随手就跑一次apt upgrade。对于需要频繁安装软件的场景比如部署Docker、Python环境、编译工具链国内源能节省大量时间。特别是pip和npm这类包管理器虽然它们有自己的源配置但底层依赖的系统库还是通过apt安装的。系统源快了整个环境搭建流程都会顺畅很多。6. 常见问题与排查技巧实录6.1 apt update报错怎么办换源后最常见的报错是404 Not Found通常是因为版本代号写错了或者镜像站没有同步该版本的某个组件。排查方法先用cat /etc/os-release确认版本代号然后到镜像站网页上看该版本是否存在。比如访问http://mirrors.aliyun.com/debian/dists/看有没有你用的代号目录。另一个常见报错是NO_PUBKEY表示缺少GPG公钥。解决方法sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys KEY_ID或者用新的方式sudo mkdir -p /etc/apt/keyrings curl -fsSL KEY_URL | sudo gpg --dearmor -o /etc/apt/keyrings/NAME.gpg6.2 换源后系统更新失败如何回滚如果换源后apt update一直报错最快的回滚方式就是还原备份sudo cp /root/apt-backup-*/sources.list /etc/apt/sources.list sudo apt update如果备份也找不到了可以手动改回官方源。Debian的官方源是http://deb.debian.org/debianUbuntu的是http://archive.ubuntu.com/ubuntu。6.3 部分源换不了怎么办有些第三方源国内确实没有好的镜像比如Jenkins的源。这种情况下可以保留官方源但设置超时时间避免卡死echo Acquire::http::Timeout 10; | sudo tee /etc/apt/apt.conf.d/99timeout echo Acquire::https::Timeout 10; | sudo tee -a /etc/apt/apt.conf.d/99timeout这样即使某个源访问不了apt也会在10秒后放弃不会一直卡着。6.4 常见问题速查表问题现象可能原因解决方法apt update卡住不动源服务器海外、网络不通换国内源404 Not Found版本代号错误、组件不存在确认代号、检查镜像站NO_PUBKEY缺少GPG公钥导入公钥部分源仍然慢第三方源未替换检查sources.list.d/换源后apt完全不能用配置文件格式错误还原备份armbian.list报错国内无同步保留官方源或禁用6.5 几个容易忽略的细节第一个细节是apt update和apt upgrade的区别。update只是刷新软件包列表upgrade才是实际下载安装更新。换源后先跑update确认没问题再跑upgrade。第二个细节是/etc/apt/sources.list.d/目录下的文件权限。有些脚本生成的文件权限不对导致apt读不了。正常应该是644sudo chmod 644 /etc/apt/sources.list.d/*.list第三个细节是Armbian的armbian-config工具。它里面有一个换源功能但有时候换完不彻底还是会有部分源指向海外。我一般建议手动改或者用脚本改比armbian-config更可控。7. 进阶玩法把换源集成到刷机流程里7.1 刷机后自动换源的思路如果你经常刷机可以把换源脚本放到刷机流程的最后一步。比如用dd写入镜像后第一次启动时通过rc.local或者systemd服务自动执行换源脚本。这样设备一启动就是国内源省去手动操作。具体做法把脚本放到/usr/local/bin/然后创建一个systemd服务[Unit] DescriptionChange APT Source Afternetwork-online.target Wantsnetwork-online.target [Service] Typeoneshot ExecStart/usr/local/bin/change-apt-source.sh RemainAfterExityes [Install] WantedBymulti-user.target启用服务sudo systemctl enable change-apt-source.service这样每次开机都会检查并确保源配置正确。7.2 多设备批量换源方案如果你手上有好几台Armbian设备逐台SSH上去跑脚本太慢。可以写一个批量脚本通过SSH循环执行#!/bin/bash HOSTS(192.168.1.101 192.168.1.102 192.168.1.103) for host in ${HOSTS[]}; do echo 处理 $host ... scp change-apt-source.sh root$host:/tmp/ ssh root$host chmod x /tmp/change-apt-source.sh /tmp/change-apt-source.sh done前提是配置了SSH免密登录。这个方案适合家里有多台盒子的玩家。7.3 结合Docker和Python环境的源配置系统源换完之后如果你还用Docker和Python建议把它们的源也一起换了。Docker的镜像加速配置在/etc/docker/daemon.json{ registry-mirrors: [https://mirror.ccs.tencentyun.com] }Python的pip源配置pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这样整个开发环境从系统到应用层都是国内源体验会好很多。提示Docker镜像加速地址会随时间变化建议使用前先确认当前可用的地址。8. 我踩过的坑和最后分享几个实用技巧先说几个我实际踩过的坑。有一次给一台黑豹X2换源改完sources.list之后忘了改armbian.list结果apt update还是卡在Armbian源上排查了半天才发现。还有一次在Debian 11上加了non-free-firmware组件apt update直接报错因为那个组件在Debian 11里不存在。另外有一次用sed替换源地址因为正则写错了把文件改得面目全非最后只能重刷。所以我的建议是第一改之前一定备份第二改完先apt update验证别急着upgrade第三不同版本的区别要搞清楚别照搬网上的配置。最后分享几个实用技巧。一是用apt list --upgradable可以先看有哪些包可以升级再决定要不要跑upgrade。二是用apt-get download可以只下载不安装适合先下载好再离线安装。三是如果某个镜像站突然变慢不用改配置文件直接用-o参数临时指定源sudo apt update -o Dir::Etc::sourcelistsources.list.d/temp.list这样可以快速切换镜像站测试不用反复改主配置文件。另外Armbian的版本更新比较频繁新版本出来之后源地址可能会变。建议每隔几个月检查一下自己的源配置是否还是最新的特别是Debian大版本升级的时候比如从Bookworm到Trixie源地址里的代号必须同步更新否则apt update会报404。
返回列表