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

Omarchy 更新出現 keyring 錯誤的修復方法

Omarchy 更新若因 PGP 簽章無效或損毀中斷,請先更新 archlinux-keyring。本文提供手動修復 pacman 金鑰環的正確指令,避免因部分升級導致系統損壞。

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

為何 Omarchy 更新會因 keyring 錯誤而失敗

當 Omarchy 更新因 invalid or corrupted package (PGP signature) 而中斷時,這是 keyring 錯誤,而非下載損毀。您系統中的 archlinux-keyring 版本舊於 Arch 目前使用的簽章金鑰,因此 pacman 會拒絕處理無法追溯至受信任金鑰的套件。請重新整理該 keyring,然後再次執行更新。

這並非 Omarchy 特有的問題。這是 Arch 常見的失敗模式,而 Omarchy 將其呈現給許多初次使用 Arch 的使用者。

在執行指令前有一點說明。Omarchy 是基於 Arch 的 Hyprland 桌面環境,因此以下內容皆針對您桌機上的機器。本指南不適用於在 VPS 上安裝 Omarchy。您的伺服器應運行其他系統,最後一節會提供相關參考頁面。

最小修正

先執行 2 個命令,再進行更新:

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... 階段。這些訊息表示新的開發者金鑰已加入您的 keyring。剛才在 1 分鐘前失敗的更新,現在會執行至完成。

這個流程就是使用者在 Omarchy issue 4608 回報的流程。該回報也促成了將 keyring refresh 納入 updater 本身。

單獨執行 pacman -Sy 時必須特別注意。它只會下載新的套件資料庫,不會升級現有套件。在這個狀態下安裝任意軟體,就是進行 partial upgrade。partial upgrade 會破壞 Arch 系統,因為新建置的套件預期使用新資料庫列出的 library 版本,但您系統中的版本仍是舊版。archlinux-keyring 是已接受的例外,因為它提供的是 key material,而不是已連結的 binary;執行後應立即進行完整升級。

omarchy update 是 Omarchy 4 使用的命令。Omarchy 4 又稱 Quattro,於 August 2026 發布。截至 October 2026,Omarchy 4 是目前的系列;v4.0.6 於 19 October 2026 發布,是最新版本。v4.5.0 release candidate 於 20 October 2026 發布,並標示為 pre-release。該命令背後的 script 是 omarchy-update,也可以直接執行。請優先使用這兩者,而不要直接執行單獨的 pacman -Syu,因為 Omarchy updater 會先建立 filesystem snapshot,並執行讓設定與新版本保持一致所需的 migration。手動執行 pacman -Syu 會略過這兩個步驟。

omarchy update keyring 的作用

Omarchy 4 會個別公開 keyring 步驟:

omarchy update keyring

它會處理 2 個不同的 keyring。自 v4.0.5 起,該版本於 18 October 2026 發布,會執行 sudo pacman -Sy --needed --noconfirm archlinux-keyring。因此只有在有更新版本時才會重新安裝 keyring,因為新增或撤銷的金鑰會以新的套件版本送入 repository。直到 v4.0.4 為止,程式會省略 --needed,並在每次更新時重新安裝 keyring。該版本的 script 說明,這是因為 keyring 的內容可能在套件版本不變時仍發生變更。無論採用哪種方式,這個步驟都會先同步資料庫,並在主要升級前執行。當 Omarchy signing key 或 omarchy-keyring 套件不存在時,它也會擷取該金鑰並在本機簽署:

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

之所以有 2 個 keyring,是因為您的電腦會從 2 個來源安裝套件。archlinux-keyring 是 Arch 在 core repository 中提供的套件,包含 Arch developer 與 trusted user 的金鑰。omarchy-keyring 則是 third party 套件。它來自 Omarchy 加入 /etc/pacman.conf 的 [omarchy] repository;在 stable channel 中,該 repository 是 Server = https://pkgs.omarchy.org/stable/$arch,並包含用來簽署每個 omarchy-* 套件的金鑰。Omarchy 4 提供 SigLevel = Required DatabaseOptional,因此無論套件來自哪個 repository,只要其簽章無法對應到受信任的金鑰,就會遭到拒絕。

