运维系列(亲测有效):Ubuntu解决签名失效问题(二仅适用18.04、20.04)Key is stored in legacy trusted.gpg keyring (/etc/apt/trus

491 篇文章 ¥129.90 ¥299.90




一. 进入容器执行apt update 报错解决

进入容器执行apt update 描述

在centos 上安装了docker,然后启动了一个ubuntu 类型的容器,执行apt update 时报错

1、错误:

The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 3B4FE6ACC0B21F32

2、原因:

更换三方源没有对应的Key

3、解决:

直接执行如下命令,比如我没有 3B4FE6ACC0B21F32,就需要执行

sudo apt-key adv --keyserver keyserver.ubuntu.com -
<think>我们正在处理关于Ubuntu和NVIDIAJetson系统中出现的apt-key存储在旧trusted.gpg密钥环中的警告问题。警告通常是由于使用了已弃用的`apt-key`命令,将密钥添加到`trusted.gpg.d`目录中。为了解决这个问题,我们需要将现有的gpg密钥迁移到新的格式(`/etc/apt/trusted.gpg.d/`目录下的每个密钥一个文件,且为`.gpg`扩展名),并删除旧的trusted.gpg文件。根据之前的上下文,我们使用的是Ubuntu系统(特别是针对NVIDIAJetson平台),我们需要按照以下步骤操作:1.找出当前系统中所有通过旧方法添加的密钥(存储在`/etc/apt/trusted.gpg`中)并导出它们。2.将这些密钥分别导出到`/etc/apt/trusted.gpg.d/`目录下,每个密钥一个文件,文件扩展名为`.gpg`。3.删除旧的`trusted.gpg`文件(或将其移走)。4.更新软件包列表。注意:在迁移过程中,我们需要确保每个密钥文件只包含一个密钥,这样管理起来更清晰。具体步骤:步骤1:列出当前trusted.gpg中的密钥```sudoapt-keylist```该命令会列出所有密钥,每个密钥的信息以`pub`开头。记录下每个密钥的ID(例如:`/etc/apt/trusted.gpg`中的`pub2048R/XYZ123452010-10-10[expires:2020-10-10]`,则密钥ID是`XYZ12345`)。步骤2:将每个密钥导出到单独的文件对于每个密钥ID(如`XYZ12345`),执行:```sudoapt-keyexportXYZ12345|sudogpg--dearmour-o/etc/apt/trusted.gpg.d/XYZ12345.gpg```步骤3:删除(或备份)旧的trusted.gpg文件```sudomv/etc/apt/trusted.gpg/etc/apt/trusted.gpg.bak```或者(如果确定不再需要):```sudorm/etc/apt/trusted.gpg```步骤4:更新软件包列表```sudoaptupdate```注意:在某些系统中,旧的文件可能是`trusted.gpg`,也可能有`trusted.gpg.d`目录存在,但旧的`trusted.gpg`文件依然存在导致了警告。另外,如果系统中还存在通过`apt-keyadd`添加的密钥,我们也需要按照上述方法迁移。然而,由于NVIDIAJetson平台可能有特定的密钥,我们需要特别注意NVIDIA的源。通常NVIDIA的源在设置时会添加一个密钥,我们需要确保这个密钥也被迁移。例如,在设置Jetson的apt源时,通常会有类似这样的步骤:```sudoapt-keyadv--fetch-keyshttp://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub```这个命令实际上也是将密钥添加到了旧的trusted.gpg中。因此,我们也需要将这个密钥迁移出来。因此,我们可以这样操作:1.首先运行`sudoapt-keylist`找到NVIDIA相关密钥的ID(通常会有NVIDIACorporation等标识)。2.然后用上面的方法将其导出到`/etc/apt/trusted.gpg.d/`目录中。注意:在迁移所有密钥后,我们还需要检查是否还有程序会继续使用`apt-key`添加密钥。如果有,应该改用新的方法(直接将gpg文件放入`/etc/apt/trusted.gpg.d/`目录,或使用`gpg--dearmor`命令生成合适的文件)。另外,也可以考虑使用`gpg`命令直接下载密钥并保存到`/etc/apt/trusted.gpg.d/`目录(代替使用`apt-keyadv`的方法)。例如,对于上面的NVIDIA密钥,我们可以这样:```sudocurl-Lhttp://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub|sudogpg--dearmour-o/etc/apt/trusted.gpg.d/nvidia.gpg```这样就直接将密钥保存为新的格式,而不会添加到旧的trusted.gpg中。总结:迁移现有密钥并停止使用`apt-key`命令,改用新的方式管理密钥,就可以避免警告。注意:不同版本的Ubuntu系统(特别是从18.04到20.04及以上)在管理密钥方面有变化,因此推荐使用上述新方法。如果用户之前已经添加了很多密钥,那么需要逐个迁移。可以编写一个简单的脚本来自动完成。下面是一个自动化迁移所有密钥的脚本示例(谨慎使用,建议先备份):```bash#!/bin/bash#备份旧文件sudocp/etc/apt/trusted.gpg/etc/apt/trusted.gpg.bak#创建临时目录tmp_dir=$(mktemp-d)cd$tmp_dir#导出所有密钥IDsudoapt-keyexportall>allkeys.gpg#将导出的密钥拆分成单个密钥文件(如果gpg版本支持,可以使用--export-optionsexport-minimal来避免导出子密钥)#但通常我们使用gpg本身来拆分sudogpg--batch-dallkeys.gpg2>/dev/null|sudogpg--no-auto-check-trustdb--import-optionsimport-export--import--output-|sudogpg--batch--dearmour-osingle.gpg#上面的命令可能不能完美拆分,因此另一种方法是逐个密钥ID导出#获取所有密钥IDkey_ids=$(sudoapt-keylist|greppub|awk-F'[/]''{print$4}'|sort|uniq)forkey_idin$key_ids;dosudoapt-keyexport$key_id|sudogpg--dearmour-o"/etc/apt/trusted.gpg.d/${key_id}.gpg"done#最后,移除旧的trusted.gpgsudomv/etc/apt/trusted.gpg/etc/apt/trusted.gpg.old#更新sudoaptupdate```但是,请注意:`apt-keylist`列出的密钥ID可能是长格式,也可能是短格式,且可能有重复(比如同一个密钥出现多次),因此上述脚本需要谨慎试。因此,更建议手动迁移。考虑到用户使用的是NVIDIAJetson,通常密钥数量不多,手动迁移更为安全。完成迁移后,警告应该就会消失。如果还有警告,可能是系统中有残留的`trusted.gpg~`等文件,可以检查并删除。以上步骤供参考。</think> ### 解决Ubuntu/NVIDIA Jetson的APT密钥警告问题 当您在Ubuntu或NVIDIA Jetson系统中看到以下警告时: ```bash Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)) ``` 这表明系统在使用**已弃用**的密钥管理方式(legacy trusted.gpg keyring)。以下是完整的解决方案: --- ### 详细解决步骤 1. **定位现有密钥** ```bash sudo apt-key list ``` > 输出示例: > `/etc/apt/trusted.gpg.d` > -------------------- > pub rsa2048 2018-04-17 [SC] [expired: 2023-04-17] > XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX NVIDIA CORPORATION > uid [ expired] NVIDIA CORPORATION <....>` 2. **迁移密钥到新格式** ```bash # 创建备份目录 sudo mkdir /etc/apt/trusted.gpg.d/backup # 迁移所有密钥(针对NVIDIA Jetson) sudo apt-key exportall | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/nvidia-archive.gpg # 移走旧密钥文件 sudo mv /etc/apt/trusted.gpg /etc/apt/trusted.gpg.d/backup/ sudo mv /etc/apt/trusted.gpg~ /etc/apt/trusted.gpg.d/backup/ 2>/dev/null ``` 3. **手动添加缺失密钥**(如果需要) ```bash # 获取NVIDIA Jetson官方密钥 curl -fsSL https://repo.download.nvidia.com/jetson/jetson-ota-public.asc | \ sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/nvidia-official.gpg ``` 4. **更新软件源** ```bash sudo apt update ``` 5. **验证修复结果** ```bash sudo apt update 2>&1 | grep "deprecated" ``` 如果无输出警告,说明修复成功 --- ### 关键原理说明 1. **为什么出现警告** Ubuntu自`20.10`版本开始[弃用](https://manpages.ubuntu.com/manpages/focal/en/man8/apt-key.8.html)`apt-key`命令,要求使用`.gpg`文件代替旧密钥环[^1]。 2. **NVIDIA Jetson的特殊性** Jetson官方源(`ports.ubuntu.com`)的部分密钥需要单独迁移,特别是`nvidia-l4t-*`系列软件包的密钥[^2]。 --- ### 注意事项 ⚠️ **重要操作前备份** ```bash sudo cp -r /etc/apt /etc/apt.bak ``` 💡 **后续添加新源的推荐方式** ```bash # 新方法(正确) curl -fsSL <KEY_URL> | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/<源名称>.gpg # 旧方法(会触发警告) sudo apt-key adv --keyserver ... ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坦笑&&life

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值