A/B 시스템 업데이트

SDV는 A/B (원활한) 시스템 업데이트의 표준 Android 접근 방식을 따릅니다. AOSP 문서는 주로 SDV에 적용됩니다. 이 페이지에서는 SDV 관련 사용법과 업데이트 패키지를 빌드하고 적용하는 알려진 양호한 경로를 자세히 설명합니다.

현재 SDV는 비가상 A/B 업데이트를 사용하도록 구성되어 있습니다.

부팅 제어 HAL 구현

Cuttlefish용 SDV 코어 이미지 (sdv_core_cf)는 hardware/interfaces/boot/aidl/default/에 기반한 부팅 제어 HAL의 표준 구현을 제공합니다. 다른 부트로더는 A/B 업데이트를 지원하도록 HAL을 구현해야 합니다.

자세한 내용은 AOSP 문서의 부팅 제어 HAL 구현 섹션을 참고하세요. 디버그 (enguserdebug) 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 패키지를 생성하려면 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 서비스를 사용하여 설치됩니다. 디버그 SDV 빌드에는 업데이트 프로세스를 디버그하고 테스트하는 데 사용할 수 있는 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를 업데이트할 수 있습니다. 부트스트랩 APEX는 시스템 업데이트를 통해 업데이트해야 하며 다음 중 하나여야 합니다.

  • 선언된 버전이 사전 설치된 버전보다 높고 둘 다 1 이상입니다.

또는

  • 선언된 버전이 사전 설치되지 않은 APEX이고 버전이 차단 목록에 있는 버전보다 높은 경우(나열된 경우)

SDV는 일반적으로 네트워크의 여러 시스템에 배포됩니다. 따라서 단일 시스템에 적용된 업데이트가 올바르게 실행되는지 확인해야 합니다. 하지만 이렇게 해도 모든 시스템이 제대로 통신할 수 있는 것은 아닙니다.

서비스 번들 업데이트가 모든 머신에 동시에 배포되거나 업데이트에 호환성이 깨지는 변경사항이 포함되지 않도록 하여 전체 네트워크를 업데이트하는 것도 마찬가지로 중요합니다. 예를 들어 인터페이스가 호환되지 않게 변경됩니다.

SDV는 호환되지 않는 변경사항을 감지하는 도구를 제공하지 않지만 가이드라인에서는 인터페이스에 적용된 변경사항을 조정하는 방법과 변경사항을 배포하는 데 필요한 권장사항을 설명합니다.

또한 SDV는 시스템 및 APEX 업데이트의 롤백 메커니즘을 지원합니다. 시스템이 의도치 않게 불만족스러운 상태로 전환되면 마지막으로 알려진 만족스러운 상태를 복구할 수 있습니다.