问题描述

在ubuntu20.04下执行

sudo apt-get update

(大概率其它版本的ubuntu也会出现问题)

出现错误:

EXPKEYSIG F42ED6FBAB17C654 Open Robotics <info@osrfoundation.org>
E: 仓库 “http://packages.ros.org/ros/ubuntu focal InRelease” 没有数字签名

原因:

F42ED6FBAB17C654是C1CF 6E31 E6BA DE88 68B1 72B4 F42E D6FB AB17 C654(完整秘钥)的短标识。

2019 年,ROS 官方披露了 build farm / 软件仓库相关的安全事件。随后,Open Robotics 决定轮换仓库签名 key;在 2019 年 5 月底到 6 月上旬,官方宣布由于 build.ros.org 的安全问题,要退役之前用于 ROS apt 仓库签名的旧 key,并部署新的 GPG key 到 packages.ros.org。这把后来广泛出现在 ROS 1 / ROS 2 apt 安装流程里的 key。

ROS 官方在 2021 年专门发过一篇 “ROS GPG Key Expiration Incident”。里面明确说:他们在 2019 年应对安全事件时部署了一把 2 年有效期 的新 GPG key,但后来忘记在到期前延长,因此 2021 年 5 月 29 日左右很多用户执行 apt update 时就开始失败。官方随后延长了 key 的有效期,并让用户更新本地公钥。

到 2025 年,这把 key 再次临近过期。ROS 官方在 2025 年 5 月下旬发布了 “ROS signing key migration guide”,明确说 6 月 1 日 又到了 signing key 的到期点,并提供了迁移方案;对于沿用旧安装方式的系统,常见修复就是重新下载最新的 ros.key,替换 /usr/share/keyrings/ros-archive-keyring.gpg。

因此,2025 年 6 月 1 日后:仍持有这把旧 ROS key 的机器会在 apt update 时看到 EXPKEYSIG F42ED6FBAB17C654。

解决方案

关于ros的秘钥存放位置,可能在如下三处地方:

/usr/share/keyring/ros-archive-keyring.gpg

/etc/apt/trusted.gpg.d/*ros*

/etc/apt/trusted.gpg

可以使用以下命令查询.gpg文件的秘钥内容:

sudo gpg --show-key --fingerprint XXX.gpg

如果在这三处地方找不到*ros*.gpg(ros的秘钥文件),可以去/etc/apt/sources.list.d/ros-latest.list,内容如下:(注意focal对应ubuntu20.04)

deb [signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu focal main

如果/etc/apt/sources.list.d/ros-latest.list内容不是这样,建议备份后修改为以上内容。

在这里可以看到ros在apt中的签名指向/usr/share/keyrings/ros-archive-keyring.gpg。

这时查看/usr/share/keyrings/ros-archive-keyring.gpg,如果出现以下内容:

C1CF 6E31 E6BA DE88 68B1 72B4 F42E D6FB AB17 C654


进行删除,然后执行:

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg

如果访问不到https://raw.githubusercontent.com,就手动下载——打开网页,输入https://raw.githubusercontent.com/ros/rosdistro/master/ros.key

下载ros.key后,更名为ros-archive-keyring.gpg,移动到/usr/share/keyrings/下。

最后,

在检查一遍/etc/apt/sources.list.d/ros-latest.list是不是指向刚刚下载的文件

然后执行

sudo apt-get update

即可解决问题。

附加内容:

命令——删除apt-get缓存:

sudo rm -rf /var/lib/apt/lists/*

命令——打开.gpg文件:

sudo gpg --show-key --fingerprint XXX.gpg

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