Memecahkan masalah paket OS

Pelajari langkah-langkah pemecahan masalah yang mungkin berguna jika Anda mengalami masalah saat mengelola paket OS di Artifact Registry.

Untuk informasi tentang cara menyelesaikan masalah dengan repositori jarak jauh Artifact Registry untuk paket OS, lihat Memecahkan masalah repositori jarak jauh.

Masalah autentikasi dan izin

Anda tidak dapat terhubung ke repositori untuk tindakan seperti menginstal paket. Output dari pengelola paket menyertakan error 401 atau 403, yang menunjukkan masalah dengan autentikasi atau izin.

Contoh error Apt:

Err:1 ar+https://us-central1-apt.pkg.dev/projects/my-project my-package Release
  Error downloading: code 401
E: Failed to fetch https://us-central1-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.

Contoh error Yum:

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

Ada sejumlah kemungkinan penyebab error ini. Pastikan VM Anda memenuhi persyaratan berikut:

  1. Pastikan VM memiliki akun layanan terkait.

    VM Compute Engine

    1. Buka halaman VM instances.
    2. Dalam daftar VM, klik nama VM Anda.

      Di tab Details, akun layanan dan cakupan akses akan muncul di bagian API and identity management.

    Secara default, VM Compute Engine menggunakan akun layanan default Compute Engine dan memiliki kumpulan cakupan akses yang terbatas. Alamat email akun layanan default berformat PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Untuk mengubah akun layanan atau melampirkan akun layanan ke VM, lihat Mengubah akun layanan dan cakupan akses untuk instance.

    VM lainnya

    Untuk VM lain, Anda harus memiliki akun layanan untuk bertindak atas nama VM.

    1. Buat akun layanan jika Anda belum memilikinya.

    2. Berikan peran Pembaca Artifact Registry (roles.artifactregistry.reader) saat Anda membuat akun layanan sehingga Anda tidak perlu mengonfigurasi izin dalam langkah terpisah.

  2. Pastikan akun layanan VM memiliki izin baca ke repositori serta cakupan akses cloud-platform API.

    VM Compute Engine

    Artifact Registry otomatis mengambil kredensial akun layanan VM. Konfigurasi yang diperlukan bergantung pada apakah Anda menggunakan akun layanan default atau akun layanan yang dikelola pengguna.

    Akun layanan default

    Jika VM menggunakan akun layanan default, akun layanan ini memiliki peran Editor secara default, yang mencakup izin baca ke repositori dalam project yang sama. Jika repositori berada dalam project yang berbeda dengan VM, berikan peran Pembaca Artifact Registry ke akun layanan VM.

    Selain itu, akun layanan default tidak memiliki semua cakupan akses API yang diperlukan.

    Untuk menetapkan cakupan akses cloud-platform,

    1. Hentikan instance VM, ganti INSTANCE dengan nama instance VM.

      gcloud compute instances stop INSTANCE
      
    2. Tetapkan cakupan akses:

      gcloud compute instances set-service-account INSTANCE \
          --scopes=cloud-platform
      
    3. Mulai ulang instance VM.

      gcloud compute instances start INSTANCE
      
    Akun layanan yang dikelola pengguna
    Jika VM menggunakan akun layanan yang dikelola pengguna, berikan peran Reader Artifact Registry ke akun layanan VM. Akun layanan yang dikelola pengguna memiliki cakupan akses cloud-platform.

    VM lainnya

    Berikan peran Artifact Registry Reader ke akun layanan VM. Secara default, akun layanan yang dikelola pengguna memiliki cakupan akses cloud-platform.

  3. Pastikan Anda telah mengikuti langkah-langkah untuk menyiapkan VM agar dapat mengakses repositori. Lihat petunjuk persiapan Apt atau Yum.

  4. Pastikan Anda telah mengonfigurasi Apt atau Yum dengan benar untuk mengakses repositori.

    Jika Anda terhubung ke repositori Apt dari VM Compute Engine, pastikan URL repositori menyertakan awalan ar+.

Masalah helper kredensial

Pesan error berikut muncul saat VM tidak dapat menemukan helper kredensial Apt:

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

Error ini terjadi saat Anda mencoba menginstal paket apt-transport-artifact-registry di VM yang dibuat dari image yang tidak menyertakan kunci penandatanganan repositori Apt.

Untuk menyelesaikan masalah ini, lakukan tindakan berikut:

  1. Instal kunci penandatanganan di VM:

    VM Debian

    Instal kunci penandatanganan repositori Apt, menggunakan perintah berikut:

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

    Ganti LOCATION dengan lokasi repositori.

    VM Ubuntu

    Instal kunci penandatanganan repositori Apt, menggunakan perintah berikut:

    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 -
    

    Ganti LOCATION dengan lokasi repositori.

  2. Coba lagi langkah-langkah persiapan VM.

Masalah plugin autentikasi

Pesan error berikut muncul saat ada masalah dengan plugin autentikasi Yum atau DNF:

Plugin "artifact-registry" can't be imported

Error ini dapat terjadi karena beberapa alasan. Untuk mengatasi error, coba jalankan plugin secara langsung untuk mengonfirmasi dependensi, memeriksa masalah Python, atau mengungkapkan kemungkinan masalah mendasar lainnya.

Untuk menjalankan plugin secara langsung, gunakan salah satu perintah berikut:

  • Untuk plugin Yum:

    python /usr/lib/yum-plugins/artifact-registry.py
    
  • Untuk plugin DNF:

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

    Ganti VERSION-NUMBER dengan versi Python default untuk distribusi Linux. Misalnya, Enterprise Linux 8 menyertakan Python 3.6.

    Anda dapat mencantumkan file dalam paket plugin yang diinstal untuk memverifikasi nama direktori library Python.

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

Artefak yang baru diupload tidak ada

Jika klien Apt atau Yum tidak menemukan paket yang baru saja diupload atau diimpor ke repositori, hal ini mungkin karena proses untuk membuat ulang indeks paket Apt atau Yum belum selesai.

Untuk repositori kecil, pembuatan ulang file indeks Apt atau Yum dapat memerlukan waktu beberapa detik. Untuk repositori yang lebih besar, pengindeksan ulang mungkin memerlukan waktu beberapa menit atau lebih lama.

Untuk memverifikasi bahwa paket berhasil ditambahkan ke repositori, gunakan Google Cloud CLI untuk mencantumkan file dalam paket. Jalankan perintah:

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

Misalnya, Anda dapat memeriksa apakah paket python-gflags bernama python3-gflags_1.5.1-5_all.deb berhasil diupload ke repositori us-central1-apt.pkg.dev\apt-project\apt-repo dengan perintah:

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

Jika paket berhasil diupload, file akan muncul dalam output dengan ID unik dalam nama file, mirip dengan contoh berikut:

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-central1/repositories/apt-repo/packages/python3-gflags/versions/1.5.1-5

Error autentikasi untuk beberapa paket yang diupload atau diimpor

Jika waktu untuk mengimpor atau mengupload file melebihi periode masa berlaku token autentikasi, upload setelah periode masa berlaku akan gagal. Masa berlaku token berakhir 60 menit setelah Anda mendapatkannya. Error yang mirip dengan contoh berikut akan muncul dalam output dari perintah impor jika masa berlaku token telah berakhir.

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

Untuk mengatasi masalah ini:

  1. Coba upload atau impor paket tertentu hanya untuk memverifikasi bahwa Anda dapat menambahkan paket satu per satu, bukan dalam impor batch.
  2. Jika beberapa paket gagal, impor atau upload dalam batch yang lebih kecil sehingga operasi tidak melebihi periode habis masa berlaku token.