Risolvere i problemi di sincronizzazione

Questa pagina spiega come risolvere i problemi relativi al comando repo sync.

Risolvere i problemi di rete

Questa sezione fornisce diversi suggerimenti per risolvere i problemi di rete che possono causare sincronizzazioni non riuscite.

Utilizzare l'autenticazione per evitare le barriere delle quote

Per proteggere i server da un utilizzo eccessivo, a ogni indirizzo IP utilizzato per accedere all'origine è associata una quota.

Quando condividi un indirizzo IP con altri utenti, ad esempio quando accedi ai repository di origine da un firewall NAT, le quote possono attivarsi per pattern normali. Ad esempio, una quota può essere attivata quando più utenti sincronizzano nuovi clienti dallo stesso indirizzo IP in un breve periodo di tempo.

Per evitare di attivare le quote, puoi utilizzare l'accesso autenticato, che utilizza una quota separata per ogni utente, indipendentemente dall'indirizzo IP.

Per attivare l'accesso autenticato:

  1. Crea una password con il generatore di password.

  2. Esegui questo comando per convertire il client in modo che utilizzi l'autenticazione automatica (senza cambiare ramo):

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

    Tieni presente che il prefisso della directory /a/ attiva l'autenticazione automatica.

Configurare per l'utilizzo del proxy

Se scarichi l'origine da dietro un proxy, come è comune in alcuni ambienti aziendali, assicurati di specificare esplicitamente un proxy da utilizzare per Repo eseguendo questi comandi:

$ 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

Modificare le impostazioni TCP/IP per evitare problemi di connettività

Anche se rari, i client Linux possono riscontrare problemi di connettività, ad esempio bloccarsi a metà dei download durante la ricezione degli oggetti. Per migliorare questo problema, modifica le impostazioni dello stack TCP/IP o utilizza connessioni non parallele. Per modificare l'impostazione TCP, devi disporre dell'accesso root. Per modificare l'impostazione, esegui i seguenti comandi:

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

Utilizza un mirror locale per evitare la latenza di rete

Quando utilizzi più client, puoi creare un mirror locale dell'intero server e sincronizzare i client da questo mirror senza accedere alla rete. Segui queste istruzioni per creare un mirror locale in ~/aosp-mirror/ e sincronizzare i client con questo mirror:

  1. Crea e sincronizza il mirroring:

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

    Questi comandi creano un mirror locale in /user/local/aosp/mirror e lo inizializzano utilizzando il flag --mirror con il comando repo init.

  2. Sincronizza i client dal mirror:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git -b android-latest-release
    $ repo sync
    
  3. Sincronizza il mirror con il server e i client con il mirror:

    $ cd /usr/local/aosp/mirror</code>
    $ repo sync
    $ cd /usr/local/aosp/android-latest-release
    $ repo sync
    

È possibile archiviare il mirror su un server LAN e accedervi tramite NFS, SSH o Git. È anche possibile memorizzarlo su un'unità rimovibile e trasferire l'unità tra utenti o macchine.

Utilizzare una clonazione parziale

Se utilizzi Git versione 2.19 o successive, specifica --partial-clone quando esegui repo init per risolvere eventuali problemi di rete a bassa latenza:

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

Anziché inizializzare Repo per scaricare tutto, questo comando scarica gli oggetti Git in base alle necessità.

Risolvere gli errori 403 o 500 (problemi di proxy)

I comandi repo init o repo sync potrebbero non riuscire e restituire un errore 403 o 500. Molto spesso questi errori sono correlati a proxy HTTP che faticano a gestire i trasferimenti di grandi quantità di dati.

Sebbene non esista una correzione specifica per questi errori, l'utilizzo della versione più recente di Python e l'utilizzo esplicito di repo sync -j1 a volte possono essere utili.