排解 OS 套件問題

瞭解實用的疑難排解步驟,解決您在 Artifact Registry 中管理 OS 套件時遇到的問題。

如要瞭解如何解決 OS 套件 Artifact Registry 遠端存放區的問題,請參閱「排解遠端存放區問題」。

驗證和權限問題

您無法連線至存放區執行安裝套件等動作。套件管理員的輸出內容包含 401403 錯誤,表示驗證或權限發生問題。

Apt 錯誤示例:

Err:1 ar+https://us-west1-apt.pkg.dev/projects/my-project my-package Release
  Error downloading: code 401
E: Failed to fetch https://us-west1-apt.pkg.dev/projects/my-project/dists/quickstart-apt-repo/main/binary-amd64/Packages  403  Forbidden [IP: 74.125.20.82 443]
E: Some index files failed to download. They have been ignored, or old ones used instead.

Yum 錯誤示例:

/repodata/repomd.xml: [Errno 14] HTTPS Error 403 - Forbidden

這些錯誤可能有多種原因。請確認您的 VM 符合下列規定:

  1. 確認 VM 有相關聯的服務帳戶。

    Compute Engine VM

    1. 前往「VM instances」(VM 執行個體) 頁面。
    2. 在 VM 清單中,按一下 VM 的名稱。

      在「Details」分頁中,「API and identity management」下方會顯示服務帳戶和存取範圍。

    根據預設,Compute Engine VM 會使用 Compute Engine 預設服務帳戶,並具備一組有限的存取範圍。預設的服務帳戶電子郵件地址格式為 PROJECT_NUMBER-compute@developer.gserviceaccount.com

    如要變更服務帳戶或將服務帳戶連結至 VM,請參閱「變更執行個體的服務帳戶與存取權範圍」。

    其他 VM

    對於其他 VM,您必須具備服務帳戶,才能代表 VM 執行作業。

    1. 如果您沒有服務帳戶,請建立服務帳戶

    2. 建立服務帳戶時,請授予「Artifact Registry Reader」(roles.artifactregistry.reader) 角色,這樣您就不必在另一個步驟中設定權限。

  2. 確認 VM 服務帳戶具備存放區的讀取權限,以及 cloud-platform API 存取範圍。

    Compute Engine VM

    Artifact Registry 會自動擷取 VM 服務帳戶憑證。如果存放區位於 VM 以外的專案中,您必須授予 VM 服務帳戶「Artifact Registry Reader」角色。您也必須確保 VM 具有 cloud-platform 存取範圍。

    如要設定 cloud-platform 存取範圍,請按照下列步驟操作:

    1. 停止 VM 執行個體,將 INSTANCE 替換為 VM 執行個體名稱。

      gcloud compute instances stop INSTANCE
      
    2. 設定存取範圍:

      gcloud compute instances set-service-account INSTANCE \
          --scopes=cloud-platform
      
    3. 重新啟動 VM 執行個體。

      gcloud compute instances start INSTANCE
      

    其他 VM

    授予 VM 服務帳戶「Artifact Registry Reader」角色。根據預設,使用者管理的服務帳戶具有 cloud-platform 存取權範圍。

  3. 請確認您已按照步驟準備 VM,以便存取存放區。請參閱 AptYum 的準備說明。

  4. 確認您已正確設定 AptYum,以便存取存放區。

    如果您要從 Compute Engine VM 連線至 Apt 存放區,請確認存放區網址包含 ar+ 前置字串。

憑證輔助程式問題

如果 VM 找不到 Apt 憑證輔助程式,就會顯示以下錯誤訊息:

E: Unable to locate package apt-transport-artifact-registry

當您嘗試在以不含 Apt 存放區簽署金鑰的映像檔建立的 VM 上安裝 apt-transport-artifact-registry 套件時,就會發生此錯誤。

