Penggabungan Linux-stabil

Setiap hari, sejumlah besar perubahan di-commit ke kernel Linux upstream. Perubahan ini umumnya tidak dievaluasi untuk dampak keamanan, tetapi banyak di antaranya berpotensi memengaruhi keamanan kernel. Mengevaluasi setiap perubahan ini untuk mengetahui dampaknya terhadap keamanan adalah operasi yang mahal dan mungkin tidak dapat dilakukan. Sebagai gantinya, pendekatan yang lebih berkelanjutan dan dapat dikelola adalah menyinkronkan perubahan secara berkala dengan kernel Linux upstream.

Sebaiknya update perangkat secara rutin dengan kernel yang Didukung Jangka Panjang (LTS) yang lebih baru. Update LTS rutin dapat membantu mengatasi potensi kerentanan keamanan yang tidak dikenal, seperti laporan Project Zero ini dari awal tahun 2019, sebelum pengungkapan atau penemuan publik oleh pelaku kejahatan.

Prasyarat

  • Cabang kernel umum Android (dari AOSP)
  • Cabang staging penggabungan LTS untuk kernel perangkat target
  • Cabang rilis kernel perangkat
  • Repositori Git
  • Toolchain build kernel

Menggabungkan dengan perubahan LTS

Menggabungkan perubahan LTS
Gambar 1: Menggabungkan perubahan LTS

Langkah-langkah berikut menguraikan langkah-langkah umum untuk penggabungan LTS.

  • Me-merge kembali cabang rilis kernel target ke cabang staging -LTS
  • Menggabungkan linux-stable atau Android common secara lokal ke cabang staging -LTS
  • Menyelesaikan konflik penggabungan (konsultasikan dengan pemilik area/kode sesuai kebutuhan)
  • Mem-build secara lokal dan melakukan pengujian keandalan/unit (lihat bagian pengujian di bawah)
  • Mengupload dan menggabungkan perubahan umum Android ke cabang staging LTS
  • Menguji secara menyeluruh menggunakan cabang staging -LTS (lihat bagian pengujian di bawah)
  • Meninjau hasil pengujian
  • Atasi regresi, gabungkan bisek sebagai diperlukan
  • Menggabungkan cabang staging -LTS ke cabang rilis kernel perangkat utama
  • Membuat build Android baru untuk perangkat Anda yang menyertakan kernel LTS staging
  • Mengompilasi build/ROM rilis dengan kernel baru

Contoh penggabungan dengan LTS.

Gabungkan android-4.9 ke utama (melalui staging LTS) dan checkout serta sinkronkan cabang staging 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

Pada tahap ini, sebaiknya kirimkan penggabungan kembali ke remote sumber sebelum melanjutkan. Setelah itu, gabungkan Android umum ke dalam staging LTS.

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

Menyelesaikan konflik penggabungan

Pada umumnya, ada konflik antara kernel umum Android dan cabang staging -LTS. Menyelesaikan konflik penggabungan selama penggabungan LTS dapat menjadi tantangan, jadi berikut beberapa tips bermanfaat untuk mengatasinya.

Penggabungan inkremental

Jika sudah cukup lama sejak kernel perangkat diupdate dengan LTS, kemungkinan besar sudah ada banyak (&gt;50) rilis stabil sejak update gabungan terakhir dirilis di upstream. Cara terbaik untuk menanganinya adalah dengan perlahan mengejar ketinggalan dengan menggabungkan lebih sedikit rilis sekaligus (<=5 versi minor), sambil menguji di setiap langkah.

Misalnya, jika sublevel versi kernel perangkat adalah 4.14.100 dan sublevel stabil upstream adalah 4.14.155, sebaiknya gabungkan dalam penambahan kecil untuk memastikan volume perubahan yang wajar dapat ditinjau dan diuji secara memadai.

Secara umum, kami mendapati bahwa bekerja secara bertahap dalam batch <=5 rilis minor per penggabungan memastikan kumpulan patch yang lebih mudah dikelola.

Pengujian

Pengujian booting cepat

Untuk melakukan pengujian booting cepat, Anda harus menggabungkan perubahan LTS secara lokal terlebih dahulu dan mem-build kernel. Langkah-langkah berikut menjelaskan proses pengujian booting cepat.

Hubungkan perangkat target ke komputer menggunakan kabel USB, lalu kirim .ko ke perangkat menggunakan Android Debug Bridge (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

Boot dtbo dan sideload image kernel.

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

Periksa log /dev/kmsg untuk menemukan error.

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

Pengujian Android

Pertama-tama, build image -userdebug secara lokal dengan kernel dan modul LTS baru.

Periksa /dev/kmsg untuk menemukan error dan pastikan tidak ada error sebelum melanjutkan. Uji hal-hal berikut untuk memastikan semuanya berfungsi seperti yang diharapkan.

  • Kecepatan Wi-Fi
  • Browser Chrome
  • Perekaman gambar dan video dengan aplikasi kamera
  • Pemutaran video YouTube dengan speaker bawaan dan headset Bluetooth
  • Panggilan melalui jaringan operator
  • Panggilan video melalui Wi-Fi

Suite pengujian otomatis

Verifikasi akhir untuk memastikan image produk tidak mengalami regresi dilakukan menggunakan rangkaian pengujian yang tersedia melalui rangkaian pengujian vendor (VTS) dan pengujian stres stabilitas otomatis.