מיזוגים יציבים בלינוקס

מדי יום מחויבים מספר לא מבוטל של שינויים בקרנל הלינוקס במעלה הזרם. שינויים אלה בדרך כלל אינם מוערכים לגבי השפעת האבטחה, אך לרבים מהם יש פוטנציאל להשפיע על אבטחת הליבה. הערכת כל אחד מהשינויים הללו על השפעת האבטחה היא פעולה יקרה וסביר להניח שאינה ישימה. במקום זאת, גישה ברת קיימא ובר-תחזוקה יותר היא לסנכרן שינויים באופן קבוע עם ליבת לינוקס במעלה הזרם.

מומלץ לעדכן באופן שוטף מכשירים עם גרעינים חדשים יותר של Long Term Support (LTS). עדכוני LTS רגילים יכולים לעזור לטפל בפרצות אבטחה פוטנציאליות שאינן מזוהות, כגון דוח Project Zero זה ממוקדמות יותר בשנת 2019, לפני חשיפה פומבית או גילוי על ידי גורמים זדוניים.

דרישות מוקדמות

  • ענף גרעין משותף של אנדרואיד (מ-AOSP)
  • ענף מיזוג LTS עבור ליבת מכשיר היעד
  • ענף שחרור ליבת המכשיר
  • Git repo
  • שרשרת כלים לבניית ליבה

מיזוג עם שינויים ב-LTS

מיזוג שינויים ב-LTS
איור 1 : מיזוג שינויים ב-LTS

השלבים הבאים מתארים את השלבים האופייניים למיזוג LTS.

  • מיזוג בחזרה את ענף שחרור ליבת היעד לתוך ענף ה-LTS staging
  • מיזוג מקומי של linux-stable או אנדרואיד נפוץ לתוך ענף -LTS staging
  • פתרון התנגשויות מיזוג (התייעצו עם בעלי אזור/קוד לפי הצורך)
  • בנה מקומי ובצע בדיקות שפיות/יחידות (ראה סעיף בדיקות למטה)
  • העלה ומיזוג שינויים נפוצים של אנדרואיד בענף LTS staging
  • בדוק ביסודיות באמצעות ענף -LTS staging (ראה סעיף בדיקות להלן)
  • סקור את תוצאות הבדיקה
  • לטפל בכל רגרסיה, לחצות מיזוג לפי הצורך
  • מיזוג ענף -LTS staging לתוך ענף שחרור ליבת ההתקן הראשי
  • צור מבנה אנדרואיד חדש עבור המכשירים שלך הכולל את ליבת ה-LTS
  • הידור build/ROM של מהדורה עם קרנל חדש

דוגמה למיזוג עם LTS.

למזג את אנדרואיד-4.9 לראשי (באמצעות LTS staging) ולצאת וסנכרן סניף LTS staging:

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 staging.

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

פתרון קונפליקטים מיזוגים

ברוב המקרים, יהיו התנגשויות בין הליבה המשותפת של אנדרואיד לענף ה-LTS-staging. פתרון התנגשויות מיזוג במהלך מיזוג LTS יכול להיות מאתגר אז להלן כמה עצות מועילות לטיפול בהן.

מיזוג מצטבר

אם חלף פרק זמן משמעותי מאז עדכון ליבת התקן עם LTS, יש סיכוי טוב שהיו הרבה (>50) מהדורות יציבות מאז שהעדכון האחרון הממוזג שוחרר במעלה הזרם. הדרך הטובה ביותר לטפל בזה היא להדביק לאט לאט על ידי מיזוג של מספר קטן יותר של מהדורות בכל פעם (<=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)

בדיקות אנדרואיד

ראשית בנה את תמונת -userdebug באופן מקומי עם ליבת ה-LTS והמודולים החדשים.

בדוק את ה-/dev/kmsg עבור כל שגיאה ואשר שאין שגיאות לפני שתמשיך. בדוק את הדברים הבאים כדי לוודא שהכל פועל כמצופה.

  • מהירות Wi-Fi
  • דפדפן כרום
  • צילום תמונה ווידאו עם אפליקציית מצלמה
  • הפעלת סרטוני YouTube עם רמקולים מובנים ואוזניות בלוטות'
  • שיחות דרך רשת הספק
  • שיחת וידאו דרך Wi-Fi

חבילות בדיקה אוטומטיות

האימות הסופי כדי להבטיח שתמונת המוצר אינה חוזרת מבוצעת באמצעות חבילות הבדיקות הזמינות דרך חבילת הבדיקות של הספקים (VTS) ובדיקות יציבות אוטומטיות.