求助:list-package报告无法验证签名

emacs 28,win10,msys2环境(64位),使用list-package更新时,报告了一个无法获得签名的错误:

Failed to verify signature archive-contents.sig:
No public key for 066DAFCB81E42C40 created at 2020-08-04T05:05:02+0800 using RSA
Command output:
gpg: keyblock resource '/d/Users/home/d:/Users/home/.emacs.d/elpa/gnupg/pubring.kbx': No such file or directory
gpg: Signature made Tue Aug  4 05:05:02 2020    
gpg:                using RSA key C433554766D3DDC64221BFAA066DAFCB81E42C40
gpg: Can't check signature: No public key

感觉像是gpg找秘钥文件的路径不太对(有个d:)。在网上找了一圈也没有找到办法。这个问题大家有遇到过吗? 按照网上的办法,安装gnu-elpa-keyring-update包,好像也没有什么作用;

另:我原先环境中有cygwin,最近换成了msys2,不知道是不是这个的影响。实在没办法了,求助大家了。谢谢;

2 个赞

我在msys2中也遇到了这个问题,请问已经解决了吗?

  1. set package-check-signature to nil , e.g. M-: (setq package-check-signature nil) RET
  2. download the package gnu-elpa-keyring-update and run the function with the same name, e.g. M-x package-install RET gnu-elpa-keyring-update RET .
  3. reset package-check-signature to the default value allow-unsigned 这个试过没
2 个赞

实验,可行。感谢!!!!!

我试了这个方案,当时没有成功;后来我把gnu的这个库删掉了;melpa库不需要签名,也够用了;

回头我抽空再试试是不是当时操作不对;

谢谢;

今天我把 windows7 上的 emacs 升级到 GNU Emacs 27.1 (build 1, x86_64-w64-mingw32) 之后,也遇到了相同的问题,而且奇怪的是,这个问题只在三台电脑中的一台上出现,其它两台暂时没出现这个问题。本来我也尝试前面的各种方法,都不行。 于是我静下心来观察报错信息,觉得首先是没有 public.kbx 这个文件,于是就到 .emacs.d/elpa/gnupg 中去看,发现果然没有,只有 public.gpg ,上网一搜,.gpg 是旧的格式,新的格式是 .kbx ,也没有可以转换的方法,我是把 gnupg 的 windows 版本更新到目前最新的 gnupg-w32-2.2.23_20200903.exe ,也没发现什么转换的方法,所以我就删除了 public.gpg ,再用 gpg --homedir x:\xxxx\emacs.emacs.d\elpa\gnupg --recv-keys 066DAFCB81E42C40 的命令来重建了 public.kbx , x:\xxxx\emacs 给有此问题的人士自行替换成自己实际上的路径。 然后,再启动 emacs 发现还是有错,这回找不到 public.kbx 的路径很奇妙: /cygdrive/y/home/x:/xxxx/emacs/.emacs.d/elpg/gnugp/public.kbx 我一看,这个文件为什么加上了 /cygdrive/y/home ?难道和 cygwin 有关?为了确切知道为什么 package.el 会调用 cygwin 里的 gpg 而不是我在系统里安装的 gnupg ,我打开调试模式 M-x toggle-debug-on-error ,在出错信息中看到确实是调用了 cygwin 的 gpg2。 然后我到 windows 的命令行提示符中运行 gpg2 --version ,发现 cygwin 确实把 gpg2 的 home 设置为 /cygdrive/y/home ,并且不同于 windows 版的 gnupg ,它会把这个 home 变量保存住,等于 emacs 的 epg 传递了 homedir 给 cygwin 的 gpg2 时,会接在 cygwin 的 home 后面,而不是取代原来 gnupg 的 home 。 所以我就偷懒一下,因为在我的电脑上, PATH 变量中 windows 版的 gnupg 排在 cygwin 前面,所以就到 C:\Program Files (x86)\gnupg\bin\ 下面,把 gpg.exe 复制一下,改成 gpg2.exe 。问题解决。

1 个赞

似乎和 msys2 中的 \msys64\usr\bin\gpg.exe 有冲突。 我把这个路径加入环境变量就会报 gpg 错误,去掉这个路径就没问题了。

2 个赞

确实是这个问题。但是又需要用到\msys64\usr\bin\make.exe, 有没有办法不让gpg加入path?
找到方法了:创建了一个链接,使用mingw32-make.exe即可。

我也是觉得是因为home的关系,有什么办法能够改变“homedir接在msys的home后面”这种情况码

windows创建一个HOME系统环境变量,指向一个任意文件夹,emacs会把这个文件夹当成home。但是一般情况下,mingw32和mingw64编译原生的程序是不需要这个操作的,应该就是cygwin和windows原生的版本混用导致的。。

关于为什么 emacs 的 package-list-packages 会出现找不到 key 的错误,

Failed to verify signature archive-contents.sig: No public key for 066DAFCB81E42C40 created at 2021-06-07T17:05:02+0800 using RSA Command output: gpg: keyblock resource ‘/d/dev/temp/d:/dev/et1/.emacs.d/elpa/gnupg/pubring.kbx’: No such file or directory gpg: Signature made Mon Jun 7 17:05:02 2021
gpg: using RSA key C433554766D3DDC64221BFAA066DAFCB81E42C40 gpg: Can’t check signature: No public key 在这个帖子中有线索: Failure to start Spacemacs following upgrade to Emacs 27.1 #13866 Failure to start Spacemacs following upgrade to Emacs 27.1 · Issue #13866 · syl20bnr/spacemacs · GitHub

然后从帖子中找到最详细的解释在这个帖子:
GNU bug report logs - #42984  27.1; package-list results in error while updating archive due to malformed path
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=42984

所以如果是在快捷方式中添加 msys2 的路径的话,要把 mingw64 的放在前面,而如果是在 emacs 的启动文件中 add-list 到 exec-path 的话,要把 mingw64 放在后面添加,因为是从头上添加的。

所以我在emacs 的快捷方式中,把目标改为:C:\Windows\System32\cmd.exe /C “set PATH=D:\dev\msys64\mingw64\bin;D:\dev\msys64\usr\bin;D:\dev\emacs_test_dir.emacs.d\irony\bin;%PATH%” & D:\dev\emacs\bin\runemacs.exe -q --load=D:\dev\emacs_test_dir.emacs.d\init.el runemacs.exe 的参数不是这里的重点,重点是在启动 runemacs.exe 之前,先设置了路径。

我设置好了HOME为D:/Program Files/……,试过在shell里面输出$HOME,结果是/d/Program Files……,很显然问题就出在HOME的路径没有正确被翻译

进msys2环境里面,中间路径换成你自己的
gpg --homedir /c/Users/cat/.emacs.d/elpa/gnupg --receive-keys 066DAFCB81E42C40

确实是因为 windows 下 设置了 Home 路径造成的这个问题。

我目前的解决方案是:
Home 还是设置为 C:/Users/<MyUserName>
环境变量中 Path 添加 C:\Users\<MyUserName>\scoop\apps\msys2\current\mingw64\bin
注意不要添加 C:\Users\Aqua\scoop\apps\msys2\current\usr\bin

需要在 Emacs 中使用 make 命令,可以通过 scoop 单独安装一个,其他命令都安装 mingw 版本。
比如,需要 diff 就安装 pacman -S mingw-w64-x86_64-diffutils ,这样就有了 /mingw64/bin/diff

1 个赞