在国内利用本地启动盘安装了ubuntu22.04LTS,在更新的时候,遇到了“由于没有公钥,无法验证下列签名: NO_PUBKEY 3D4C35B080264AA9”的问题,遇到这种问题在网上搜到的最新也就到2021年,他们一说是没有更新国内的源,二说需要取回3D4C35B080264AA9的PUBKEY
第二种说法最简单,一行命令别人就能解决:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 3D4C35B080264AA9
zaa@zaa-0-1:~$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 3D4C35B080264AA9 Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). Executing: /tmp/apt-key-gpghome.gBxPK6ISPI/gpg.1.sh --keyserver hkp://keyserver.ubuntu.com:80 --recv 3D4C35B080264AA9 gpg: 从公钥服务器接收失败:无数据
看来第二种说法对于我来说是毫无用处的了。注意到这里出现了一行警告:apt-key is deprecated,提示Manage keyring files in trusted.gpg.d instead(提示管理一下trusted.gpg.d里面的keyring files),查了一下在apt-key(8)里面提到了apt-key的”非安全“办法最后只支持到22.04LTS,而apt-key提供全部的add这种“非安全”的方式导致了deprecation。利用apt-key list查看哪些pub没有被加入:
zaa@zaa-0-1:~$ sudo apt-key list Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)). /etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg ------------------------------------------------------ pub rsa4096 2012-05-11 [SC] 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092 uid [ 未知 ] Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com> /etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg ------------------------------------------------------ pub rsa4096 2018-09-17 [SC] F6EC B376 2474 EDA9 D21B 7022 8719 20D1 991B C93C uid [ 未知 ] Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>
跑一边apt update,通过warning内容来判断哪些gpg需要加入上面的PUBKEYS
zaa@zaa-0-1:~$ sudo apt update 命中:1 https://mirrors.ustc.edu.cn/ubuntu jammy InRelease 命中:2 https://mirrors.ustc.edu.cn/ubuntu jammy-backports InRelease 命中:3 https://mirrors.ustc.edu.cn/ubuntu jammy-security InRelease 命中:4 https://mirrors.ustc.edu.cn/ubuntu jammy-updates InRelease 命中:6 http://mirrors.huaweicloud.com/repository/ubuntu jammy InRelease 命中:7 http://mirrors.huaweicloud.com/repository/ubuntu jammy-updates InRelease 命中:8 http://mirrors.huaweicloud.com/repository/ubuntu jammy-backports InRelease 命中:9 http://mirrors.huaweicloud.com/repository/ubuntu jammy-security InRelease 获取:5 http://file.tickstep.com/apt aliyunpan InRelease [2,114 B] 错误:5 http://file.tickstep.com/apt aliyunpan InRelease 由于没有公钥,无法验证下列签名: NO_PUBKEY 3D4C35B080264AA9 #注意这里,阿里云盘的apt没有PUBKEY!!! 正在读取软件包列表... 完成 W: GPG 错误:http://file.tickstep.com/apt aliyunpan InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 3D4C35B080264AA9 E: 仓库 “http://file.tickstep.com/apt aliyunpan InRelease” 没有数字签名。 N: 无法安全地用该源进行更新,所以默认禁用该源。 N: 参见 apt-secure(8) 手册以了解仓库创建和用户配置方面的细节。
执行完之后始终卡在阿里云盘的PUBKEY上,我直接访问源http://file.tickstep.com/apt,结果根本就不存在了,于是我到/etc/apt/sources.list.d 下面把所有的ubuntu的esut和aliyunpan的文件都删除了,在执行apt update就OK了。
zaa@zaa-0-1:/etc/apt/sources.list.d$ ls archive_uri-https_mirrors_ustc_edu_cn_ubuntu_-jammy.list tickstep-aliyunpan.list archive_uri-https_mirrors_ustc_edu_cn_ubuntu_-jammy.list.save tickstep-aliyunpan.list.save zaa@zaa-0-1:/etc/apt/sources.list.d$ sudo rm -rf *
再执行apt update
zaa@zaa-0-1:~$ sudo apt update<br>命中:1 http://mirrors.huaweicloud.com/repository/ubuntu jammy InRelease<br>命中:2 http://mirrors.huaweicloud.com/repository/ubuntu jammy-updates InRelease<br>命中:3 http://mirrors.huaweicloud.com/repository/ubuntu jammy-backports InRelease<br>命中:4 http://mirrors.huaweicloud.com/repository/ubuntu jammy-security InRelease<br>正在读取软件包列表… 完成<br>正在分析软件包的依赖关系树… 完成<br>正在读取状态信息… 完成<br>有 2 个软件包可以升级。请执行 ‘apt list --upgradable’ 来查看它们。
这个问题就一种说法,只是个人化解起来走了一堆弯路。problem就是很简单的:国外源水土不服,国内源(老旧源)残留source.list.d的文件干预更改为华为云之后apt update的执行,很无聊的一个问题,症结是防火墙,解决办法英文地区不会遇到,中文区的情况和个人水平又导致了懂得都懂,不懂的烦死的一个局面。