Synchronisierungsprobleme beheben

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

Netzwerkprobleme beheben

In diesem Abschnitt finden Sie mehrere 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 über dieselbe IP-Adresse synchronisieren.

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

So aktivieren Sie den authentifizierten Zugriff:

  1. Erstellen Sie ein Passwort mit dem Passwortgenerator.

  2. Führen Sie den folgenden Befehl aus, um Ihren Client für die automatische Authentifizierung zu konvertieren (ohne den Branch 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 Quellcode über einen Proxy herunterladen, wie es in einigen Unternehmensumgebungen üblich ist, müssen Sie einen Proxy für Repo explizit angeben, indem Sie die folgenden Befehle ausführen:

$ 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

Obwohl es selten vorkommt, können bei Linux-Clients Verbindungsprobleme auftreten, z. B. wenn Downloads beim Empfangen von Objekten hängen bleiben. 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 Spiegelserver verwenden, um Netzwerklatenz zu vermeiden

Wenn Sie mehrere Clients verwenden, können Sie einen lokalen Spiegel des gesamten Serverinhalts erstellen und Clients über diesen Spiegel synchronisieren, ohne auf das Netzwerk zuzugreifen. So erstellen Sie einen lokalen Spiegel in ~/aosp-mirror/ und synchronisieren Clients mit diesem Spiegel:

  1. Spiegel 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 Spiegel in /user/local/aosp/mirror erstellt und mit dem Flag --mirror und dem Befehl repo init initialisiert.

  2. Clients über die Spiegelung 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. Spiegel mit dem Server und Clients mit dem Spiegel synchronisieren:

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

Es ist möglich, den Spiegel auf einem LAN-Server zu speichern und über NFS, SSH oder Git darauf zuzugreifen. Sie können sie auch auf einem Wechseldatenträger speichern und diesen zwischen Nutzern oder Computern weitergeben.

Teilklon verwenden

Wenn Sie Git-Version 2.19 oder höher verwenden, geben Sie --partial-clone an, wenn Sie repo init ausführen, um Probleme mit Netzwerken mit niedriger Latenz zu beheben:

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

Anstatt Repo zu initialisieren, um alles herunterzuladen, 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. Diese Fehler hängen meist damit zusammen, dass HTTP-Proxys Probleme mit der Verarbeitung großer Datenübertragungen haben.

Es gibt keine spezifische Lösung für diese Fehler, aber die Verwendung der neuesten Python-Version und die explizite Verwendung von repo sync -j1 kann manchmal helfen.