前言
最近给我的鲁班猫板卡重新烧录了 Debian 10(Buster) 系统。在配置好网络环境,并尝试安装 nfs-common 以挂载网络文件系统时,遇到了无法安装的问题。后续发现是由于软件源过期导致的,这里记录一下问题发生的整个过程以及解决方法。
1. 故事背景以及问题根源
我们先简要介绍一下有关 Debian 的一些冷知识以及这个问题产生的根源是什么。
1.1 Debian 简介
Debian 的所有版本代号都取自皮克斯动画电影 《玩具总动员》(Toy Story) 中的角色。
Buster 是《玩具总动员》里安迪养的那只腊肠狗的名字。
其余的 Debian 9 叫 Stretch(紫色章鱼),Debian 11 叫 Bullseye(红心马),Debian 12 叫 Bookworm(书虫)。
1.2 问题根源
Debian 10 (Buster) 事实上已经是一个比较老的系统,它于 2019年 7月 正式发布。在长达多年的优化之后,Debian 10 目前已经是一个非常稳定的旧系统,并且目前它已经处于 EOL (End of Life) 状态。
正因为它的生命周期结束了,官方才把它的软件源从主服务器移到了 archive.debian.org(归档服务器)。这就是为什么原来默认的 sources.list 会失效,提示找不到安装包的原因。
你可能会好奇为什么现在还在使用这种非常古老的版本,这是因为在嵌入式领域,稳定性总是处于最高优先级,Debian 10 经过了大量验证,厂商通常不愿意轻易升级,以免引入新的 Bug。
除此之外,像瑞芯微(Rockchip)这样的芯片厂商,发布的底层驱动通常是绑定特定内核和系统版本的。
总而言之,由于 Debian 10 版本发布较早,目前已停止常规维护,因此官方将其软件源移动到了归档仓库,导致默认的下载地址失效。
2. 问题发生全过程
为了挂载网络文件系统,我在终端执行了下面命令:
sudo apt-get install nfs-common -y
结果如下:
即使执行了 sudo apt-get update,依然无法解决,无法获取最新的软件包列表。核心原因正是 Debian 10 (Buster) 已经停止维护。
Debian 官方以及主流的镜像站,比如阿里云、清华源等通常会将不再支持的旧版本系统移动到 归档仓库。
默认的 sources.list 指向的地址可能已经不再包含 Buster 版本的软件包,或者说原来的路径已经失效,导致 apt 找不到软件的安装候选者 (installation candidate)。
这便是报错信息的大致意思。
3. 解决问题
既然问题已经明确,那我们只需要将软件源地址修改为 Debian 的官方归档源,即 archive.debian.org,问题就解决了。
我们执行下面命令:
sudo vi /etc/apt/sources.list
打开的文件长这样:
这些都是已经失效的路径,我们将这些直接删除或者注释掉都可以。再添加上针对 Debian Buster 的归档源配置:
deb http://archive.debian.org/debian/ buster main non-free contrib
修改后的文件如下:
配置好归档源后,需要刷新缓存并重新安装软件。
如下图:
最终安装成功了,这里我只截取了部分。
4. 总结
在嵌入式 Linux 开发中,学会与旧版本系统共处是一项必备技能,虽然 Debian 10 已经停止维护,但通过官方的 Archive 归档源,我们依然可以让这些老系统继续发光发热。
如果你也在用鲁班猫或其他 RK356x/RK3588 的开发板,遇到软件安装失败时,不妨先看看 /etc/os-release 里的版本代号,说不定换个源问题就解决了。