লিনাক্স-স্থিতিশীল একত্রীকরণ

আপস্ট্রিম লিনাক্স কার্নেলে প্রতিদিন উল্লেখযোগ্য সংখ্যক পরিবর্তন করা হয়। এই পরিবর্তনগুলি সাধারণত নিরাপত্তা প্রভাবের জন্য মূল্যায়ন করা হয় না, তবে তাদের মধ্যে অনেকেরই কার্নেলের নিরাপত্তাকে প্রভাবিত করার সম্ভাবনা রয়েছে। নিরাপত্তা প্রভাবের জন্য এই পরিবর্তনগুলির প্রতিটি মূল্যায়ন একটি ব্যয়বহুল এবং সম্ভবত অসম্ভাব্য অপারেশন। পরিবর্তে একটি আরও টেকসই এবং রক্ষণাবেক্ষণযোগ্য পদ্ধতি হল আপস্ট্রিম লিনাক্স কার্নেলের সাথে নিয়মিত পরিবর্তনগুলি সিঙ্ক করা।

নতুন লং টার্ম সাপোর্টেড (LTS) কার্নেল সহ ডিভাইসগুলিকে নিয়মিত আপডেট করার পরামর্শ দেওয়া হয়। নিয়মিত LTS আপডেটগুলি সম্ভাব্য অস্বীকৃত সুরক্ষা দুর্বলতাগুলি মোকাবেলায় সহায়তা করতে পারে, যেমন 2019 সালের শুরুর এই প্রকল্প জিরো রিপোর্ট , জনসাধারণের প্রকাশ বা দূষিত অভিনেতাদের দ্বারা আবিষ্কারের আগে।

পূর্বশর্ত

  • অ্যান্ড্রয়েড সাধারণ কার্নেল শাখা (AOSP থেকে)
  • লক্ষ্য ডিভাইস কার্নেলের জন্য একটি LTS মার্জ স্টেজিং শাখা
  • ডিভাইস কার্নেল রিলিজ শাখা
  • গিট রেপো
  • কার্নেল বিল্ড টুলচেইন

LTS পরিবর্তনের সাথে মার্জ করুন

LTS পরিবর্তনগুলি মার্জ করা হচ্ছে৷
চিত্র 1 : LTS পরিবর্তনগুলি একত্রিত করা৷

নিম্নলিখিত পদক্ষেপগুলি একটি LTS মার্জ করার জন্য সাধারণ পদক্ষেপগুলির রূপরেখা দেয়৷

  • লক্ষ্য কার্নেল রিলিজ শাখাকে -LTS স্টেজিং শাখায় ব্যাক-মার্জ করুন
  • স্থানীয়ভাবে linux-stable বা Android কমন -LTS স্টেজিং শাখায় মার্জ করুন
  • মার্জ দ্বন্দ্ব সমাধান করুন (প্রয়োজনে এলাকা/কোড মালিকদের সাথে পরামর্শ করুন)
  • স্থানীয়ভাবে তৈরি করুন এবং স্যানিটি/ইউনিট পরীক্ষা করুন (নীচের পরীক্ষা বিভাগ দেখুন)
  • LTS স্টেজিং শাখায় Android সাধারণ পরিবর্তনগুলি আপলোড এবং মার্জ করুন৷
  • -LTS স্টেজিং শাখা ব্যবহার করে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন (নীচের পরীক্ষা বিভাগ দেখুন)
  • পরীক্ষার ফলাফল পর্যালোচনা করুন
  • যেকোন রিগ্রেশন এড্রেস করুন, প্রয়োজন অনুযায়ী দ্বিখন্ডিত করুন
  • মেইন ডিভাইস কার্নেল রিলিজ শাখায় এলটিএস স্টেজিং শাখা একত্রিত করুন
  • আপনার ডিভাইসগুলির জন্য নতুন Android বিল্ড তৈরি করুন যাতে স্টেজিং LTS কার্নেল অন্তর্ভুক্ত থাকে
  • নতুন কার্নেলের সাথে রিলিজ বিল্ড/রম কম্পাইল করুন

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