為何「未知信任」是金鑰問題而非下載問題

錯誤訊息如下所示。套件名稱與簽署者會隨機器而異,但最後兩行固定不變。

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,則表示 gpg 用於金鑰伺服器流量的輔助程式 dirmngr 無法取得該金鑰。通常是您的網路封鎖了請求。未加前綴的裸 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 會在更新前自動建立快照,您可以重新開機並在開機選單中選擇更新前的快照。在該已知正常的狀態下修復 keyring,然後再次執行更新。

伺服器並非您的個人電腦

Omarchy 是個人電腦,而您透過 SSH 連線的機器則是另一個問題,需要不同的解決方案。伺服器需要具備長期支援週期且不含桌面環境的發行版,這正是 為您的 VPS 選擇合適的作業系統 的主題。該機器上的首要任務是 透過金鑰與強化的 sshd 設定來鎖定 SSH,其次則是建立一套 維護常規,確保套件不會像這個金鑰環一樣過時。如果您喜歡 Omarchy 的內建程式碼代理捷徑,這些代理程式同樣可以在伺服器上執行:在 VPS 上執行程式碼代理 涵蓋了設定方式,而 在 tmux session 中保持 Claude Code 運作 則說明了當您闔上筆電離開後如何維持其執行。

FAQ

在安裝 archlinux-keyring 之前執行 sudo pacman -Sy 安全嗎?

在這種情況下是安全的,但前提是您必須緊接著安裝 keyring 並執行完整升級。-Sy 會更新軟體包資料庫,但您已安裝的軟體包仍維持舊版;若在此狀態下安裝一般軟體,會導致部分升級(partial upgrade),可能使二進位檔案連結到您系統中不存在的函式庫版本。archlinux-keyring 屬於資料而非連結程式碼,因此是標準的例外情況。請勿在執行 pacman -Sy 後中斷操作。

如果 Omarchy 已為我更新 keyring,為什麼仍會出現 keyring 錯誤?

更新程式會在升級軟體包前先更新 archlinux-keyring,因此出現錯誤通常代表您沒有透過更新程式操作。手動執行 pacman -Syu 或 yay 會跳過該步驟。其他情況包括本地 keyring 損毀而非僅是過期(導致 keyring 軟體包本身無法驗證),或是使用了該步驟出現之前的舊版 Omarchy。使用 pacman-key --init 和 pacman-key --populate archlinux 進行完整重建可解決損毀問題。

什麼是 omarchy-keyring?它和 archlinux-keyring 一樣嗎?

它們是來自不同來源的軟體包。archlinux-keyring 是 Arch 的軟體包,來自 core 儲存庫,內含 Arch 開發者與受信任使用者的金鑰。omarchy-keyring 則是第三方軟體包。它來自 pkgs.omarchy.org 的 [omarchy] 儲存庫,該儲存庫由 Omarchy 加入您的 pacman 設定中,並持有指紋為 40DFB630FF42BCFFB047046CF0134EE680CAC571 的金鑰,用於簽署 omarchy-* 軟體包。Omarchy 要求兩組金鑰皆具備有效簽章,因此遺失其中任何一個都會導致更新失敗。

我應該執行 pacman-key --refresh-keys 來修復簽章錯誤嗎?

不應該。該指令會向金鑰伺服器查詢 keyring 中的每一把金鑰,速度緩慢且在金鑰伺服器無法連線時會失敗,且無法匯入原本就不在 keyring 中的金鑰。您遺失的金鑰會隨 archlinux-keyring 軟體包一併提供,因此執行 sudo pacman -Sy 後接著執行 sudo pacman -S archlinux-keyring 不僅速度更快,也是官方支援的路徑。

我可以在 VPS 上安裝 Omarchy 以讓兩台機器保持一致嗎?

Omarchy 是為配備螢幕、GPU 與鍵盤的機器所設計的 Hyprland 桌面環境。在 VPS 上安裝它不僅無法顯示畫面,還會帶來大量需要維護的桌面軟體包。請在 VPS 上執行伺服器發行版,並將 Omarchy 保留在筆記型電腦上,同時接受兩台機器擁有不同軟體包集合與不同更新指令的事實。

這篇文章對您有幫助嗎?

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