Манифест APT обновления устройства

Манифест APT — это JSON-файл, описывающий сведения об обновлении, необходимые обработчику обновлений APT. Этот файл можно импортировать в Обновление устройств для Центра Интернета вещей, как и любое другое обновление.

Дополнительные сведения см. в статье Импорт обновления в службу "Обновление устройств для Центра Интернета вещей".

Обзор

При доставке манифеста APT в агент Обновления устройств в качестве обновления агент обрабатывает манифест и выполняет необходимые операции. К этим операциям относится скачивание и установка пакетов, указанных в файле манифеста APT, и их зависимостей из заданного репозитория.

Обновление устройств поддерживает UpdateType APT и обработчик обновлений APT. Эта поддержка позволяет агенту Обновления устройств оценивать установленные пакеты Debian и обновлять необходимые пакеты.

схема

Файл манифеста APT — это JSON-файл со схемой с управлением версиями.

{
    "name": "<name>",
    "version": "<version>",
    "packages": [
        {
            "name": "<package name>",
            "version": "<version specifier>"
        }
    ]
}

Пример:

{
    "name": "contoso-iot-edge",
    "version": "1.0.0.0",
    "packages": [
        {
            "name" : "thermocontrol",
            "version" : "1.0.1"
        },
        {
            "name" : "tempreport",
            "version" : "2.0.0"
        }
    ]
}

Каждый манифест APT содержит следующие свойства.

  • Имя: имя для этого манифеста APT. Это может быть любое имя или идентификатор, которые подходят для ваших сценариев. Например, contoso-iot-edge.
  • Версия: номер версии для этого манифеста APT. Например, 1.0.0.0.
  • Пакеты: список объектов, содержащих свойства для конкретного пакета.
    • Имя: имя или идентификатор пакета. Например, iotedge.
    • Версия: критерии нужной версии для пакета. Например, 1.0.8-2. Значение версии не должно содержать знак равенства. Если версия не указана, будет установлена последняя доступная версия указанного пакета.

Сейчас поддерживается только точный номер версии. Номер версии — это требуемая версия пакета Debian в формате [epoch:]upstream_version[-debian_revision], где epoch — целое число без знака, а upstream_version может включать буквенно-цифровые символы и такие символы, как ".", "+", "-" и "~". Значение должно начинаться с цифры.

Примечание

"1.0.8" равносильно "1.0.8-0"

Например, "name":"iotedge" и "version":"1.0.8-2" эквивалентно установке пакета с помощью команды apt-get install iotedge=1.0.8-2

Дополнительные сведения о версиях пакетов Debian см. в руководстве по политике Debian

Примечание

Диспетчер пакетов APT игнорирует требования управления версиями, заданные пакетом, если зависимые пакеты для установки разрешаются автоматически. Если явно не заданы версии зависимых пакетов, они будут использовать последнюю версию, даже несмотря на то что сам пакет может иметь строгие требования (=) для указанной версии. Это автоматическое разрешение может привести к ошибкам в отношении несопоставленной зависимости. Подробнее

Если вы обновляете определенную версию управляющей программы безопасности Azure IoT Edge, необходимо включить требуемую версию пакета aziot-edge и его зависимый пакет aziot-identity-service в манифест APT. Дополнительные сведения см. в статье Обновление IoT Edge.

Манифест APT можно использовать для обновления агента Обновления устройств и его зависимостей. Укажите имя агента Обновления устройств и требуемую версию в манифесте APT, как и для любого другого пакета. Затем этот манифест APT можно импортировать и развернуть с помощью конвейера Обновления устройств для Центра Интернета вещей.

Удаление пакетов

С помощью манифеста APT можно также удалить установленные пакеты с устройства. Для удаления, добавления и обновления нескольких пакетов можно использовать один манифест APT.

Чтобы удалить пакет, добавьте знак минуса "-" после имени пакета. Не следует включать номер версии удаляемых пакетов. Удаление пакета через манифест APT не приводит к удалению его зависимостей и конфигураций.

Пример:

{
    "name": "contoso-video",
    "version": "2.0.0.1",
    "packages": [
        {
            "name" : "foo-"
        }
    ]
}

Этот манифест APT удалит пакет foo с устройств, на которых он развернут.

Установленные критерии для манифеста APT — это <name>-<version>, где <name> является именем манифеста APT, а <version> — версией манифеста APT. Например, contoso-iot-edge-1.0.0.0.

Рекомендации по созданию манифеста APT

При создании манифеста APT нужно помнить о приведенных ниже рекомендациях.

  • Всегда проверяйте, является ли манифест APT JSON-файлом с правильным форматом.
  • Каждый манифест APT должен иметь уникальную версию. Попробуйте создать стандартизированную методологию для увеличения версии манифеста APT, чтобы она была целесообразна для ваших сценариев и легко выполнима.
  • Если речь идет о требуемом состоянии каждого отдельного пакета, указывайте точное имя и версию пакета, который необходимо установить на устройстве. Всегда проверяйте значения в репозитории пакетов, который планируете использовать как источник для пакета.
  • Убедитесь, что пакеты в манифесте APT перечислены в том порядке, в котором они должны быть установлены или удалены.
  • Всегда проверяйте установку пакетов на тестовом устройстве, чтобы убедиться в нужном результате.
  • При установке определенной версии пакета (например, iotedge 1.0.9-1) рекомендуется также иметь в манифесте APT явные версии зависимых пакетов для установки (например, libiothsm 1.0.9-1)
  • Хотя это не обязательно, всегда проверяйте, что манифест APT является кумулятивным, чтобы избежать перехода устройства в неизвестное состояние. Накопительное обновление обеспечит наличие у устройств нужной версии каждого интересующего вас пакета, даже если устройство пропустило развертывание обновления APT из-за сбоя установки или перевода в режим "Вне сети"

Пример:

Базовый манифест APT

{
    "name": "contoso-iot-edge",
    "version": "1.0",
    "packages": [
        {
            "name": "foo",
            "version": "1.0.1"
        }
    ]
}

Неправильное обновление

Это обновление включает пакет bar, а не пакет foo.

{
    "name": "contoso-iot-edge",
    "version": "2.0",
    "packages": [
        {
            "name": "bar",
            "version": "3.0.2"
        }
    ]
}

Правильное обновление

Это обновление включает пакет foo, а также пакет bar.

{
    "name": "contoso-iot-edge",
    "version": "2.0",
    "packages": [
        {
            "name": "foo",
            "version": "1.0.1"
        },
        {
            "name": "bar",
            "version": "3.0.2"
        }
    ]
}

Дальнейшие действия

Импорт обновления в Обновление устройств