এই মুহুর্তে চালিয়ে যাওয়ার আগে ব্যাক-মার্জকে আপনার সোর্স রিমোটে পুশ করা ভাল। এর পরে, এলটিএস স্টেজিং-এ অ্যান্ড্রয়েড কমন মার্জ করুন।

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

একত্রীকরণ বিরোধের সমাধান করুন

বেশিরভাগ ক্ষেত্রে, Android সাধারণ কার্নেল এবং -LTS স্টেজিং শাখার মধ্যে দ্বন্দ্ব রয়েছে। এলটিএস একত্রীকরণের সময় একত্রীকরণের বিরোধগুলি সমাধান করা চ্যালেঞ্জিং হতে পারে তাই নীচে সেগুলির সমাধানের জন্য কিছু সহায়ক টিপস রয়েছে৷

ক্রমবর্ধমান একত্রীকরণ

একটি ডিভাইস কার্নেল LTS-এর সাথে আপডেট হওয়ার পর থেকে যদি উল্লেখযোগ্য পরিমাণ সময় অতিবাহিত হয়, তাহলে শেষ মার্জড আপডেট আপস্ট্রিম রিলিজ হওয়ার পর থেকে অনেকগুলি (>50) স্থিতিশীল রিলিজ হওয়ার একটি ভাল সম্ভাবনা রয়েছে। এটি মোকাবেলা করার সর্বোত্তম উপায় হল প্রতিটি ধাপে পরীক্ষা করার সময় একটি সময়ে অল্প সংখ্যক রিলিজ (<=5 ছোট সংস্করণ) একত্রিত করে ধীরে ধীরে ধরা।

উদাহরণস্বরূপ, যদি ডিভাইস কার্নেল সংস্করণ সাবলেভেল 4.14.100 হয় এবং আপস্ট্রিম স্থিতিশীল সাবলেভেল 4.14.155 হয়, তবে পরিবর্তনের একটি যুক্তিসঙ্গত ভলিউম পর্যাপ্তভাবে পর্যালোচনা এবং পরীক্ষা করা যেতে পারে তা নিশ্চিত করার জন্য ছোট ইনক্রিমেন্টে মার্জ করা ভাল।

সাধারণভাবে, আমরা দেখেছি যে প্রতি একত্রিতকরণে <=5 ছোট রিলিজের ব্যাচে ক্রমবর্ধমানভাবে কাজ করা প্যাচগুলির আরও পরিচালনাযোগ্য সেট নিশ্চিত করে।

টেস্টিং

দ্রুত বুট পরীক্ষা

একটি দ্রুত বুট পরীক্ষা করার জন্য আপনাকে প্রথমে স্থানীয়ভাবে LTS পরিবর্তনগুলি মার্জ করতে হবে এবং কার্নেল তৈরি করতে হবে। নিম্নলিখিত পদক্ষেপগুলি দ্রুত বুট পরীক্ষা প্রক্রিয়া ব্যাখ্যা করে।

একটি 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 চেক করুন এবং চালিয়ে যাওয়ার আগে নিশ্চিত করুন যে কোনো ত্রুটি নেই। সবকিছু প্রত্যাশিত হিসাবে কাজ করছে তা নিশ্চিত করতে নিম্নলিখিত জিনিসগুলি পরীক্ষা করুন।

  • Wi-Fi গতি
  • ক্রোম ব্রাউজার
  • ক্যামেরা অ্যাপ দিয়ে ছবি ও ভিডিও ক্যাপচার
  • বিল্ট-ইন স্পিকার এবং ব্লুটুথ হেডসেটের সাথে YouTube ভিডিও প্লেব্যাক
  • ক্যারিয়ার নেটওয়ার্কের মাধ্যমে কল
  • Wi-Fi এর মাধ্যমে ভিডিও কল

স্বয়ংক্রিয় টেস্টিং স্যুট

পণ্যের ছবি যাতে রিগ্রেস না হয় তা নিশ্চিত করার জন্য চূড়ান্ত যাচাইকরণ ভেন্ডর টেস্ট স্যুট (VTS) এবং স্বয়ংক্রিয় স্থিতিশীলতা স্ট্রেস টেস্টিংয়ের মাধ্যমে উপলব্ধ টেস্ট স্যুট ব্যবহার করে করা হয়।

