Rozwiązywanie i naprawianie problemów z synchronizacją

Na tej stronie wyjaśniono, jak rozwiązywać problemy związane z poleceniem repo sync .

Napraw problemy z siecią

W tej sekcji przedstawiono kilka sugestii dotyczących rozwiązywania problemów z siecią, które mogą powodować nieudane synchronizacje.

Użyj uwierzytelniania, aby uniknąć barier przydziałowych

Aby chronić serwery przed nadmiernym użyciem, każdy adres IP używany do uzyskania dostępu do źródła jest powiązany z limitem.

Podczas udostępniania adresu IP innym użytkownikom, na przykład podczas uzyskiwania dostępu do repozytoriów źródłowych spoza zapory NAT, przydziały mogą zostać uruchomione według normalnych wzorców. Na przykład limit może zostać uruchomiony, gdy kilku użytkowników zsynchronizuje nowych klientów z tego samego adresu IP w krótkim czasie.

Aby uniknąć wyzwalania limitów, możesz skorzystać z dostępu uwierzytelnionego, który wykorzystuje osobny limit dla każdego użytkownika, niezależnie od adresu IP.

Aby włączyć uwierzytelniony dostęp:

  1. Utwórz hasło za pomocą generatora haseł .

  2. Uruchom następującą komendę, aby przekonwertować klienta na automatyczne uwierzytelnianie (bez zmiany gałęzi):

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

    Należy pamiętać, że prefiks katalogu /a/ uruchamia automatyczne uwierzytelnianie.

Skonfiguruj do korzystania z serwera proxy

Jeśli pobierasz źródło zza serwera proxy, co jest powszechne w niektórych środowiskach korporacyjnych, upewnij się, że wyraźnie określiłeś serwer proxy dla Repo, uruchamiając następujące polecenia:

$ 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

Dostosuj ustawienia protokołu TCP/IP, aby uniknąć problemów z łącznością

Chociaż zdarza się to rzadko, klienci z systemem Linux mogą doświadczyć problemów z łącznością, takich jak utknięcie w trakcie pobierania podczas odbierania obiektów. Aby rozwiązać ten problem, dostosuj ustawienia stosu TCP/IP lub użyj połączeń nierównoległych. Aby zmodyfikować ustawienia protokołu TCP, musisz mieć uprawnienia administratora. Aby zmodyfikować ustawienie, wydaj następujące polecenia:

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

Użyj lokalnego serwera lustrzanego, aby uniknąć opóźnień sieci

W przypadku korzystania z kilku klientów można utworzyć lokalny serwer lustrzany całej zawartości serwera i synchronizować klientów z tego serwera lustrzanego bez konieczności uzyskiwania dostępu do sieci. Postępuj zgodnie z poniższymi instrukcjami, aby utworzyć lokalny serwer lustrzany w ~/aosp-mirror/ i zsynchronizować klientów z tym serwerem lustrzanym:

  1. Utwórz i zsynchronizuj lustro:

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

    Te polecenia tworzą lokalny serwer lustrzany w /user/local/aosp/mirror i inicjują serwer lustrzany za pomocą flagi --mirror z poleceniem repo init .

  2. Aby zsynchronizować klientów z kopii lustrzanej:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. Na koniec wykonaj następujące polecenia, aby zsynchronizować kopię lustrzaną z serwerem i zsynchronizować klienta z kopią lustrzaną:

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

Możliwe jest przechowywanie kopii lustrzanej na serwerze LAN i uzyskiwanie do niej dostępu poprzez NFS, SSH lub Git. Możliwe jest również przechowywanie go na dysku wymiennym i przekazywanie go użytkownikom lub maszynom.

Użyj częściowego klonu

Jeśli używasz Git w wersji 2.19 lub nowszej, określ --partial-clone podczas wykonywania repo init , aby przezwyciężyć wszelkie problemy z siecią o niskim opóźnieniu:

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

Zamiast inicjować Repo w celu pobrania wszystkiego, to polecenie pobiera obiekty Git, gdy są potrzebne.

Napraw określone problemy z synchronizacją

Na tej stronie szczegółowo opisano niektóre znane problemy, które możesz napotkać podczas próby synchronizacji kodu źródłowego Androida.

Polecenia kończą się niepowodzeniem z powodu błędu 403 lub 500 (problemy z serwerem proxy)

Polecenia repo init lub repo sync mogą zakończyć się niepowodzeniem z powodu błędu 403 lub 500. Najczęściej błędy te są związane z serwerami proxy HTTP, które nie radzą sobie z dużymi transferami danych.

Chociaż nie ma konkretnej poprawki dla tych błędów, czasami pomocne może być użycie najnowszej wersji Pythona i jawne użycie repo sync -j1 .