SLES Zypper HTTP 500:尋找故障儲存庫

當zypper refreshSLES 系統傳回 HTTP 500 錯誤時,首先要確定是哪個儲存庫 URL 傳回的。 HTTP 500 表示處理請求的伺服器遇到了意外情況;回應伺服器可能是儲存庫主機、組織的 RMT 伺服器或 HTTP 代理。隔離故障儲存庫,並在清除本機元資料之前修復或報告該端點。強制重建快取無法修復仍回傳 500 錯誤的伺服器。

SUSE 目前的 SLES 15 SP7 管理和升級指南文件中記錄了儲存庫清單和刷新命令,包括zypper refresh -fdb重建本機儲存庫元資料的命令。但這些指南並未提及目前 SLES 範圍內的 HTTP 500 錯誤。實際的解決方法取決於該 URL 指向的是 SUSE 客戶中心、內部鏡像還是第三方儲存庫。

是一個倉庫故障還是多個倉庫都故障?

首先記錄儲存庫別名和 URL。在 SLES 系統上,運作:

zypper repos -u

此-u選項會顯示每個已配置儲存庫的來源。記下哪些項目已啟用並設定為刷新,然後比較失敗 URL 的主機名稱。如果某個第三方儲存庫失敗,而 SUSE 更新來源刷新成功,則應調查該儲存庫的擁有者。如果多個儲存庫指向相同內部主機且全部失敗,則共用映像、RMT 服務、反向代理或其上游連線更有可能是問題所在。

在 Linux 終端機中輸入 zypper repos -u 指令,即可檢查已設定的儲存庫 URL。
用於在故障排除之前列出儲存庫別名及其配置的來源 URL 的終端命令。

接下來,僅按別名刷新受影響的儲存庫:

sudo zypper refresh -f 'Vendor-App'

請替換Vendor-App為顯示的準確別名zypper repos -u。這樣可以避免螢幕上出現來自無關倉庫的重複錯誤,並為您提供一個重點明確的結果,以便與管理員分享。如果別名包含空格,請保留單引號。請保留故障的準確 URL 和時間戳,但在發送日誌或螢幕截圖之前,請刪除任何嵌入的使用者名稱、密碼、令牌或其他敏感資訊。

zypper refresh 指令僅針對 Vendor-App 儲存庫別名。
使用終端命令刷新一個儲存庫別名,以查看 HTTP 500 是否僅限於該來源。

元資料端點本身是否回傳 HTTP 500 錯誤?

閱讀完整的 Zypper 錯誤訊息,並確定其中指定的元資料 URL,該 URL 通常是儲存庫repodata目錄下的一個檔案。如果無需憑證即可查詢該端點,請將其與 SLES 主機傳回的 HTTP 回應進行比較:

curl -sS -D - -o /dev/null --max-time 20 "$METADATA_URL"

設定METADATA_URL為故障的元資料 URL,但不要將憑證放在 URL 或命令列中。此指令會列印回應頭並丟棄回應正文。類似這樣的結果HTTP/1.1 500確認請求路徑中的某個伺服器回傳了錯誤;但它並不能證明錯誤是由來源伺服器還是中間伺服器產生的。 Curl 使用的身份驗證或代理設定可能與 Zypper 不同,因此請將此視為對比,而非最終的複現。如果儲存庫存取需要身份驗證,請使用貴組織認可的測試方法,而不是暴露憑證。

curl 指令要求儲存在 REPO_URL 變數中的元資料 URL 的 HTTP 回應頭。
用於檢查 Zypper 報告的來自確切儲存庫元資料端點的 HTTP 回應的終端命令。

500 回應與本地元資料快取問題不同。它也不同於 DNS 故障、TLS 憑證錯誤、逾時以及驗證回應(例如 401 或 403)。這些訊息需要不同的檢查。請勿停用 TLS 驗證、將儲存庫變更為純 HTTP 或重複刪除快取來消除 500 錯誤。對於 HTTP 語義,RFC 9110 將 500 定義為阻止請求完成的意外伺服器狀況。

