排解及修正同步處理問題

本頁說明如何排解及修正與 repo sync 指令相關的問題。

修正網路問題

本節提供幾項建議,協助修正可能導致同步失敗的網路問題。

使用驗證機制,避免配額限制

為防止伺服器過度使用,用來存取來源的每個 IP 位址都會有配額。

與其他使用者共用 IP 位址時 (例如從 NAT 防火牆以外的位置存取來源存放區),配額可能會因正常模式而觸發。舉例來說,如果多位使用者在短時間內從相同 IP 位址同步處理新用戶端,就會觸發配額。

如要避免觸發配額,可以使用已驗證的存取權,這類存取權會為每位使用者提供獨立配額,不受 IP 位址影響。

如要啟用已驗證的存取權,請按照下列步驟操作:

  1. 使用密碼產生器建立密碼。

  2. 執行下列指令,將用戶端轉換為使用自動驗證 (不變更分支):

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

    請注意,/a/ 目錄前置字元會觸發自動驗證。

設定 Proxy 用途

如果您要透過 Proxy 下載來源 (這在某些企業環境中很常見),請務必執行下列指令,明確指定 Repo 要使用的 Proxy:

$ 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 中建立本機鏡像,並使用 --mirror 旗標和 repo init 指令初始化鏡像。

  2. 從鏡像同步處理用戶端:

    $ 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. 將鏡像與伺服器同步,並將用戶端與鏡像同步:

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

您可以將鏡像儲存在 LAN 伺服器上,並透過 NFS、SSH 或 Git 存取。您也可以將其儲存在卸除式磁碟機上,並在使用者或電腦之間傳遞該磁碟機。

使用部分複製

如果使用 Git 2.19 以上版本,請在執行 repo init 時指定 --partial-clone,解決任何低延遲網路問題:

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

這個指令會視需要下載 Git 物件,而不是初始化 Repo 來下載所有內容。

排解 403 或 500 錯誤 (Proxy 問題)

repo initrepo sync 指令可能會失敗,並顯示 403 或 500 錯誤。這類錯誤通常與 HTTP Proxy 無法處理大量資料傳輸有關。

雖然沒有針對這些錯誤的特定修正方式,但使用最新版 Python 並明確使用 repo sync -j1 有時會有幫助。