Обновления системы A/B

В SDV используется стандартный для Android подход к A/B-обновлениям системы (без прерывания работы). Документация по AOSP в основном относится к SDV. На этой странице подробно описано использование, характерное для SDV, и известные хорошие пути для создания и применения пакетов обновлений.

SDV настроено на использование невиртуальных A/B-обновлений. Чтобы настроить и запустить A/B-обновления для пользовательского раздела /oem_ab из пакета сервисов, ознакомьтесь со статьей A/B-обновления разделов OEM.

Реализация HAL для управления загрузкой

Образ SDV Core для Cuttlefish (sdv_core_cf) предоставляет стандартную реализацию HAL управления загрузкой на основе hardware/interfaces/boot/aidl/default/. Другие загрузчики должны реализовывать HAL для поддержки обновлений A/B.

Подробную информацию можно найти в разделе Реализация HAL управления загрузкой документации AOSP. Чтобы протестировать реализацию, можно использовать bootctl, включенный в образы SDV для отладки (eng и userdebug).

Как создать пакет OTA

Подробнее о том, как создавать пакеты OTA… Инструкции на этой странице соответствуют документации AOSP с небольшими отклонениями.

Обновление ранее добавленных выпусков

Из корневого каталога хранилища:

source build/envsetup.sh && lunch sdv_core_cf-aosp_current-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

Дополнительное обновление

Вызов ota_from_target_files, как в AOSP:

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 использует метаданные пакета OTA, чтобы определить, соответствует ли пакет OTA требованиям и можно ли его установить.

Для APEX в SDV используются концепции Android, связанные с возможностью обновления. Поэтому обновить можно только те APEX-файлы, которые не являются начальными. Начальная загрузка APEX необходимо обновлять через обновления системы, а также:

  • Заявленная версия выше предустановленной, и обе версии больше или равны 1.

или

  • Заявленная версия – это непредустановленный APEX-файл, и она выше, чем версия в черном списке (если она там есть).

SDV обычно развертывается в нескольких системах в сети. Поэтому вы должны убедиться, что обновления, внесенные в одну систему, выполняются правильно. Тем не менее, эта забота не гарантирует, что все системы могут правильно взаимодействовать.

Не менее важно обновить сеть в целом. Для этого нужно либо одновременно развернуть пакеты сервисов на всех компьютерах, либо убедиться, что обновления не содержат критических изменений. Например, несовместимые изменения в интерфейсе.

Хотя в SDV нет инструментов для обнаружения несовместимых изменений, в наших рекомендациях описано, как согласовывать изменения, внесенные в интерфейсы, а также приведены рекомендации по развертыванию изменений.

Кроме того, SDV поддерживает механизмы отката для обновлений системы и APEX. Если система непреднамеренно переходит в неудовлетворительное состояние, мы можем восстановить последнее известное удовлетворительное состояние.