如要解決這個問題,請按照下列步驟操作:

  1. 在 VM 上安裝簽署金鑰:

    Debian VM

    使用下列指令安裝 Apt 存放區簽署金鑰:

    curl https://LOCATION-apt.pkg.dev/doc/repo-signing-key.gpg | sudo apt-key add -
    

    LOCATION 替換為存放區的區域或多區域位置

    Ubuntu VM

    使用下列指令安裝 Apt 存放區簽署金鑰:

    curl https://LOCATION-apt.pkg.dev/doc/repo-signing-key.gpg | sudo apt-key add - && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    

    LOCATION 替換為存放區的區域或多區域位置

  2. 重新嘗試VM 準備步驟

驗證外掛程式問題

如果 Yum 或 DNF 驗證外掛程式發生問題,就會顯示以下錯誤訊息:

Plugin "artifact-registry" can't be imported

這項錯誤可能有多種原因。如要解決錯誤,請嘗試直接執行外掛程式,確認依附元件、檢查 Python 問題,或找出其他可能的潛在問題。

如要直接執行外掛程式,請使用下列任一指令:

  • 針對 Yum 外掛程式:

    python /usr/lib/yum-plugins/artifact-registry.py
    
  • DNF 外掛程式:

    python3 /usr/lib/pythonVERSION-NUMBER/site-packages/dnf-plugins/artifact-registry.py
    

    VERSION-NUMBER 替換為 Linux 發行版的預設 Python 版本。舉例來說,Enterprise Linux 8 包含 Python 3.6。

    您可以列出已安裝外掛程式套件中的檔案,以便驗證 Python 程式庫目錄的名稱。

    rpm -ql dnf-plugin-artifact-registry|grep artifact-registry.py
    

缺少最近上傳的構件

如果您的 Apt 或 Yum 用戶端找不到最近上傳或匯入至存放區的套件,可能是因為重新產生 Apt 或 Yum 套件索引的程序尚未完成。

對於小型存放區,重新產生 Apt 或 Yum 索引檔案可能需要幾秒鐘的時間。如果是較大的存放區,重新建立索引的作業可能需要數分鐘或更長的時間。

如要確認套件是否已成功新增至存放區,請使用 Google Cloud CLI 列出套件中的檔案。執行下列指令:

gcloud artifacts files list \
    --package=PACKAGE \
    --project=PROJECT-ID \
    --repository=REPOSITORY \
    --location=LOCATION

舉例來說,您可以使用以下指令,檢查名為 python3-gflags_1.5.1-5_all.debpython-gflags 套件是否已成功上傳至 us-west1-apt.pkg.dev\apt-project\apt-repo 存放區:

gcloud artifacts files list \
    --package=python-gflags \
    --project=apt-project \
    --repository=apt-repo \
    --location=us-west1

如果套件上傳成功,檔案就會出現在輸出內容中,檔案名稱中會顯示專屬 ID,類似以下範例:

FILE                                                                  CREATE_TIME          UPDATE_TIME          SIZE (MB)  OWNER
pool/python3-gflags_1.5.1-5_all_2414c7af6a64c99a5f488aad366d637a.deb  2023-01-12T20:39:53  2023-01-12T20:39:53  0.035      projects/apt-project/locations/us-west1/repositories/apt-repo/packages/python3-gflags/versions/1.5.1-5

部分上傳或匯入的套件發生驗證錯誤

如果匯入或上傳檔案的時間超過驗證權杖的到期期限,超過期限的上傳作業將會失敗。權杖會在取得後 60 分鐘後失效。如果憑證已過期,匯入指令的輸出內容會顯示類似以下範例的錯誤訊息。

errors:
- error:
    code: 16
    message: The request does not have valid authentication credentials.
  gcsSource:
    uris:
    - gs://my-bucket/debs/python/python3-gflags_1.5.1-5_all.deb

如要解決這個問題,請按照下列步驟操作:

  1. 請嘗試上傳或匯入特定套件,確認您可以個別新增套件,而非以批次匯入。
  2. 如果多個套件都失敗,請以較小的批次匯入或上傳,以免作業時間超過符記到期時間。