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
- Přístup ke službě IoT Hub s povolenou službou Device Update pro IoT Hub
- Zařízení IoT (nebo simulátor) zřízené pro službu Device Update ve službě IoT Hub.
- PowerShell 5 nebo novější (včetně instalací Linuxu, macOS a Windows)
- Podporované prohlížeče:
- Microsoft Edge
- Google Chrome
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.
Klonování
Azure/iot-hub-device-update
úložiště GitPřejděte do místního klonu
Tools/AduCmdlets
z PowerShellu.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