Rozwiązywanie problemów z synchronizacją

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

Rozwiązywanie problemów 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żyć uwierzytelnionego dostępu, który wykorzystuje oddzielny 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. 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/ wywołuje 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 wykonaj 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ą mieć problemy z łącznością, np. zawieszać się w trakcie pobierania 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

Używanie lokalnego serwera kopii, aby uniknąć opóźnień w sieci

Jeśli używasz kilku klientów, możesz utworzyć lokalną kopię całego 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 kopię:

    $ 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</code>
    $ 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 małych opóźnieniach:

  $ 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 serwerem proxy)

Polecenia repo init lub repo sync mogą zakończyć się niepowodzeniem z błędem 403 lub 500. Najczęściej błędy te są związane z tym, że serwery proxy HTTP 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.