Cómo corregir errores de sincronización

Esta página explica cómo solucionar problemas y corregir errores relacionados con el comando repo sync.

Cómo solucionar problemas de la red

En esta sección, se proporcionan varias sugerencias para solucionar problemas de red que pueden causar sincronizaciones fallidas.

Utiliza la autenticación para evitar las barreras de cuotas

Para proteger los servidores contra el uso excesivo, cada dirección IP que se utilice para acceder al código fuente está asociada con una cuota.

Cuando compartes una dirección IP con otros usuarios (por ejemplo, cuando accedes a los repositorios de fuentes desde fuera de un firewall de NAT), las cuotas pueden activarse con patrones habituales. Por ejemplo, una cuota puede activarse cuando muchos usuarios sincronizan clientes nuevos desde la misma dirección IP en un período corto.

Para evitar que las cuotas se activen, puedes emplear el acceso autenticado, que usa una cuota distinta para cada usuario, sin importar la dirección IP.

Para habilitar el acceso autenticado, haz lo siguiente:

  1. Crea una contraseña con el generador de contraseñas.

  2. Ejecuta el siguiente comando para convertir tu cliente para utilizar la autenticación automática (sin cambiar de rama):

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

    Ten en cuenta que el prefijo del directorio /a/ activa la autenticación automática.

Configura para el uso de proxy

Si descargas el código fuente desde detrás de un proxy, como es habitual en algunos entornos corporativos, asegúrate de especificar, de forma explícita, un proxy para que Repo lo utilice con ejecución de estos comandos:

$ 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

Ajusta la configuración de TCP/IP para evitar problemas de conectividad

Si bien es poco frecuente, los clientes de Linux pueden experimentar problemas de conectividad, por ejemplo, bloquearse en medio de descargas mientras se reciben objetos. Para mejorar este problema, ajusta la configuración de la pila de TCP/IP o utiliza conexiones no paralelas. Debes tener acceso con permisos de administrador para modificar el parámetro de TCP. Para modificar el parámetro, ejecuta los siguientes comandos:

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

Usa una duplicación local para evitar la latencia de red

Cuando usas varios clientes, puedes crear una duplicación local de todo el contenido del servidor y sincronizar los clientes desde esa duplicación sin acceder a la red. Sigue estas instrucciones para crear una duplicación local en ~/aosp-mirror/ y sincronizar los clientes con esa duplicación:

  1. Crea y sincroniza esa duplicación:

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

    Estos comandos crean una duplicación local en /user/local/aosp/mirror e inicializan la duplicación usando la marca --mirror con el comando repo init.

  2. Para sincronizar los clientes desde la duplicación:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. Por último, sigue estos comandos para sincronizar la duplicación con el servidor y sincronizar el cliente con la duplicación:

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

Puedes almacenar la duplicación en un servidor LAN y acceder a ella por NFS, SSH o Git. También puedes almacenarla en una unidad extraíble y pasar esa unidad entre los usuarios o las máquinas.

Usa una clonación parcial

Si usas la versión 2.19 de Git o una posterior, especifica --partial-clone cuando realices operaciones de repo init para superar cualquier problema de baja latencia en la red:

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

En lugar de inicializar Repo para descargar todo, este comando descarga objetos Git a medida que se necesitan.

Cómo solucionar problemas de sincronización específicos

En esta página, se detallan algunos problemas conocidos que pueden surgir al intentar sincronizar el código fuente de Android.

Falla de comandos con errores del tipo 403 o 500 (problemas de proxy)

Los comandos repo init o repo sync podrían fallar mostrando errores del tipo 403 o 500. Por lo general, estos errores se relacionan con proxies HTTP que tienen problemas con grandes transferencias de datos.

Si bien no hay una solución específica para estos errores, el uso de la versión más reciente de Python, además del uso explícito de repo sync -j1, podría ser de utilidad.