Résoudre les problèmes liés aux packages OS

Découvrez les étapes de dépannage qui pourraient vous être utiles si vous rencontrez des problèmes lors de la gestion des packages du système d'exploitation dans Artifact Registry.

Pour plus d'informations sur la résolution des problèmes liés aux dépôts distants Artifact Registry pour les packages du système d'exploitation, consultez la section Résoudre les problèmes liés aux dépôts distants.

Problèmes d'authentification et d'autorisation

Vous ne pouvez pas vous connecter à un dépôt pour effectuer des actions telles que l'installation d'un package. Le résultat du gestionnaire de packages inclut une erreur 401 ou 403, qui indique des problèmes d'authentification ou d'autorisations.

Exemples d'erreurs d'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.

Exemple d'erreur Yum:

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

Plusieurs causes peuvent être à l'origine de ces erreurs. Assurez-vous que votre VM répond aux exigences suivantes:

  1. Vérifiez que la VM est associée à un compte de service.

    VM Compute Engine

    1. Accédez à la page Instances de VM.
    2. Dans la liste des VM, cliquez sur le nom de votre VM.

      Dans l'onglet Détails, le compte de service et les niveaux d'accès apparaissent sous API et gestion des identités.

    Par défaut, les VM Compute Engine utilisent le compte de service par défaut de Compute Engine et disposent d'un ensemble limité de niveaux d'accès. L'adresse e-mail du compte de service par défaut est au format PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Pour modifier le compte de service ou associer un compte de service à une VM, consultez la section Modifier le compte de service et les niveaux d'accès d'une instance.

    Autre VM

    Pour les autres VM, vous devez disposer d'un compte de service pour agir au nom de la VM.

    1. Créez un compte de service si vous n'en avez pas.

    2. Accordez le rôle Lecteur Artifact Registry (roles.artifactregistry.reader) lors de la création du compte de service afin de ne pas avoir à configurer des autorisations dans une étape distincte.

  2. Assurez-vous que le compte de service de VM dispose des autorisations de lecture pour le dépôt ainsi que du niveau d'accès l'API cloud-platform.

    VM Compute Engine

    Artifact Registry récupère automatiquement les identifiants du compte de service de VM. La configuration requise varie selon que vous utilisez le compte de service par défaut ou un compte de service géré par l'utilisateur.

    Compte de service par défaut

    Si la VM utilise le compte de service par défaut, celui-ci dispose du rôle Éditeur par défaut, qui inclut des autorisations de lecture pour les dépôts du même projet. Si le dépôt se trouve dans un projet différent de celui de la VM, accordez le rôle de lecteur Artifact Registry au compte de service de la VM.

    De plus, le compte de service par défaut ne dispose pas de tous les niveaux d'accès aux API requis.

    Pour définir le niveau d'accès cloud-platform,

    1. Arrêtez l'instance de VM en remplaçant INSTANCE par le nom de l'instance de VM.

      gcloud compute instances stop INSTANCE
      
    2. Définissez le niveau d'accès:

      gcloud compute instances set-service-account INSTANCE \
          --scopes=cloud-platform
      
    3. Redémarrez l'instance de VM.

      gcloud compute instances start INSTANCE
      
    Compte de service géré par l'utilisateur
    Si la VM utilise un compte de service géré par l'utilisateur, accordez le rôle de lecteur d'Artifact Registry à ce compte de service. Les comptes de service gérés par l'utilisateur disposent du niveau d'accès cloud-platform.

    Autre VM

    Accordez le rôle de lecteur Artifact Registry au compte de service de VM. Par défaut, les comptes de service gérés par l'utilisateur disposent du niveau d'accès cloud-platform.

  3. Vérifiez que vous avez suivi la procédure permettant de préparer la VM à accéder au dépôt. Consultez les instructions de préparation pour Apt ou Yum.

  4. Vérifiez que vous avez correctement configuré Apt ou Yum pour accéder au dépôt.

    Si vous vous connectez à un dépôt Apt à partir d'une VM Compute Engine, assurez-vous que l'URL du dépôt inclut le préfixe ar+.

Problèmes liés à l'assistant d'identification

Le message d'erreur suivant s'affiche lorsque la VM ne parvient pas à localiser l'assistant d'identification Apt:

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

L'erreur se produit lorsque vous essayez d'installer le package apt-transport-artifact-registry sur une VM créée à partir d'une image qui n'inclut pas la clé de signature du dépôt Apt.

Pour résoudre ce problème, procédez comme suit :

  1. Installez la clé de signature sur la VM:

    VM Debian

    Installez les clés de signature du dépôt Apt à l'aide de la commande suivante:

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

    Remplacez LOCATION par l'emplacement du dépôt.

    VM Ubuntu

    Installez les clés de signature du dépôt Apt à l'aide de la commande suivante:

    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 -
    

    Remplacez LOCATION par l'emplacement du dépôt.

  2. Réessayez de suivre la procédure de préparation de la VM.

Problèmes liés au plug-in d'authentification

Le message d'erreur suivant s'affiche en cas de problème avec le plug-in d'authentification Yum ou DNF:

Plugin "artifact-registry" can't be imported

Cette erreur peut se produire pour plusieurs raisons. Pour résoudre l'erreur, essayez d'exécuter le plug-in directement pour confirmer les dépendances, rechercher des problèmes Python ou identifier d'autres problèmes sous-jacents possibles.

Pour exécuter directement le plug-in, utilisez l'une des commandes suivantes:

  • Pour le plug-in Yum:

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

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

    Remplacez VERSION-NUMBER par la version Python par défaut de la distribution Linux. Par exemple, Enterprise Linux 8 inclut Python 3.6.

    Vous pouvez lister les fichiers du package de plug-in installé pour vérifier le nom du répertoire de la bibliothèque Python.

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

Artefacts récemment importés manquants

Si votre client Apt ou Yum ne trouve pas de package récemment importé ou importé dans votre dépôt, le processus de regénération de l'index de package Apt ou Yum n'est peut-être pas encore terminé.

Pour les petits dépôts, la regénération du fichier d'index Apt ou Yum peut prendre plusieurs secondes. Pour les dépôts plus volumineux, la réindexation peut prendre plusieurs minutes, voire plus.

Pour vérifier qu'un package a bien été ajouté au dépôt, utilisez la Google Cloud CLI pour répertorier les fichiers qu'il contient. Exécutez la commande suivante :

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

Par exemple, vous pouvez vérifier que le package python-gflags nommé python3-gflags_1.5.1-5_all.deb a bien été importé dans le dépôt us-central1-apt.pkg.dev\apt-project\apt-repo à l'aide de la commande suivante:

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

Si le package a bien été importé, le nom du fichier apparaît dans la sortie avec un identifiant unique, comme dans l'exemple suivant:

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

Erreur d'authentification pour certains packages importés ou importés

Si le délai d'importation ou d'importation de fichiers dépasse le délai d'expiration du jeton d'authentification, les importations échouent. Les jetons expirent 60 minutes après leur obtention. Si le jeton a expiré, une erreur semblable à l'exemple suivant apparaît dans la sortie de la commande d'importation.

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

Pour résoudre ce problème:

  1. Essayez d'importer le package spécifique uniquement pour vérifier que vous pouvez l'ajouter individuellement au lieu d'effectuer une importation par lot.
  2. En cas d'échec de plusieurs packages, importez ou importez par lots plus petits afin que l'opération ne dépasse pas le délai d'expiration du jeton.