,

আপস্ট্রিম লিনাক্স কার্নেলে প্রতিদিন উল্লেখযোগ্য সংখ্যক পরিবর্তন করা হয়। এই পরিবর্তনগুলি সাধারণত নিরাপত্তা প্রভাবের জন্য মূল্যায়ন করা হয় না, তবে তাদের মধ্যে অনেকেরই কার্নেলের নিরাপত্তাকে প্রভাবিত করার সম্ভাবনা রয়েছে। নিরাপত্তা প্রভাবের জন্য এই পরিবর্তনগুলির প্রতিটি মূল্যায়ন একটি ব্যয়বহুল এবং সম্ভবত অসম্ভাব্য অপারেশন। পরিবর্তে একটি আরও টেকসই এবং রক্ষণাবেক্ষণযোগ্য পদ্ধতি হল আপস্ট্রিম লিনাক্স কার্নেলের সাথে নিয়মিত পরিবর্তনগুলি সিঙ্ক করা।

নতুন লং টার্ম সাপোর্টেড (LTS) কার্নেল সহ ডিভাইসগুলিকে নিয়মিত আপডেট করার পরামর্শ দেওয়া হয়। নিয়মিত LTS আপডেটগুলি সম্ভাব্য অস্বীকৃত সুরক্ষা দুর্বলতাগুলি মোকাবেলায় সহায়তা করতে পারে, যেমন 2019 সালের শুরুর এই প্রকল্প জিরো রিপোর্ট , জনসাধারণের প্রকাশ বা দূষিত অভিনেতাদের দ্বারা আবিষ্কারের আগে।

পূর্বশর্ত

  • অ্যান্ড্রয়েড সাধারণ কার্নেল শাখা (AOSP থেকে)
  • লক্ষ্য ডিভাইস কার্নেলের জন্য একটি LTS মার্জ স্টেজিং শাখা
  • ডিভাইস কার্নেল রিলিজ শাখা
  • গিট রেপো
  • কার্নেল বিল্ড টুলচেইন

LTS পরিবর্তনের সাথে মার্জ করুন

LTS পরিবর্তনগুলি মার্জ করা হচ্ছে৷
চিত্র 1 : LTS পরিবর্তনগুলি একত্রিত করা৷

নিম্নলিখিত পদক্ষেপগুলি একটি LTS মার্জ করার জন্য সাধারণ পদক্ষেপগুলির রূপরেখা দেয়৷

  • লক্ষ্য কার্নেল রিলিজ শাখাকে -LTS স্টেজিং শাখায় ব্যাক-মার্জ করুন
  • স্থানীয়ভাবে linux-stable বা Android কমন -LTS স্টেজিং শাখায় মার্জ করুন
  • মার্জ দ্বন্দ্ব সমাধান করুন (প্রয়োজনে এলাকা/কোড মালিকদের সাথে পরামর্শ করুন)
  • স্থানীয়ভাবে তৈরি করুন এবং স্যানিটি/ইউনিট পরীক্ষা করুন (নীচের পরীক্ষা বিভাগ দেখুন)
  • LTS স্টেজিং শাখায় Android সাধারণ পরিবর্তনগুলি আপলোড এবং মার্জ করুন৷
  • -LTS স্টেজিং শাখা ব্যবহার করে পুঙ্খানুপুঙ্খভাবে পরীক্ষা করুন (নীচের পরীক্ষা বিভাগ দেখুন)
  • পরীক্ষার ফলাফল পর্যালোচনা করুন
  • যেকোন রিগ্রেশন এড্রেস করুন, প্রয়োজন অনুযায়ী দ্বিখন্ডিত করুন
  • মেইন ডিভাইস কার্নেল রিলিজ শাখায় এলটিএস স্টেজিং শাখা একত্রিত করুন
  • আপনার ডিভাইসগুলির জন্য নতুন Android বিল্ড তৈরি করুন যাতে স্টেজিং LTS কার্নেল অন্তর্ভুক্ত থাকে
  • নতুন কার্নেলের সাথে রিলিজ বিল্ড/রম কম্পাইল করুন

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

