SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor

Omarchy 更新提示 PGP 签名错误怎么办?

Omarchy 更新时遇到 invalid or corrupted package 错误?这是由于 archlinux-keyring 过期导致。请先执行 sudo pacman -S archlinux-keyring 刷新密钥环,随后运行 omarchy update 即可修复签名验证失败问题。

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, September 4, 2026.

为什么 Omarchy 更新会因密钥环错误而失败

Omarchy 更新因 invalid or corrupted package (PGP signature) 停止时,这是密钥环错误,而非下载损坏。您持有的 archlinux-keyring 版本早于 Arch 当前使用的签名密钥,因此 pacman 会拒绝处理无法追溯到受信任密钥的软件包。请刷新密钥环,然后重新运行更新。

此问题并非 Omarchy 特有。这是 Arch 的常见故障模式,而 Omarchy 将其呈现给了许多初次接触 Arch 的用户。

在执行命令前有一点说明。Omarchy 是基于 Arch 的 Hyprland 桌面环境,因此以下内容均针对您的桌面设备。本指南不适用于在 VPS 上安装 Omarchy。您的服务器运行的是其他系统,最后一部分提供了相关参考页面。

最小修复

运行两个命令,然后执行更新:

sudo pacman -Sy
sudo pacman -S archlinux-keyring
omarchy update

sudo pacman -S archlinux-keyring 会输出 ==> Appending keys from archlinux.gpg...,随后执行速度更慢的 ==> Locally signing trusted keys in keyring...。这些信息表示新的开发者密钥已写入您的密钥环。刚才一分钟前失败的更新现在可以运行完成。

用户在 Omarchy issue 4608 中报告了这一流程;该报告也促成了将密钥环刷新功能加入更新程序本身。

单独运行 pacman -Sy 需要特别注意。它会下载最新的软件包数据库,但不会升级您已有的软件包。在这种状态下安装任意软件属于部分升级。部分升级会破坏 Arch 系统,因为刚构建的软件包依赖新数据库中列出的库版本,而您系统中的库仍是旧版本。archlinux-keyring 是公认的例外:它提供的是密钥材料,而不是相互链接的二进制文件;运行后应立即执行完整升级。

omarchy update 是 Omarchy 4 使用的命令。Omarchy 4 称为 Quattro,于 August 2026 发布;截至 October 2026,它是当前系列。最新版本是 v4.0.6,于 19 October 2026 发布。v4.5.0 release candidate 于 20 October 2026 发布,并标记为预发布版本。该命令背后的脚本是 omarchy-update,您也可以直接运行它。相比单独运行 pacman -Syu,应优先使用前两者之一,因为 Omarchy 更新程序会先创建文件系统快照,然后运行迁移,使您的配置与新版本保持同步。手动运行 pacman -Syu 会跳过这两个步骤。

omarchy update keyring 的作用

Omarchy 4 单独提供了密钥环步骤:

omarchy update keyring

它会处理两个独立的密钥环。自 v4.0.5(于 18 October 2026 发布)起,它会运行 sudo pacman -Sy --needed --noconfirm archlinux-keyring,因此只有在有更新版本时才会重新安装密钥环。这是因为新增或撤销的密钥会以新软件包版本的形式进入软件仓库。在 v4.0.4 及更早版本中,脚本省略了 --needed,因此每次更新都会重新安装密钥环。该版本脚本给出的理由是,密钥环内容可能在软件包版本不变时发生变化。无论采用哪种方式,该步骤都会先同步数据库,然后在主要升级前运行。如果 Omarchy 签名密钥或 omarchy-keyring 软件包缺失,它还会获取该密钥并在本地签名:

sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org
sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571

之所以有两个密钥环,是因为您的计算机会从两个位置安装软件包。archlinux-keyring 是 Arch 自己的软件包,来自 core 仓库,其中包含 Arch 开发者和受信任用户的密钥。omarchy-keyring 是第三方密钥环。它来自 Omarchy 添加到 /etc/pacman.conf 的 [omarchy] 仓库;在稳定频道中,该仓库是 Server = https://pkgs.omarchy.org/stable/$arch。其中包含用于签署每个 omarchy-* 软件包的密钥。Omarchy 4 提供 SigLevel = Required DatabaseOptional,因此无论软件包来自哪个仓库,只要其签名无法解析为受信任的密钥,就会被拒绝。

为什么未知信任是关键问题而非下载问题

故障表现如下。软件包名称和签名者在不同机器上各不相同。但最后两行保持不变。

