同期の問題のトラブルシューティングと解決

このページでは、repo sync コマンドに関する問題をトラブルシューティングおよび解決する方法について説明します。

ネットワークの問題を解決する

このセクションでは、同期の失敗の原因になり得るネットワークに関する問題の解決におすすめの方法を紹介します。

認証を使用して割り当ての問題を回避する

サーバーの過剰な使用を防ぐため、ソースへのアクセスに使用する各 IP アドレスは割り当てに関連付けられています。

IP アドレスを他のユーザーと共有する場合(NAT ファイアウォールの外からソース リポジトリにアクセスする場合など)、通常のパターンであっても割り当てがトリガーされることがあります。たとえば、短期間のうちに複数のユーザーが同じ IP アドレスから新しいクライアントを同期する場合は、割り当てがトリガーされることがあります。

割り当てのトリガーを回避するには、認証済みアクセスを使用できます。これは、IP アドレスに関係なく、ユーザーごとに個別の割り当てを使用するものです。

認証済みアクセスを有効にします。

  1. パスワード生成ツールを使用してパスワードを作成します。

  2. 次のコマンドを実行して、自動認証を使用するよう(ブランチを変更せずに)クライアントを変換します。

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

    ディレクトリ プレフィックスの /a/ で自動認証がトリガーされます。

プロキシ使用向けに設定する

プロキシ環境でソースをダウンロードする場合は(これは一部の企業環境では一般的です)、次のコマンドを実行して、Repo が使用するプロキシを明示的に指定します。

$ 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 の設定を調整して接続性の問題を回避する

まれですが、オブジェクトの受信中にダウンロードが途中で止まるなど、Linux クライアントで接続性の問題が発生することがあります。この問題を解決するには、TCP/IP スタックの設定を調整するか、非並列の接続を使用します。TCP 設定を変更するには、ルートアクセス権限が必要です。この設定を変更するには、次のコマンドを実行します。

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

ローカルミラーを使用してネットワークの遅延を回避する

複数のクライアントを使用する場合、サーバー コンテンツ全体のローカルミラーを作成し、ネットワークにアクセスせずにそのミラーからクライアントを同期できます。~/aosp-mirror/ でローカルミラーを作成し、そのミラーとクライアントを同期する手順は次のとおりです。

  1. ミラーを作成して同期します。

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

    次のコマンドで、/user/local/aosp/mirror にローカルミラーを作成し、repo init コマンドで --mirror フラグを使用してそのミラーを初期化します。

  2. ミラーからクライアントを同期します。

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. 最後に、次のコマンドを実行してミラーをサーバーと同期してから、クライアントをミラーと同期します。

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

LAN サーバーにミラーを保存して、NFS、SSH、Git のいずれかでミラーにアクセスすることが可能です。また、ミラーをリムーバブル ドライブに保存して、そのドライブをユーザーまたはマシン間でやり取りすることもできます。

部分的クローンを使用する

Git バージョン 2.19 以降を使用している場合は、repo init を実行する際に --partial-clone を指定することで低遅延のネットワーク問題を解決できます。

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

このコマンドは、Repo を初期化してすべてをダウンロードするのではなく、必要に応じて Git オブジェクトをダウンロードします。

同期に関する特定の問題を解決する

このページでは、Android ソースコードを同期する際に発生する可能性のある既知の問題について説明します。

403 エラーまたは 500 エラー(プロキシの問題)で失敗するコマンド

repo init または repo sync コマンドは、403 エラーまたは 500 エラーのいずれかで失敗する可能性があります。これらのエラーの多くは、大規模なデータ転送の処理に時間がかかっている HTTP プロキシに関連しています。

これらのエラーに対する特定の解決方法がない間は、Python の最新バージョンを使用し、明示的に repo sync -j1 を使用すると解決できる場合があります。