لینوکس پایدار ادغام

هر روز تعداد قابل توجهی از تغییرات در هسته بالادست لینوکس انجام می شود. این تغییرات معمولاً از نظر تأثیر امنیتی ارزیابی نمی شوند، اما بسیاری از آنها پتانسیل تأثیرگذاری بر امنیت هسته را دارند. ارزیابی هر یک از این تغییرات برای تأثیر امنیتی یک عملیات پرهزینه و احتمالاً غیرقابل اجرا است. در عوض، یک رویکرد پایدارتر و قابل نگهداری تر، همگام سازی منظم تغییرات با هسته بالادست لینوکس است.

توصیه می شود به طور مرتب دستگاه ها را با هسته های جدیدتر با پشتیبانی طولانی مدت (LTS) به روز کنید. به‌روزرسانی‌های منظم LTS می‌تواند به رفع آسیب‌پذیری‌های امنیتی ناشناخته بالقوه، مانند گزارش Project Zero از اوایل سال 2019، قبل از افشای عمومی یا کشف توسط عوامل مخرب کمک کند.

پیش نیازها

  • شاخه هسته مشترک اندروید (از AOSP)
  • یک شاخه مرحله بندی ادغام LTS برای هسته دستگاه هدف
  • شاخه انتشار هسته دستگاه
  • Git repo
  • زنجیره ابزار ساخت هسته

ادغام با تغییرات LTS

ادغام تغییرات LTS
شکل 1 : ادغام تغییرات LTS

مراحل زیر مراحل معمولی برای ادغام LTS را تشریح می کند.

  • ادغام مجدد شاخه انتشار هسته هدف در شاخه مرحله بندی -LTS
  • به صورت محلی لینوکس پایدار یا اندروید رایج را در شاخه مرحله بندی -LTS ادغام کنید
  • تضادهای ادغام را حل کنید (در صورت نیاز با صاحبان منطقه/کد مشورت کنید)
  • به صورت محلی بسازید و تست سلامتی/واحد را انجام دهید (به بخش تست زیر مراجعه کنید)
  • تغییرات رایج Android را در شاخه مرحله بندی LTS آپلود و ادغام کنید
  • با استفاده از شاخه مرحله بندی -LTS به طور کامل تست کنید (به بخش تست زیر مراجعه کنید)
  • نتایج آزمون را مرور کنید
  • هر گونه رگرسیون را برطرف کنید، در صورت نیاز ادغام کنید
  • ادغام -LTS شاخه مرحله بندی در شاخه اصلی انتشار هسته دستگاه
  • ساخت اندروید جدید برای دستگاه های خود ایجاد کنید که شامل هسته مرحله بندی LTS است
  • build/ROM انتشار را با کرنل جدید کامپایل کنید

نمونه ای از ادغام با LTS.

android-4.9 را در main (از طریق LTS 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

در این مرحله، بهتر است قبل از ادامه، ادغام برگشتی را به ریموت منبع خود فشار دهید. پس از آن، اندروید مشترک را در مرحله بندی LTS ادغام کنید.

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

تضادهای ادغام را حل کنید

در بیشتر موارد، بین هسته مشترک اندروید و شاخه مرحله بندی -LTS درگیری وجود دارد. حل تضادهای ادغام در طول ادغام LTS می تواند چالش برانگیز باشد، بنابراین در زیر چند نکته مفید برای رسیدگی به آنها آورده شده است.

ادغام تدریجی

اگر زمان قابل توجهی از به‌روزرسانی هسته دستگاه با LTS گذشته باشد، احتمال زیادی وجود دارد که از زمان انتشار آخرین به‌روزرسانی ادغام‌شده در بالادست، نسخه‌های پایدار (بیش از ۵۰) وجود داشته باشد. بهترین راه برای رفع این مشکل این است که به آرامی با ادغام تعداد کمتری از نسخه ها در یک زمان (<=5 نسخه جزئی)، در حالی که در هر مرحله از راه آزمایش می کنید، به عقب برگردید.

به عنوان مثال، اگر سطح فرعی نسخه هسته دستگاه 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 را بوت کنید و تصویر هسته را بارگذاری کنید.

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)

تست های اندروید

ابتدا تصویر -userdbug را به صورت محلی با هسته و ماژول های جدید LTS بسازید.

/dev/kmsg را برای هر گونه خطا بررسی کنید و قبل از ادامه تأیید کنید که هیچ خطایی وجود ندارد. موارد زیر را آزمایش کنید تا مطمئن شوید همه چیز مطابق انتظار عمل می کند.

  • سرعت وای فای
  • مرورگر کروم
  • ضبط تصویر و فیلم با اپلیکیشن دوربین
  • پخش ویدیوی YouTube با بلندگوهای داخلی و هدست بلوتوث
  • تماس از طریق شبکه حامل
  • تماس تصویری از طریق Wi-Fi

مجموعه های تست خودکار

تأیید نهایی برای اطمینان از عدم پسرفت تصویر محصول با استفاده از مجموعه‌های آزمایشی موجود از طریق مجموعه تست فروشنده (VTS) و تست استرس پایداری خودکار انجام می‌شود.

