Поделиться через


Обновление устройств Azure для Центр Интернета вещей манифеста apt

В этой статье описывается манифест apt, JSON-файл, описывающий сведения об обновлении, необходимые обработчику обновления apt. Этот файл можно импортировать в обновление устройства так же, как и любое другое обновление. Дополнительные сведения см. в разделе "Импорт обновления устройства".

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

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

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

Схема

Файл манифеста 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.

Управление версиями

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

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

Если версия опущена, обновление устройства устанавливает последнюю доступную версию указанного пакета. Дополнительные сведения о том, как версии пакетов Debian см. в руководстве по политике Debian.

Примечание.

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

Поэтому при установке определенной версии пакета рекомендуется также включить явные версии зависимых пакетов. Дополнительные сведения см. в статье apt-get неправильное разрешение зависимости от фиксированной версии в пакете Debian/Ubuntu.

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

Установленные условия

Рекомендуемое установленное значение критерия для манифеста apt — <name>-<version><name> это имя манифеста apt и <version> его версия. Например, contoso-iot-edge-1.0.0.0.

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

Вы также можете использовать манифест apt для удаления установленных пакетов с устройств. Вы можете использовать один манифест apt для удаления, добавления и обновления нескольких пакетов.

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

Например, следующий манифест apt удаляет пакет contoso1 с любых устройств, на которые он развернут.

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

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

При создании манифеста apt следует учитывать следующие рекомендации.

  • Убедитесь, что манифест apt является хорошо сформированным JSON-файлом.

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

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

  • Вывод списка пакетов в манифесте apt в том порядке, в котором они должны быть установлены или удалены.

  • Всегда проверяйте установку пакетов на тестовом устройстве, чтобы обеспечить требуемый результат.

  • Например, iotedge 1.0.9-1при установке определенной версии пакета также включаются явные версии зависимых пакетов, например libiothsm 1.0.9-1.

  • Хотя и не требуется, всегда создавайте накопительный манифест apt, избегая получения устройств в неизвестном состоянии. Накопительное обновление гарантирует, что устройства имеют нужную версию каждого соответствующего пакета, даже если устройство пропускало обновление из-за сбоя установки или автономного использования.

    Например, рассмотрим следующий базовый манифест apt:

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

    Следующее обновление версии 2.0 включает contoso2 пакет, но не contoso1 пакет. Все устройства, получающие обновление 2.0, могут не иметь contoso1 пакета.

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

    Следующее накопительное обновление версии 2.0 включает как пакеты, так contoso1 и contoso2 пакеты:

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