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 OS dans Artifact Registry.

Pour savoir comment résoudre les problèmes liés aux dépôts distants Artifact Registry pour les packages OS, consultez 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 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 raisons 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 niveaux d'accès s'affichent 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 scopes d'accès. L'adresse e-mail du compte de service par défaut est au format PROJECT_NUMBER-compute@developer.gserviceaccount.com.

    Selon la configuration de vos règles d'administration, le compte de service par défaut peut se voir attribuer automatiquement le rôle Éditeur sur votre projet. Nous vous recommandons vivement de désactiver l'attribution automatique des rôles en appliquant la contrainte de règle d'administration iam.automaticIamGrantsForDefaultServiceAccounts. Si vous avez créé votre organisation après le 3 mai 2024, cette contrainte est appliquée par défaut.

    Si vous désactivez l'attribution automatique de rôles, vous devez choisir les rôles à attribuer aux comptes de service par défaut, puis attribuer ces rôles vous-même.

    Si le compte de service par défaut dispose déjà du rôle Éditeur, nous vous recommandons de le remplacer par des rôles moins permissifs.Pour modifier les rôles du compte de service en toute sécurité, utilisez Policy Simulator pour voir l'impact de la modification, puis attribuez et révoquez les rôles appropriés.

    Pour modifier le compte de service ou en associer un à une VM, consultez 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 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. Vous n'aurez ainsi pas besoin de configurer les autorisations dans une étape distincte.

  2. Assurez-vous que le compte de service de la VM dispose des autorisations de lecture pour le dépôt, ainsi que du niveau d'accès'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 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

    Attribuez le rôle 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 les étapes pour 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 depuis une VM Compute Engine, assurez-vous que l'URL du dépôt inclut le préfixe ar+.

Problèmes liés aux assistants 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

Cette 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 afin de confirmer les dépendances, de rechercher les problèmes Python ou de 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 package qui a été récemment importé ou importé dans votre dépôt, il se peut que le processus de régénération de l'index de package Apt ou Yum ne soit 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 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 Google Cloud CLI pour lister les fichiers du package. 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é correctement, le fichier apparaît dans le résultat 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 nécessaire pour importer ou importer des fichiers dépasse la période d'expiration du jeton d'authentification, les importations au-delà de la période d'expiration é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 le package spécifique uniquement pour vérifier que vous pouvez l'ajouter individuellement au lieu de l'importer par lot.
  2. Si plusieurs packages ont échoué, importez ou importez des lots plus petits afin que l'opération ne dépasse pas la période d'expiration du jeton.