Answers:
要查找任何过期的存储库密钥及其标识,请使用apt-key
以下方法:
LANG=C apt-key list | grep expired
您将得到类似于以下结果:
pub 4096R/BE1DB1F1 2011-03-29 [expired: 2014-03-28]
在这种情况下,密钥ID是/
ie 后面的位BE1DB1F1
。
要更新密钥,请运行
sudo apt-key adv --recv-keys --keyserver keys.gnupg.net BE1DB1F1
注意:如果软件包维护者尚未上传新密钥,则更新密钥显然将不起作用。在这种情况下,除了与维护人员联系,针对您的发行版提交错误之外,您几乎无能为力。
一个划线员来更新所有过期的密钥:(感谢@ryanpcmcquen)
for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done
for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done
您需要获取新密钥并添加它,这时apt将检测到它并且不会抱怨。这通常不应该发生,但有时会发生。您真正需要的是知道您需要添加的密钥的十六进制代码。一旦有了它,它便从那里下坡了。
一些例子:
添加用于backport的密钥:尽管您需要具有所需的密钥,但前几行就是您要寻找的。
在有关SecureAPT的Debian Wiki上,我发现应该删除non-us
/etc/apt/sources.list中包含的行。
实际上,我做到了,而且奏效了。
导致此错误的可能性极小(但有时也可能是)的原因是,两次添加相同密钥的有效期不同。您可能会知道这样做是为了使该答案与您相关。
当使用自己的密钥托管自己的存储库时,可能会发生这种情况,就像对我一样。如果您要在密钥即将失效时延长其寿命而不是更改密钥,并且如果您使用预置种子安装了原始密钥,而使用deb软件包安装了更新的密钥,则旧密钥将位于中/etc/apt/trusted.gpg
,而新密钥将位于中最终作为一个单独的文件位于下/etc/apt/trusted.gpg.d/
。旧密钥将遮盖新密钥,而新密钥将被完全忽略apt-key
。通过运行删除旧密钥gpg --keyring /etc/trusted.gpg --delete-keys <keyid>
,新密钥将被检测到。
这有点非标准的转角配置,但是我希望我的回答可以避免造成一些混乱,以防其他人由于与我相同的原因而遇到此问题。
你不必须做任何事情。这只是一个警告,您可以从W:
前缀中看到。