Penggabungan Linux-stabil

Setiap hari sejumlah besar perubahan dilakukan pada kernel Linux hulu. Perubahan ini umumnya tidak dievaluasi untuk dampak keamanan, tetapi banyak di antaranya berpotensi berdampak pada keamanan kernel. Mengevaluasi setiap perubahan ini untuk dampak keamanan adalah operasi yang mahal dan kemungkinan tidak layak. Alih-alih, pendekatan yang lebih berkelanjutan dan dapat dipelihara adalah menyinkronkan perubahan secara teratur dengan kernel Linux hulu.

Disarankan untuk memperbarui perangkat dengan kernel Long Term Supported (LTS) yang lebih baru secara berkala. Pembaruan LTS reguler dapat membantu mengatasi potensi kerentanan keamanan yang tidak dikenali, seperti laporan Project Zero ini dari awal tahun 2019, sebelum pengungkapan atau penemuan publik oleh aktor jahat.

Prasyarat

  • Cabang kernel umum Android (dari AOSP)
  • Cabang pementasan gabungan LTS untuk kernel perangkat target
  • Cabang rilis kernel perangkat
  • Git repo
  • Rantai alat pembuatan kernel

Penggabungan dengan perubahan LTS

Menggabungkan perubahan LTS
Gambar 1 : Menggabungkan perubahan LTS

Langkah-langkah berikut menguraikan langkah-langkah khas untuk gabungan LTS.

  • Gabungkan kembali cabang rilis kernel target ke dalam cabang staging -LTS
  • Menggabungkan linux-stable atau Android umum secara lokal ke dalam cabang pementasan -LTS
  • Selesaikan konflik gabungan (konsultasikan dengan pemilik area/kode sesuai kebutuhan)
  • Bangun secara lokal dan lakukan pengujian kewarasan/unit (lihat bagian pengujian di bawah)
  • Unggah dan gabungkan perubahan umum Android ke cabang pementasan LTS
  • Uji secara menyeluruh menggunakan cabang pementasan -LTS (lihat bagian pengujian di bawah)
  • Tinjau hasil tes
  • Atasi setiap regresi, bagi dua gabungan sesuai kebutuhan
  • Gabungkan cabang pementasan -LTS ke dalam cabang rilis kernel perangkat utama
  • Buat build Android baru untuk perangkat Anda yang menyertakan kernel LTS staging
  • Kompilasi rilis build/ROM dengan kernel baru

Contoh penggabungan dengan LTS.

Gabungkan Android-4.9 ke main/master (melalui pementasan LTS) dan checkout dan sinkronkan cabang pementasan 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 titik ini yang terbaik adalah mendorong penggabungan kembali ke remote sumber Anda sebelum melanjutkan. Setelah itu, gabungkan Android umum ke dalam pementasan LTS.

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

Menyelesaikan konflik gabungan

Dalam kebanyakan kasus, akan ada konflik antara kernel umum Android dan cabang staging -LTS. Menyelesaikan konflik penggabungan selama penggabungan LTS dapat menjadi tantangan, jadi di bawah ini adalah beberapa kiat bermanfaat untuk mengatasinya.

Penggabungan tambahan

Jika banyak waktu telah berlalu sejak kernel perangkat diperbarui dengan LTS, ada kemungkinan besar bahwa ada banyak (>50) rilis stabil sejak pembaruan gabungan terakhir dirilis ke hulu. Cara terbaik untuk mengatasinya adalah dengan perlahan-lahan mengejar ketinggalan dengan menggabungkan lebih sedikit rilis pada satu waktu (<=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, yang terbaik adalah menggabungkan sedikit demi sedikit untuk memastikan volume perubahan yang wajar dapat ditinjau dan diuji secara memadai.

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

Pengujian

Tes boot cepat

Untuk melakukan tes boot cepat, Anda harus terlebih dahulu menggabungkan perubahan LTS secara lokal dan membangun kernel.
Langkah-langkah berikut menjelaskan proses pengujian boot cepat.

Hubungkan perangkat target ke komputer Anda menggunakan kabel USB dan tekan .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 gambar kernel.

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

Periksa log /dev/kmsg untuk menemukan kesalahan.

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

Tes Android

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

Periksa /dev/kmsg apakah ada kesalahan dan konfirmasikan bahwa tidak ada kesalahan sebelum melanjutkan. Uji hal-hal berikut untuk memastikan semuanya berjalan seperti yang diharapkan.

  • Kecepatan Wi-Fi
  • peramban Chrome
  • Pengambilan gambar dan video dengan aplikasi kamera
  • Pemutaran video YouTube dengan speaker internal dan headset Bluetooth
  • Panggilan melalui jaringan operator
  • Panggilan video melalui Wi-Fi

Suite pengujian otomatis

Verifikasi terakhir untuk memastikan citra produk tidak mundur dilakukan dengan menggunakan rangkaian pengujian yang tersedia melalui rangkaian uji vendor (VTS) dan pengujian tegangan stabilitas otomatis.