Hợp nhất ổn định trên Linux

Mỗi ngày, một số lượng đáng kể thay đổi được thực hiện đối với nhân Linux thượng nguồn. Những thay đổi này thường không được đánh giá về tác động bảo mật, nhưng nhiều thay đổi trong số đó có khả năng ảnh hưởng đến tính bảo mật của hạt nhân. Việc đánh giá từng thay đổi này để biết tác động bảo mật là một hoạt động tốn kém và có thể không khả thi. Thay vào đó, một phương pháp bền vững và dễ bảo trì hơn là thường xuyên đồng bộ hoá các thay đổi với nhân Linux ngược dòng.

Bạn nên thường xuyên cập nhật thiết bị bằng các hạt nhân Hỗ trợ dài hạn (LTS) mới hơn. Các bản cập nhật LTS thường xuyên có thể giúp giải quyết các lỗ hổng bảo mật tiềm ẩn chưa được phát hiện, chẳng hạn như báo cáo Project Zero này vào đầu năm 2019, trước khi các bên độc hại công bố hoặc phát hiện.

Điều kiện tiên quyết

  • Nhánh nhân hệ điều hành Android chung (từ AOSP)
  • Nhánh giai đoạn hợp nhất LTS cho nhân thiết bị mục tiêu
  • Nhánh phát hành nhân thiết bị
  • Kho lưu trữ Git
  • Chuỗi công cụ bản dựng kernel

Hợp nhất với các thay đổi LTS

Hợp nhất các thay đổi về LTS
Hình 1: Hợp nhất các thay đổi LTS

Các bước sau đây trình bày các bước thông thường để hợp nhất LTS.

  • Hợp nhất lại nhánh phát hành hạt nhân mục tiêu vào nhánh chạy thử -LTS
  • Hợp nhất cục bộ linux-stable hoặc Android common vào nhánh giai đoạn -LTS
  • Giải quyết xung đột hợp nhất (tham khảo ý kiến của chủ sở hữu khu vực/mã nếu cần)
  • Xây dựng cục bộ và thực hiện kiểm thử đơn vị/mức độ hợp lý (xem phần kiểm thử ở bên dưới)
  • Tải lên và hợp nhất các thay đổi chung trên Android vào nhánh dự trữ LTS
  • Kiểm thử kỹ lưỡng bằng cách sử dụng nhánh thử nghiệm -LTS (xem phần kiểm thử bên dưới)
  • Xem lại kết quả kiểm thử
  • Giải quyết mọi sự hồi quy, hợp nhất hai phần nếu cần
  • Hợp nhất nhánh giai đoạn -LTS vào nhánh phát hành hạt nhân thiết bị chính
  • Tạo bản dựng Android mới cho các thiết bị có hạt nhân LTS thử nghiệm
  • Biên dịch bản phát hành/ROM bằng nhân mới

Ví dụ về cách hợp nhất với LTS.

Hợp nhất android-4.9 vào chính (thông qua giai đoạn LTS) và kiểm tra và đồng bộ hoá nhánh giai đoạn LTS:

repo init -b <Device kernel LTS staging branch>  # init
repo sync
git checkout -b lts <Device kernel LTS staging branch>
git merge <Device kernel release branch>         # back-merge
git commit

Tại thời điểm này, tốt nhất là bạn nên đẩy tính năng hợp nhất ngược về điều khiển từ xa nguồn trước khi tiếp tục. Sau đó, hãy hợp nhất Android common vào giai đoạn LTS.

git merge -X patience android-4.9-q            # LTS merge

Giải quyết xung đột hợp nhất

Trong hầu hết trường hợp, có xung đột giữa nhân hệ điều hành chung của Android và nhánh chạy thử -LTS. Việc giải quyết xung đột hợp nhất trong quá trình hợp nhất LTS có thể rất khó khăn, vì vậy, dưới đây là một số mẹo hữu ích để giải quyết các xung đột đó.

Hợp nhất dần dần

Nếu đã có một khoảng thời gian đáng kể kể từ khi hạt nhân thiết bị được cập nhật bằng LTS, thì rất có thể đã có nhiều bản phát hành ổn định (>50) kể từ khi bản cập nhật hợp nhất gần đây nhất được phát hành ngược dòng. Cách tốt nhất để giải quyết vấn đề này là dần dần bắt kịp bằng cách hợp nhất một số bản phát hành nhỏ hơn cùng một lúc (<=5 phiên bản nhỏ), đồng thời kiểm thử ở từng bước.

Ví dụ: nếu cấp phụ của phiên bản nhân hệ điều hành của thiết bị là 4.14.100 và cấp phụ ổn định cho luồng ngược là 4.14.155, thì tốt nhất bạn nên hợp nhất theo từng mức tăng nhỏ để đảm bảo lượng thay đổi hợp lý có thể được xem xét và kiểm thử đầy đủ.

Nhìn chung, chúng tôi nhận thấy rằng việc tăng dần theo lô <=5 bản phát hành nhỏ trong mỗi quá trình hợp nhất đảm bảo có một bộ bản vá dễ quản lý hơn.

Thử nghiệm

Kiểm thử khởi động nhanh

Để kiểm thử khởi động nhanh, trước tiên, bạn phải hợp nhất các thay đổi LTS cục bộ và tạo hạt nhân. Các bước sau đây giải thích quy trình kiểm thử khởi động nhanh.

Kết nối thiết bị mục tiêu với máy tính bằng cáp USB và đẩy .ko vào thiết bị bằng Cầu gỡ lỗi Android (adb).

adb root
adb disable-verity
adb reboot
(wait for device boot-to-home)
adb root
adb remount
adb push *.ko vendor/lib/modules/
adb reboot bootloader

Khởi động dtbo và tải hình ảnh nhân hệ điều hành không qua cửa hàng.

fastboot boot --header-version=2 Image.lz4 (redo again if device rebooted)

Kiểm tra nhật ký /dev/kmsg để tìm lỗi.

adb shell
su
cat /dev/kmsg (inspect kernel log for obvious new errors)

Kiểm thử Android

Trước tiên, hãy tạo hình ảnh -userdebug cục bộ bằng hạt nhân LTS và các mô-đun mới.

Kiểm tra /dev/kmsg để đảm bảo không có lỗi nào trước khi tiếp tục. Kiểm thử những điều sau để đảm bảo mọi thứ đang hoạt động như mong đợi.

  • Tốc độ Wi-Fi
  • Trình duyệt Chrome
  • Chụp ảnh và quay video bằng ứng dụng camera
  • Phát video trên YouTube bằng loa tích hợp và tai nghe Bluetooth
  • Cuộc gọi qua mạng của nhà mạng
  • Gọi video qua Wi-Fi

Bộ kiểm thử tự động

Quy trình xác minh cuối cùng để đảm bảo hình ảnh sản phẩm không bị hồi quy được thực hiện bằng cách sử dụng các bộ kiểm thử có sẵn thông qua bộ kiểm thử của nhà cung cấp (VTS) và kiểm thử căng thẳng tự động về độ ổn định.