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 sự cố và khắc phục 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ể khiến quá trình đồng bộ hoá không thành công.

Sử dụng phương thức xác thực để tránh rào cản về 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 dùng để truy cập vào nguồn sẽ đượ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 kho lưu trữ nguồn từ bên ngoài tường lửa NAT, hạn mức có thể kích hoạt cho các mẫu thông thường. Ví dụ: hạn mức có thể kích hoạt khi một số người dùng đồng bộ hoá ứ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 này sử dụng hạn mức riêng cho từng 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 sử dụng tính năng xác thực tự động (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 quá 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, như thường thấy trong một số môi trường doanh nghiệp, hãy đảm bảo bạn chỉ định rõ 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 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 phải các vấn đề về kết nối, chẳng hạn như bị treo 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ác kết nối không song song. 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 chế độ cài đặt này, 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 một số ứng dụng khách, bạn có thể tạo một 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 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 sau để tạo một bản sao cục bộ trong ~/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 chạy bản sao bằng cờ --mirror với lệnh 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á bản sao với máy chủ và đồng bộ hoá ứng dụng khách với bản sao:

    $ 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 vào bản sao đó qua NFS, SSH hoặc Git. Bạn cũng có thể lưu trữ tệp đó trên một ổ đĩa có thể tháo rời và chuyển ổ đĩa đó giữa người dùng hoặc máy.

Sử dụng tính năng 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 main --partial-clone --clone-filter=blob:limit=10M

Thay vì khởi chạy 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 thiết.

Khắc phục các vấn đề cụ thể về việc đồng bộ hoá

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ực hiện được với lỗi 403 hoặc 500 (vấn đề về proxy)

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