error: archlinux-keyring: signature from "Christian Hesse <eworm@archlinux.org>" is unknown trust
:: File /var/cache/pacman/pkg/archlinux-keyring-20230704-1-any.pkg.tar.zst is corrupted (invalid or corrupted package (PGP signature)).
error: failed to commit transaction (invalid or corrupted package (PGP signature))

请字面理解 unknown trust。gpg 已解析签名并确认其格式正确。但它无法将该签名背后的密钥与您机器信任的密钥建立关联。pacman 随后将该软件包标记为损坏,因为在 pacman 看来,无法验证的软件包与损坏的软件包结果一致。

受信任的密钥存储在 /etc/pacman.d/gnupg 中。该目录是本地副本,在更新期间从不实时获取。它由 archlinux-keyring 软件包安装到 /usr/share/pacman/keyrings 中的密钥文件进行初始化。Arch 会根据自身计划添加并撤销开发者密钥,因此如果一台机器闲置数月,其持有的密钥列表将早于今天上午签署该软件包的开发者。相关消息 signature from ... is marginal trust 的根源相同:密钥确实存在,但将其根植于您个人密钥环中的本地签名缺失。

密钥环本身损坏时的完整修复

有时,sudo pacman -S archlinux-keyring 会因您要修复的同一个错误而失败,或者 sudo pacman-key --list-keys 不会返回有用的信息。此时密钥环已损坏,而不是过期,因此必须重建。

sudo mv /etc/pacman.d/gnupg /etc/pacman.d/gnupg.broken
sudo pacman-key --init
sudo pacman-key --populate archlinux
sudo pacman -Sy archlinux-keyring
sudo pacman-key --populate archlinux

请移动旧目录,不要删除它。如果重建失败,您可以将其恢复。可恢复的密钥环值得占用这几 KB 空间。

操作顺序很重要。--init 会使用新的本地签名密钥创建一个空密钥环。空密钥环不信任任何密钥,因此此时任何下载都会验证失败。--populate archlinux 会从 /usr/share/pacman/keyrings/archlinux.gpg 填充密钥。该文件是您几个月前安装软件包时已经保存到磁盘上的文件。这些密钥可能已经过时,但足以验证当前密钥环软件包的下载内容。第四行命令正是执行此操作。最后一行会加载本次下载的更新密钥文件。

现在恢复 Omarchy 密钥。清除 /etc/pacman.d/gnupg 时,同时删除了使该密钥受信任的本地签名。因此,在恢复该签名前,所有 omarchy-* 软件包都会因 unknown trust 而失败:

sudo pacman-key --recv-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571 --keyserver keys.openpgp.org
sudo pacman-key --lsign-key 40DFB630FF42BCFFB047046CF0134EE680CAC571
sudo pacman-key --list-keys 40DFB630FF42BCFFB047046CF0134EE680CAC571

最后一条命令应为该指纹输出一行 pub。如果输出 keyserver receive failed,则表示 dirmngr 无法获取该密钥。dirmngr 是 gpg 用于处理密钥服务器网络流量的辅助程序。通常是网络阻止了该请求。不带方案的 keys.openpgp.org 会通过 11371 端口上的普通 HKP 进行连接,而不是使用 443 端口;某些网络会阻止该端口。使用 --keyserver hkps://keys.openpgp.org 会通过 443 端口发送相同的请求。如果 DNS 解析器无法正确处理 dirmngr 的查询,也会产生相同的提示,因此重试前也应检查 DNS。在 Omarchy 4 上,可以使用 omarchy update keyring 替代前两条命令,因为它会执行完全相同的操作。最后执行 omarchy update。

当密钥环已更新但更新仍失败时

系统时间不准确。 密钥和签名包含时间戳,gpg 会将其与系统时钟进行比对。如果系统时间设置得过于靠前,有效的签名会被判定为在密钥生成之前创建,从而导致软件包被拒绝。运行 timedatectl 并查看 System clock synchronized: yes。此问题常见于 CMOS 电池耗尽的笔记本电脑,在服务器上则因其他原因导致,详见 VPS 时钟漂移的原因及同步方法。

缓存文件损坏。 如果下载因镜像源不稳定而中断,也会产生同样的 invalid or corrupted package 错误行,此时无论如何操作密钥环都无法解决。通过观察报错的软件包名称来区分问题:如果每次报错的都是同一个软件包,请从 /var/cache/pacman/pkg/ 中删除该文件并重新运行更新。sudo pacman -Sc 可以清除不再安装的软件包缓存版本。

