Synchronisierungsprobleme beheben

Auf dieser Seite wird erläutert, wie Sie Probleme mit dem Befehl repo sync beheben.

Netzwerkprobleme beheben

In diesem Abschnitt finden Sie einige Vorschläge zur Behebung von Netzwerkproblemen, die zu fehlgeschlagenen Synchronisierungen führen können.

Authentifizierung verwenden, um Kontingentbeschränkungen zu vermeiden

Um die Server vor übermäßiger Nutzung zu schützen, ist jeder IP-Adresse, die für den Zugriff auf die Quelle verwendet wird, ein Kontingent zugeordnet.

Wenn Sie eine IP-Adresse mit anderen Nutzern teilen, z. B. beim Zugriff auf die Quell-Repositories von außerhalb einer NAT-Firewall, können Kontingente für normale Muster ausgelöst werden. Ein Kontingent kann beispielsweise ausgelöst werden, wenn mehrere Nutzer innerhalb kurzer Zeit neue Clients von derselben IP-Adresse aus synchronisieren.

Um Kontingente zu vermeiden, können Sie den authentifizierten Zugriff verwenden. Dabei wird unabhängig von der IP-Adresse ein separates Kontingent für jeden Nutzer verwendet.

So aktivieren Sie den authentifizierten Zugriff:

  1. Erstellen Sie mit dem Passwortgenerator ein Passwort.

  2. Führen Sie den folgenden Befehl aus, um Ihren Client so zu konfigurieren, dass er die automatische Authentifizierung verwendet (ohne die Verzweigung zu ändern):

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

    Beachten Sie, dass das Verzeichnispräfix /a/ die automatische Authentifizierung auslöst.

Für die Verwendung eines Proxys konfigurieren

Wenn Sie die Quelle über einen Proxy herunterladen, wie es in einigen Unternehmen üblich ist, müssen Sie explizit einen Proxy für Repo angeben, der mit den folgenden Befehlen verwendet werden soll:

$ 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

TCP/IP-Einstellungen anpassen, um Verbindungsprobleme zu vermeiden

In seltenen Fällen können bei Linux-Clients Verbindungsprobleme auftreten, z. B. wenn sie mitten im Download hängen bleiben, während sie Objekte empfangen. Um dieses Problem zu beheben, passen Sie die Einstellungen des TCP/IP-Stacks an oder verwenden Sie nicht parallele Verbindungen. Sie benötigen Root-Zugriff, um die TCP-Einstellung zu ändern. Führen Sie die folgenden Befehle aus, um die Einstellung zu ändern:

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

Lokalen Mirror verwenden, um Netzwerklatenz zu vermeiden

Wenn Sie mehrere Clients verwenden, können Sie einen lokalen Mirror des gesamten Serverinhalts erstellen und Clients von diesem Mirror aus synchronisieren, ohne auf das Netzwerk zuzugreifen. Folgen Sie dieser Anleitung, um einen lokalen Mirror in ~/aosp-mirror/ zu erstellen und Clients mit diesem Mirror zu synchronisieren:

  1. Mirror erstellen und synchronisieren:

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

    Mit diesen Befehlen wird ein lokaler Mirror in /user/local/aosp/mirror erstellt und der Mirror mit dem Flag --mirror und dem Befehl repo init initialisiert.

  2. Clients vom Mirror aus synchronisieren:

    $ 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. Mirror mit dem Server synchronisieren und Clients mit dem Mirror synchronisieren:

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

Sie können den Mirror auf einem LAN-Server speichern und über NFS, SSH oder Git darauf zugreifen. Sie können ihn auch auf einem Wechseldatenträger speichern und diesen Datenträger an andere Nutzer oder Maschinen weitergeben.

Teilweise Klone verwenden

Wenn Sie Git Version 2.19 oder höher verwenden, geben Sie bei der Ausführung von repo init --partial-clone an, um Probleme mit der geringen Netzwerklatenz zu beheben:

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

Anstatt Repo so zu initialisieren, dass alles heruntergeladen wird, werden mit diesem Befehl Git-Objekte nach Bedarf heruntergeladen.

403- oder 500-Fehler beheben (Proxy-Probleme)

Die Befehle repo init oder repo sync können mit einem 403- oder 500-Fehler fehlschlagen. Meistens hängen diese Fehler damit zusammen, dass HTTP-Proxys Schwierigkeiten haben, die großen Datenübertragungen zu verarbeiten.

Es gibt keine spezifische Lösung für diese Fehler, aber manchmal kann es helfen, die neueste Python-Version zu verwenden und explizit repo sync -j1 zu verwenden.