news 2026/4/24 4:48:19

Ubuntu 22.04 升级 Node.js 18 踩坑记:手把手教你搞定恼人的 NO_PUBKEY 签名错误

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 22.04 升级 Node.js 18 踩坑记:手把手教你搞定恼人的 NO_PUBKEY 签名错误

Ubuntu 22.04 升级 Node.js 18 全流程避坑指南:从 NO_PUBKEY 错误到优雅解决

最近在将 Ubuntu 22.04 上的 Node.js 升级到 18.x 版本时,遇到了一个典型的开发环境配置问题——NO_PUBKEY签名错误。这个问题看似简单,却隐藏着 Ubuntu 软件源管理的深层机制。本文将带你完整走一遍从问题复现到彻底解决的流程,并分享一些比rm -rf更安全的源管理技巧。

1. 问题复现与环境准备

当按照 NodeSource 官方文档执行以下命令时:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -

系统报出了令人困惑的错误:

错误:4 https://packagecloud.io/souffle-lang/souffle/ubuntu focal InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY ADFF805033AAE0B5

这个错误的核心在于 Ubuntu 的软件包验证机制。当系统尝试更新软件源时,会检查每个源的数字签名,而当前系统中缺少验证souffle-lang软件源所需的公钥。

常见误区

  • 直接删除源文件(如souffle-lang_souffle.list
  • 手动添加公钥而不解决根本问题
  • 忽略不同Ubuntu版本间的兼容性问题

2. 深入理解问题根源

要彻底解决这个问题,我们需要先理解几个关键概念:

2.1 Ubuntu 软件源验证机制

Ubuntu 使用 GPG 密钥来验证软件源的合法性。每个官方软件源都会用私钥对软件包进行签名,而系统则需要对应的公钥来验证这些签名。

验证流程

  1. 系统从软件源下载软件包和签名
  2. 使用本地存储的公钥验证签名
  3. 验证通过后才允许安装

2.2 PPA 源的特殊性

PPA(Personal Package Archive)是Ubuntu特有的个人软件包归档机制。与官方源不同,PPA源有几点需要注意:

  • 通常是为特定Ubuntu版本配置的
  • 密钥管理方式可能与官方源不同
  • 过期或不再维护的PPA容易引发问题

2.3 问题诊断步骤

要准确定位问题,可以按以下步骤操作:

  1. 列出所有已启用的软件源:

    grep -r "^deb " /etc/apt/sources.list /etc/apt/sources.list.d/
  2. 检查特定源的密钥状态:

    apt-key list
  3. 确认缺失的密钥:

    sudo apt update 2>&1 | grep NO_PUBKEY

3. 优雅的解决方案

相比直接删除源文件,我们有以下更安全、更规范的解决方案:

3.1 使用官方工具移除PPA

对于通过add-apt-repository添加的PPA,应该使用对应的方法移除:

sudo add-apt-repository --remove ppa:souffle-lang/souffle

如果不知道完整的PPA名称,可以先列出所有PPA:

ls /etc/apt/sources.list.d/

3.2 使用ppa-purge工具彻底清理

ppa-purge工具可以更彻底地清理PPA及其安装的软件包:

  1. 先安装ppa-purge:

    sudo apt install ppa-purge
  2. 清理特定PPA:

    sudo ppa-purge ppa:souffle-lang/souffle

3.3 手动添加缺失的公钥(临时方案)

如果确实需要保留该软件源,可以手动添加缺失的公钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ADFF805033AAE0B5

注意:这种方法只是临时解决方案,长期来看应该维护好软件源的完整性。

4. 安全升级Node.js 18

解决密钥问题后,我们可以继续Node.js的升级流程:

4.1 清理并更新软件源缓存

sudo apt clean sudo apt update

4.2 使用Nodesource官方脚本

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs

4.3 验证安装

node -v npm -v

5. 预防措施与最佳实践

为了避免类似问题再次发生,建议遵循以下Ubuntu软件源管理的最佳实践:

  1. 定期清理不再使用的PPA

    • 使用ppa-purge移除不再需要的PPA
    • 检查/etc/apt/sources.list.d/目录
  2. 使用官方源优先

    • 尽量使用Ubuntu官方仓库或项目官方提供的源
    • 谨慎添加第三方PPA
  3. 版本一致性检查

    • 确保PPA支持当前Ubuntu版本
    • 检查软件包的依赖关系
  4. 密钥管理

    • 使用apt-key管理密钥环
    • 定期更新密钥
# 示例:列出所有已安装的密钥 sudo apt-key list

6. 高级技巧:自动化源管理

对于需要频繁管理多个开发环境的情况,可以考虑以下自动化方案:

  1. 使用Ansible管理APT源

    - name: Remove problematic PPA apt_repository: repo: 'ppa:souffle-lang/souffle' state: absent
  2. 创建自定义Docker镜像

    FROM ubuntu:22.04 RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \ && apt-get install -y nodejs
  3. 编写清理脚本

    #!/bin/bash # Clean up unused PPAs for ppa in $(ls /etc/apt/sources.list.d/ | grep -v official); do sudo ppa-purge $ppa done

7. 常见问题解答

Q:如何知道一个PPA是否还活跃?

A:可以尝试访问PPA的Launchpad页面(如https://launchpad.net/~souffle-lang/+archive/ubuntu/souffle),或检查最后更新时间。

Q:除了NO_PUBKEY,还有哪些常见的APT错误?

A:常见错误包括:

  • 404 Not Found(源URL失效)
  • Release file expired(需要更新缓存)
  • Hash Sum mismatch(下载损坏,需清理缓存)

Q:如何备份当前的软件源配置?

A:可以备份以下目录:

sudo tar -czvf apt_backup.tar.gz /etc/apt/sources.list /etc/apt/sources.list.d/ /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/

8. 性能优化建议

在解决基础问题后,还可以进一步优化APT性能:

  1. 选择合适的镜像源

    sudo sed -i 's|http://.*.ubuntu.com|http://mirrors.aliyun.com|g' /etc/apt/sources.list
  2. 配置APT缓存

    echo 'Acquire::http::Proxy "http://your-proxy:3128";' | sudo tee /etc/apt/apt.conf.d/01proxy
  3. 并行下载

    echo 'Acquire::Queue-Mode "access";' | sudo tee /etc/apt/apt.conf.d/00parallel

9. 系统健康检查

定期运行以下命令保持系统健康:

# 清理旧内核和缓存 sudo apt autoremove --purge sudo apt clean # 检查依赖关系 sudo apt-get check # 重建软件包数据库 sudo dpkg --configure -a

10. 延伸学习资源

要深入了解Ubuntu软件包管理系统,可以参考:

  • 官方文档

    • man apt
    • man apt-get
    • man sources.list
  • 实用工具

    • apt-file:查看软件包包含的文件
    • deborphan:查找孤立的软件包
    • aptitude:更强大的包管理前端
  • 深入阅读

    • 《APT HOWTO》官方指南
    • Debian软件包管理系统白皮书
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/24 4:33:57

linux动态扩展根目录

零 修订记录序号修订内容修订时间1新增2021/2/21一 摘要 linux 系统 里盘有1T,但是实际分区小于1T,可以使用动态扩展技术把剩余的空间分配了。 二 环境信息 ##(一)操作系统 [roothost-10-3-177-135 ~]# cat /etc/centos-release C…

作者头像 李华
网站建设 2026/4/24 4:33:23

一文讲透主键、外键与约束:从理论到实战,数据库设计的基石

一文讲透主键、外键与约束:从理论到实战,数据库设计的基石为什么你的数据总是乱七八糟?为什么删个部门还要先删一堆员工?主键和外键就是数据库世界的“身份证”和“契约锁”。今天,我们用最透彻的方式,把这…

作者头像 李华
网站建设 2026/4/24 4:32:59

机器学习必备:微积分核心概念与实战应用

1. 为什么机器学习从业者需要微积分基础 在机器学习领域,我们经常听到一个矛盾的说法:一方面很多实践者声称"不懂数学也能做机器学习",另一方面所有顶尖的机器学习教材都充斥着数学符号和推导。这种认知差异的核心在于,…

作者头像 李华
网站建设 2026/4/24 4:32:17

云原生内存管理优化:Vmem架构设计与实践

1. 云原生内存管理的挑战与机遇在云计算环境中,内存管理作为基础设施的核心组件,直接影响着虚拟机的性能表现和资源利用率。传统操作系统采用通用型内存管理设计,虽然能够适应各种工作负载,但在云场景下却暴露出诸多局限性。1.1 传…

作者头像 李华