APT-GET更新GPG签名错误解决
最近将Ubuntu更新至12.04.1后陆续出现了一些问题,如lo-menubar软件包变成了孤儿包等,昨天遇到了apt-get无法更新的大问题。
问题主要表现是在通过系统更新管理器、新立得(Synaptic)软件包管理器或者运行
1 |
sudo apt-get update |
命令更新软件库时会出现除主要源以外的PPA全部GPG错误签名无效的情况。在终端中返回的信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
下载 2,166 B,耗时 2分 2秒 (17 B/s) 正在读取软件包列表... 完成 W: GPG 错误:http://archive.canonical.com precise Release: 下列签名无效: BADSIG 40976EAF437D05B5 Ubuntu Archive Automatic Signing Key <[email protected]> W: GPG 错误:http://ppa.launchpad.net precise Release: 下列签名无效: BADSIG DB141E2302FDF932 Launchpad Application Review Board PPA W: GPG 错误:http://ppa.launchpad.net precise Release: 下列签名无效: BADSIG B22A95F88110A93A Launchpad PPA for Bumlebee Project W: GPG 错误:http://ppa.launchpad.net precise Release: 下列签名无效: BADSIG 0C14D55CE7242835 Launchpad PPA for nautilus actions extra Team W: GPG 错误:http://ppa.launchpad.net precise Release: 下列签名无效: BADSIG A95AA9FC233DD144 Launchpad PPA for Nuvola Player Builders W: GPG 错误:http://ppa.launchpad.net precise Release: 下列签名无效: BADSIG 6AF0E1940624A220 Launchpad PPA for TualatriX W: GPG 错误:http://ppa.launchpad.net precise Release: 下列签名无效: BADSIG 8CA7A6E8E4FA953A Launchpad 0 A.D. W: 校验签名出错。此仓库未被更新,仍然使用以前的索引文件。GPG 错误:http://extras.ubuntu.com precise Release: 下列签名无效: BADSIG 16126D3A3E5C1192 Ubuntu Extras Archive Automatic Signing Key <[email protected]> W: 无法下载 http://extras.ubuntu.com/ubuntu/dists/precise/Release W: Some index files failed to download. They have been ignored, or old ones used instead. |
Google之后大约了解了问题的原因,Debian及其衍生Linux发行版是用APT管理软件包,apt-get使用GPG签名以验证软件源是否可信,当出现这种GPG错误时,可能有以下几种情况:
- 人为的操作造成的,如更新系统(之前刚更新到Ubuntu 12.04.1)或添加PPA;
- 无缘无故出现问题,如软件源服务器被黑造成了签名被篡改、文件被替换(之前就发生过SourceForge镜像被黑造成phpMyAdmin被植入后门的情况)或与服务器的中间传输被某些人重置(如DNS被污染);
- 储存APT数据和GPG签名的目录/var/lib/apt/损坏(这种情况一般会同时伴有其他严重问题)。
Kaijia之前更新Ubuntu到了12.04.1,并且最近还添加过一个PPA,因此个人认为是第一种情况。以下是在论坛上逛出来的解决方案。
警告:只有当你非常确信此问题是由于人为操作(第一种情况)且并非服务器或通讯被人篡改(第二种情况)而引起时才建议执行以下操作。
第一种方法是重新加入以上出现问题的apt-key:首先在新立得(Synaptic)软件包管理器设置->软件库->身份验证中删除存在问题的密钥。删除时请核对密钥名称以免删除正常的PPA(如Google、Opera、Skype的密钥)。删除后再次使用apt-get update更新时出现的问题应该由之前的BADSIG变为NO_PUBLIC(表明不存在密钥,密钥已经被删除),此时需要使用
1 |
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com PGP签名 |
添加新的Key。如提示的信息是“下列签名无效: BADSIG 6AF0E1940624A220 Launchpad PPA for TualatriX”,则使用6AF0E1940624A220替换PGP签名,为
1 |
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 6AF0E1940624A220 |
在全部添加完成之后,运行命令:
1 2 |
sudo apt-get clean sudo apt-get update |
命令执行完成后应该不会再提示错误信息。
如果仍然提示与之前一样的内容,则需要使用终极方法(参考自此页)。此方法重建了/var/lib/apt/lists/下的内容,在终端中运行以下命令:
1 2 3 4 5 6 |
sudo apt-get clean cd /var/lib/apt sudo mv lists lists.old sudo mkdir -p lists/partial sudo apt-get clean sudo apt-get update |
通过此方法一般情况下问题就解决了,但请注意,此方法可能对已有的apt数据造成破坏,建议先尝试第一种方法,如果不成功(概率很大)则再使用此方法。如果出现问题请使用Root删除/var/lib/apt/lists/文件夹并且将/var/lib/apt/lists.old/文件夹重命名为/var/lib/apt/lists/以恢复。
我两种方法都试过了,还是报错。。。
E: GPG error: http://ppa.launchpad.net trusty InRelease: Clearsigned file isn’t valid, got ‘NODATA’ (does the network require authentication?)
这个错误和本文的错误不一样,“got ‘NODATA’”提示是指无法连接到Launchpad服务器,网络问题。