এই মুহুর্তে চালিয়ে যাওয়ার আগে ব্যাক-মার্জকে আপনার সোর্স রিমোটে পুশ করা ভাল। এর পরে, এলটিএস স্টেজিং-এ অ্যান্ড্রয়েড কমন মার্জ করুন।

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

একত্রীকরণ বিরোধের সমাধান করুন

বেশিরভাগ ক্ষেত্রে, Android সাধারণ কার্নেল এবং -LTS স্টেজিং শাখার মধ্যে দ্বন্দ্ব রয়েছে। এলটিএস একত্রীকরণের সময় একত্রীকরণের বিরোধগুলি সমাধান করা চ্যালেঞ্জিং হতে পারে তাই নীচে সেগুলির সমাধানের জন্য কিছু সহায়ক টিপস রয়েছে৷

ক্রমবর্ধমান একত্রীকরণ

একটি ডিভাইস কার্নেল LTS-এর সাথে আপডেট হওয়ার পর থেকে যদি উল্লেখযোগ্য পরিমাণ সময় অতিবাহিত হয়, তাহলে শেষ মার্জড আপডেট আপস্ট্রিম রিলিজ হওয়ার পর থেকে অনেকগুলি (>50) স্থিতিশীল রিলিজ হওয়ার একটি ভাল সম্ভাবনা রয়েছে। এটি মোকাবেলা করার সর্বোত্তম উপায় হল প্রতিটি ধাপে পরীক্ষা করার সময় একটি সময়ে অল্প সংখ্যক রিলিজ (<=5 ছোট সংস্করণ) একত্রিত করে ধীরে ধীরে ধরা।

উদাহরণস্বরূপ, যদি ডিভাইস কার্নেল সংস্করণ সাবলেভেল 4.14.100 হয় এবং আপস্ট্রিম স্থিতিশীল সাবলেভেল 4.14.155 হয়, তবে পরিবর্তনের একটি যুক্তিসঙ্গত ভলিউম পর্যাপ্তভাবে পর্যালোচনা এবং পরীক্ষা করা যেতে পারে তা নিশ্চিত করার জন্য ছোট ইনক্রিমেন্টে মার্জ করা ভাল।

সাধারণভাবে, আমরা দেখেছি যে প্রতি একত্রিতকরণে <=5 ছোট রিলিজের ব্যাচে ক্রমবর্ধমানভাবে কাজ করা প্যাচগুলির আরও পরিচালনাযোগ্য সেট নিশ্চিত করে।

টেস্টিং

দ্রুত বুট পরীক্ষা

একটি দ্রুত বুট পরীক্ষা করার জন্য আপনাকে প্রথমে স্থানীয়ভাবে LTS পরিবর্তনগুলি মার্জ করতে হবে এবং কার্নেল তৈরি করতে হবে। নিম্নলিখিত পদক্ষেপগুলি দ্রুত বুট পরীক্ষা প্রক্রিয়া ব্যাখ্যা করে।

একটি 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 চেক করুন এবং চালিয়ে যাওয়ার আগে নিশ্চিত করুন যে কোনো ত্রুটি নেই। সবকিছু প্রত্যাশিত হিসাবে কাজ করছে তা নিশ্চিত করতে নিম্নলিখিত জিনিসগুলি পরীক্ষা করুন।

  • Wi-Fi গতি
  • ক্রোম ব্রাউজার
  • ক্যামেরা অ্যাপ দিয়ে ছবি ও ভিডিও ক্যাপচার
  • বিল্ট-ইন স্পিকার এবং ব্লুটুথ হেডসেটের সাথে YouTube ভিডিও প্লেব্যাক
  • ক্যারিয়ার নেটওয়ার্কের মাধ্যমে কল
  • Wi-Fi এর মাধ্যমে ভিডিও কল

স্বয়ংক্রিয় টেস্টিং স্যুট

পণ্যের ছবি যাতে রিগ্রেস না হয় তা নিশ্চিত করার জন্য চূড়ান্ত যাচাইকরণ ভেন্ডর টেস্ট স্যুট (VTS) এবং স্বয়ংক্রিয় স্থিতিশীলতা স্ট্রেস টেস্টিংয়ের মাধ্যমে উপলব্ধ টেস্ট স্যুট ব্যবহার করে করা হয়।