☰
Armbian国内源一键配置指南:加速软件更新与系统升级
2026/9/29 19:13:51 网站建设 项目流程

1. 为什么Armbian换国内源这件事值得单独拿出来说

玩Armbian的朋友大概率都经历过这种场景:一块玩客云、黑豹X2或者OECT小盒子,辛辛苦苦刷好Armbian,SSH连上去第一件事就是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-free

Ubuntu的源长这样:

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 -m

uname -m确认架构,Armbian常见的是armv7l(32位ARM)和aarch64(64位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.list:

sudo 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 multiverse

3.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::Timeout=10来避免长时间卡住。

3.4 处理第三方软件源

如果你装了Docker、Node.js、Jenkins等,检查sources.list.d/目录:

ls -la /etc/apt/sources.list.d/

常见的第三方源包括:

  • docker.list:Docker官方源,可以换成阿里云或清华的Docker镜像源
  • nodesource.list:Node.js源,可以换成清华的Node.js镜像
  • jenkins.list:Jenkins源,国内镜像同步不稳定,建议保留官方源但配合超时设置

以Docker为例,替换为阿里云镜像:

deb [arch=arm64] http://mirrors.aliyun.com/docker-ce/linux/debian bookworm stable

注意arch要跟你的系统架构匹配,ARM64用arm64,ARMv7用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,提取发行版ID(debian或ubuntu)和版本代号(bookworm、jammy等)。

然后是镜像站选择:

# 默认使用阿里云,可以通过参数指定 MIRROR=${1:-aliyun} case $MIRROR in aliyun) DEBIAN_URL="http://mirrors.aliyun.com/debian" UBUNTU_URL="http://mirrors.aliyun.com/ubuntu" ;; tuna) DEBIAN_URL="http://mirrors.tuna.tsinghua.edu.cn/debian" UBUNTU_URL="http://mirrors.tuna.tsinghua.edu.cn/ubuntu" ;; ustc) DEBIAN_URL="http://mirrors.ustc.edu.cn/debian" UBUNTU_URL="http://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 2>&1 | grep -E 'Get|Hit' | head -20

如果大部分是Hit(表示本地缓存有效),少数是Get(表示需要下载),且Get的速度很快,说明源配置正确。

还可以用apt-config dump查看当前生效的源配置:

apt-config dump | grep -i 'Acquire::http'

5.2 实测速度对比数据

我在一台玩客云(ARMv7架构,Debian 11)上做了对比测试。换源前,apt update耗时约2分30秒,经常出现超时重试;换源后(阿里云),耗时约8秒,全部Hit或快速Get。apt upgrade一个约50MB的更新包,换源前下载速度约50KB/s,换源后约3MB/s,提升约60倍。

另一台OECT设备(ARM64,Ubuntu 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>.gpg

6.2 换源后系统更新失败如何回滚

如果换源后apt update一直报错,最快的回滚方式就是还原备份:

sudo cp /root/apt-backup-*/sources.list /etc/apt/sources.list sudo apt update

如果备份也找不到了,可以手动改回官方源。Debian的官方源是http://deb.debian.org/debian,Ubuntu的是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读不了。正常应该是644:

sudo 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] Description=Change APT Source After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/change-apt-source.sh RemainAfterExit=yes [Install] WantedBy=multi-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::sourcelist="sources.list.d/temp.list"

这样可以快速切换镜像站测试,不用反复改主配置文件。

另外,Armbian的版本更新比较频繁,新版本出来之后源地址可能会变。建议每隔几个月检查一下自己的源配置是否还是最新的,特别是Debian大版本升级的时候(比如从Bookworm到Trixie),源地址里的代号必须同步更新,否则apt update会报404。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询