Resolver problemas e corrigir erros de sincronização

Esta página explica como resolver problemas e corrigir erros relacionados ao comando repo sync.

Corrigir problemas de rede

Esta seção fornece várias sugestões para a correção de problemas de rede que podem provocar erros na sincronização.

Usar a autenticação para evitar barreiras de cota

Para proteger os servidores contra o uso excessivo, cada endereço IP usado para acessar a origem é associado a uma cota.

Ao compartilhar um endereço IP com outros usuários, como ao acessar os repositórios de origem por um firewall NAT, as cotas podem ser acionadas para padrões normais de uso. Por exemplo, se muitos usuários sincronizarem novos clientes do mesmo endereço IP em um curto período.

Para evitar o acionamento de cotas, é possível usar o acesso autenticado, que utiliza uma cota separada para cada usuário, independente do endereço IP.

Para ativar o acesso autenticado:

  1. Crie uma senha com o gerador de senhas.

  2. Execute o comando abaixo para que seu cliente use a autenticação automática (sem mudar a ramificação):

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

    O prefixo do diretório /a/ aciona a autenticação automática.

Configurar para uso do proxy

Se você estiver fazendo o download da origem com a proteção de um proxy (como é normal em alguns ambientes corporativos) especifique explicitamente um proxy para o repo usar executando estes 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

Ajustar configurações TCP/IP para evitar problemas de conectividade

Embora seja raro, clientes do Linux podem ter problemas de conectividade, como travamentos durante downloads ao receber objetos. Para evitar esse problema, ajuste as configurações da pilha TCP/IP ou use conexões não paralelas. É necessário ter acesso root para modificar a configuração do TCP: Para modificar a configuração, use estes comandos:

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

Usar um espelho local para evitar latência de rede

Ao usar vários clientes, é possível criar um espelho local de todo o conteúdo do servidor e sincronizar os clientes desse espelho sem acessar a rede. Siga as instruções abaixo para criar um espelho local em ~/aosp-mirror/ e sincronizar os clientes com ele:

  1. Criar e sincronizar o espelho:

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

    Esses comandos criam um espelho local em /user/local/aosp/mirror e inicializam o espelho usando a flag --mirror com o comando repo init.

  2. Para sincronizar clientes do espelho:

    $ 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 fim, para sincronizar o espelho com o servidor e o cliente com o espelho, siga estes comandos:

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

É possível armazenar o espelho em um servidor LAN e acessá-lo via NFS, SSH ou Git. Também é possível armazená-lo em uma unidade removível e transmitir essa unidade para os usuários ou as máquinas.

Usar um clone parcial

Se você estiver usando a versão 2.19 ou mais recente do Git, especifique --partial-clone ao executar repo init para evitar problemas de rede de baixa latência:

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

Em vez de inicializar o repo para fazer todos os downloads, este comando faz o download de objetos Git conforme necessário.

Corrigir problemas específicos de sincronização

Esta página detalha alguns problemas conhecidos que você pode encontrar ao tentar sincronizar o código-fonte do Android.

Os comandos falham com os erros 403 ou 500 (problemas de proxy)

Os comandos repo init ou repo sync podem falhar com os erros 403 ou 500. Com frequência, esses erros estão relacionados a proxies HTTP que têm dificuldade para processar grandes transferências de dados.

Embora não haja uma solução específica para esses erros, usar a versão mais recente do Python e usar repo sync -j1 explicitamente pode ajudar.