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.

Utilizza l'autenticazione per evitare le barriere delle quote

Per proteggere i server dall'utilizzo eccessivo, ogni indirizzo IP utilizzato per accedere alla fonte è associato a una quota.

Quando si condivide un indirizzo IP con altri utenti, ad esempio quando si accede ai repository di origine da un firewall NAT, le quote possono essere attivate per i pattern normali. Ad esempio, una quota può attivarsi quando diversi utenti sincronizzano nuovi client dallo stesso indirizzo IP, entro un breve periodo di tempo.

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

Per abilitare l'accesso autenticato:

  1. Crea una password con il generatore di password.

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

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

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

Configurazione per l'utilizzo del proxy

Se esegui il download del codice sorgente da un proxy, come avviene in alcuni ambienti aziendali, assicurati di specificare esplicitamente un proxy che il repository può utilizzare 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à

Sebbene sia raro, i client Linux possono riscontrare problemi di connettività, ad esempio rimanere bloccati durante i download mentre ricevono oggetti. Per risolvere 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, invia i seguenti comandi:

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

Utilizza un mirror locale per evitare la latenza della rete

Quando utilizzi più client, puoi creare un mirror locale dell'intero contenuto del server e sincronizzare i client da questo mirror senza accedere alla rete. Segui queste istruzioni per creare un mirroring locale in ~/aosp-mirror/ e sincronizzare i client con il 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. Per sincronizzare 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
    $ repo sync
    
  3. Infine, segui questi comandi per sincronizzare il mirror con il server e il client con il mirror:

    $ cd /usr/local/aosp/mirror</code>
    $ repo sync
    $ cd /usr/local/aosp/main
    $ 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 passarla tra utenti o computer.

Utilizzare un clone parziale

Se utilizzi Git versione 2.19 o successiva, 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 main --partial-clone --clone-filter=blob:limit=10M

Anziché inizializzare il repository per scaricare tutto, questo comando scarica gli oggetti Git man mano che sono necessari.

Risolvere problemi di sincronizzazione specifici

Questa pagina descrive alcuni problemi noti che potresti riscontrare durante il tentativo di sincronizzare il codice sorgente di Android.

I comandi non vanno a buon fine e generano un errore 403 o 500 (problemi di proxy)

I comandi repo init o repo sync potrebbero non riuscire con un errore 403 o 500. Molto spesso questi errori sono correlati a proxy HTTP che hanno difficoltà a gestire i trasferimenti di dati di grandi dimensioni.

Sebbene non esista una correzione specifica per questi errori, a volte può essere utile utilizzare la versione più recente di Python e repo sync -j1 in modo esplicito.