当前位置: 首页 > article >正文

Ubuntu 18.04 ROS安装遇坑记:手把手教你修复‘EXPKEYSIG’签名无效错误

Ubuntu 18.04 ROS安装遇坑记手把手教你修复‘EXPKEYSIG’签名无效错误第一次在Ubuntu上安装ROS时那种兴奋感很快被终端里鲜红的错误提示浇灭——EXPKEYSIG F42ED6FBAB17C654。作为机器人开发的基础环境ROS的安装本应是入门第一步却让无数开发者在这个密钥验证错误前折戟。这就像拿到了新玩具却发现电池仓上了锁而钥匙却不知所踪。1. 理解GPG密钥在ROS安装中的作用当你执行sudo apt update时系统会做一件至关重要的事验证软件源的完整性。Ubuntu使用GPGGNU Privacy Guard密钥来确认下载的软件包列表确实来自官方源而非被篡改的版本。这就好比网购时验证商家资质确保不会收到山寨货。ROS作为第三方软件源需要额外导入其官方密钥。常见的密钥问题通常表现为三种错误EXPKEYSIG密钥已过期本文重点解决的问题NO_PUBKEY密钥未导入BADSIG密钥不匹配或被篡改为什么密钥会过期Open Robotics等组织出于安全考虑会定期轮换密钥。如果本地系统长时间未更新就可能遇到过期密钥报错。这就好比你拿着过期的会员卡去超市收银员当然会拒绝优惠请求。2. 诊断密钥问题的具体原因遇到EXPKEYSIG错误时终端通常会显示类似这样的信息W: GPG error: http://packages.ros.org/ros/ubuntu bionic InRelease: The following signatures were invalid: EXPKEYSIG F42ED6FBAB17C654 Open Robotics infoosrfoundation.org关键信息提取密钥IDF42ED6FBAB17C654密钥所有者Open Robotics问题类型EXPKEYSIG过期验证当前密钥状态apt-key list | grep -A5 Open Robotics如果输出中包含expired字样即可确认是密钥过期问题。有时候问题可能更复杂比如多个密钥冲突密钥服务器连接问题系统时间不正确GPG验证依赖准确的时间提示遇到密钥问题时先检查系统时间是否正确。执行date命令查看如果偏差较大先用sudo ntpdate pool.ntp.org同步时间。3. 分步修复EXPKEYSIG错误3.1 删除旧密钥如有必要首先查看现有密钥sudo apt-key list如果发现过期密钥可以先删除sudo apt-key del F42ED6FBAB17C6543.2 从可靠密钥服务器获取新密钥使用apt-key adv命令获取新密钥sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F42ED6FBAB17C654参数解析--keyserver指定密钥服务器hkp协议默认使用11371端口--recv-keys指定要获取的密钥ID如果默认服务器响应慢可以尝试备用服务器sudo apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys F42ED6FBAB17C654常见可用密钥服务器服务器地址地理位置协议端口keyserver.ubuntu.com全球hkp:11371pgp.mit.edu美国hkp:11371keys.gnupg.net欧洲hkp:11371pool.sks-keyservers.net全球池hkp:113713.3 验证密钥导入成功检查新密钥apt-key list | grep -A5 Open Robotics正常输出应显示密钥信息且无expired标记。例如pub rsa2048 2018-04-16 [SC] [expires: 2025-04-14] F42E D6FB AB17 C654 uid [ unknown] Open Robotics infoosrfoundation.org sub rsa2048 2018-04-16 [E] [expires: 2025-04-14]3.4 更新软件源缓存最后执行更新sudo apt update此时应该不再出现EXPKEYSIG错误ROS软件源可以正常更新。4. 深入理解密钥管理机制4.1 APT与GPG的工作流程当执行apt update时系统会下载InRelease或Release.gpg文件用本地密钥环中的公钥验证签名只有验证通过的软件源才会被信任这个过程确保了完整性软件包未被篡改真实性确实来自声称的发布者新鲜度使用的是最新软件列表4.2 现代替代方案signed-by较新的Ubuntu版本推荐使用signed-by替代直接操作apt-keysudo sh -c echo deb [signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list这种方法将密钥存储在单独文件而非全局密钥环中更安全且易于管理。4.3 密钥过期的预防措施为避免将来再遇密钥问题定期检查密钥有效期apt-key list | grep -A5 expires关注ROS官方公告设置自动更新谨慎使用sudo apt install unattended-upgrades sudo dpkg-reconfigure unattended-upgrades5. 进阶处理特殊网络环境下的密钥问题在某些网络环境下可能会遇到连接密钥服务器超时的问题。这时可以尝试5.1 使用HTTP代替HKP协议sudo apt-key adv --keyserver http://keyserver.ubuntu.com --recv-keys F42ED6FBAB17C6545.2 手动下载并导入密钥从浏览器访问https://keyserver.ubuntu.com/pks/lookup?opgetsearch0xF42ED6FBAB17C654保存为ros-key.asc导入sudo apt-key add ros-key.asc5.3 使用备用端口有些网络可能屏蔽了11371端口尝试80端口sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F42ED6FBAB17C6546. 常见问题排查指南遇到问题不要慌按这个检查表逐步排查错误是否明确显示EXPKEYSIG是按本文方法处理否可能是其他类型密钥问题密钥服务器能否连通telnet keyserver.ubuntu.com 11371或curl http://keyserver.ubuntu.com:11371系统时间是否正确timedatectl status是否有防火墙干扰sudo ufw status是否使用了代理env | grep -i proxy注意处理密钥问题时切勿随意从不可信来源获取密钥。始终通过官方渠道或知名密钥服务器获取密钥。7. ROS生态中的密钥管理最佳实践在长期使用ROS的过程中我总结了这些经验版本升级时每次Ubuntu或ROS版本升级后检查密钥是否需要更新团队协作时将正确的源配置和密钥管理写入团队文档持续集成系统中在CI脚本中加入密钥验证步骤多机环境使用Ansible等工具统一管理密钥配置一个实用的检查脚本#!/bin/bash KEY_IDF42ED6FBAB17C654 if ! apt-key list | grep -q $KEY_ID; then echo 导入ROS密钥... sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys $KEY_ID fi sudo apt update8. 密钥问题背后的安全哲学这个看似简单的密钥错误实际上体现了Linux系统安全设计的精髓不信任原则默认不信任任何外部源最小权限原则即使安装软件也需要明确授权透明性原则所有验证过程都可查证可审计性每一步操作都有日志记录理解这些原则就能明白为什么Linux系统宁愿报错中断也不冒险使用未经验证的软件源。这种设计虽然有时带来不便但正是它保证了系统长期运行的稳定性。

