Udostępnij za pośrednictwem


Przygotowywanie aktualizacji do zaimportowania do usługi Device Update dla usługi IoT Hub

Dowiedz się, jak uzyskać nową aktualizację i przygotować aktualizację do zaimportowania do usługi Device Update dla usługi IoT Hub.

Wymagania wstępne

Uzyskiwanie aktualizacji dla urządzeń

Po skonfigurowaniu usługi Device Update i aprowizowaniu urządzeń potrzebne będą pliki aktualizacji, które zostaną wdrożone na tych urządzeniach.

  • Jeśli zakupiono urządzenia od producenta oryginalnego sprzętu (OEM) lub integratora rozwiązań, organizacja najprawdopodobniej udostępni ci pliki aktualizacji bez konieczności tworzenia aktualizacji. Skontaktuj się z integratorem OEM lub rozwiązaniem, aby dowiedzieć się, jak udostępniają aktualizacje.

  • Jeśli Twoja organizacja już tworzy oprogramowanie dla używanych urządzeń, ta sama grupa będzie służyć do tworzenia aktualizacji dla tego oprogramowania.

Podczas tworzenia aktualizacji do wdrożenia przy użyciu usługi Device Update dla usługi IoT Hub zacznij od podejścia opartego na obrazie lub opartego na pakietach w zależności od scenariusza.

Tworzenie podstawowego manifestu importowania aktualizacji urządzeń

Po utworzeniu plików aktualizacji utwórz manifest importu, aby opisać aktualizację. Jeśli jeszcze tego nie zrobiono, zapoznaj się z podstawowymi pojęciami dotyczącymi importowania. Chociaż można ręcznie utworzyć plik JSON manifestu importu przy użyciu edytora tekstów, ten przewodnik będzie używać programu PowerShell jako przykładu.

Napiwek

Wypróbuj samouczki dotyczące aktualizacji opartej na obrazach, opartej na pakietach lub serwerze proxy, jeśli jeszcze tego nie zrobiono. Możesz również wyświetlić przykładowe pliki manifestu importu z tych samouczków, aby uzyskać informacje referencyjne.

  1. Klonowanie Azure/iot-hub-device-update repozytorium Git.

  2. Przejdź do Tools/AduCmdlets lokalizacji w klonie lokalnym z poziomu programu PowerShell.

  3. Uruchom następujące polecenia po zastąpieniu następujących przykładowych wartości parametrów własnymi: Dostawca, Nazwa, Wersja, Właściwości, Program obsługi, Zainstalowane kryteria, Pliki. Aby uzyskać szczegółowe informacje na temat wartości, których można użyć, zobacz Importowanie schematu i interfejsu API. Należy w szczególności pamiętać, że nie można używać tego samego dokładnie zestawu właściwości zgodności z więcej niż jedną kombinacją dostawcy i nazwy.

    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
    

Po utworzeniu manifestu importu, jeśli wszystko będzie gotowe do zaimportowania aktualizacji, możesz przewinąć do linku Następne kroki w dolnej części tej strony.

Tworzenie zaawansowanego manifestu importowania usługi Device Update dla aktualizacji serwera proxy

Jeśli aktualizacja jest bardziej złożona, na przykład aktualizacja serwera proxy, może być konieczne utworzenie wielu manifestów importu. Możesz użyć tego samego skryptu programu PowerShell z poprzedniej sekcji, aby utworzyć manifesty importu nadrzędnego i podrzędnego dla złożonych aktualizacji. Uruchom następujące polecenia po zastąpieniu przykładowych wartości parametrów własnymi. Aby uzyskać szczegółowe informacje na temat wartości, których można użyć, zobacz Importowanie schematu i interfejsu 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

Następne kroki