在MSYS2更新软件包时出现无效的PGP签名 - 尽管已经修复

7
自 2020 年 6 月以来,我无法通过 pacman -Syu 更新我的软件包。每当我尝试更新时,都会出现以下错误:
(它会到达“检查软件包完整性”的步骤,然后为每个软件包显示此类错误)
error: gcc-libs: signature from "David Macek <david.macek.0@gmail.com>" is unknown trust
:: File /var/cache/pacman/pkg/gcc-libs-10.2.0-1-x86_64.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
Do you want to delete it? [Y/n]

现在,很幸运地,MSYS2有一篇文章解释了发生这种情况的原因以及如何修复:https://www.msys2.org/news/#2020-06-29-new-packagers

然而,尽管按照那些步骤进行操作,仍然没有改变,我仍然得到相同的错误信息。

为了明确起见,我采取了以下措施:

curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig
pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig
pacman -U msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz

之前那些操作虽然未出现错误,但也无法解决问题。我尝试了以下操作:

rm -r /etc/pacman.d/gnupg/
pacman-key --init
pacman-key --populate msys2

但是这也没有实现任何结果。

我该怎么办?

4个回答

15

通过添加一个命令,可以使原始密钥更新过程News-MSYS2继续运行:

$ pacman-key --keyserver keyserver.ubuntu.com --refresh-keys

msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz 中提供的打包人密钥已过期,需要进行更新。

pub   rsa4096 2018-01-14 [SC] [expired: 2021-06-19]
      87771331B3F1FF5263856A6D974C8BE49078F532
uid           [ expired] David Macek <david.macek.0@gmail.com>

很遗憾,旧版本的 pacman-key 命令使用的密钥服务器已经不再有效。

$ pacman-key --refresh-keys
gpg: error retrieving 'alexey.pawlow@gmail.com' via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://hkps.pool.sks-keyservers.net
gpg: keyserver refresh failed: No name
==> ERROR: Could not update key: F40D263ECA25678A

由于此 msys2/MSYS2-keyring 提交更改了较新的 pacman-key 中的 keyserver 值为 keyserver.ubuntu.com。 因此,在本回答开头,需要明确使用 --keyserver 选项来运行 pacman-key 命令。


这对我有效,非常感谢! - SiZiOUS

4

1
一个月后,我的键盘又出现了问题,你的解决方案似乎起作用了。谢谢! - Tyler Shellberg

2

在尝试了其他几个方法(例如禁用sourceforge镜像)后,我发现都没有成功。

相反,我下载了该项目的最新tar文件(因为我无法运行.exe文件),该文件位于:

http://repo.msys2.org/distrib/msys2-x86_64-latest.tar.xz

下载完成后,我进入C:/msys64/并复制了/home文件夹,然后删除了所有内容。

然后我将最新的tar文件复制到那里,最后将/home文件夹复制回去。

现在,MSYS2终于可以正常工作了。不过这意味着需要重新安装所有软件包。


我也做了类似的事情,但尝试仅替换与GPG相关的文件。 我在提取的源代码中运行msys2.exe,以便所有密钥都可以正确初始化/设置。 然后,我将以下文件复制(并覆盖)到我的原始Msys2安装中: /etc/pacman.d/gnupg/pubring.gpg /etc/pacman.d/gnupg/pubring.gpg~ /etc/pacman.d/gnupg/secring.gpg /etc/pacman.d/gnupg/tofu.db /etc/pacman.d/gnupg/trustdb.gpg /usr/share/pacman/keyrings/msys2-revoked /usr/share/pacman/keyrings/msys2-trusted 免责声明:我(实际上)不知道这些文件是做什么的,但它修复了我的问题,而无需从头重新安装。 - Pybe
那也是我唯一的解决办法,谢谢。 - savioret

0
我在我的GitLab阶段解决了这个问题,按照https://www.msys2.org/docs/ci/上的其他系统的指示进行了适应。
# install wget
- Invoke-WebRequest -Uri "https://eternallybored.org/misc/wget/current/wget.exe" -OutFile "wget.exe"
# download and install MSYS2
- .\wget.exe -O msys2-installer.sfx.exe --no-check-certificate "https://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20230718.sfx.exe"
- .\msys2-installer.sfx.exe -y -oC:\

# Run MSYS2 for the first time and update it
- C:\msys64\usr\bin\bash -lc ' '
# Update MSYS2
- C:\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'  # Core update (in case any core packages are outdated)
- C:\msys64\usr\bin\bash -lc 'pacman --noconfirm -Syuu'  # Normal update

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