Linux-स्टेबल मर्ज

हर दिन, अपस्ट्रीम Linux kernel में कई बदलाव किए जाते हैं. आम तौर पर, इन बदलावों का आकलन सुरक्षा पर पड़ने वाले असर के लिए नहीं किया जाता. हालांकि, इनमें से कई बदलावों से कर्नेल की सुरक्षा पर असर पड़ सकता है. सुरक्षा पर असर के लिए, इनमें से हर बदलाव का आकलन करना महंगा और शायद असंभव है. इसके बजाय, ज़्यादा ईको-फ़्रेंडली और मैनेज किए जा सकने वाले तरीके का इस्तेमाल करना, अपस्ट्रीम Linux कर्नेल के साथ बदलावों को नियमित तौर पर सिंक करना है.

हमारा सुझाव है कि डिवाइसों को लंबे समय तक सहायता (एलटीएस) देने वाले नए कर्नेल के साथ नियमित तौर पर अपडेट करें. समय-समय पर एलटीएस अपडेट किए जाने से, सुरक्षा से जुड़े ऐसे जोखिमों का पता लगाने में मदद मिल सकती है जिनके बारे में आपको पता नहीं है. जैसे, 2019 की शुरुआत में यह प्रोजेक्ट ज़ीरो रिपोर्ट. इससे पहले, सार्वजनिक तौर पर जानकारी ज़ाहिर करने या नुकसान पहुंचाने वाले लोगों या ग्रुप की जानकारी मिलने से पहले की रिपोर्ट थी.

ज़रूरी शर्तें

  • Android का सामान्य कर्नेल ब्रैंच (AOSP से)
  • टारगेट डिवाइस के कर्नेल के लिए, एलटीएस मर्ज स्टेजिंग शाखा
  • डिवाइस के kernel की रिलीज़ शाखा
  • Git रेपो
  • Kernel बिल्ड टूलचेन

एलटीएस (लंबे समय तक सहायता) के बदलावों के साथ मर्ज करना

एलटीएस में किए गए बदलावों को मर्ज करना
पहली इमेज: एलटीएस (लंबे समय तक सहायता) में हुए बदलावों को मर्ज करना

यहां LTS मर्ज करने के सामान्य तरीके के बारे में बताया गया है.

  • टारगेट किए गए कर्नेल रिलीज़ ब्रैंच को -LTS स्टैजिंग ब्रैंच में वापस मर्ज करें
  • linux-stable या Android common को -LTS स्टेजिंग शाखा में स्थानीय तौर पर मर्ज करना
  • मर्ज से जुड़े विवादों को सुलझाना (ज़रूरत के मुताबिक एरिया/कोड के मालिकों से सलाह लें)
  • स्थानीय तौर पर बिल्ड करें और जांच/यूनिट टेस्टिंग करें (यहां टेस्टिंग सेक्शन देखें)
  • Android के सामान्य बदलावों को अपलोड करना और LTS स्टेजिंग शाखा में मर्ज करना
  • -एलटीएस स्टेजिंग ब्रांच का इस्तेमाल करके, अच्छी तरह से जांच करें (नीचे दिया गया टेस्टिंग सेक्शन देखें)
  • टेस्ट के नतीजों की समीक्षा करना
  • किसी भी तरह के रेग्रेशन को ठीक करें और ज़रूरत के हिसाब से, बिसेक्ट मर्ज करें
  • -LTS स्टेजिंग शाखा को डिवाइस के मुख्य कर्नेल रिलीज़ शाखा में मर्ज करना
  • अपने डिवाइसों के लिए नया Android बिल्ड बनाएं, जिसमें स्टैजिंग LTS कर्नेल शामिल हो
  • नए कर्नेल की मदद से रिलीज़ बिल्ड/रोम को कंपाइल करना

LTS के साथ मर्ज करने का उदाहरण.

LTS स्टेजिंग की मदद से, android-4.9 को मुख्य वर्शन में मर्ज करें और 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 मर्ज के दौरान मर्ज से जुड़ी समस्याओं को हल करना मुश्किल हो सकता है. इसलिए, यहां इन समस्याओं को हल करने के लिए कुछ मददगार सलाह दी गई हैं.

इंक्रीमेंटल मर्ज

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

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

आम तौर पर, हमें पता चला है कि हर मर्ज के लिए, कम से कम पांच मामूली रिलीज़ के बैच में काम करने से, पैच को मैनेज करना ज़्यादा आसान हो जाता है.

टेस्ट करना

क्विक बूट टेस्ट

क्विक बूट टेस्ट के लिए, आपको पहले एलटीएस बदलावों को स्थानीय तौर पर मर्ज करना होगा और कर्नेल को बनाना होगा. यहां क्विक बूट टेस्ट की प्रोसेस के बारे में बताया गया है.

टारगेट डिवाइस को यूएसबी केबल की मदद से अपने कंप्यूटर से कनेक्ट करें. इसके बाद, 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)

Android टेस्ट

सबसे पहले, नए एलटीएस कर्नेल और मॉड्यूल की मदद से, स्थानीय तौर पर -userdebug इमेज बनाएं.

/dev/kmsg में कोई गड़बड़ी है या नहीं, इसकी जांच करें. साथ ही, आगे बढ़ने से पहले पुष्टि करें कि कोई गड़बड़ी नहीं है. नीचे दी गई चीज़ों की जांच करके पक्का करें कि सब कुछ उम्मीद के मुताबिक काम कर रहा है.

  • वाई-फ़ाई की स्पीड
  • Chrome ब्राउज़र
  • कैमरा ऐप्लिकेशन की मदद से, इमेज और वीडियो कैप्चर करने की सुविधा
  • YouTube वीडियो चलाने के लिए, पहले से मौजूद स्पीकर और ब्लूटूथ हेडसेट का इस्तेमाल करना
  • मोबाइल और इंटरनेट सेवा देने वाली कंपनी के नेटवर्क पर कॉल
  • वाई-फ़ाई नेटवर्क पर वीडियो कॉल

ऑटोमेटेड टेस्टिंग सुइट

प्रॉडक्ट इमेज में कोई बदलाव न हो, यह पक्का करने के लिए आखिरी पुष्टि की जाती है. इसके लिए, वेंडर टेस्ट सुइट (वीटीएस) और अपने-आप होने वाली स्टैबिलिटी स्ट्रेस टेस्टिंग की मदद से उपलब्ध टेस्ट सुइट का इस्तेमाल किया जाता है.