،

هر روز تعداد قابل توجهی از تغییرات در هسته بالادست لینوکس انجام می شود. این تغییرات معمولاً از نظر تأثیر امنیتی ارزیابی نمی شوند، اما بسیاری از آنها پتانسیل تأثیرگذاری بر امنیت هسته را دارند. ارزیابی هر یک از این تغییرات برای تأثیر امنیتی یک عملیات پرهزینه و احتمالاً غیرقابل اجرا است. در عوض، یک رویکرد پایدارتر و قابل نگهداری تر، همگام سازی منظم تغییرات با هسته بالادست لینوکس است.

توصیه می شود به طور مرتب دستگاه ها را با هسته های جدیدتر با پشتیبانی طولانی مدت (LTS) به روز کنید. به‌روزرسانی‌های منظم LTS می‌تواند به رفع آسیب‌پذیری‌های امنیتی ناشناخته بالقوه، مانند گزارش Project Zero از اوایل سال 2019، قبل از افشای عمومی یا کشف توسط عوامل مخرب کمک کند.

پیش نیازها

  • شاخه هسته مشترک اندروید (از AOSP)
  • یک شاخه مرحله بندی ادغام LTS برای هسته دستگاه هدف
  • شاخه انتشار هسته دستگاه
  • Git repo
  • زنجیره ابزار ساخت هسته

ادغام با تغییرات LTS

ادغام تغییرات LTS
شکل 1 : ادغام تغییرات LTS

مراحل زیر مراحل معمولی برای ادغام LTS را تشریح می کند.

  • ادغام مجدد شاخه انتشار هسته هدف در شاخه مرحله بندی -LTS
  • به صورت محلی لینوکس پایدار یا اندروید رایج را در شاخه مرحله بندی -LTS ادغام کنید
  • تضادهای ادغام را حل کنید (در صورت نیاز با صاحبان منطقه/کد مشورت کنید)
  • به صورت محلی بسازید و تست سلامتی/واحد را انجام دهید (به بخش تست زیر مراجعه کنید)
  • تغییرات رایج Android را در شاخه مرحله بندی LTS آپلود و ادغام کنید
  • با استفاده از شاخه مرحله بندی -LTS به طور کامل تست کنید (به بخش تست زیر مراجعه کنید)
  • نتایج آزمون را مرور کنید
  • هر گونه رگرسیون را برطرف کنید، در صورت نیاز ادغام کنید
  • ادغام -LTS شاخه مرحله بندی در شاخه اصلی انتشار هسته دستگاه
  • ساخت اندروید جدید برای دستگاه های خود ایجاد کنید که شامل هسته مرحله بندی LTS است
  • build/ROM انتشار را با کرنل جدید کامپایل کنید

نمونه ای از ادغام با LTS.

android-4.9 را در main (از طریق LTS 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

در این مرحله، بهتر است قبل از ادامه، ادغام برگشتی را به ریموت منبع خود فشار دهید. پس از آن، اندروید مشترک را در مرحله بندی LTS ادغام کنید.

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

تضادهای ادغام را حل کنید

در بیشتر موارد، بین هسته مشترک اندروید و شاخه مرحله بندی -LTS درگیری وجود دارد. حل تضادهای ادغام در طول ادغام LTS می تواند چالش برانگیز باشد، بنابراین در زیر چند نکته مفید برای رسیدگی به آنها آورده شده است.

ادغام تدریجی

اگر زمان قابل توجهی از به‌روزرسانی هسته دستگاه با LTS گذشته باشد، احتمال زیادی وجود دارد که از زمان انتشار آخرین به‌روزرسانی ادغام‌شده در بالادست، نسخه‌های پایدار (بیش از ۵۰) وجود داشته باشد. بهترین راه برای رفع این مشکل این است که به آرامی با ادغام تعداد کمتری از نسخه ها در یک زمان (<=5 نسخه جزئی)، در حالی که در هر مرحله از راه آزمایش می کنید، به عقب برگردید.

به عنوان مثال، اگر سطح فرعی نسخه هسته دستگاه 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 را بوت کنید و تصویر هسته را بارگذاری کنید.

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)

تست های اندروید

ابتدا تصویر -userdbug را به صورت محلی با هسته و ماژول های جدید LTS بسازید.

/dev/kmsg را برای هر گونه خطا بررسی کنید و قبل از ادامه تأیید کنید که هیچ خطایی وجود ندارد. موارد زیر را آزمایش کنید تا مطمئن شوید همه چیز مطابق انتظار عمل می کند.

  • سرعت وای فای
  • مرورگر کروم
  • ضبط تصویر و فیلم با اپلیکیشن دوربین
  • پخش ویدیوی YouTube با بلندگوهای داخلی و هدست بلوتوث
  • تماس از طریق شبکه حامل
  • تماس تصویری از طریق Wi-Fi

مجموعه های تست خودکار

تأیید نهایی برای اطمینان از عدم پسرفت تصویر محصول با استفاده از مجموعه‌های آزمایشی موجود از طریق مجموعه تست فروشنده (VTS) و تست استرس پایداری خودکار انجام می‌شود.