A/B sistem güncellemeleri

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

Şu anda SDV, sanal olmayan A/B güncellemelerini kullanacak şekilde yapılandırılmıştır.

Başlatma kontrolü HAL'ını uygulama

Cuttlefish için SDV Core görüntüsü (sdv_core_cf), hardware/interfaces/boot/aidl/default/ temel alınarak önyükleme kontrolü HAL'nin standart bir uygulamasını sağlar. Diğer önyükleyicilerin, A/B güncellemelerini desteklemek için HAL'yi uygulaması gerekir.

Ayrıntılar için AOSP dokümanlarının Ö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, AOSP belgelerine küçük farklılıklarla uygundur.

Güncellemenin tamamı

Depo kökünden:

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

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

OTA paketi oluşturmak için ota_from_target_files kullanmanız gerekir. AOSP'den farklı olarak, paket m dist'nın bir parçası olarak oluşturulmaz.

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. SDV derlemelerinde hata ayıklama güncelleme sürecinde hata ayıklamak ve süreci test etmek için kullanılabilecek update_engine_client içerir.

OTA paketini 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 (son durum UPDATE_STATUS_UPDATED_NEED_REBOOT ve sonuç ErrorCode::kSuccess ise) güncelleme, bir sonraki yeniden başlatma işleminde etkinleştirilir.

Sürüm oluşturma

SDV, sistem güncellemeleri için bir OTA paketinin şartları karşılayıp karşılamadığını ve yüklenip yüklenemeyeceğini belirlemek üzere Android'in OTA paket meta verilerini kullanır.

SDV, APEX için de güncellenebilirlik konusunda Android'in kavramlarını takip eder. Bu nedenle, APEX bootstrap APEX değilse güncellenebilir. Bootstrap APEX, sistem güncellemeleri aracılığıyla güncellenmelidir ve şu koşullardan biri geçerli olmalıdır:

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

veya

  • Bildirilen sürüm, önceden yüklenmemiş bir APEX'tir ve sürüm, kara listede varsa kara listedeki 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. Ancak bu bakım, tüm sistemlerin düzgün şekilde iletişim kurabileceğini garanti etmez.

Ağın genelini güncellemeniz de aynı derecede önemlidir. Bunun için hizmet paketlerindeki güncellemelerin tüm makinelere aynı anda dağıtılması veya güncellemelerin, arayüzde uyumsuz değişiklikler gibi, kesintiye neden olan değişiklikler içermemesi gerekir.

SDV, uyumsuz değişiklikleri tespit etmek için araçlar sunmasa da kurallarımızda arayüzlerde yapılan değişikliklerin nasıl uzlaştırılacağı ve değişikliklerin dağıtılması 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 yanlışlıkla tatmin edici olmayan bir duruma girerse bilinen son tatmin edici durumu geri yükleyebiliriz.