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 alla gestione remota di Artifact Registry per i pacchetti di sistemi operativi, Risolvi 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 di pacchetti include un errore 401 o 403, che indica problemi con l'autenticazione o le autorizzazioni.

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

Esempio di errore Yum:

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

Le cause di questi errori possono essere diverse. 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 di Compute Engine utilizzano account di servizio predefinito e dispongono di 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 avere un account di servizio che agisca per conto della VM.

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

    2. Concedi il ruolo Lettore di 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 della VM disponga delle 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 delle VM. La configurazione richiesta dipende dal fatto che tu stia utilizzando l'account di servizio predefinito o un account di servizio gestito dall'utente.

    Service account predefinito

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

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

    Per impostare l'ambito di accesso cloud-platform:

    1. Arresta l'istanza VM, sostituendo INSTANCE con 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
      
    Service account gestito dall'utente
    Se la VM utilizza un account di servizio gestito dall'utente, concedi il ruolo Lettore del registry di elementi all'account di servizio della VM. Gli account di servizio gestiti dall'utente hanno l'ambito di accesso cloud-platform.

    Altra VM

    Concedi il ruolo Lettore Artifact Registry al 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 ad accedere al repository. Vedi la preparazione per Apt o Yum istruzioni.

  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'assistente per le 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 apt-transport-artifact-registry su una VM creato da un'immagine che non include l'APT chiave di firma del repository.

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 posizione del repository.

  2. Riprova i passaggi di preparazione della VM.

Problemi del 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 del 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 indice Apt o Yum può richiedere diverse secondi. Per i repository più grandi, la reindicizzazione potrebbe richiedere diversi minuti più a lungo.

Per verificare che un pacchetto sia stato aggiunto 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 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-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 oltre questo periodo non andranno a buon fine. I token scadono 60 minuti una volta ottenuti. Viene visualizzato un errore simile all'esempio seguente dall'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 il problema:

  1. Prova a caricare o importare il pacchetto specifico solo per verificare che tu possa aggiungere il pacchetto singolarmente anziché in un'importazione in batch.
  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.