嘿,大家好!在使用ROS(机器人操作系统)时,你可能会遇到一个让人头疼的问题,那就是软件包仓库密钥过期的错误。当你运行sudo apt update
时,可能会看到以下两个错误消息:
Following signatures invalid EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
Failed to fetch packages ros org
这些错误可能会妨碍你更新ROS软件包,但别担心,今天我将向你展示如何解决这个问题,使你的ROS系统重新运行起来。
为什么会出现这个问题
首先,让我们了解为什么会出现这个问题。ROS使用了Ubuntu的Debian软件包系统来分发ROS软件包。为了确保你下载的所有软件包都是真实的,没有被修改过,最佳实践是对这些软件包进行签名。这就涉及到使用GPG密钥来签名软件包。
然而,GPG密钥默认设置了最多2年的有效期。现在,到了2021年的五月底,这个密钥已经过期了,所以你会看到操作系统发出了密钥已过期的警告,错误代码是EXPKEYSIG
。
错误的具体表现
当你运行sudo apt update
时,你会看到4条错误消息,它们都在抱怨密钥过期的问题。其中一条在中间部分,其余三条在输出的末尾。
中间部分的错误消息示例:
The following signatures were invalid EXPKEYSIG F42ED6FBAB17C654 Open Robotics info osrfoundation org
Err:8 http://packages.ros.org/ros/ubuntu focal InRelease
The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
末尾部分的错误消息示例:
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://packages.ros.org/ros/ubuntu focal InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://packages.ros.org/ros/ubuntu focal InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W: Failed to fetch http://packages.ros.org/ros/ubuntu/dists/focal/InRelease The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W: Failed to fetch http://packages.ros.org/ros/ubuntu/dists/focal/InRelease The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
W Some index files failed to download. They have been ignored or old ones used instead
W: Some index files failed to download. They have been ignored, or old ones used instead.
如何解决
要解决这个问题,你需要添加更新后的密钥文件,并再次运行sudo apt update
来验证修复。
步骤1:添加更新后的密钥文件
适用于ROS 1:ROS Melodic或Noetic
如果你使用的是ROS Melodic或Noetic,运行以下命令:
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
apt-key add
命令将添加新的ROS密钥。当成功时,你将看到输出中显示"OK"。
适用于ROS 2:ROS2 Galactic、Foxy、Dashing...
如果你使用的是ROS 2,如ROS2 Galactic、Foxy或Dashing,密钥文件与ROS 1 不同。你需要运行以下命令:
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
步骤2:验证修复并检查更新后的ROS软件包
现在,运行sudo apt update
来验证密钥是否已成功添加和修复。
sudo apt update
你将看到类似下面的输出。只要没有看到
任何错误,你就可以像往常一样更新ROS软件包了。
$ sudo apt update
...
Get:15 http://packages.ros.org/ros/ubuntu focal InRelease [4,676 B]
...
Fetched 2,671 kB in 2s (1,607 kB/s)
Reading package lists… Done
Building dependency tree
Reading state information… Done
30 packages can be upgraded. Run 'apt list --upgradable' to see them.
至此,新的密钥已经设置为有效期5年,比默认设置多3年。这应该足够覆盖你当前的Ubuntu操作系统和ROS版本的使用寿命。
结语
恭喜你,你已经成功解决了ROS软件包仓库密钥过期的问题,现在可以继续愉快地使用ROS了!