Rozwiązywanie problemów z synchronizacją

Na tej stronie znajdziesz informacje o rozwiązywaniu problemów związanych z poleceniem repo sync.

Rozwiąż problemy z siecią

W tej sekcji znajdziesz kilka sugestii rozwiązywania problemów z siecią, które mogą powodować niepowodzenie synchronizacji.

Używanie uwierzytelniania, aby uniknąć ograniczeń związanych z limitem

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

Gdy udostępniasz adres IP innym użytkownikom, na przykład podczas uzyskiwania dostępu do repozytoriów źródłowych spoza zapory NAT, mogą zostać uruchomione limity w przypadku zwykłych wzorców. Limit może zostać przekroczony, gdy kilku użytkowników w krótkim czasie zsynchronizuje nowych klientów z tego samego adresu IP.

Aby uniknąć przekroczenia limitów, możesz użyć uwierzytelnionego dostępu, który używa osobnego limitu dla każdego użytkownika niezależnie od adresu IP.

Aby włączyć uwierzytelnianie:

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

  2. Aby przekształcić klienta w klienta korzystającego z automatycznej uwierzytelniania (bez zmiany gałęzi), uruchom to polecenie:

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

    Pamiętaj, że prefiks katalogu /a/ powoduje automatyczne uwierzytelnianie.

Konfigurowanie proxy

Jeśli pobierasz źródło za pośrednictwem serwera proxy, co jest powszechne w niektórych środowiskach korporacyjnych, pamiętaj, aby wyraźnie określić serwer proxy, którego ma używać Repo. Aby to zrobić, uruchom te 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

Dostosowywanie ustawień TCP/IP, aby uniknąć problemów z łącznością

Chociaż zdarza się to rzadko, klienci Linuxa mogą mieć problemy z połączeniem, na przykład zawieszanie się 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 zmienić ustawienie TCP, musisz mieć dostęp roota. Aby zmodyfikować to ustawienie, wykonaj te polecenia:

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

Aby uniknąć opóźnień w sieci, użyj lustrzanego lokalnego

Jeśli używasz kilku klientów, możesz utworzyć lokalny klon całego serwera i synchronizować klientów z tego klonu bez dostępu do sieci. Aby utworzyć lokalny klon w ~/aosp-mirror/ i zsynchronizować z nim klientów, wykonaj te czynności:

  1. Tworzenie i synchronizowanie lustrzanego obrazu:

    $ 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 klon w /user/local/aosp/mirror i inicjują klon za pomocą flagi --mirror w ramach polecenia repo init.

  2. Aby zsynchronizować klientów z lustra:

    $ 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 postępuj zgodnie z tymi poleceniami, aby zsynchronizować serwer z serwerem i zsynchronizować klienta z serwerem lustrzanym:

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

Kopie lustrzane można przechowywać na serwerze LAN i korzystać z nich przez NFS, SSH lub Git. Można go też przechowywać na dysku wymiennym i przekazywać między użytkownikami lub komputerami.

Używanie częściowego klona

Jeśli używasz Git w wersji 2.19 lub nowszej, podczas wykonywania polecenia repo init podaj parametr --partial-clone, aby rozwiązać 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 inicjalizować repozytorium, aby pobrać wszystko, to polecenie pobiera obiekty Git w miarę potrzeby.

Rozwiązywanie konkretnych problemów z synchronizacją

Na tej stronie znajdziesz informacje o niektórych znanych problemach, które mogą wystąpić podczas synchronizowania kodu źródłowego Androida.

Polecenia nie działają z powodu błędu 403 lub 500 (problemy z serwerem proxy)

Polecenia repo init lub repo sync mogą się nie udać z błędem 403 lub 500. Najczęściej te błędy są związane z serwerami proxy HTTP, które mają problemy z obsługą dużych transferów danych.

Nie ma konkretnego rozwiązania tych błędów, ale czasami może pomóc korzystanie z najnowszej wersji Pythona i wyraźne użycie repo sync -j1.