W: GPG error: http://packages.ros.org/ros2/ubuntu jammy InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F42ED6FBAB17C654
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.
以上是执行sudo apt update出现的错误,意思为缺少了公钥。一般情况下,我们只需要输入以下命令即可:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
但是,有些时候会出现这样的问题:
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
Executing: /tmp/apt-key-gpghome.SFSRWGsyCt/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
gpg: key F42ED6FBAB17C654: "Open Robotics <info@osrfoundation.org>" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
这说明公钥已经加载,但未调用。主要是因为ubuntu22.04的管理公钥目录与导入密钥的目录不一致,导致验证失败。且清华源的ubuntu-port用于的结构为非x86,而我们的系统为amd64,因此会出现错误。
需要进行如下操作:
密钥导出
sudo mkdir -p /usr/share/keyrings
gpg --export F42ED6FBAB17C654 | sudo tee /usr/share/keyrings/ros-archive-keyring.gpg >/dev/null
删除旧配置,添加新配置
# 备份现有配置
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup
# 清空并写入新配置(使用标准 ubuntu 源而非 ports)
echo "
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
" | sudo tee /etc/apt/sources.list
# 配置 ROS 2 源(使用清华镜像)
echo "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" | sudo tee /etc/apt/sources.list.d/ros2.list
清理缓存并更新
sudo apt clean
sudo rm -rf /var/lib/apt/lists/*
sudo apt update