本頁說明如何排解及修正與 repo sync
指令相關的問題。
修正網路問題
本節針對可能導致同步失敗的網路問題提供幾項建議。
使用驗證功能避免配額限制
為避免伺服器遭到過度使用,每個用於存取來源的 IP 位址都會與配額相關聯。
當您與其他使用者共用 IP 位址 (例如從 NAT 防火牆外存取來源存放區) 時,系統可能會針對一般模式觸發配額。舉例來說,如果在短時間內有許多使用者透過相同 IP 位址同步處理新的用戶端,系統就會觸發配額。
如要避免觸發配額,您可以使用經過驗證的存取權,無論 IP 位址為何,每位使用者都會使用獨立的配額。
如何啟用已驗證存取權:
使用密碼產生器建立密碼。
執行下列指令,將用戶端轉換為使用自動驗證 (不變更分支):
$ 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 堆疊的設定,或使用非平行連線。您必須具備 root 存取權,才能修改 TCP 設定。如要修改設定,請發出下列指令:
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1
使用本機鏡像避免網路延遲
使用多個用戶端時,您可以建立整個伺服器內容的本機鏡像,並從該鏡像同步處理用戶端,而無需存取網路。請按照下列操作說明,在 ~/aosp-mirror/
中建立本機鏡像,並將用戶端與該鏡像同步:
建立並同步鏡像:
$ 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
指令初始化鏡像。如何同步處理鏡像的用戶端:
$ mkdir -p /usr/local/aosp/main $ cd /usr/local/aosp/main $ repo init -u /usr/local/aosp/mirror/platform/manifest.git $ repo sync
最後,請按照下列指令將鏡像與伺服器同步,並將用戶端與鏡像同步:
$ cd /usr/local/aosp/mirror</code> $ repo sync $ cd /usr/local/aosp/main $ repo sync
您可以將鏡像儲存在區域網路伺服器上,並透過 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
這個指令不會初始化存放區來下載所有項目,而會視需要下載 Git 物件。
修正特定的同步處理問題
本頁詳細說明您在嘗試同步處理 Android 原始碼時可能會遇到的部分已知問題。
指令失敗並顯示 403 或 500 錯誤 (Proxy 問題)
repo init
或 repo sync
指令可能會失敗,並顯示 403 或 500 錯誤。這些錯誤通常與 HTTP Proxy 無法處理大量資料傳輸有關。
雖然這些錯誤沒有特定修正方式,但使用最新的 Python 版本並明確使用 repo sync -j1
有時可能有助於解決問題。