Linux kararlı Birleştirmeler

Her gün Linux çekirdeğinde önemli sayıda değişiklik yapılıyor. Bu değişiklikler genellikle güvenlik etkisi açısından değerlendirilmez ancak birçoğunun çekirdeğin güvenliğini etkileme potansiyeli vardır. Bu değişikliklerin her birinin güvenlik etkisi açısından değerlendirilmesi pahalı ve muhtemelen gerçekleştirilmesi mümkün olmayan bir işlemdir. Bunun yerine daha sürdürülebilir ve sürdürülebilir bir yaklaşım, değişiklikleri yukarı akış Linux çekirdeğiyle düzenli olarak senkronize etmektir.

Cihazların daha yeni Uzun Süreli Desteklenen (LTS) çekirdeklerle düzenli olarak güncellenmesi önerilir. Düzenli LTS güncellemeleri, kamuya açıklanmadan veya kötü niyetli aktörler tarafından keşfedilmeden önce, 2019'un başlarında yayınlanan bu Proje Sıfır raporu gibi potansiyel tanınmayan güvenlik açıklarının giderilmesine yardımcı olabilir.

Önkoşullar

  • Android ortak çekirdek dalı (AOSP'den)
  • Hedef cihaz çekirdeği için bir LTS birleştirme hazırlama dalı
  • Cihaz çekirdeği sürüm dalı
  • Git deposu
  • Çekirdek oluşturma araç zinciri

LTS değişiklikleriyle birleştirme

LTS değişikliklerini birleştirme
Şekil 1 : LTS değişikliklerini birleştirme

Aşağıdaki adımlarda LTS birleştirmeye yönelik tipik adımlar özetlenmektedir.

  • Hedef çekirdek sürüm dalını -LTS hazırlama dalına geri birleştirin
  • Linux-stable veya Android common'u yerel olarak -LTS hazırlama dalıyla birleştirin
  • Birleştirme çakışmalarını çözün (gerektiğinde alan/kod sahiplerine danışın)
  • Yerel olarak oluşturun ve akıl sağlığı/birim testi gerçekleştirin (aşağıdaki test bölümüne bakın)
  • Android ortak değişikliklerini LTS hazırlama şubesine yükleyin ve birleştirin
  • -LTS aşamalandırma dalını kullanarak kapsamlı bir şekilde test edin (aşağıdaki test bölümüne bakın)
  • Test sonuçlarını inceleyin
  • Tüm gerilemeleri ele alın, birleştirmeyi gerektiği gibi ikiye bölün
  • -LTS hazırlama dalını ana cihaz çekirdek yayın dalıyla birleştir
  • Cihazlarınız için hazırlama LTS çekirdeğini içeren yeni Android derlemesi oluşturun
  • Sürüm yapısını/ROM'u yeni çekirdekle derleyin

LTS ile birleştirme örneği.

Android-4.9'u ana (LTS aşamalandırma yoluyla) ile birleştirin ve LTS aşamalandırma dalını satın alın ve senkronize edin:

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

Bu noktada, devam etmeden önce geri birleştirmeyi kaynak uzaktan kumandanıza göndermek en iyisidir. Bundan sonra, Android Common'u LTS aşamalandırmayla birleştirin.

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

Birleştirme çakışmalarını çözme

Çoğu durumda, Android ortak çekirdeği ile -LTS hazırlama dalı arasında çakışmalar olacaktır. LTS birleştirmeleri sırasındaki birleştirme çakışmalarını çözmek zor olabilir; bu nedenle aşağıda bunların çözümüne yönelik bazı yararlı ipuçları verilmiştir.

Artımlı birleştirme

Bir cihaz çekirdeğinin LTS ile güncellenmesinden bu yana önemli miktarda zaman geçtiyse, son birleştirilmiş güncellemenin yukarı yönde yayımlanmasından bu yana çok sayıda (>50) kararlı sürümün olması ihtimali yüksektir. Bu sorunu çözmenin en iyi yolu, yolun her adımında test ederken aynı anda daha az sayıda sürümü (<=5 küçük sürüm) birleştirerek yavaş yavaş yetişmektir.

Örneğin, cihaz çekirdeği sürümü alt düzeyi 4.14.100 ve yukarı akış kararlı alt düzeyi 4.14.155 ise, makul miktardaki değişikliğin yeterince incelenip test edilebilmesini sağlamak için küçük artışlarla birleştirme en iyisidir.

Genel olarak, birleştirme başına <=5 küçük sürümden oluşan gruplar halinde artımlı olarak çalışmanın daha yönetilebilir bir yama kümesi sağladığını bulduk.

Test yapmak

Hızlı önyükleme testi

Hızlı önyükleme testi gerçekleştirmek için öncelikle LTS değişikliklerini yerel olarak birleştirmeli ve çekirdeği oluşturmalısınız.
Aşağıdaki adımlarda hızlı önyükleme testi işlemi açıklanmaktadır.

Hedef cihazı bir USB kablosu kullanarak bilgisayarınıza bağlayın ve Android Hata Ayıklama Köprüsü'nü (ADB) kullanarak .ko dosyasını cihaza gönderin.

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

Dtbo'yu önyükleyin ve çekirdek görüntüsünü yan tarafa yükleyin.

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

Hata olup olmadığını görmek için /dev/kmsg günlüğünü kontrol edin.

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

Android testleri

Öncelikle -userdebug görüntüsünü yeni LTS çekirdeği ve modülleriyle yerel olarak oluşturun.

Devam etmeden önce /dev/kmsg'de herhangi bir hata olup olmadığını kontrol edin ve hata olmadığını doğrulayın. Her şeyin beklendiği gibi hareket ettiğinden emin olmak için aşağıdakileri test edin.

  • Wi-Fi hızı
  • Chrome tarayıcı
  • Kamera uygulamasıyla resim ve video çekimi
  • Dahili hoparlörler ve Bluetooth kulaklıkla YouTube video oynatma
  • Operatör ağı üzerinden aramalar
  • Wi-Fi üzerinden görüntülü görüşme

Otomatik test paketleri

Ürün görüntüsünün gerilemediğinden emin olmak için yapılan son doğrulama, satıcı test paketi (VTS) aracılığıyla sunulan test paketleri ve otomatik stabilite stres testi kullanılarak gerçekleştirilir.