解决ros功能包仓库出现签名验证错误的问题(An error occurred during the signature verification)

本文介绍在Ubuntu系统中遇到ROS包安装时GPG签名验证错误的问题,涉及更新源并添加新的ROS密钥。通过curl获取并安装证书,修复apt-get update报错,确保软件包来源的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

是什么问题?

当我们进行ros相关的功能包的安装的时候或者在有安装ros的linux系统上进行sudo apt-get update的操作的时候, 就会出现以下报错:

Get:1 http://packages.ros.org/ros/ubuntu focal InRelease [4,676 B]
Hit:2 http://ports.ubuntu.com/ubuntu-ports focal InRelease
Hit:3 http://ports.ubuntu.com/ubuntu-ports focal-updates InRelease
Hit:4 http://ports.ubuntu.com/ubuntu-ports focal-backports InRelease
Err:1 http://packages.ros.org/ros/ubuntu focal InRelease
The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics info@osrfoundation.org
Hit:5 http://ports.ubuntu.com/ubuntu-ports focal-security InRelease
Fetched 4,676 B in 4s (1,078 B/s)
Reading package lists… Done
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: Some index files failed to download. They have been ignored, or old ones used instead.

为什么出现这个报错

ROS使用debian包管理系统来分发软件, 因此就需要一个GPG密钥来确保功能包的准确性和权威性, 通常来说,默认的密钥大概在使用2年之后会过期, 因此我们需要从新添加ros相关的密钥上去。

如何解决

下载证书并添加。

curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.key
sudo apt-key add ./ros.key

安装成功后,会显示OK的log信息。

$ 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.
### 解决方案 当遇到错误 `cannot open shared object file: No such file or directory` 时,通常是因为缺少某些依赖库或者环境变量配置不正确。以下是可能的原因以及解决方案: #### 1. 缺少必要的共享库文件 如果插件无法加载,则应自行重新编译它[^1]。由于它是开源的,可以根据需求修改以支持特定功能或扩展其功能。确保在重新编译之前编辑位于 `simExtROS/meta/` 的文件。 可以通过以下命令检查缺失的共享库文件: ```bash ldd /path/to/shared/object/file | grep "not found" ``` 如果有任何库显示为“not found”,则需要安装这些库。可以尝试通过管理器安装它们,例如: ```bash sudo apt-get install libmissing-library-name-dev ``` #### 2. 环境变量未正确设置 确保动态链接库路径已正确添加到系统的 `LD_LIBRARY_PATH` 中。如果没有正确设置此变量,可能会导致找不到共享对象文件。可以在终端中运行以下命令来临时设置该变量: ```bash export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH ``` 为了永久生效,可将其添加到 `.bashrc` 文件中: ```bash echo 'export LD_LIBRARY_PATH=/path/to/library:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc ``` #### 3. 权限问题 有时权限不足也会导致无法访问共享对象文件。可以使用以下命令更改文件权限: ```bash chmod +r /path/to/shared/object/file ``` #### 4. 存储版本控制的影响 虽然 S3 版本控制与此问题无直接关联[^2],但如果涉及云存储中的 ROS 资源下载失败,也可能间接影响本地构建过程。因此,在处理远程资源时需注意版本一致性。 --- ### 示例代码:验证共享库是否存在并修复环境变量 以下是一个简单的脚本来帮助诊断和解决问题: ```python import os import subprocess def check_shared_library(library_path): try: result = subprocess.run(['ldd', library_path], capture_output=True, text=True) missing_libraries = [] for line in result.stdout.splitlines(): if "not found" in line: missing_libraries.append(line.strip().split()[0]) if missing_libraries: print(f"The following libraries are missing: {missing_libraries}") return False return True except Exception as e: print(f"Error occurred while checking the shared library: {e}") return False library_to_check = "/path/to/shared/object/file.so" if not check_shared_library(library_to_check): # Add path to environment variable additional_lib_path = input("Enter the path where missing libraries reside: ") current_ld_path = os.getenv('LD_LIBRARY_PATH', '') new_ld_path = f"{additional_lib_path}:{current_ld_path}" os.environ['LD_LIBRARY_PATH'] = new_ld_path print(f"Updated LD_LIBRARY_PATH: {new_ld_path}") print("Shared library verification completed.") ``` --- ### 总结 上述方法涵盖了从查找缺失库、调整环境变量到解决潜在权限问题的一系列操作。按照以上步骤逐一排查即可有效解决 `cannot open shared object file` 错误。 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值