Preparare un aggiornamento per l'importazione in Aggiornamento dispositivi per hub IoT

Informazioni su come ottenere un nuovo aggiornamento e preparare l'aggiornamento per l'importazione in Aggiornamento dispositivi per hub IoT.

Prerequisiti

Ottenere un aggiornamento per i dispositivi

Ora che è stato configurato l'aggiornamento dei dispositivi ed è stato effettuato il provisioning dei dispositivi, saranno necessari i file di aggiornamento che verranno distribuiti in tali dispositivi.

  • Se hai acquistato dispositivi da un oem (Original Equipment Manufacturer) o un integratore di soluzioni, l'organizzazione fornirà più probabilmente i file di aggiornamento, senza dover creare gli aggiornamenti. Contattare l'OEM o l'integratore di soluzioni per scoprire come rendere disponibili gli aggiornamenti.

  • Se l'organizzazione crea già software per i dispositivi usati, lo stesso gruppo sarà quello per creare gli aggiornamenti per tale software.

Quando si crea un aggiornamento da distribuire con Aggiornamento dispositivi per hub IoT, iniziare con l'approccio basato su immagini o basato su pacchetto a seconda dello scenario.

Creare un manifesto di importazione di Aggiornamento dispositivi di base

Dopo aver creato i file di aggiornamento, creare un manifesto di importazione per descrivere l'aggiornamento. Se non è già stato fatto, assicurarsi di acquisire familiarità con i concetti di importazione di base. Anche se è possibile creare manualmente un file JSON del manifesto di importazione usando un editor di testo, questa guida userà PowerShell come esempio.

Suggerimento

Se non è già stato fatto, provare le esercitazioni sull'aggiornamento basato su immagini, basate su pacchetti o proxy. È anche possibile visualizzare solo file manifesto di importazione di esempio da tali esercitazioni per riferimento.

  1. Clonare Azure/iot-hub-device-update il repository Git.

  2. Passare a Tools/AduCmdlets nel clone locale da PowerShell.

  3. Eseguire i comandi seguenti dopo aver sostituito i valori dei parametri di esempio seguenti con il proprio: Provider, Name, Version, Properties, Handler, Installed Criteria, Files. Per informazioni dettagliate sui valori che è possibile usare, vedere Importare schema e API. In particolare, tenere presente che lo stesso set esatto di proprietà di compatibilità non può essere usato con più di una combinazione provider e nome.

    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
    

Dopo aver creato il manifesto di importazione, se si è pronti per importare l'aggiornamento, è possibile scorrere fino al collegamento Passaggi successivi nella parte inferiore di questa pagina.

Creare un manifesto di importazione avanzato di Aggiornamento dispositivi per un aggiornamento proxy

Se l'aggiornamento è più complesso, ad esempio un aggiornamento proxy, potrebbe essere necessario creare più manifesti di importazione. È possibile usare lo stesso script di PowerShell della sezione precedente per creare manifesti di importazione padre e figlio per aggiornamenti complessi. Eseguire i comandi seguenti dopo aver sostituito i valori dei parametri di esempio con i propri. Per informazioni dettagliate sui valori che è possibile usare, vedere Importare schema e 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

Passaggi successivi