लिनक्स-स्थिर विलय

हर दिन अपस्ट्रीम लिनक्स कर्नेल में महत्वपूर्ण संख्या में परिवर्तन किए जाते हैं। इन परिवर्तनों का आमतौर पर सुरक्षा प्रभाव के लिए मूल्यांकन नहीं किया जाता है, लेकिन उनमें से कई में कर्नेल की सुरक्षा को प्रभावित करने की क्षमता होती है। सुरक्षा प्रभाव के लिए इनमें से प्रत्येक परिवर्तन का मूल्यांकन करना एक महंगा और संभावित रूप से अव्यवहार्य कार्य है। इसके बजाय एक अधिक टिकाऊ और रखरखाव योग्य दृष्टिकोण नियमित रूप से अपस्ट्रीम लिनक्स कर्नेल के साथ परिवर्तनों को सिंक करना है।

नए दीर्घकालिक समर्थित (एलटीएस) कर्नेल के साथ उपकरणों को नियमित रूप से अपडेट करने की अनुशंसा की जाती है। नियमित एलटीएस अपडेट संभावित गैर-मान्यता प्राप्त सुरक्षा कमजोरियों को संबोधित करने में मदद कर सकते हैं, जैसे कि 2019 की शुरुआत में दुर्भावनापूर्ण अभिनेताओं द्वारा सार्वजनिक प्रकटीकरण या खोज से पहले की यह प्रोजेक्ट जीरो रिपोर्ट

आवश्यक शर्तें

  • एंड्रॉइड सामान्य कर्नेल शाखा (एओएसपी से)
  • लक्ष्य डिवाइस कर्नेल के लिए एक एलटीएस मर्ज स्टेजिंग शाखा
  • डिवाइस कर्नेल रिलीज़ शाखा
  • गिट रेपो
  • कर्नेल टूलचेन का निर्माण करता है

एलटीएस परिवर्तन के साथ विलय

एलटीएस परिवर्तन को मर्ज करना
चित्र 1 : एलटीएस परिवर्तनों का विलय

निम्नलिखित चरण एलटीएस मर्ज के लिए विशिष्ट चरणों की रूपरेखा तैयार करते हैं।

  • लक्ष्य कर्नेल रिलीज़ शाखा को -LTS स्टेजिंग शाखा में वापस मर्ज करें
  • स्थानीय रूप से लिनक्स-स्टेबल या एंड्रॉइड कॉमन को -एलटीएस स्टेजिंग शाखा में मर्ज करें
  • मर्ज विवादों का समाधान करें (आवश्यकतानुसार क्षेत्र/कोड स्वामियों से परामर्श करें)
  • स्थानीय स्तर पर निर्माण करें और विवेक/इकाई परीक्षण करें (नीचे परीक्षण अनुभाग देखें)
  • एंड्रॉइड सामान्य परिवर्तनों को एलटीएस स्टेजिंग शाखा में अपलोड और मर्ज करें
  • -एलटीएस स्टेजिंग शाखा का उपयोग करके पूरी तरह से परीक्षण करें (नीचे परीक्षण अनुभाग देखें)
  • परीक्षण परिणामों की समीक्षा करें
  • आवश्यकतानुसार किसी भी प्रतिगमन, द्विभाजित विलय का समाधान करें
  • -LTS स्टेजिंग शाखा को मुख्य डिवाइस कर्नेल रिलीज़ शाखा में मर्ज करें
  • अपने डिवाइस के लिए नया एंड्रॉइड बिल्ड बनाएं जिसमें स्टेजिंग एलटीएस कर्नेल शामिल हो
  • नए कर्नेल के साथ रिलीज़ बिल्ड/ROM संकलित करें

एलटीएस के साथ विलय का उदाहरण.

एंड्रॉइड-4.9 को मुख्य में मर्ज करें (एलटीएस स्टेजिंग के माध्यम से) और चेकआउट करें और एलटीएस स्टेजिंग शाखा को सिंक करें:

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