應該在哪裡進行維修?

  • SUSE 客戶中心儲存庫:如果故障看似暫時性的,請在短時間內重試一次。如果相同 SUSE 託管端點持續傳回 500 錯誤,請記錄產品、服務包、架構、儲存庫 URL 和故障時間,然後聯絡您所在組織的 SUSE 支援。如果回應顯示存在授權或存取問題,請確認註冊和訂閱詳細資訊;HTTP 500 錯誤本身並不能確定訂閱無效。
  • RMT 或其他內部鏡像:請鏡像管理員檢查記錄時間點的伺服器和反向代理日誌,確認所要求的儲存庫已啟用並同步,並驗證元資料檔案是否存在於服務路徑。 SUSE 將 RMT 說明為 SLES 用戶端從本機伺服器擷取更新而非直接聯絡 SCC 的一種方式。
  • 第三方軟體倉庫:請檢查供應商目前的軟體倉庫說明,並確認 URL 與已安裝的 SLES 版本和架構相符。如果軟體倉庫已遷移,請僅將其更新為該供應商發布的 URL。僅在確認軟體倉庫是可選且不再需要後才停用它;切勿為了掩蓋錯誤而停用必需的 SLES 更新來源。

您可以使用 Zypper 或 YaST 檢查和變更儲存庫狀態。例如,文件中提供的zypper modifyrepo命令可以透過別名停用儲存庫,但這只是臨時的操作選擇,並非修復故障來源的根本方法。請避免隨意編輯產生的儲存庫 URL,尤其是在服務包遷移之後,因為產品儲存庫和更新儲存庫使用特定版本的路徑。

何時應該重建本地元資料快取?

只有在伺服器或代理程式傳回有效回應後,才應重試所有已啟用的儲存庫:

sudo zypper refresh -f
zypper refresh -f 指令會在伺服器端問題解決後強制刷新儲存庫元資料。
用於在儲存庫端點恢復正常後重試強制刷新的終端命令。

如果終端現在有回應,但 Zypper 仍然報告本地儲存庫資料過時或不一致,SUSE 的 SLES 15 SP7 故障排除部分建議使用以下命令完成元資料刷新和資料庫重建:

sudo zypper refresh -fdb

這將強制下載原始元資料並重建 Zypper 的本機可解析資料庫。它適用於解決本地元資料問題;但無法解決持續出現的 500 回應。請勿將刷新儲存庫元資料與安裝更新混淆:僅在刷新成功完成後才執行常規的修補程式或更新命令。

如何驗證修復是否成功?

zypper refresh -f 'ALIAS'首先對先前失敗的來源執行此操作,然後sudo zypper refresh -f對所有已啟用的儲存庫執行此操作。當受影響的儲存庫元資料下載成功且未出現 HTTP 500 錯誤,且 Zypper 完成且未發現任何失敗的已啟用來源時,即確認修復已成功。如果仍然有某個來源失敗,請保留完整的 URL、狀態碼、回應頭和時間,並將其提供給該端點的擁有者。

官方參考資料

留下評論

使用 Systemd 定時器可靠地執行 ownCloud 後台作業

將按需作業運行替換為 systemd 定時器,該定時器每 15 分鐘執行一次 ownCloud 支援的 occ system:cron 命令。

透過尋找故障路由來恢復 ownCloud WebDAV 同步

透過 Apache、Nginx 或反向代理程式追蹤 WebDAV 請求,然後使用經過驗證的 PROPFIND 測試確認 ownCloud 同步功能正常。

設定 Nextcloud 的公共 URL,以便它可以存取自身。

透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。

使用 Systemd 定時器自動執行 Nextcloud Cron

檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。

使用 Redis 清除 Nextcloud 的檔案鎖定警告

啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。

如何才能獲得 Nextcloud A+ 安全評級

如何才能獲得 Nextcloud A+ 安全評級

使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。

啟用 Nextcloud 伺服器端加密,並評估其影響

為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。

將 Elasticsearch 全文搜尋功能新增至 Nextcloud

將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。

為 Nextcloud 已刪除檔案設定可靠的過期策略

為 Nextcloud 已刪除檔案設定可靠的過期策略

配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。