故障源于 yay 而非 pacman。 AUR 构建过程使用 makepkg 验证上游源码包,该命令读取的是 ~/.gnupg 下的用户密钥环,而非 pacman 的密钥环。错误信息通常为 ==> ERROR: One or more PGP signatures could not be verified!,并伴随 gpg: Can't check signature: No public key。请以普通用户身份运行 gpg --recv-keys <key-id> 导入密钥,不要使用 sudo。sudo pacman-key --recv-keys 无法解决此问题,因为它会将密钥写入 /etc/pacman.d/gnupg,而 makepkg 不会检索该目录。

跳过 pacman-key --refresh-keys。 该命令会向密钥服务器查询你已持有的所有密钥,因此速度缓慢,且在密钥服务器繁忙时会直接失败。此外,它无法添加你密钥环中原本不存在的密钥,而这才是问题的核心。更新 archlinux-keyring 才是官方支持的解决方案。

如果更新中途停止

请阅读 /tmp/omarchy-update.log。这是 omarchy-update 输出日志的位置;当您查看终端时,最初的实际错误通常已被进度条覆盖。

如果机器状态比更新前更糟,请使用快照。在支持 snapper 的系统上,Omarchy 会在更新前自动创建快照,您可以重启并在引导菜单中选择更新前的快照。从该已知良好状态修复密钥环,然后重新执行更新。

服务器不是个人桌面

Omarchy 是一个桌面环境,而你通过 SSH 连接的服务器属于完全不同的范畴,需要不同的解决方案。服务器应选择提供长期支持且不包含桌面组件的发行版,相关内容请参考 如何为 VPS 选择合适的操作系统。服务器的首要任务是 通过密钥和强化 sshd 配置加固 SSH,其次是建立 日常维护流程,确保软件包不会像此密钥环一样过期。如果你喜欢 Omarchy 内置的编码助手快捷方式,这些助手同样可以在服务器上运行:在 VPS 上运行编码助手 介绍了相关设置,而 在 tmux 会话中保持 Claude Code 运行 则解决了合上笔记本电脑后如何保持任务后台运行的问题。

FAQ

在安装 archlinux-keyring 之前运行 sudo pacman -Sy 安全吗?

在此特定情况下是安全的,前提是你必须紧接着安装密钥环并执行完整升级。-Sy 会刷新软件包数据库,但你已安装的软件包仍处于旧版本,此时安装普通软件会导致部分升级,可能使二进制文件链接到你系统中不存在的库版本。archlinux-keyring 是数据而非链接代码,因此它是标准例外。不要在运行 pacman -Sy 后就停止操作。

如果 Omarchy 已经为我刷新了密钥环,为什么我还会收到密钥环错误?

更新程序会在升级软件包之前刷新 archlinux-keyring,因此出现该错误通常意味着你没有通过更新程序进行操作。手动运行 pacman -Syu 或 yay 会跳过该步骤。其他情况包括本地密钥环损坏而非仅仅是过期,此时密钥环软件包本身无法通过验证;或者你使用的是该步骤引入之前的旧版 Omarchy。使用 pacman-key --init 和 pacman-key --populate archlinux 进行完整重建可以解决损坏的情况。

什么是 omarchy-keyring,它和 archlinux-keyring 是同一个东西吗?

它们是来自不同来源的不同软件包。archlinux-keyring 是 Arch 的软件包,来自 core 仓库,其中包含 Arch 开发人员和受信任用户的密钥。omarchy-keyring 是第三方软件包。它来自 [omarchy] 仓库(位于 pkgs.omarchy.org),由 Omarchy 添加到你的 pacman 配置中,其中包含指纹为 40DFB630FF42BCFFB047046CF0134EE680CAC571 的密钥,用于签署 omarchy-* 软件包。Omarchy 要求两组密钥的签名均有效,因此丢失其中任何一个都会导致更新失败。

我应该运行 pacman-key --refresh-keys 来修复签名错误吗?

不应该。它会向密钥服务器查询你密钥环中的每一个密钥,这不仅速度缓慢,而且在密钥服务器无法访问时会失败,且它无法导入原本就不在密钥环中的密钥。你缺失的密钥会随 archlinux-keyring 软件包一同提供,因此运行 sudo pacman -Sy 后紧接 sudo pacman -S archlinux-keyring 是更快且受官方支持的途径。

我可以在 VPS 上安装 Omarchy 以使两台机器保持一致吗?

Omarchy 是一个为拥有屏幕、GPU 和键盘的机器构建的 Hyprland 桌面环境。在 VPS 上安装它不仅无法提供图形界面,还会带来大量需要维护更新的桌面软件包。请在 VPS 上运行服务器发行版,在笔记本电脑上保留 Omarchy,并接受这两台机器拥有不同软件包集合和不同更新命令的事实。

这篇文章对您有帮助吗?

#omarchy#arch-linux#pacman#troubleshooting#updates