इस बिंदु पर जारी रखने से पहले बैक-मर्ज को अपने स्रोत रिमोट पर धकेलना सबसे अच्छा है। उसके बाद, एंड्रॉइड कॉमन को एलटीएस स्टेजिंग में मर्ज करें।

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

मर्ज विवादों का समाधान करना

ज्यादातर मामलों में, एंड्रॉइड कॉमन कर्नेल और -एलटीएस स्टेजिंग शाखा के बीच टकराव होगा। एलटीएस मर्ज के दौरान मर्ज विवादों को हल करना चुनौतीपूर्ण हो सकता है इसलिए उन्हें संबोधित करने के लिए नीचे कुछ उपयोगी सुझाव दिए गए हैं।

वृद्धिशील विलय

यदि किसी डिवाइस कर्नेल को एलटीएस के साथ अपडेट किए जाने के बाद काफी समय बीत चुका है, तो इस बात की अच्छी संभावना है कि पिछले मर्ज किए गए अपडेट को अपस्ट्रीम में जारी किए जाने के बाद से कई (>50) स्थिर रिलीज़ हुए हैं। इसे संबोधित करने का सबसे अच्छा तरीका यह है कि प्रत्येक चरण पर परीक्षण करते हुए, एक समय में कम संख्या में रिलीज़ (<=5 लघु संस्करण) को मर्ज करके धीरे-धीरे गति पकड़ी जाए।

उदाहरण के लिए, यदि डिवाइस कर्नेल संस्करण उपस्तर 4.14.100 है और अपस्ट्रीम स्थिर उपस्तर 4.14.155 है, तो यह सुनिश्चित करने के लिए छोटे वेतन वृद्धि में विलय करना सबसे अच्छा है कि उचित मात्रा में परिवर्तनों की पर्याप्त समीक्षा और परीक्षण किया जा सके।

सामान्य तौर पर, हमने पाया है कि प्रति मर्ज <=5 छोटी रिलीज़ के बैचों में वृद्धिशील रूप से काम करने से पैच का अधिक प्रबंधनीय सेट सुनिश्चित होता है।

परिक्षण

त्वरित बूट परीक्षण

त्वरित बूट परीक्षण करने के लिए आपको पहले एलटीएस परिवर्तनों को स्थानीय रूप से मर्ज करना होगा और कर्नेल का निर्माण करना होगा।
निम्नलिखित चरण त्वरित बूट परीक्षण प्रक्रिया की व्याख्या करते हैं।

USB केबल का उपयोग करके लक्ष्य डिवाइस को अपने कंप्यूटर से कनेक्ट करें और Android डिबग ब्रिज (ADB) का उपयोग करके डिवाइस पर .ko पुश करें।

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)

एंड्रॉइड परीक्षण

पहले नए LTS कर्नेल और मॉड्यूल के साथ स्थानीय रूप से -userdebug छवि बनाएं।

किसी भी त्रुटि के लिए /dev/kmsg की जांच करें और जारी रखने से पहले पुष्टि करें कि कोई त्रुटि नहीं है। यह सुनिश्चित करने के लिए कि सब कुछ अपेक्षा के अनुरूप काम कर रहा है, निम्नलिखित चीज़ों का परीक्षण करें।

  • वाई-फाई स्पीड
  • क्रोम ब्राउज़र
  • कैमरा ऐप से छवि और वीडियो कैप्चर करें
  • बिल्ट-इन स्पीकर और ब्लूटूथ हेडसेट के साथ यूट्यूब वीडियो प्लेबैक
  • वाहक नेटवर्क पर कॉल
  • वाई-फ़ाई पर वीडियो कॉल करें

स्वचालित परीक्षण सुइट्स

यह सुनिश्चित करने के लिए कि उत्पाद की छवि वापस न आए, अंतिम सत्यापन विक्रेता परीक्षण सूट (वीटीएस) और स्वचालित स्थिरता तनाव परीक्षण के माध्यम से उपलब्ध परीक्षण सूट का उपयोग करके किया जाता है।