1. 问题背景与现象分析
最近在树莓派4B(ARM64架构)上安装Ubuntu 24.04 LTS(代号Noble)后,执行sudo apt update时遇到一个典型错误:
code复制The following signatures were invalid: EXPKEYSIG XXXXXXXXXX Ubuntu Archive Automatic Signing Key
这个错误会导致后续的软件包安装和系统更新完全无法进行。作为长期使用树莓派的老玩家,我发现这是ARM64架构设备在Ubuntu 24.04上的一个普遍问题,尤其影响从旧版本升级的用户。
问题的核心在于Ubuntu 24.04对ARM64架构的软件源密钥管理机制做了调整,而树莓派的硬件特性导致标准x86平台的解决方案在这里不完全适用。具体表现为:
- 系统无法验证软件仓库的签名
- 部分依赖库(如libzstd)版本冲突
- 传统解决方法(如
apt-key命令)在新系统已失效
注意:这个问题在树莓派3B+/4B/5上表现略有不同,4B型号由于内存更大,错误信息可能更完整,但根源相同。
2. 根本原因深度解析
2.1 密钥验证机制变更
Ubuntu 24.04开始全面采用新的GPG密钥环管理方式,废弃了传统的apt-key工具。对于ARM64架构:
- 新系统使用
/usr/share/keyrings/目录存储密钥环 - 必须使用
.gpg格式的密钥文件(而非旧的.asc) - 树莓派的ARM处理器在验证某些加密算法时存在兼容性问题
2.2 软件源配置冲突
默认的/etc/apt/sources.list包含的官方源可能不适合ARM64架构:
bash复制deb [arch=amd64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://archive.ubuntu.com/ubuntu noble main restricted
这里显式指定了amd64架构,而树莓派需要的是:
bash复制deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble main restricted
2.3 依赖库版本问题
如网络资料所示,libzstd等核心库在ARM平台存在版本冲突:
code复制libzstd-dev : Depends: libzstd1 (= 1.5.5+dfsg2-2build1) but 1.5.5+dfsg2-2build1.1 is installed
这是因为Ubuntu主仓库和ports仓库的更新不同步导致的。
3. 完整解决方案
3.1 修复密钥验证问题
首先备份现有配置:
bash复制sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
然后获取正确的ARM64密钥:
bash复制sudo apt install ubuntu-keyring
sudo mkdir -p /usr/share/keyrings/
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3B4FE6ACC0B21F32
验证密钥指纹:
bash复制sudo gpg --no-default-keyring --keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg --list-keys
应看到类似输出:
code复制pub rsa4096 2012-05-11 [SC]
3B4FE6ACC0B21F32
uid [ unknown] Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>
3.2 修正软件源配置
编辑源列表:
bash复制sudo nano /etc/apt/sources.list
替换为以下内容(注意arm64架构声明):
code复制deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble main restricted
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble-updates main restricted
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble universe
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble-updates universe
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble multiverse
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble-updates multiverse
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble-backports main restricted universe multiverse
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble-security main restricted
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble-security universe
deb [arch=arm64 signed-by=/usr/share/keyrings/ubuntu-archive-keyring.gpg] http://ports.ubuntu.com/ubuntu-ports noble-security multiverse
3.3 解决依赖冲突
对于libzstd等库的版本问题,执行强制修复:
bash复制sudo apt clean
sudo apt update
sudo apt --fix-broken install
sudo apt full-upgrade
如果仍报错,可尝试指定版本安装:
bash复制sudo apt install libzstd1=1.5.5+dfsg2-2build1 libzstd-dev=1.5.5+dfsg2-2build1
4. 验证与测试
完成上述步骤后,执行:
bash复制sudo apt update
sudo apt upgrade -y
正常输出应类似:
code复制Hit:1 http://ports.ubuntu.com/ubuntu-ports noble InRelease
Hit:2 http://ports.ubuntu.com/ubuntu-ports noble-updates InRelease
Hit:3 http://ports.ubuntu.com/ubuntu-ports noble-backports InRelease
Hit:4 http://ports.ubuntu.com/ubuntu-ports noble-security InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
All packages are up to date.
5. 进阶问题排查
5.1 如果仍然报错
检查架构是否匹配:
bash复制dpkg --print-architecture
应输出arm64。如果不是,说明系统镜像有问题。
5.2 特定软件包缺失
某些软件在ports仓库可能不存在,可以尝试添加Ubuntu主仓库(不推荐)或寻找替代方案:
bash复制sudo add-apt-repository universe
sudo apt update
5.3 系统升级后的维护
建议定期清理旧内核:
bash复制sudo apt autoremove --purge
6. 经验总结与避坑指南
- 镜像选择:务必使用官方Ubuntu 24.04 LTS for ARM64镜像,而非通用x86镜像
- 网络环境:树莓派的WiFi模块可能不稳定,建议用有线网络执行关键操作
- 依赖管理:遇到依赖问题时,优先使用
apt --fix-broken install而非强制安装 - 版本锁定:对关键系统组件慎用版本锁定,可能导致后续更新困难
- 备份习惯:修改系统配置前,养成备份习惯:
bash复制sudo cp /etc/apt/sources.list /etc/apt/sources.list.$(date +%Y%m%d)
实测在树莓派4B 8GB版本上,这套解决方案可使系统恢复完整更新能力,后续安装Docker、ROS等复杂环境也不再报错。对于树莓派5用户,需要注意散热问题,长时间apt操作可能导致CPU降频。
