瞭解實用的疑難排解步驟,解決您在 Artifact Registry 中管理 OS 套件時遇到的問題。
如要瞭解如何解決 OS 套件 Artifact Registry 遠端存放區的問題,請參閱「排解遠端存放區問題」。驗證和權限問題
您無法連線至存放區執行安裝套件等動作。套件管理員的輸出內容包含 401
或 403
錯誤,表示驗證或權限發生問題。
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 符合下列規定:
確認 VM 有相關聯的服務帳戶。
Compute Engine VM
- 前往「VM instances」(VM 執行個體) 頁面。
在 VM 清單中,按一下 VM 的名稱。
在「Details」分頁中,「API and identity management」下方會顯示服務帳戶和存取範圍。
根據預設,Compute Engine VM 會使用 Compute Engine 預設服務帳戶,並具備一組有限的存取範圍。預設的服務帳戶電子郵件地址格式為
PROJECT_NUMBER-compute@developer.gserviceaccount.com
。如要變更服務帳戶或將服務帳戶連結至 VM,請參閱「變更執行個體的服務帳戶與存取權範圍」。
其他 VM
對於其他 VM,您必須具備服務帳戶,才能代表 VM 執行作業。
如果您沒有服務帳戶,請建立服務帳戶。
建立服務帳戶時,請授予「Artifact Registry Reader」(
roles.artifactregistry.reader
) 角色,這樣您就不必在另一個步驟中設定權限。
確認 VM 服務帳戶具備存放區的讀取權限,以及
cloud-platform
API 存取範圍。Compute Engine VM
Artifact Registry 會自動擷取 VM 服務帳戶憑證。如果存放區位於 VM 以外的專案中,您必須授予 VM 服務帳戶「Artifact Registry Reader」角色。您也必須確保 VM 具有
cloud-platform
存取範圍。如要設定
cloud-platform
存取範圍,請按照下列步驟操作:停止 VM 執行個體,將
INSTANCE
替換為 VM 執行個體名稱。gcloud compute instances stop INSTANCE
設定存取範圍:
gcloud compute instances set-service-account INSTANCE \ --scopes=cloud-platform
重新啟動 VM 執行個體。
gcloud compute instances start INSTANCE
其他 VM
授予 VM 服務帳戶「Artifact Registry Reader」角色。根據預設,使用者管理的服務帳戶具有
cloud-platform
存取權範圍。-
如果您要從 Compute Engine VM 連線至 Apt 存放區,請確認存放區網址包含
ar+
前置字串。
憑證輔助程式問題
如果 VM 找不到 Apt 憑證輔助程式,就會顯示以下錯誤訊息:
E: Unable to locate package apt-transport-artifact-registry
當您嘗試在以不含 Apt 存放區簽署金鑰的映像檔建立的 VM 上安裝 apt-transport-artifact-registry
套件時,就會發生此錯誤。
如要解決這個問題,請按照下列步驟操作:
在 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
替換為存放區的區域或多區域位置。重新嘗試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.deb
的 python-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
如要解決這個問題,請按照下列步驟操作:
- 請嘗試上傳或匯入特定套件,確認您可以個別新增套件,而非以批次匯入。
- 如果多個套件都失敗,請以較小的批次匯入或上傳,以免作業時間超過符記到期時間。