Dépanner et résoudre les problèmes de synchronisation

Cette page explique comment dépanner et résoudre les problèmes liés à la commande repo sync .

Résoudre les problèmes de réseau

Cette section fournit plusieurs suggestions pour résoudre les problèmes de réseau pouvant entraîner des échecs de synchronisation.

Utilisez l'authentification pour éviter les barrières de quotas

Pour protéger les serveurs contre une utilisation excessive, chaque adresse IP utilisée pour accéder à la source est associée à un quota.

Lors du partage d'une adresse IP avec d'autres utilisateurs, par exemple lors de l'accès aux référentiels sources au-delà d'un pare-feu NAT, les quotas peuvent se déclencher pour des modèles normaux. Par exemple, un quota peut se déclencher lorsque plusieurs utilisateurs synchronisent de nouveaux clients à partir de la même adresse IP, sur une courte période.

Pour éviter de déclencher des quotas, vous pouvez utiliser un accès authentifié, qui utilise un quota distinct pour chaque utilisateur, quelle que soit l'adresse IP.

Pour activer l'accès authentifié :

  1. Créez un mot de passe avec le générateur de mot de passe .

  2. Exécutez la commande suivante pour convertir votre client afin qu'il utilise l'authentification automatique (sans changer de branche) :

    $ repo init -u https://android.googlesource.com/a/platform/manifest
    

    Notez que le préfixe du répertoire /a/ déclenche une authentification automatique.

Configurer pour une utilisation proxy

Si vous téléchargez la source derrière un proxy, comme cela est courant dans certains environnements d'entreprise, assurez-vous de spécifier explicitement un proxy que Repo doit utiliser en exécutant ces commandes :

$ export HTTP_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port
$ export HTTPS_PROXY=http://proxy_user_id:proxy_password@proxy_server:proxy_port

Ajustez les paramètres TCP/IP pour éviter les problèmes de connectivité

Bien que cela soit rare, les clients Linux peuvent rencontrer des problèmes de connectivité, comme rester bloqués au milieu de téléchargements lors de la réception d'objets. Pour améliorer ce problème, ajustez les paramètres de la pile TCP/IP ou utilisez des connexions non parallèles. Vous devez disposer d'un accès root pour modifier le paramètre TCP. Pour modifier le paramètre, exécutez les commandes suivantes :

$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1

Utilisez un miroir local pour éviter la latence du réseau

Lorsque vous utilisez plusieurs clients, vous pouvez créer un miroir local de l'intégralité du contenu du serveur et synchroniser les clients à partir de ce miroir sans accéder au réseau. Suivez ces instructions pour créer un miroir local dans ~/aosp-mirror/ et synchroniser les clients avec ce miroir :

  1. Créez et synchronisez le miroir :

    $ mkdir -p /usr/local/aosp/mirror
    $ cd /usr/local/aosp/mirror
    $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
    

    Ces commandes créent un miroir local dans /user/local/aosp/mirror et initialisent le miroir à l'aide de l'indicateur --mirror avec la commande repo init .

  2. Pour synchroniser les clients depuis le miroir :

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. Enfin, suivez ces commandes pour synchroniser le miroir avec le serveur et synchroniser le client avec le miroir :

    $ cd /usr/local/aosp/mirror</code>
    $ repo sync
    $ cd /usr/local/aosp/main
    $ repo sync
    

Il est possible de stocker le miroir sur un serveur LAN et d'y accéder via NFS, SSH ou Git. Il est également possible de le stocker sur un disque amovible et de transmettre ce disque aux utilisateurs ou aux machines.

Utiliser un clone partiel

Si vous utilisez Git version 2.19 ou ultérieure, spécifiez --partial-clone lors de l'exécution repo init pour résoudre tout problème de réseau à faible latence :

  $ repo init -u https://android.googlesource.com/platform/manifest -b main --partial-clone --clone-filter=blob:limit=10M

Au lieu d'initialiser Repo pour tout télécharger, cette commande télécharge les objets Git selon leurs besoins.

Résoudre des problèmes de synchronisation spécifiques

Cette page détaille certains problèmes connus que vous pouvez rencontrer lors de la tentative de synchronisation du code source Android.

Les commandes échouent avec une erreur 403 ou 500 (problèmes de proxy)

Les commandes repo init ou repo sync peuvent échouer avec une erreur 403 ou 500. Le plus souvent, ces erreurs sont liées à des proxys HTTP qui ont du mal à gérer les transferts de données volumineux.

Bien qu'il n'existe pas de correctif spécifique à ces erreurs, l'utilisation de la version Python la plus récente et l'utilisation explicite repo sync -j1 peuvent parfois aider.