다음을 통해 공유


Device Update for IoT Hub로 가져올 업데이트 준비

새 업데이트를 가져오고 Azure Device Update for IoT Hub로 가져오기 위한 업데이트를 준비하는 방법을 알아봅니다.

필수 조건

디바이스에 대한 업데이트 얻기

Device Update를 설정하고 디바이스를 프로비전했으므로 이제 해당 디바이스에 배포할 업데이트 파일이 필요합니다.

  • OEM(Original Equipment Manufacturer) 또는 솔루션 통합자에서 디바이스를 구매한 경우 해당 조직에서는 사용자가 업데이트를 만들 필요가 없도록 업데이트 파일을 제공할 가능성이 높습니다. 업데이트를 제공하는 방법을 알아보려면 OEM 또는 솔루션 통합자에 문의하세요.

  • 조직에서 사용하는 디바이스에 대한 소프트웨어를 이미 만든 경우 해당 소프트웨어에 대한 업데이트를 만들 수 있는 동일한 그룹이 됩니다.

Device Update for IoT Hub를 사용하여 배포할 업데이트를 만드는 경우 시나리오에 따라 이미지 기반 또는 패키지 기반 접근 방식으로 시작합니다.

기본 Device Update 가져오기 매니페스트 만들기

업데이트 파일이 있으면 업데이트를 설명하는 가져오기 매니페스트를 만듭니다. 아직 수행하지 않은 경우 기본 가져오기 개념을 숙지해야 합니다. 텍스트 편집기를 사용하여 수동으로 가져오기 매니페스트 JSON을 작성할 수 있지만 이 가이드에서는 PowerShell을 예로 사용합니다.

아직 수행하지 않은 경우 이미지 기반, 패키지 기반 또는 프록시 업데이트 자습서를 사용해 보세요. 참조용으로 해당 자습서에서 샘플 가져오기 매니페스트 파일을 볼 수도 있습니다.

  1. Git 리포지토리를 복제 Azure/iot-hub-device-update 합니다.

  2. PowerShell에서 로컬 복제의 Tools/AduCmdlets로 이동합니다.

  3. 공급자, 이름, 버전, 속성, 처리기, 설치된 조건, 파일 샘플 매개 변수 값을 고유한 값으로 바꾼 후 다음 명령을 실행합니다. 사용할 수 있는 값에 대한 자세한 내용은 스키마 및 API 정보 가져오기를 참조하세요. 특히 동일한 호환성 속성 세트를 둘 이상의 공급자 및 이름 조합과 함께 사용할 수 없습니다.

    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
    

가져오기 매니페스트를 만든 후 업데이트를 가져올 준비가 되면 이 페이지 아래쪽의 다음 단계 링크로 스크롤할 수 있습니다.

프록시 업데이트에 대한 고급 디바이스 업데이트 가져오기 매니페스트 만들기

프록시 업데이트와 같이 업데이트가 더 복잡한 경우 여러 가져오기 매니페스트를 만들어야 할 수 있습니다. 이전 섹션에서 동일한 PowerShell 스크립트를 사용하여 복잡한 업데이트에 대한 부모 및 자식 가져오기 매니페스트를 만들 수 있습니다. 샘플 매개 변수 값을 사용자 고유의 값으로 바꾼 후 다음 명령을 실행합니다. 사용할 수 있는 값에 대한 자세한 내용은 스키마 및 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

다음 단계