A/B sistem güncellemeleri

SDV, A/B (sorunsuz) sistem güncellemeleri için standart Android yaklaşımını kullanır. AOSP belgeleri öncelikle SDV için geçerlidir. Bu sayfada, SDV'ye özgü kullanım ve güncelleme paketleri oluşturup uygulamak için bilinen iyi yollar ayrıntılı olarak açıklanmaktadır.

SDV, sanal olmayan A/B güncellemelerini kullanacak şekilde yapılandırılmıştır. Bir hizmet paketinden özel /oem_ab bölümü için A/B güncellemelerini yapılandırmak ve tetiklemek istiyorsanız OEM AB bölüm güncellemeleri başlıklı makaleyi inceleyin.

Başlatma kontrolü HAL'sini uygulama

Cuttlefish (sdv_core_cf) için SDV Core görüntüsü, hardware/interfaces/boot/aidl/default/ tabanlı önyükleme kontrolü HAL'sinin standart bir uygulamasını sağlar. Diğer bootloader'lar, A/B güncellemelerini desteklemek için HAL'yi uygulamalıdır.

Ayrıntılar için AOSP belgelerinin Önyükleme kontrolü HAL'sini uygulama bölümüne bakın. Uygulamayı test etmek için hata ayıklama (eng ve userdebug) SDV görüntülerinde bulunan bootctl'yi kullanabilirsiniz.

OTA paketi oluşturma

Daha fazla bilgi için OTA paketleri oluşturma başlıklı makaleyi inceleyin. Bu sayfadaki talimatlar, küçük değişikliklerle AOSP belgelerini takip eder.

Güncellemenin tamamı

Kod deposu kökünden:

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

Bu komutlar, dist_output dizininde hedef dosyalar oluşturur. sdv_core_cf uygulamasının yerel derlemeleri için bu değer normalde sdv_core_cf-target_files-$USER.zip olur.

OTA paketi oluşturmak için ota_from_target_files kullanmanız gerekir. AOSP'nin aksine, paket m dist kapsamında derlenmez.

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

Artımlı güncelleme

AOSP'dekiyle aynı ota_from_target_files çağrısı:

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 paketi yükleme

Güncellemeler, update_engine hizmeti kullanılarak yüklenir. Hata ayıklama SDV derlemeleri, güncelleme sürecinde hata ayıklama ve test için kullanılabilecek update_engine_client içerir.

OTA paketi yüklemek için şu komutu çalıştırın:

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

Güncelleme doğru şekilde yüklenirse (nihai durum UPDATE_STATUS_UPDATED_NEED_REBOOT ve sonuç ErrorCode::kSuccess ise) bir sonraki yeniden başlatma işleminde etkinleştirilir.

Sürüm oluşturma

SDV, sistem güncellemeleri için Android'in OTA paketi meta verilerini kullanarak bir OTA paketinin şartları karşılayıp karşılamadığını ve yüklenip yüklenemeyeceğini belirler.

Ayrıca APEX için SDV, Android'in güncellenebilirlikle ilgili kavramlarını takip eder. Bu nedenle, APEX bootstrap APEX olmadığında güncellenebilir. Bootstrap APEX, sistem güncellemeleri aracılığıyla güncellenmeli ve:

  • Bildirilen version, önceden yüklenmiş sürümden daha yüksek ve her ikisi de 1'den büyük veya 1'e eşitse,

veya

  • Bildirilen sürüm, önceden yüklenmemiş bir APEX'tir ve sürüm, varsa ret listesindeki sürümden daha yüksektir.

SDV genellikle bir ağdaki birden fazla sisteme dağıtılır. Bu nedenle, tek bir sistemde yapılan güncellemelerin doğru şekilde yürütüldüğünden emin olmanız gerekir. Yine de bu özen, tüm sistemlerin düzgün şekilde iletişim kurabileceğini garanti etmez.

Ağın tamamını güncellemeniz de aynı derecede önemlidir. Bunun için hizmet paketlerine yapılan güncellemelerin tüm makinelere aynı anda dağıtılması veya güncellemelerin zarar veren değişiklikler içermemesi gerekir. Örneğin, arayüzde uyumsuz değişiklikler yapılması.

SDV, uyumsuz değişiklikleri tespit edecek araçlar sunmasa da yönergelerimizde, arayüzlerde yapılan değişikliklerin nasıl uyumlu hale getirileceği ve değişiklikleri dağıtmak için gereken en iyi uygulamalar açıklanmaktadır.

Ayrıca SDV, sistem ve APEX güncellemeleri için geri alma mekanizmalarını destekler. Sistem istemeden tatmin edici olmayan bir duruma girerse bilinen son tatmin edici durumu kurtarabiliriz.