相关文章:

Ubuntu 18.04 ROS安装遇坑记:手把手教你修复‘EXPKEYSIG’签名无效错误

Ubuntu 18.04 ROS安装遇坑记:手把手教你修复‘EXPKEYSIG’签名无效错误 第一次在Ubuntu上安装ROS时,那种兴奋感很快被终端里鲜红的错误提示浇灭——EXPKEYSIG F42ED6FBAB17C654。作为机器人开发的基础环境,ROS的安装本应是入门第一步&#xf…...

G-Helper终极指南:解锁华硕ROG笔记本隐藏性能的黑科技神器

G-Helper终极指南:解锁华硕ROG笔记本隐藏性能的黑科技神器 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix…...

【X-STILT模型第一期】X-STILT 模型概述

目录X-STILT 模型概述支持的观测平台与气体物种GitHub 仓库中的内置核心脚本/功能X-STILT 模型的下载安装一、 下载与安装模型 (Download and install model)二、 前置条件与数据准备 (Prerequisites)1. 依赖卫星观测的柱浓度模拟 (For SATELLITE-dependent column simulation)…...

在国产化ARM平台(如鲲鹏)上,用Eclipse搞定JavaFX开发的避坑指南

在国产化ARM平台(如鲲鹏)上构建JavaFX开发环境的全流程指南 当国产化替代浪潮遇上ARM架构的崛起,开发者们正面临一个全新的技术挑战:如何在华为鲲鹏等国产ARM服务器上搭建高效的JavaFX开发环境?与传统的x86平台不同&am…...

【论文学习】利用卫星观测数据的 X-STILT 模型详解

目录 J2018-提出 X-STILT (v1)模型( C O 2 CO_2 CO2​总量反演) 2. 核心研究方法:X-STILT 模型 3. 使用的数据资源 4. 案例研究:沙特阿拉伯利雅得 J2022-改进 X-STILT 模型( C O 2 CO_2 CO2​部门归因) 1. 研究核心:利用 C O 2 CO_2 CO2​ 与 C O CO CO 的排放比例 2.…...

UG/NX二次开发环境配置避坑指南:从零搭建到模板验证(nx1980+vs2019)

1. 环境准备:软件安装与版本匹配 第一次接触UG/NX二次开发的朋友,最头疼的往往不是代码本身,而是环境配置这个"拦路虎"。我当初用NX1980VS2019组合配置环境时,光版本兼容性问题就折腾了大半天。这里先划重点&#xff1a…...

