更新emacs软件包时出错:无法下载“gnu”存档。

32

我的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")

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


Emacs StackExchange上的同一问题有更多信息。 - DomQ
5个回答

25

看起来是您使用的Emacs版本出现了bug。您可能可以通过将package-check-signature设置为nil绕过它。


我的 Emacs 版本是 24.3.50 (9.0),升级会有帮助吗?Mac OS X 上是否有更新的可下载版本? - yayitswei
2
24.3.50 意味着“在开发 24.4 期间的某个代码快照”。我们在四月份转移到了 24.3.90,所以你的快照现在已经过时了(一个月之前的快照已经算是“旧”的了),应该被淘汰。 - Stefan
1
在24.3.93上,现在它运行得非常好,谢谢!包列表中不再有可怕的红色“UNSIGNED”标签。 - yayitswei
2
在 Fedora 21 中,使用 Emacs-24.4 也存在同样的问题。 - alvaropg
我曾经遇到过同样的问题,通过升级emacs解决了它 - 我之前使用的是emacs 24.3,现在升级到了https://github.com/railwaycat/emacs-mac-port(目前使用的是emacs 24.5.1),问题已经解决了。 - xhh
1
这是 ELPA 的问题,而非 Emacs 的问题。 - sds

24

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

New GPG key for GNU ELPA package signature checking.

我相信来自GNU ELPA 仓库的最新包已经签名,可以使用这个新密钥环进行检查。

解决方法很简单,升级到Emacs 26.3即可。

但如果像我一样不想升级,可以从这里下载package-keyring.gpg文件并将其放置在你的Emacs安装位置的etc/目录下。在我的情况下,它是/usr/local/share/emacs/26.1/etc/package-keyring.gpg。对于不同的安装方法(如apt、yum等)和各种平台(如macOS、Windows等),位置可能不同。

另外,你也可以尝试安装gnu-elpa-keyring-update包以便以后自动更新密钥环。


你是否知道一种不需要 root 权限就能运行的解决方案? - kdb
当然,你可以安装 gnu-epla-keyring-update 或按照该软件包的 README 中的说明操作。但我相信有效目录在 ~/.emacs.d/elpa/gnupg - Lei Zhao
我正在使用Emacs 26.3,但仍然遇到此错误。 - Draif Kroneg

17

针对没有签名问题的用户,请尝试初始化软件包

M-x package-initialize


1
这是我问题的唯一解决方案;不安装 gnutlsgnupg,也不将 https 更改为 http,或在 packages 之后添加 / - xdavidliu
这很有帮助。有人知道是什么导致了通过初始化包固定状态吗? - charliesneath

13
我的问题是我缺少了GPG (GNU隐私卫士)。
在苹果操作系统上,我通过使用brew install gpg来解决这个问题。

代码应该可以正常工作,即使没有 gpg(它只会跳过检查签名),所以这仍然是需要解决的问题。如果您能够重现此问题,请使用 M-x report-emacs-bug 命令,并提供尽可能多的细节信息。 - Stefan
11
Bug #19409是指:自2014年9月以来(至少如此),由于某个人使用未发布的密钥签署了一个软件包,导致ELPA出现故障。然而,似乎没有人关心这个问题。 - DomQ

0
我在 Arch Linux 上安装了 Emacs,打开它后运行了 package-refresh-contents 命令,但出现了问题。过了一会儿,我意识到我没有 init 文件。如果你也遇到了这个问题,可以通过执行命令 emacs ~/.emacs.d/init.el 来创建 init 文件,并添加以下内容:
(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。这次它会正常工作。


failed to download melpa, failed to download gnu - jaromrax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接