Sdílet prostřednictvím


Příprava aktualizace pro import do služby Device Update pro IoT Hub

Zjistěte, jak získat novou aktualizaci a připravit ji na import do služby Device Update pro IoT Hub.

Požadavky

Získání aktualizace pro vaše zařízení

Teď, když jste nastavili službu Device Update a zřídili svá zařízení, budete potřebovat aktualizační soubory, které do těchto zařízení nasadíte.

  • Pokud jste zařízení zakoupili od výrobce OEM (Original Equipment Manufacturer) nebo integrátoru řešení, bude tato organizace s největší pravděpodobností poskytovat soubory aktualizací, aniž byste museli vytvářet aktualizace. Pokud chcete zjistit, jak zpřístupňují aktualizace, obraťte se na integrátora OEM nebo řešení.

  • Pokud už vaše organizace vytváří software pro zařízení, která používáte, bude stejná skupina ta, která vytvoří aktualizace pro tento software.

Při vytváření aktualizace, která se má nasadit pomocí služby Device Update pro IoT Hub, začněte s přístupem založeným na imagi nebo balíčku v závislosti na vašem scénáři.

Vytvoření základního manifestu importu služby Device Update

Jakmile budete mít aktualizační soubory, vytvořte manifest importu pro popis aktualizace. Pokud jste to ještě neudělali, nezapomeňte se seznámit se základními koncepty importu. I když je možné vytvořit json manifestu importu ručně pomocí textového editoru, použije tento průvodce jako příklad PowerShell.

Tip

Pokud jste to ještě neudělali, vyzkoušejte kurzy aktualizace založené na imagi, balíčku nebo proxy serveru. Ukázkové soubory manifestu importu můžete zobrazit také v těchto kurzech pro referenci.

  1. Klonování Azure/iot-hub-device-update úložiště Git

  2. Přejděte do místního klonu Tools/AduCmdlets z PowerShellu.

  3. Po nahrazení následujících ukázkových hodnot parametrů vlastními příkazy spusťte následující příkazy: Provider, Name, Version, Properties, Handler, Installed Criteria, Files. Podrobnosti o tom, jaké hodnoty můžete použít, najdete v tématu Import schématu a informací o rozhraní API. Zejména mějte na paměti, že stejnou přesnou sadu vlastností kompatibility nelze použít s více než jednou kombinací zprostředkovatele a názvu.

    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
    

Pokud jste připravení naimportovat aktualizaci, můžete po vytvoření manifestu importu přejít na odkaz Další kroky v dolní části této stránky.

Vytvoření rozšířeného manifestu importu služby Device Update pro aktualizaci proxy serveru

Pokud je aktualizace složitější, například aktualizace proxy serveru, možná budete muset vytvořit více manifestů importu. Stejný skript PowerShellu z předchozí části můžete použít k vytvoření manifestů importu nadřazených a podřízených objektů pro komplexní aktualizace. Po nahrazení ukázkových hodnot parametrů vlastními spusťte následující příkazy. Podrobnosti o tom, jaké hodnoty můžete použít, najdete v tématu Import schématu a informací o rozhraní 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

Další kroky