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


Подготовка обновления к импорту в службу Обновления устройств для Центра Интернета вещей

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

Необходимые компоненты

Получение обновления для устройств

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

  • Если вы приобрели устройства от производителя оригинального оборудования (OEM) или интегратора решений, то эта организация, скорее всего, предоставит вам файлы обновления, и вам не придется создавать их самостоятельно. Обратитесь к поставщику вычислительной техники или к интегратору решений, чтобы узнать, как они предоставляют обновления.

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

При создании обновления для развертывания с помощью службы Обновление устройств для Центра Интернета вещей начните с подхода на основе образа или пакета в зависимости от вашего сценария.

Создание базового манифеста импорта Обновления устройств

После получения файлов обновления создайте манифест импорта для описания обновления. Обязательно ознакомьтесь с основными понятиями импорта, если это еще не сделано. Хотя файл JSON манифеста импорта можно создать вручную с помощью текстового редактора, в этом разделе в качестве примера будет использоваться PowerShell.

Совет

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

  1. Клонировать Azure/iot-hub-device-update репозиторий Git.

  2. Перейдите к элементу Tools/AduCmdlets в локальном клоне из PowerShell.

  3. После замены следующих примеров значений параметров на собственные выполните следующие команды: Provider, Name, Version, Properties, Handler, Installed Criteria, Files. Сведения о том, какие значения можно использовать, см. в разделе Импорт схемы и сведений об API. В частности, следует иметь в виду, что один и тот же набор свойств совместимости не может использоваться с несколькими сочетаниями поставщика и имени.

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
    
    Import-Module ./AduUpdate.psm1
    
    $updateId = New-AduUpdateId -Provider Contoso -Name Toaster -Version 1.0
    
    $compat = New-AduUpdateCompatibility -Properties @{ deviceManufacturer = 'Contoso'; deviceModel = 'Toaster' }
    
    $installStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1'-HandlerProperties @{ installedCriteria = '1.0' } -Files 'path to your update file'
    
    $update = New-AduImportManifest -UpdateId $updateId -Compatibility $compat -InstallationSteps $installStep
    
    # Write the import manifest to a file, ideally next to the update file(s).
    $update | Out-File "./$($updateId.provider).$($updateId.name).$($updateId.version).importmanifest.json" -Encoding utf8
    

Если после создания манифеста импорта вы готовы импортировать обновление, вы можете прокрутить страницу вниз и щелкнуть ссылку «Следующие шаги».

Создание расширенного манифеста импорта Обновления устройств для обновления прокси-сервера

Если обновление сложное, например Обновление прокси-сервера, может потребоваться создать несколько манифестов импорта. Вы можете использовать тот же сценарий PowerShell из предыдущего раздела, чтобы создать родительские и дочерние манифесты импорта для сложных обновлений. Выполните следующие команды после замены значений параметров из образца собственными. Сведения о том, какие значения можно использовать, см. в разделе Импорт схемы и сведений об API.

  Import-Module $PSScriptRoot/AduUpdate.psm1 -ErrorAction Stop
  
  # We will use arbitrary files as update payload files.
  $childFile = "$env:TEMP/childFile.bin.txt"
  $parentFile = "$env:TEMP/parentFile.bin.txt"
  "This is a child update payload file." | Out-File $childFile -Force -Encoding utf8
  "This is a parent update payload file." | Out-File $parentFile -Force -Encoding utf8
  
  # ------------------------------
  # Create a child update
  # ------------------------------
  Write-Host 'Preparing child update ...'
  
  $microphoneUpdateId = New-AduUpdateId -Provider Contoso -Name Microphone -Version $UpdateVersion
  $microphoneCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Microphone
  $microphoneInstallStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1' -Files $childFile
  $microphoneUpdate = New-AduImportManifest -UpdateId $microphoneUpdateId `
                                               -IsDeployable $false `
                                               -Compatibility $microphoneCompat `
                                               -InstallationSteps $microphoneInstallStep `
                                               -ErrorAction Stop -Verbose:$VerbosePreference
  
  # ------------------------------
  # Create another child update
  # ------------------------------
  Write-Host 'Preparing another child update ...'
  
  $speakerUpdateId = New-AduUpdateId -Provider Contoso -Name Speaker -Version $UpdateVersion
  $speakerCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Speaker
  $speakerInstallStep = New-AduInstallationStep -Handler 'microsoft/swupdate:1' -Files $childFile
  $speakerUpdate = New-AduImportManifest -UpdateId $speakerUpdateId `
                                            -IsDeployable $false `
                                            -Compatibility $speakerCompat `
                                            -InstallationSteps $speakerInstallStep `
                                            -ErrorAction Stop -Verbose:$VerbosePreference
  
  # ------------------------------------------------------------
  # Create the parent update which parents the child update above
  # ------------------------------------------------------------
  Write-Host 'Preparing parent update ...'
  
  $parentUpdateId = New-AduUpdateId -Provider Contoso -Name Toaster -Version $UpdateVersion
  $parentCompat = New-AduUpdateCompatibility -DeviceManufacturer Contoso -DeviceModel Toaster
  $parentSteps = @()
  $parentSteps += New-AduInstallationStep -Handler 'microsoft/script:1' -Files $parentFile -HandlerProperties @{ 'arguments'='--pre'} -Description 'Pre-install script'
  $parentSteps += New-AduInstallationStep -UpdateId $microphoneUpdateId -Description 'Microphone Firmware'
  $parentSteps += New-AduInstallationStep -UpdateId $speakerUpdateId -Description 'Speaker Firmware'
  $parentSteps += New-AduInstallationStep -Handler 'microsoft/script:1' -Files $parentFile -HandlerProperties @{ 'arguments'='--post'} -Description 'Post-install script'
  
  $parentUpdate = New-AduImportManifest -UpdateId $parentUpdateId `
                                        -Compatibility $parentCompat `
                                        -InstallationSteps $parentSteps `
                                        -ErrorAction Stop -Verbose:$VerbosePreference
  
  # ------------------------------------------------------------
  # Write all to files
  # ------------------------------------------------------------
  Write-Host 'Saving manifest and update files ...'
  
  New-Item $Path -ItemType Directory -Force | Out-Null
  
  $microphoneUpdate | Out-File "$Path/$($microphoneUpdateId.Provider).$($microphoneUpdateId.Name).$($microphoneUpdateId.Version).importmanifest.json" -Encoding utf8
  $speakerUpdate | Out-File "$Path/$($speakerUpdateId.Provider).$($speakerUpdateId.Name).$($speakerUpdateId.Version).importmanifest.json" -Encoding utf8
  $parentUpdate | Out-File "$Path/$($parentUpdateId.Provider).$($parentUpdateId.Name).$($parentUpdateId.Version).importmanifest.json" -Encoding utf8
  
  Copy-Item $parentFile -Destination $Path -Force
  Copy-Item $childFile -Destination $Path -Force
  
  Write-Host "Import manifest JSON files saved to $Path" -ForegroundColor Green
  
  Remove-Item $childFile -Force -ErrorAction SilentlyContinue | Out-Null
  Remove-Item $parentFile -Force -ErrorAction SilentlyContinue | Out-Null

Следующие шаги