Trang này giải thích cách khắc phục và sửa chữa các vấn đề liên quan đến lệnh repo sync
.
Khắc phục sự cố mạng
Phần này đưa ra một số đề xuất để khắc phục các vấn đề về mạng có thể gây ra lỗi đồng bộ hoá.
Sử dụng quy trình xác thực để tránh các rào cản về hạn mức
Để bảo vệ máy chủ khỏi tình trạng sử dụng quá mức, mỗi địa chỉ IP được dùng để truy cập vào nguồn đều được liên kết với một hạn mức.
Khi bạn chia sẻ địa chỉ IP với những người dùng khác (chẳng hạn như khi truy cập vào các kho lưu trữ nguồn từ bên ngoài tường lửa NAT), hạn mức có thể được kích hoạt cho các mẫu thông thường. Ví dụ: hạn mức có thể được kích hoạt khi một số người dùng đồng bộ hoá các ứng dụng mới từ cùng một địa chỉ IP trong một khoảng thời gian ngắn.
Để tránh kích hoạt hạn mức, bạn có thể sử dụng quyền truy cập đã xác thực. Quyền truy cập này sử dụng một hạn mức riêng cho mỗi người dùng, bất kể địa chỉ IP.
Cách bật quyền truy cập đã xác thực:
Tạo mật khẩu bằng trình tạo mật khẩu.
Chạy lệnh sau để chuyển đổi ứng dụng khách của bạn sang sử dụng tính năng xác thực tự động (không thay đổi nhánh):
$ repo init -u https://android.googlesource.com/a/platform/manifest
Xin lưu ý rằng tiền tố thư mục
/a/
sẽ kích hoạt quy trình xác thực tự động.
Định cấu hình để sử dụng proxy
Nếu bạn đang tải nguồn xuống từ sau một proxy (thường gặp trong một số môi trường doanh nghiệp), hãy đảm bảo rằng bạn chỉ định rõ ràng một proxy để Repo sử dụng bằng cách chạy các lệnh sau:
$ 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
Điều chỉnh chế độ cài đặt TCP/IP để tránh gặp vấn đề về kết nối
Mặc dù hiếm gặp, nhưng các ứng dụng Linux có thể gặp phải vấn đề về kết nối, chẳng hạn như bị kẹt trong quá trình tải xuống trong khi nhận các đối tượng. Để cải thiện vấn đề này, hãy điều chỉnh chế độ cài đặt của ngăn xếp TCP/IP hoặc sử dụng các kết nối không song song. Bạn phải có quyền truy cập vào thư mục gốc để sửa đổi chế độ cài đặt TCP. Để sửa đổi chế độ cài đặt này, hãy thực hiện các lệnh sau:
$ sudo sysctl -w net.ipv4.tcp_window_scaling=0
$ repo sync -j1
Sử dụng bản sao cục bộ để tránh độ trễ mạng
Khi sử dụng nhiều ứng dụng, bạn có thể tạo bản sao cục bộ của toàn bộ nội dung máy chủ và đồng bộ hoá các ứng dụng từ bản sao đó mà không cần truy cập vào mạng. Làm theo các hướng dẫn này để tạo một bản sao cục bộ trong ~/aosp-mirror/
và đồng bộ hoá các máy khách với bản sao đó:
Tạo và đồng bộ hoá bản sao:
$ mkdir -p /usr/local/aosp/mirror $ cd /usr/local/aosp/mirror $ repo init -u https://android.googlesource.com/mirror/manifest --mirror
Các lệnh này sẽ tạo một bản sao cục bộ trong
/user/local/aosp/mirror
và khởi tạo bản sao bằng cờ--mirror
với lệnhrepo init
.Đồng bộ hoá các ứng dụng từ bản sao:
$ 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
Đồng bộ hoá bản sao với máy chủ và đồng bộ hoá các ứng dụng với bản sao:
$ cd /usr/local/aosp/mirror</code> $ repo sync $ cd /usr/local/aosp/android-latest-release $ repo sync
Bạn có thể lưu trữ bản sao trên máy chủ LAN và truy cập vào bản sao đó qua NFS, SSH hoặc Git. Bạn cũng có thể lưu trữ khoá này trên một ổ đĩa di động và chuyển ổ đĩa đó giữa người dùng hoặc máy.
Sử dụng bản sao chép một phần
Nếu bạn đang sử dụng Git phiên bản 2.19 trở lên, hãy chỉ định --partial-clone
khi thực hiện repo init
để khắc phục mọi vấn đề về mạng có độ trễ thấp:
$ repo init -u https://android.googlesource.com/platform/manifest -b android-latest-release --partial-clone --clone-filter=blob:limit=10M
Thay vì khởi động Repo để tải mọi thứ xuống, lệnh này sẽ tải các đối tượng Git xuống khi cần.
Khắc phục lỗi 403 hoặc 500 (vấn đề về proxy)
Lệnh repo init
hoặc repo sync
có thể không thành công và gặp lỗi 403 hoặc 500. Thông thường, những lỗi này liên quan đến việc các proxy HTTP gặp khó khăn trong việc xử lý các hoạt động truyền dữ liệu lớn.
Mặc dù không có cách khắc phục cụ thể cho những lỗi này, nhưng đôi khi việc sử dụng phiên bản Python mới nhất và sử dụng rõ ràng repo sync -j1
có thể giúp ích.