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
- Dostęp do usługi IoT Hub z włączoną aktualizacją urządzenia dla usługi IoT Hub.
- Urządzenie IoT (lub symulator) aprowizowane na potrzeby aktualizacji urządzenia w usłudze IoT Hub.
- Program PowerShell 5 lub nowszy (obejmuje instalacje systemu Linux, macOS i Windows)
- Obsługiwane przeglądarki:
- Microsoft Edge
- Google Chrome
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.
Klonowanie
Azure/iot-hub-device-update
repozytorium Git.Przejdź do
Tools/AduCmdlets
lokalizacji w klonie lokalnym z poziomu programu PowerShell.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