Risolvere i problemi relativi ai pacchetti del sistema operativo

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

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

Problemi relativi ad autenticazione e autorizzazioni

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

Errori Apt di esempio:

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.

Esempio di errore Yum:

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

Esistono diverse cause possibili per questi errori. Assicurati che la tua 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, l'account di servizio e gli ambiti di accesso vengono visualizzati in Gestione di API e identità.

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

    Per cambiare l'account di servizio o collegare un account di servizio a una VM, consulta la pagina Modificare l'account di servizio e gli ambiti di accesso per un'istanza.

    Altra VM

    Per le altre VM, devi avere un account di servizio per agire per conto della VM.

    1. Crea un account di servizio, se non ne hai uno.

    2. Concedi il ruolo Lettore Artifact Registry (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 VM disponga delle autorizzazioni di lettura per il repository e dell'ambito di accesso all'API cloud-platform.

    VM di Compute Engine

    Artifact Registry recupera automaticamente le credenziali dell'account di servizio VM. La configurazione richiesta dipende dall'utilizzo o meno dell'account di servizio predefinito o di un account di servizio gestito dall'utente.

    Account di servizio predefinito

    Se la VM utilizza l'account di servizio predefinito, questo account di servizio ha il ruolo Editor per impostazione predefinita, che include le autorizzazioni di lettura per i repository nello stesso progetto. Se il repository si trova in un progetto diverso dalla VM, concedi il ruolo Lettore di Artifact Registry all'account di servizio VM.

    Inoltre, l'account di servizio predefinito non dispone di tutti gli ambiti di accesso API richiesti.

    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
      
    Account di servizio gestito dall'utente
    Se la VM utilizza un account di servizio gestito dall'utente, concedi il ruolo Lettore Artifact Registry all'account di servizio VM. Gli account di servizio gestiti dall'utente hanno l'ambito di accesso cloud-platform.

    Altra VM

    Concedi il ruolo Lettore Artifact Registry all'account di servizio 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 per l'accesso al repository. Consulta le istruzioni per la 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 di 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 delle credenziali Apt, viene visualizzato il seguente messaggio di errore:

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

L'errore si verifica quando tenti di 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 posizione 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à del repository.

  2. Riprova i passaggi di preparazione della VM.

Problemi relativi ai 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 relativi a Python o individuare altri possibili problemi sottostanti.

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 tuo client Apt o Yum non trova un pacchetto che è stato caricato o importato di recente nel tuo repository, è possibile che il processo per rigenerare l'indice dei pacchetti Apt o Yum non sia ancora stato completato.

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

Per verificare se un pacchetto è 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-central1-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-central1

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

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

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 dopo il periodo di scadenza non andranno a buon fine. I token scadono 60 minuti dopo che li hai ottenuti. Un errore simile al seguente esempio viene visualizzato nell'output del comando di importazione se il token è scaduto.

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 questo problema:

  1. Prova a caricare o a importare il pacchetto specifico solo per verificare che sia possibile aggiungerlo singolarmente anziché in un'importazione batch.
  2. In caso di errori di più pacchetti, importa o carica in batch più piccoli in modo che l'operazione non superi il periodo di scadenza del token.