在使用小鱼fish提供的系统镜像文件,sudo apt update系统更新时遇到了以下报错,即ROS 2 仓库的 GPG 密钥已过期,以及 Docker 仓库使用了过时的密钥存储方式
fishros@fishros-linux:~$ sudo apt update
获取:1 http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy InRelease [4,682 B]
错误:1 http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy InRelease 下列签名无效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
命中:2 https://mirrors.ustc.edu.cn/ubuntu jammy InRelease
获取:3 https://mirrors.ustc.edu.cn/ubuntu jammy-updates InRelease [128 kB]
命中:4 https://packages.microsoft.com/repos/code stable InRelease
获取:5 https://mirrors.ustc.edu.cn/ubuntu jammy-backports InRelease [127 kB]
获取:6 https://mirrors.ustc.edu.cn/ubuntu jammy-security InRelease [129 kB]
命中:7 https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu jammy InRelease
获取:8 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/main amd64 DEP-11 Metadata [114 kB]
获取:9 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/restricted amd64 DEP-11 Metadata [212 B]
获取:10 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/universe amd64 DEP-11 Metadata [359 kB]
获取:11 https://mirrors.ustc.edu.cn/ubuntu jammy-updates/multiverse amd64 DEP-11 Metadata [940 B]
获取:12 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/main amd64 DEP-11 Metadata [7,056 B]
获取:13 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/restricted amd64 DEP-11 Metadata [212 B]
获取:14 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/universe amd64 DEP-11 Metadata [24.3 kB]
获取:15 https://mirrors.ustc.edu.cn/ubuntu jammy-backports/multiverse amd64 DEP-11 Metadata [212 B]
获取:16 https://mirrors.ustc.edu.cn/ubuntu jammy-security/main amd64 DEP-11 Metadata [54.6 kB]
获取:17 https://mirrors.ustc.edu.cn/ubuntu jammy-security/restricted amd64 DEP-11 Metadata [208 B]
获取:18 https://mirrors.ustc.edu.cn/ubuntu jammy-security/universe amd64 DEP-11 Metadata [125 kB]
获取:19 https://mirrors.ustc.edu.cn/ubuntu jammy-security/multiverse amd64 DEP-11 Metadata [208 B]
已下载 1,071 kB,耗时 4秒 (244 kB/s)
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成
所有软件包均为最新。
W: 校验数字签名时出错。此仓库未被更新,所以仍然使用此前的索引文件。GPG 错误:http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy InRelease: 下列签名无效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
W: https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/dists/jammy/InRelease: 密钥存储在过时的 trusted.gpg 密钥环中(/etc/apt/trusted.gpg),请参见 apt-key(8) 的 DEPRECATION 一节以了解详情。
W: 无法下载 http://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu/dists/jammy/InRelease 下列签名无效: EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
W: 部分索引文件下载失败。如果忽略它们,那将转而使用旧的索引文件。
修复步骤:
1. 修复 ROS 2 GPG 密钥过期问题
# 删除旧的无效密钥
sudo apt-key del F42ED6FBAB17C654# 下载并添加新的 ROS 2 密钥
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg# 更新仓库源文件
sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null << EOF
deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main
EOF
2. 修复 Docker 仓库的密钥存储问题
# 创建专用密钥环目录
sudo mkdir -p /etc/apt/keyrings# 迁移 Docker 密钥
sudo mv /etc/apt/trusted.gpg /etc/apt/keyrings/docker.gpg# 更新 Docker 源文件
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null << EOF
deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable
EOF
3. 更新并验证
# 更新软件包列表
sudo apt update# 检查错误是否解决
apt policy | grep "ros2\|docker"# 修复可能的依赖问题
sudo apt install -f
关键说明:
-
密钥过期原因:
-
ROS 2 密钥定期轮换(通常每年一次)
-
清华镜像源的密钥缓存可能未及时更新
-
-
密钥存储变更:
-
Ubuntu 22.04 开始弃用全局
trusted.gpg
-
推荐使用
signed-by
指定每个源的密钥
-
-
替代镜像源(如果清华源仍然有问题):
# 使用中科大 ROS 2 镜像 sudo sed -i 's|tuna.tsinghua.edu.cn|ustc.edu.cn|g' /etc/apt/sources.list.d/ros2.list