Résoudre les problèmes liés aux paquets du système d'exploitation

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

Pour en savoir plus sur la résolution des problèmes liés aux dépôts distants d'Artifact Registry pour les paquets d'OS, 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 paquet. La sortie du gestionnaire de paquets inclut une erreur 401 ou 403, ce qui indique des problèmes d'authentification ou d'autorisation.

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

Exemple d'erreur Yum:

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

Plusieurs causes peuvent expliquer 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 champs d'application de l'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 Compute Engine et disposent d'un ensemble limité de champs d'application. 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 en associer un à une VM, consultez la section Modifier le compte de service et les champs d'application d'accès d'une instance.

    Autre VM

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

    1. Si vous ne disposez pas d'un compte de service, créez-en un.

    2. Attribuez le rôle Lecteur Artifact Registry (roles.artifactregistry.reader) lorsque vous créez le compte de service afin de ne pas avoir à configurer les autorisations dans une étape distincte.

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

    VM Compute Engine

    Artifact Registry récupère automatiquement les identifiants du compte de service de la VM. Si le dépôt se trouve dans un projet différent de celui de la VM, vous devez accorder le rôle de lecteur Artifact Registry au compte de service de la VM. Vous devez également vous assurer que la VM dispose du niveau d'accès cloud-platform.

    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
      

    Autre VM

    Accordez le rôle de lecteur Artifact Registry au compte de service de la 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 de préparation de la VM pour 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'identifiants 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 régional ou multirégional 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 régional ou multirégional du dépôt.

  2. Réessayez les étapes 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 révéler d'autres problèmes sous-jacents possibles.

Pour exécuter le plug-in directement, 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 un paquet récemment importé ou importé dans votre dépôt, cela peut être dû au fait que le processus de régénération de l'index de paquets Apt ou Yum n'est pas encore terminé.

Pour les petits dépôts, la régé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 paquet a bien été ajouté au dépôt, utilisez Google Cloud CLI pour lister les fichiers du paquet. 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-west1-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-west1

Si le package a été importé, le fichier apparaît dans la sortie avec un identifiant unique dans le nom de fichier, 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-west1/repositories/apt-repo/packages/python3-gflags/versions/1.5.1-5

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

Si le temps d'importation ou d'importation de fichiers dépasse la période d'expiration du jeton d'authentification, les importations au-delà de cette période échoueront. Les jetons expirent 60 minutes après leur obtention. Si le jeton a expiré, une erreur semblable à l'exemple suivant s'affiche dans le résultat 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 ou d'importer uniquement le package spécifique pour vérifier que vous pouvez l'ajouter individuellement au lieu d'une importation par lot.
  2. Si plusieurs packages ont échoué, importez ou importez-les par lots plus petits afin que l'opération ne dépasse pas la période d'expiration du jeton.