A/B सिस्टम अपडेट

SDV, सिस्टम अपडेट के लिए Android के स्टैंडर्ड तरीके का इस्तेमाल करता है. इसे A/B (बिना किसी रुकावट के) अपडेट कहा जाता है. AOSP का दस्तावेज़ मुख्य रूप से SDV पर लागू होता है. इस पेज पर, SDV के इस्तेमाल से जुड़ी जानकारी दी गई है. साथ ही, अपडेट पैकेज बनाने और लागू करने के लिए, भरोसेमंद तरीकों के बारे में बताया गया है.

फ़िलहाल, SDV को नॉन-वर्चुअल A/B अपडेट का इस्तेमाल करने के लिए कॉन्फ़िगर किया गया है.

बूट कंट्रोल HAL को लागू करना

Cuttlefish (sdv_core_cf) के लिए SDV Core इमेज, hardware/interfaces/boot/aidl/default/ पर आधारित बूट कंट्रोल एचएएल का स्टैंडर्ड वर्शन उपलब्ध कराती है. अन्य बूटलोडर को, A/B अपडेट की सुविधा देने के लिए HAL लागू करना होगा.

ज़्यादा जानकारी के लिए, AOSP के दस्तावेज़ में बूट कंट्रोल HAL लागू करना सेक्शन देखें. लागू करने की प्रोसेस की जांच करने के लिए, डीबग (eng और userdebug) SDV इमेज में शामिल bootctl का इस्तेमाल किया जा सकता है.

OTA पैकेज जनरेट करना

ज़्यादा जानने के लिए, OTA पैकेज बनाना लेख पढ़ें. इस पेज पर दिए गए निर्देश, AOSP के दस्तावेज़ के मुताबिक हैं. हालांकि, इनमें कुछ बदलाव किए गए हैं.

पूरा अपडेट

रिपॉज़िटरी के रूट से:

source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output

इन कमांड से, dist_output डायरेक्ट्री में टारगेट फ़ाइलें बनती हैं. sdv_core_cf के लोकल बिल्ड के लिए, यह आम तौर पर sdv_core_cf-target_files-$USER.zip होता है.

ओटीए पैकेज बनाने के लिए, आपको ota_from_target_files का इस्तेमाल करना होगा. AOSP के उलट, इस पैकेज को m dist के हिस्से के तौर पर नहीं बनाया गया है.

m ota_from_target_files
ota_from_target_files \
  dist_output/sdv_core_cf-target_files-$USER.zip \
  ota_update.zip

इंक्रीमेंटल अपडेट

AOSP में इस्तेमाल किया गया ota_from_target_files इनवोकेशन:

ota_from_target_files \
  -i PREVIOUS-sdv_core_cf-target_files.zip \
  dist_new/sdv_core_cf-target_files-$USER.zip \
  incremental_ota_update.zip

OTA पैकेज इंस्टॉल करना

अपडेट, update_engine सेवा का इस्तेमाल करके इंस्टॉल किए जाते हैं. एसडीवी के डीबग वर्शन में update_engine_client शामिल होता है. इसका इस्तेमाल, अपडेट की प्रोसेस को डीबग करने और उसकी जांच करने के लिए किया जा सकता है.

OTA पैकेज इंस्टॉल करने के लिए, यह कमांड चलाएं:

system/update_engine/scripts/update_device.py ota_update.zip

अगर अपडेट सही तरीके से इंस्टॉल हो जाता है (फ़ाइनल स्टेटस UPDATE_STATUS_UPDATED_NEED_REBOOT है और नतीजा ErrorCode::kSuccess है), तो अगली बार रीबूट करने पर अपडेट चालू हो जाएगा.

वर्शन

सिस्टम अपडेट के लिए, SDV यह तय करने के लिए Android के OTA पैकेज के मेटाडेटा का इस्तेमाल करता है कि कोई OTA पैकेज ज़रूरी शर्तें पूरी करता है या नहीं और उसे इंस्टॉल किया जा सकता है या नहीं.

साथ ही, APEX के लिए SDV, अपडेट करने की सुविधा के बारे में Android के कॉन्सेप्ट का पालन करता है. इसलिए, APEX को तब अपडेट किया जा सकता है, जब वह बूटस्ट्रैप APEX न हो. सिस्टम अपडेट के ज़रिए, APEX को बूटस्ट्रैप किया जाना चाहिए. साथ ही, इनमें से कोई एक काम किया जाना चाहिए:

  • डिक्लेयर किया गया वर्शन, पहले से इंस्टॉल किए गए वर्शन से ज़्यादा है. साथ ही, दोनों 1 या उससे ज़्यादा हैं,

या,

  • ऐलान किया गया वर्शन, पहले से इंस्टॉल न किया गया APEX है. साथ ही, यह वर्शन, डेनायल लिस्ट में मौजूद वर्शन से ज़्यादा है.

SDV को आम तौर पर, नेटवर्क में मौजूद कई सिस्टम पर डिप्लॉय किया जाता है. इसलिए, आपको यह पक्का करना होगा कि किसी एक सिस्टम में किए गए अपडेट सही तरीके से लागू किए गए हों. इसके बावजूद, इससे यह पक्का नहीं होता कि सभी सिस्टम एक-दूसरे से सही तरीके से कम्यूनिकेट कर सकते हैं.

पूरे नेटवर्क को अपडेट करना भी उतना ही ज़रूरी है. इसके लिए, यह ज़रूरी है कि सेवा बंडलों के अपडेट, सभी मशीनों पर एक साथ डिप्लॉय किए जाएं या अपडेट में कोई बड़ा बदलाव न हो. उदाहरण के लिए, इंटरफ़ेस में ऐसे बदलाव जो साथ काम नहीं करते.

हालांकि, एसडीवी में ऐसे बदलावों का पता लगाने के लिए टूल नहीं दिया जाता जो काम नहीं करते, लेकिन हमारी गाइडलाइन में बताया गया है कि इंटरफ़ेस में किए गए बदलावों को कैसे ठीक किया जाए. साथ ही, बदलावों को लागू करने के लिए सबसे सही तरीके भी बताए गए हैं.

इसके अलावा, एसडीवी, सिस्टम और APEX अपडेट के लिए रोलबैक मैकेनिज़्म के साथ काम करता है. अगर सिस्टम में कोई गड़बड़ी होती है, तो हम उसे पिछली स्थिति में वापस ला सकते हैं.