更新emacs软件包时出错:无法下载' gnu'档案

时间:2014-09-29 20:50:56

标签: emacs checksum elpa melpa

我的init.el使用它来初始化包:

(package-initialize)
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))
(add-to-list 'package-archives '("melpa-stable" . "http://melpa-stable.milkbox.net/packages/"))

当我M-x package-refresh-contents时,我收到以下错误:Failed to download `gnu' archive.

M-x toggle-debug-on-error给了我这个堆栈跟踪:

Debugger entered--Lisp error: (error "Failed to verify signature archive-contents.sig: (\"No public key for 474F05837FBDEF9B created at 2014-09-29T07:20:03-0700 using DSA\")")
  signal(error ("Failed to verify signature archive-contents.sig: (\"No public key for 474F05837FBDEF9B created at 2014-09-29T07:20:03-0700 using DSA\")"))
  error("Failed to verify signature %s: %S" "archive-contents.sig" ("No public key for 474F05837FBDEF9B created at 2014-09-29T07:20:03-0700 using DSA"))
  package--check-signature("http://elpa.gnu.org/packages/" "archive-contents")
  package--download-one-archive(("gnu" . "http://elpa.gnu.org/packages/") "archive-contents")

这是我的配置问题,我该如何解决?

5 个答案:

答案 0 :(得分:16)

看起来像您的Emacs版本中的错误。您可以通过将package-check-signature设置为nil来避开它。

答案 1 :(得分:14)

这不是错误配置引起的错误,而是由于Emacs 26.3中文件package-keyring.gpg的更改。如发布note中所述:

New GPG key for GNU ELPA package signature checking.

我相信来自GNU ELPA repository的较新软件包已签名以供此新密钥环检查。

修复它的简单方法是升级到Emacs 26.3。

但是,如果您像我一样不费心升级,可以从here下载package-keyring.gpg文件,并将其放在Emacs安装位置下的etc/目录中。就我而言,它是/usr/local/share/emacs/26.1/etc/package-keyring.gpg。在各种平台(macOS,Windows等)上,不同的安装方法(apt,yum等)可能位于不同的位置。

或者,您可以尝试安装软件包gnu-elpa-keyring-update,以在将来自动更新密钥环。

答案 2 :(得分:9)

我的问题是我错过了gpg(gnupg)。

在OSX上,我使用brew install gpg解决了这个问题。

答案 3 :(得分:6)

对于其他没有签名问题的人,请尝试初始化程序包

M-x package-initialize

答案 4 :(得分:0)

我在Arch Linux上安装了emacs,将其打开,运行package-refresh-contents并收到此问题。一段时间后,我意识到我没有初始化文件。如果是这种情况,请使用emacs ~/.emacs.d/init.el创建您的初始化文件,然后添加以下内容:

(package-initialize)
(add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/"))
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/"))

使用C-x C-s保存并再次运行package-refresh-contents。这次它将起作用。