Rozwiązywanie problemów z synchronizacją

Na tej stronie znajdziesz informacje o tym, jak rozwiązywać problemy związane z poleceniem repo sync.

Napraw problemy z siecią

W tej sekcji znajdziesz kilka sugestii dotyczących rozwiązywania problemów z siecią, które mogą powodować nieudaną synchronizację.

Używaj uwierzytelniania, aby uniknąć limitów

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 adres IP jest udostępniany innym użytkownikom, np. podczas uzyskiwania dostępu do repozytoriów źródłowych spoza zapory sieciowej NAT, limity mogą być wywoływane w przypadku normalnych wzorców. Na przykład limit może zostać wywołany, gdy kilku użytkowników zsynchronizuje nowych klientów z tego samego adresu IP w krótkim czasie.

Aby uniknąć przekroczenia limitów, możesz używać uwierzytelnionego dostępu, który korzysta z osobnego limitu 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. Aby przekonwertować klienta na automatyczne uwierzytelnianie (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 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ślisz serwer proxy, którego ma używać Repo. W tym celu 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ą

Choć zdarza się to rzadko, klienci korzystający z systemu Linux mogą napotkać problemy z łącznością, np. utknąć w trakcie pobierania podczas odbierania obiektów. Aby rozwiązać ten problem, dostosuj ustawienia stosu TCP/IP lub użyj połączeń nieparalelnych. Aby zmodyfikować ustawienie TCP, musisz mieć dostęp do roota. Aby zmodyfikować ustawienie, wydaj te polecenia:

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

Korzystanie z lokalnego serwera kopii, aby uniknąć opóźnień sieci

Jeśli używasz kilku klientów, możesz utworzyć lokalną kopię lustrzaną całej zawartości serwera i synchronizować klientów z tej kopii bez dostępu do sieci. Aby utworzyć lokalną kopię lustrzaną w ~/aosp-mirror/ i zsynchronizować z nią klientów, wykonaj te czynności:

  1. Utwórz i zsynchronizuj odbicie lustrzane:

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

    Te polecenia tworzą lokalną kopię w /user/local/aosp/mirror i inicjują ją za pomocą flagi --mirror w poleceniu repo init.

  2. Synchronizuj klientów z kopii:

    $ 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. Zsynchronizuj kopię z serwerem i zsynchronizuj klientów z kopią:

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

Kopię można przechowywać na serwerze LAN i uzyskiwać do niej dostęp przez NFS, SSH lub Git. Można go też przechowywać na dysku wymiennym i przekazywać go między użytkownikami lub urządzeniami.

Używanie częściowego klonu

Jeśli używasz Git w wersji 2.19 lub nowszej, podczas wykonywania polecenia repo init określ --partial-clone, aby rozwiązać problemy z siecią o niskiej latencji:

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

Zamiast inicjować Repo, aby pobrać wszystko, to polecenie pobiera obiekty Git, gdy są potrzebne.

Rozwiązywanie błędów 403 lub 500 (problemy z proxy)

Polecenia repo init lub repo sync mogą zakończyć się niepowodzeniem 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 pomaga używanie najnowszej wersji Pythona i jawne używanie repo sync -j1.