在Ubuntu 22.04 中,输入指令sudo apt update报错,请求帮助
-
@SFLEteasb 在执行了如上所述的解决办法后输入sudo apt update的日志输出如下:
Hit:1 https://mirrors.ustc.edu.cn/ubuntu jammy InRelease
Get:2 https://repo.huaweicloud.com/ros2/ubuntu jammy InRelease [4,682 B]
Hit:3 https://mirrors.ustc.edu.cn/ubuntu jammy-updates InRelease
Hit:4 https://mirrors.ustc.edu.cn/ubuntu jammy-backports InRelease
Hit:5 https://mirrors.ustc.edu.cn/ubuntu jammy-security InRelease
Err:2 https://repo.huaweicloud.com/ros2/ubuntu jammy InRelease
The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
Get:6 http://packages.ros.org/ros2/ubuntu jammy InRelease [4,682 B]
Err:6 http://packages.ros.org/ros2/ubuntu jammy InRelease
The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
Reading package lists... Done
W: GPG error: https://repo.huaweicloud.com/ros2/ubuntu jammy InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
E: The repository 'https://repo.huaweicloud.com/ros2/ubuntu jammy InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
W: GPG error: http://packages.ros.org/ros2/ubuntu jammy InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
E: The repository 'http://packages.ros.org/ros2/ubuntu jammy InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details. -
此回复已被删除! -
@SFLEteasb 补充:可以从github上克隆程序,网站也都可以ping通
-
你好,请问解决了吗
-
@moon2416986352yue 还没有诶()
-
@SFLEteasb 若密钥未更新且急需操作,可临时禁用签名验证:
sudo apt update --allow-insecure-repositories # 允许更新源
sudo apt install --allow-unauthenticated <包名> # 安装时忽略认证
问了deepseek,用了一下管用,可以试试,这个密钥在昨天早上六点过期了,现在我也没找到有新密钥发布,只能先这样用着等大佬解决了
密钥过期信息:
pub (4)rsa4096/c1cf6e31e6bade8868b172b4f42ed6fbab17c654 2019-05-30T00:40:54Zuid Open Robotics info@osrfoundation.org
sig cert f42ed6fbab17c654 2021-05-29T05:59:45Z 2025-06-01T05:59:45Z ____________________ [selfsig]
sig cert f42ed6fbab17c654 2019-05-30T00:40:54Z 2021-05-29T00:40:54Z ____________________ [selfsig]把密钥输入这个网页就能查到相关信息https://keyserver.ubuntu.com/ -
@SFLEteasb 我也是一样的问题,没有解决,蹲蹲,解决了麻烦告知一下
-
@moon2416986352yue 刚搞俄嗯新了,重新尝试一下
-
@小鱼 可以了谢谢大佬
-
关于ROS2源2025年6月1日公共密钥过期(NO_PUBKEY F42ED6FBAB17C654)的解决办法
摘要:
由于 ROS 官方 GPG 公钥于 2025 年 6 月 1 日过期,执行sudo apt update
时会出现NO_PUBKEY F42ED6FBAB17C654
错误。本攻略将逐步演示如何清理旧密钥、下载并导入新版密钥、重新添加 ROS 2 软件源,以恢复正常安装与更新。
目录
删除原有的所有 ROS GPG 公钥
为了确保后续导入的新公钥不会与系统中残留的旧密钥冲突,先将所有旧的 keyring 文件与源列表清理干净。
sudo rm -f /usr/share/keyrings/ros-archive-keyring.gpg sudo rm -f /etc/apt/keyrings/ros-archive-keyring.gpg sudo rm -f /etc/apt/sources.list.d/ros2.list sudo rm -f /etc/apt/sources.list.d/ros-fish.list
ros-archive-keyring.gpg:旧版 ROS 2 公钥可能位于 /usr/share/keyrings 或 /etc/apt/keyrings。
ros2.list 与 ros-fish.list:之前添加的 ROS 2 软件源文件,删除它们以便后续重新配置。
安装工具依赖
在下载与安装新版公钥时,需要 curl、gnupg 与 lsb-release 等常用工具。执行以下命令,确保它们已安装在系统中:
sudo apt update sudo apt install -y curl gnupg lsb-release
curl:用于从 GitHub 拉取新版 ROS 公钥。
gnupg:用于将下载的 ASCII 格式公钥转换为二进制 .gpg 格式。
lsb-release:用于获取当前 Ubuntu 的发行版代号(lsb_release -cs 输出例如 jammy)。
下载并安装新版-gpg-公钥
1.创建存放 keyring 的目录
推荐将新的二进制公钥存放在 /etc/apt/keyrings/,这样更符合 Debian/Ubuntu 官方最佳实践。
sudo mkdir -p /etc/apt/keyrings
2.下载 ROS 2 最新 GPG 公钥并去重装(dearmor)
从 ROS 官方 GitHub 仓库拉取 ros.key,并使用 gpg --dearmor 将其转换为二进制格式,存放到 /etc/apt/keyrings/ros-archive-keyring.gpg。
curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \ | sudo gpg --dearmor -o /etc/apt/keyrings/ros-archive-keyring.gpg
添加-ros-2-软件源
确认 Ubuntu 版本与 ROS 2 发行版对应关系
对于 ROS 2 Humble Hawksbill, 官方仅在 Ubuntu 22.04 Jammy 发布预编译包。
在其他 Ubuntu 版本(如 20.04 Focal、18.04 Bionic)上也能编译安装,但若需要通过 apt install,必须确保系统为 22.04 Jammy。
编写并添加 ros2.list 软件源
在添加软件源时,需指定 signed-by=/etc/apt/keyrings/ros-archive-keyring.gpg,以便 apt 校验新版公钥。
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/ros-archive-keyring.gpg] \ http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" \ | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
arch=amd64:如果您的机器是 x86_64 架构,请保持该值,如果是 英伟达jetson/树莓派/RK系列,请自行改成 ARM 架构对应的关键字。
$(lsb_release -cs):在 Ubuntu 22.04 上会输出 jammy。如果使用其他版本,请手动替换为对应代号。
/dev/null:隐藏 tee 命令的标准输出,仅将行写入 ros2.list 文件。
更新源并验证
1.完成上述文件操作后,执行以下命令刷新 APT 缓存并验证是否成功:
sudo apt update
如果一切正常,不会再看到 NO_PUBKEY F42ED6FBAB17C654 或 “没有数字签名” 的报错。
更新完成后,即可通过 apt install ros-humble-<package> 安装所需 ROS 2 Humble 软件包(如 ros-humble-desktop、ros-humble-navigation2、ros-humble-ros2-control 等)。
常见问题与排查
仍然出现 NO_PUBKEY 或 “无法验证签名”
请确认 /etc/apt/keyrings/ros-archive-keyring.gpg 文件存在且大小大于 0 字节。
检查 /etc/apt/sources.list.d/ros2.list 中的 signed-by 路径与实际文件路径一致,且文件名无拼写错误。
1.使用命令查看系统中是否还存在旧的 ROS 公钥:
sudo apt-key list
2.如果仍能看到指纹为 F42ED6FBAB17C654(或其他 ROS 相关指纹),请执行:
sudo apt-key del F42ED6FBAB17C654
1.网络连接或镜像问题
确保能 ping packages.ros.org,并且没有被防火墙、代理或 DNS 污染阻挡。
如果在国内网络环境下速度慢或拉不到包,可以尝试使用国内镜像(如清华、阿里、华为等),但同样要确保先导入新版公钥,否则镜像的 InRelease 文件依然会因签名不匹配而报错。
例如,切换到清华镜像源的方法(仅示例,需先导入正版公钥):
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/ros-archive-keyring.gpg] \ https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu $(lsb_release -cs) main" \ | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
2.Ubuntu 版本与 ROS 2 发行版不匹配
请务必确认系统为 Ubuntu 22.04 Jammy,否则 apt install ros-humble-* 软件包并不存在。
若您使用的是 Ubuntu 20.04 Focal,可以改用 ROS 2 Foxy(对应 Focal);若是 Ubuntu 18.04 Bionic,则使用 ROS 2 Dashing/Bouncy(Bionic)。
如果要在不支持的 Ubuntu 版本上使用 Humble,只能通过从源代码编译,无法用 apt 直接安装。
3.目录与权限检查
/etc/apt/keyrings/ 目录权限应允许 root 用户读写。
/etc/apt/sources.list.d/ros2.list 文件应能被 apt 读取,可执行 ls -l 检查权限。
如果上述目录或文件权限异常,可能导致 apt update 时无法读取或验证。
-
@firefirefox 请问我用的ros1,也是出现了校验数字签名时出错,可以用这个方法解决吗,我的系统是ubuntu20.04,哪一条指令是需要修改成自己的ubuntu版本或者ros1的对应版本呢?