两道必掌握的动态规划面试题:最长回文子串 最长公共子序列

目录 一、最长回文子串(Longest Palindromic Substring) 题目描述 1. 暴力解法(时间复杂度 O (n)) 2. 中心扩展法(时间复杂度 O (n),空间 O (1)) 核心思路 Java 代码实现 3. 动态规划解法…...

Qwen2-VL-2B-Instruct应用场景:媒体库智能打标与跨模态内容归档系统

Qwen2-VL-2B-Instruct应用场景:媒体库智能打标与跨模态内容归档系统 1. 项目背景与价值 现代企业和个人创作者都面临着一个共同的难题:随着图片、视频、文档等多媒体内容的爆炸式增长,如何高效地管理和检索这些资源?传统的文件名…...

如何防止SQL触发器导致事务超时_拆分逻辑为异步队列处理

触发器中禁止耗时操作,应改用异步方案:MySQL用消息表轮询,PostgreSQL优先用LISTEN/NOTIFY;需保障幂等、唯一ID、上下文完整及超时重试。触发器里直接调用耗时操作必然拖垮事务SQL 触发器运行在主事务上下文中,INSERT/U…...

PHP源码运行是否受硬盘转速影响_7200转vs5400转对比【指南】

PHP执行时间基本不受硬盘转速影响,但文件首次加载、opcode编译、同步I/O阻塞等环节会受5400转硬盘拖累;启用OPcache、禁用时间戳验证、缓存配置模板、优化自动加载可有效规避磁盘延迟。PHP脚本执行时间基本不受硬盘转速影响只要代码已加载进内存、OPcach…...

私有化部署企业级融媒体平台EasyDSS三大核心技术解析,筑牢校园数字化建设根基

校园数字化建设的稳步推进,离不开核心技术的支撑。EasyDSS之所以能在校园场景中实现广泛应用,核心在于其高清直播、极速点播、视频会议三大领域的技术深耕,通过持续的技术优化与创新,打造出适配校园场景的高品质数字化服务&#x…...

Redis 慢查询日志分析与性能调优

Redis作为一款高性能内存数据库,其响应速度直接影响业务体验。当出现性能瓶颈时,慢查询日志成为关键突破口。本文将深入分析Redis慢查询日志的实用技巧,并提供针对性性能调优方案,帮助开发者快速定位并解决潜在问题。 慢查询日志…...

Keil MDK-ARM编译报错‘A Label was found which was in no AREA’?手把手教你写对INCBIN汇编文件

Keil MDK-ARM编译报错‘A Label was found which was in no AREA’?手把手教你写对INCBIN汇编文件 在嵌入式开发中,直接访问二进制数据的需求非常普遍——可能是预计算的校验表、固件镜像或是其他工具生成的配置数据。当你在Keil MDK-ARM环境中尝试用汇编…...

5大核心优势:NVMe设备全生命周期管理工具深度解析

5大核心优势:NVMe设备全生命周期管理工具深度解析 【免费下载链接】nvme-cli NVMe management command line interface. 项目地址: https://gitcode.com/gh_mirrors/nv/nvme-cli 在当今数据中心和高性能计算环境中,NVMe存储技术凭借其超低延迟和高…...

Dify多模态Pipeline调试失败率下降82%的关键动作:OpenTelemetry埋点+自定义Trace Context注入实战

第一章:Dify多模态集成调试的挑战与现状Dify 作为低代码 AI 应用开发平台,原生支持文本生成、RAG 和 Agent 编排,但其多模态能力(如图像理解、语音转写、跨模态检索)仍需通过自定义模型服务、插件或外部 API 集成实现。…...

Dify日志审计配置总失败?92%团队忽略的时区陷阱、权限继承断层与审计缓冲区溢出问题全解析,立即修复!

第一章:Dify 2026日志审计配置失败的典型现象与根因图谱当 Dify 2026 版本启用日志审计功能后,运维人员常观察到审计日志缺失、时间戳错乱、关键操作事件未捕获等异常。这些表象背后往往指向统一的配置链路断裂:从环境变量注入、审计中间件加…...

057.YOLOv5代码调试技巧:用VSCode/PyCharm给深度学习“把脉”

最近在项目里遇到一个诡异的问题:YOLOv5训练时loss曲线看着挺正常,但验证集mAP就是上不去。模型推理时偶尔还会出现框位置漂移,像是特征图对齐出了问题。这种时候,光靠print和猜是没用的,得上调试器——就像给代码做一次深度CT扫描。 从一次真实调试经历说起 那天晚上十…...

爱毕业(aibiye)优化数学建模论文的复现流程,确保智能排版的高效与准确

