Risolvere i problemi relativi al pacchetto del sistema operativo

Scopri i passaggi per la risoluzione dei problemi, utili in caso di problemi di gestione dei pacchetti OS in Artifact Registry.

Per informazioni sulla risoluzione dei problemi relativi ai repository remote di Artifact Registry per i pacchetti del sistema operativo, consulta Risolvere i problemi relativi ai repository remoti.

Problemi di autenticazione e autorizzazioni

Non puoi connetterti a un repository per azioni come l'installazione di un pacchetto. L'output del gestore dei pacchetti include un errore 401 o 403, che indica problemi di autenticazione o autorizzazioni.

Esempi di errori 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.

Esempio di errore Yum:

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

Esistono diverse possibili cause di questi errori. Assicurati che la VM soddisfi i seguenti requisiti:

  1. Verifica che alla VM sia associato un account di servizio.

    VM di Compute Engine

    1. Vai alla pagina Istanze VM.
    2. Nell'elenco delle VM, fai clic sul nome della VM.

      Nella scheda Dettagli, gli account di servizio e gli ambiti di accesso vengono visualizzati in Gestione API e identità.

    Per impostazione predefinita, le VM Compute Engine utilizzano l'account di servizio predefinito di Compute Engine e hanno un insieme limitato di ambiti di accesso. L'indirizzo email dell'account di servizio predefinito è nel formato PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Per modificare l'account di servizio o associarne uno a una VM, consulta Modificare l'account di servizio e gli ambiti di accesso per un'istanza.

    Altra VM

    Per le altre VM, devi disporre di un account di servizio che agisca per conto della VM.

    1. Se non hai un account di servizio, crealo.

    2. Concedi il ruolo Artifact Registry Reader (roles.artifactregistry.reader) durante la creazione dell'account di servizio in modo da non dover configurare le autorizzazioni in un passaggio separato.

  2. Assicurati che l'account di servizio della VM abbia le autorizzazioni di lettura per il repository nonché l'ambito di accesso all'API cloud-platform.

    VM di Compute Engine

    Artifact Registry recupera automaticamente le credenziali dell'account di servizio della VM. Se il repository si trova in un progetto diverso dalla VM, devi concedere il ruolo Lettore di Artifact Registry all'account di servizio della VM. Devi anche assicurarti che la VM abbia l'ambito di accesso cloud-platform.

    Per impostare l'ambito di accesso cloud-platform:

    1. Arresta l'istanza VM, sostituendo INSTANCE con il nome dell'istanza VM.

      gcloud compute instances stop INSTANCE
      
    2. Imposta l'ambito di accesso:

      gcloud compute instances set-service-account INSTANCE \
          --scopes=cloud-platform
      
    3. Riavvia l'istanza VM.

      gcloud compute instances start INSTANCE
      

    Altra VM

    Concedi il ruolo Lettore del registry di elementi all'account di servizio della VM. Per impostazione predefinita, gli account di servizio gestiti dall'utente hanno l'ambito di accesso cloud-platform.

  3. Verifica di aver seguito i passaggi per preparare la VM ad accedere al repository. Consulta le istruzioni di preparazione di Apt o Yum.

  4. Verifica di aver configurato correttamente Apt o Yum per accedere al repository.

    Se ti connetti a un repository Apt da una VM Compute Engine, assicurati che l'URL del repository includa il prefisso ar+.

Problemi relativi all'helper delle credenziali

Quando la VM non riesce a trovare l'helper per le credenziali Apt, viene visualizzato il seguente messaggio di errore:

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

L'errore si verifica quando provi a installare il pacchetto apt-transport-artifact-registry su una VM creata da un'immagine che non include la chiave di firma del repository Apt.

Per risolvere il problema:

  1. Installa la chiave di firma sulla VM:

    VM Debian

    Installa le chiavi di firma del repository Apt utilizzando il seguente comando:

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

    Sostituisci LOCATION con la località regionale o multiregionale del repository.

    VM Ubuntu

    Installa le chiavi di firma del repository Apt utilizzando il seguente comando:

    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 -
    

    Sostituisci LOCATION con la località regionale o multiregionale del repository.

  2. Riprova i passaggi di preparazione della VM.

Problemi relativi al plug-in di autenticazione

Quando si verifica un problema con il plug-in di autenticazione Yum o DNF, viene visualizzato il seguente messaggio di errore:

Plugin "artifact-registry" can't be imported

Questo errore può verificarsi per diversi motivi. Per risolvere l'errore, prova a eseguire direttamente il plug-in per confermare le dipendenze, verificare la presenza di problemi di Python o rilevare altri possibili problemi di fondo.

Per eseguire direttamente il plug-in, utilizza uno dei seguenti comandi:

  • Per il plug-in Yum:

    python /usr/lib/yum-plugins/artifact-registry.py
    
  • Per il plug-in DNF:

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

    Sostituisci VERSION-NUMBER con la versione Python predefinita per la distribuzione Linux. Ad esempio, Enterprise Linux 8 include Python 3.6.

    Puoi elencare i file nel pacchetto del plug-in installato per verificare il nome della directory della libreria Python.

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

Elementi caricati di recente mancanti

Se il client Apt o Yum non trova un pacchetto caricato o importato di recente nel tuo repository, è possibile che la procedura di rigenerazione dell'indice dei pacchetti Apt o Yum non sia ancora completata.

Per i repository di piccole dimensioni, la rigenerazione del file dell'indice Apt o Yum può richiedere diversi secondi. Per i repository più grandi, la reindicizzazione potrebbe richiedere diversi minuti o più.

Per verificare che un pacchetto sia stato aggiunto correttamente al repository, utilizza Google Cloud CLI per elencare i file nel pacchetto. Esegui il comando:

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

Ad esempio, puoi verificare che il pacchetto python-gflags denominato python3-gflags_1.5.1-5_all.deb sia stato caricato correttamente nel repository us-west1-apt.pkg.dev\apt-project\apt-repo con il comando:

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

Se il pacchetto è stato caricato correttamente, il file viene visualizzato nell'output con un identificatore univoco nel nome file, simile all'esempio seguente:

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

Errore di autenticazione per alcuni pacchetti caricati o importati

Se il tempo necessario per importare o caricare i file supera il periodo di scadenza del token di autenticazione, i caricamenti oltre questo periodo non andranno a buon fine. I token scadono 60 minuti dopo che li hai ottenuti. Se il token è scaduto, nell'output del comando di importazione viene visualizzato un errore simile all'esempio seguente.

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

Per risolvere il problema:

  1. Prova a caricare o importare solo il pacchetto specifico per verificare di poterlo aggiungere singolarmente anziché in un'importazione collettiva.
  2. Se più pacchetti non sono riusciti, importa o carica in batch più piccoli in modo che l'operazione non superi il periodo di scadenza del token.