عمليات الدمج المستقرة في Linux

يتم إجراء عدد كبير من التغييرات كل يوم على نواة Linux الأولية. بشكل عام، لا يتم تقييم هذه التغييرات من حيث تأثيرها على الأمان، ولكن الكثير منها لديه القدرة على التأثير على أمان kernel. يعد تقييم كل من هذه التغييرات من حيث التأثير الأمني ​​عملية مكلفة ومن المحتمل أن تكون غير مجدية. وبدلاً من ذلك، فإن النهج الأكثر استدامة وقابلية للصيانة هو مزامنة التغييرات بانتظام مع نواة Linux الأولية.

يوصى بتحديث الأجهزة بانتظام بنواة أحدث مدعومة على المدى الطويل (LTS). يمكن أن تساعد تحديثات LTS المنتظمة في معالجة الثغرات الأمنية المحتملة غير المعترف بها، مثل تقرير Project Zero هذا في وقت سابق من عام 2019، قبل الكشف العام أو اكتشافها من قبل الجهات الفاعلة الضارة.

المتطلبات الأساسية

  • فرع النواة المشترك لنظام Android (من AOSP)
  • فرع التدريج لدمج LTS لنواة الجهاز المستهدف
  • فرع إصدار نواة الجهاز
  • جيت الريبو
  • سلسلة أدوات بناء النواة

الدمج مع تغييرات LTS

دمج تغييرات LTS
الشكل 1 : دمج تغييرات LTS

توضح الخطوات التالية الخطوات النموذجية لدمج LTS.

  • قم بدمج فرع إصدار kernel الهدف مرة أخرى في فرع التدريج -LTS
  • قم بدمج Linux المستقر أو Android الشائع محليًا في فرع التدريج -LTS
  • حل تعارضات الدمج (استشر مالكي المنطقة/الكود حسب الحاجة)
  • البناء محليًا وإجراء اختبار العقل/الوحدة (انظر قسم الاختبار أدناه)
  • قم بتحميل ودمج تغييرات Android الشائعة في فرع التدريج LTS
  • اختبار شامل باستخدام فرع التدريج -LTS (انظر قسم الاختبار أدناه)
  • مراجعة نتائج الاختبار
  • معالجة أي تراجعات، ودمج النصف حسب الحاجة
  • دمج فرع التدريج -LTS في فرع إصدار kernel للجهاز الرئيسي
  • قم بإنشاء إصدار Android جديد لأجهزتك يتضمن نواة LTS المرحلية
  • تجميع إصدار الإصدار/ROM باستخدام نواة جديدة

مثال على الدمج مع LTS.

دمج android-4.9 في النظام الرئيسي (عبر LTS التدريج) والخروج ومزامنة فرع التدريج 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

في هذه المرحلة، من الأفضل دفع الدمج الخلفي إلى جهاز التحكم عن بعد الخاص بالمصدر قبل المتابعة. بعد ذلك، قم بدمج Android common في نظام LTS المرحلي.

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

حل تعارضات الدمج

في معظم الحالات، سيكون هناك تعارضات بين نواة Android الشائعة وفرع التدريج -LTS. قد يكون حل تعارضات الدمج أثناء عمليات دمج LTS أمرًا صعبًا، لذا فيما يلي بعض النصائح المفيدة حول معالجتها.

الدمج التزايدي

إذا مر وقت طويل منذ تحديث نواة الجهاز باستخدام LTS، فهناك احتمال كبير بوجود العديد من الإصدارات المستقرة (> 50) منذ إصدار آخر تحديث مدمج في المنبع. أفضل طريقة لمعالجة هذه المشكلة هي اللحاق بالركب ببطء من خلال دمج عدد أقل من الإصدارات في المرة الواحدة (<= 5 إصدارات ثانوية)، أثناء الاختبار في كل خطوة على الطريق.

على سبيل المثال، إذا كان المستوى الفرعي لإصدار kernel للجهاز هو 4.14.100 والمستوى الفرعي المستقر الأولي هو 4.14.155، فمن الأفضل الدمج بزيادات صغيرة لضمان إمكانية مراجعة واختبار حجم معقول من التغييرات بشكل مناسب.

بشكل عام، وجدنا أن العمل بشكل تدريجي على دفعات <=5 إصدارات ثانوية لكل عملية دمج يضمن مجموعة من التصحيحات أكثر قابلية للإدارة.

اختبارات

اختبار التمهيد السريع

لإجراء اختبار تمهيد سريع، يجب عليك أولاً دمج تغييرات LTS محليًا وإنشاء النواة.
توضح الخطوات التالية عملية اختبار التمهيد السريع.

قم بتوصيل الجهاز المستهدف بجهاز الكمبيوتر الخاص بك باستخدام كابل USB وادفع .ko إلى الجهاز باستخدام 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

قم بتشغيل dtbo وقم بتحميل صورة kernel بشكل جانبي.

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

تحقق من سجل /dev/kmsg بحثًا عن الأخطاء.

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

اختبارات الروبوت

قم أولاً ببناء صورة -userdebug محليًا باستخدام نواة ووحدات LTS الجديدة.

تحقق من /dev/kmsg بحثًا عن أي أخطاء وتأكد من عدم وجود أي أخطاء قبل المتابعة. اختبر الأشياء التالية للتأكد من أن كل شيء يعمل كما هو متوقع.

  • سرعة الواي فاي
  • متصفح كروم
  • التقاط الصور والفيديو باستخدام تطبيق الكاميرا
  • تشغيل فيديو يوتيوب باستخدام مكبرات الصوت المدمجة وسماعة رأس بلوتوث
  • المكالمات عبر شبكة الناقل
  • مكالمة فيديو عبر شبكة Wi-Fi

مجموعات الاختبار الآلي

يتم إجراء التحقق النهائي لضمان عدم تراجع صورة المنتج باستخدام مجموعات الاختبارات المتاحة من خلال مجموعة اختبار البائع (VTS) واختبار ضغط الاستقرار الآلي.