还在为论文写作头痛?特别是数学建模的优秀论文复现与排版,时间紧、任务重,AI工具能帮上大忙吗?今天,我们评测10款热门AI论文写作工具,帮你精准筛选最适合的助手。 aibiye:专注于语法润色与结构…...

爱毕业(aibiye)让数学建模论文的复现更便捷,排版更符合学术规范

还在为论文写作头痛?特别是数学建模的优秀论文复现与排版,时间紧、任务重,AI工具能帮上大忙吗?今天,我们评测10款热门AI论文写作工具,帮你精准筛选最适合的助手。 aibiye:专注于语法润色与结构…...

保姆级避坑指南:Redmi AC2100刷Breed和固件时,你可能遇到的5个‘坑’及解决方法

Redmi AC2100刷机实战:5个高频翻车点与深度救援方案 当你盯着论坛里那些"一次成功"的刷机帖时,可能没想到自己会卡在某个莫名其妙的环节。作为刷过三十多台AC2100的老玩家,我见过太多人在相同的地方跌倒——Stok码突然失效、Breed界…...

CSS如何制作下拉菜单弹性展开_利用transform-origin

下拉菜单用 transform: scaleY() 展开时从顶部塌陷,是因为默认 transform-origin 为 50% 50%,需设为 top center 实现从顶向下自然展开;配合 cubic-bezier 缓动、will-change 优化及 pointer-events 控制确保跨端稳定。下拉菜单用 transform:…...

CANFD数据帧格式详解:从显性/隐性电平到64字节DLC编码,一张图看懂协议升级

CANFD协议深度解码:从电平博弈到64字节数据帧的工程智慧 在汽车电子与工业控制领域,实时可靠的数据传输如同神经系统般重要。传统CAN总线曾是这个领域的王者,但随着智能驾驶、车联网等技术的爆发式发展,500Kbps的带宽逐渐显得捉襟…...

心知天气API + ArduinoJson库实战:手把手教你为ESP8266天气时钟解析复杂JSON数据

心知天气API与ArduinoJson库深度解析:ESP8266天气时钟的JSON处理实战 在物联网开发中,数据获取与处理是核心技能之一。当我们使用ESP8266这类资源有限的微控制器时,如何高效解析复杂的JSON数据成为项目成功的关键。本文将聚焦心知天气API返回…...

别再只盯着蓝绿部署了!用Kubernetes + Istio 玩转金丝雀发布,5分钟搞定灰度流量配置

Kubernetes Istio 金丝雀发布实战:从流量分配到版本熔断 当你的微服务需要上线新功能时,直接全量发布就像在黑暗中跳跃——你永远不知道用户会迎来惊喜还是惊吓。金丝雀发布给了我们更优雅的选择:让新版本像矿洞里的金丝雀一样,先…...

NXP S32K的SIUL2模块详解:不止是GPIO,更是中断与DMA的枢纽

NXP S32K的SIUL2模块深度解析:从引脚路由到高效中断管理 在嵌入式系统开发中,GPIO管理往往被视为基础功能,但NXP S32K系列芯片中的SIUL2模块却颠覆了这一认知。作为System Integration Unit Lite2的缩写,SIUL2远不止是一个简单的G…...

如何处理宝塔面板Go项目守护进程无法常驻的问题_使用进程管理器添加执行脚本并配置重启策略

Go项目在宝塔中自动退出的根本原因是前台阻塞运行与进程管理器配置不匹配:需为supervisord设autorestarttrue、startsecs0及绝对路径;systemd则须配Typesimple、Restartalways、WorkingDirectory和Userwww。Go 项目在宝塔里启动后自动退出,sy…...

如何快速解密QQ音乐加密文件:qmcdump完全指南

如何快速解密QQ音乐加密文件:qmcdump完全指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾经下载…...

00101

1001101...

告别延时函数!用STM32CubeMX的SPI+DMA驱动WS2812灯带,CPU占用率直降90%

STM32CubeMX高效驱动WS2812:SPIDMA方案深度解析与实战 当LED灯带遇上嵌入式系统,传统延时函数就像用算盘处理大数据——勉强能用但效率堪忧。今天我们要拆解的是一种工业级解决方案:通过STM32CubeMX配置SPIDMA驱动WS2812灯带,这个…...

海思3516a OSD水印进阶:动态更新、多区域叠加与性能优化心得

海思3516a OSD水印进阶:动态更新、多区域叠加与性能优化实战 在嵌入式视频处理领域,OSD(On-Screen Display)水印功能早已超越简单的静态文字叠加,成为智能设备中不可或缺的信息交互层。当我们面对安防摄像头需要实时更…...