Khắc phục và giải quyết vấn đề khi đồng bộ hoá

Trang này giải thích cách khắc phục và giải quyết các vấn đề liên quan đến lệnh repo sync.

Khắc phục sự cố mạng

Phần này cung cấp một số đề xuất để khắc phục các sự cố mạng có thể khiến đồng bộ hoá không thành công.

Sử dụng phương pháp xác thực để tránh rào cản hạn mức

Để bảo vệ máy chủ khỏi việc sử dụng quá mức, mỗi địa chỉ IP được dùng để nguồn truy cập được liên kết với một hạn mức.

Khi chia sẻ địa chỉ IP với người dùng khác, chẳng hạn như khi truy cập vào nguồn từ ngoài tường lửa NAT, hạn mức có thể kích hoạt mẫu. Ví dụ: một hạn mức có thể kích hoạt khi có nhiều 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 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:

  1. Tạo mật khẩu bằng trình tạo mật khẩu.

  2. Chạy lệnh sau để chuyển đổi ứng dụng của bạn sang chế độ tự động xác thực (mà 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 xuống nguồn từ sau một proxy, như thường lệ ở một số môi trường công ty, hãy đảm bảo bạn chỉ định rõ một proxy cho Repo để sử dụng 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 sự cố kết nối

Mặc dù hiếm khi xảy ra nhưng ứng dụng Linux có thể gặp sự cố kết nối, chẳng hạn như bị kẹt ở giữa quá trình tải xuống trong khi nhận đố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ông nghệ không song song kết nối. Bạn phải có quyền truy cập thư mục gốc để sửa đổi chế độ cài đặt TCP. Để sửa đổi hãy đưa ra các lệnh sau:

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

Sử dụng một 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 một bản sao cục bộ của toàn bộ máy chủ nội dung và đồng bộ hoá ứng dụng khách 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ộ tại ~/aosp-mirror/ và đồng bộ hoá ứng dụng với bản sao đó:

  1. 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 tạo một bản sao cục bộ trong /user/local/aosp/mirror và khởi động bản sao bằng cách sử dụng cờ --mirror với repo init .

  2. Cách đồng bộ hoá ứng dụng từ đồng bộ hoá hai chiều:

    $ mkdir -p /usr/local/aosp/main
    $ cd /usr/local/aosp/main
    $ repo init -u /usr/local/aosp/mirror/platform/manifest.git
    $ repo sync
    
  3. Cuối cùng, hãy làm theo các lệnh sau để đồng bộ hoá máy chủ phản chiếu với máy chủ và đồng bộ hoá ứng dụng với máy chủ phản chiếu:

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

Bạn có thể lưu trữ bản sao trên máy chủ LAN và truy cập máy chủ đó qua NFS, SSH hoặc Git. Cũng có thể lưu trữ mã này trên ổ đĩa di động và truyền thúc đẩy giữa những người dùng hoặc máy.

Sử dụng bản sao 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 sự cố mạng có độ trễ thấp:

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

Thay vì khởi tạo Repo để tải mọi thứ xuống, lệnh này sẽ tải Git khi cần thiết.

Khắc phục các sự cố đồng bộ hoá cụ thể

Trang này trình bày chi tiết một số vấn đề đã biết mà bạn có thể gặp phải khi cố gắng đồng bộ hoá Mã nguồn Android.

Các lệnh không thành công với lỗi 403 hoặc 500 (sự cố proxy)

Các lệnh repo init hoặc repo sync có thể không thành công với lỗi 403 hoặc 500 . Thông thường, các lỗi này liên quan đến các proxy HTTP đang gặp khó khăn xử lý các lượt chuyể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 việc sử dụng phiên bản Python mới nhất và việc sử dụng repo sync -j1 một cách rõ ràng đôi khi có thể hữu ích.