자습서: Raspberry Pi 이미지를 사용하여 IoT Hub용 Azure 디바이스 업데이트
Device Update for Azure IoT Hub는 이미지 기반, 패키지 기반 및 스크립트 기반 업데이트를 지원합니다. 이 자습서에서는 Raspberry Pi 3 B+ 보드에서 Yocto 이미지를 사용하여 IoT Hub용 엔드투엔드 이미지 기반 디바이스 업데이트를 보여 줍니다.
이미지 업데이트는 디바이스의 최종 상태에 대한 높은 신뢰도를 제공하며 패키지 또는 스크립트 기반 업데이트와 동일한 패키지 및 종속성 관리 문제를 제기하지 않습니다. 미리 프로덕션 환경과 프로덕션 환경 간에 이미지 업데이트 결과를 복제하거나 A/B 장애 조치(failover) 모델을 쉽게 채택할 수 있습니다.
이 자습서에서는 다음을 수행합니다.
- 이미지 업데이트를 다운로드하고 설치합니다.
- IoT 디바이스에 태그를 할당합니다.
- 이미지 업데이트를 가져옵니다.
- 이미지 업데이트를 배포합니다.
- 업데이트 배포 기록을 봅니다.
필수 조건
IoT Hub로 구성된 디바이스 업데이트 계정 및 인스턴스입니다.
이미지 파일을 다운로드 및 추출하고 디바이스를 제어할 수 있는 하드웨어에 이더넷을 통해 연결된 Raspberry Pi 3 IoT 보드입니다.
참고 항목
이 자습서의 이미지 업데이트는 Raspberry Pi B3 보드에서 유효성을 검사했습니다.
디바이스를 등록하고 연결 문자열
IoT Hub의 디바이스 레지스트리에 디바이스를 추가하고 IoT Hub가 디바이스에 대해 생성하는 연결 문자열 가져옵니다.
- Azure Portal에서 디바이스 업데이트 인스턴스와 연결된 IoT Hub 페이지를 엽니다.
- 왼쪽 탐색 창에서 디바이스 관리>디바이스를 선택합니다.
- 디바이스 페이지에서 디바이스 추가를 선택합니다.
- 디바이스 ID에서 디바이스 이름을 입력합니다. 키 자동 생성 확인란이 선택되어 있는지 확인합니다.
- 저장을 선택합니다. 디바이스가 디바이스 페이지의 목록에 나타납니다.
- 디바이스 페이지에서 등록한 디바이스를 선택합니다.
- 디바이스 페이지에서 연결 문자열(기본 키) 옆에 있는 복사 아이콘을 선택합니다. 디바이스 업데이트 에이전트를 구성할 때 사용할 이 디바이스 연결 문자열 저장합니다.
참고 항목
데모를 위해 이 자습서에서는 디바이스 연결 문자열 사용하여 IoT Hub를 인증하고 연결합니다. 프로덕션 시나리오의 경우 모듈 ID 및 IoT ID 서비스를 사용하여 디바이스를 프로비전하는 것이 좋습니다. 자세한 내용은 디바이스 업데이트 에이전트 프로비저닝을 참조 하세요.
Raspberry Pi 설정
Tutorial_RaspberryPi3.zip 파일에는 자습서에 필요한 모든 파일이 있습니다. GitHub 디바이스 업데이트 릴리스 페이지의 최신 릴리스 자산 섹션에서 파일을 다운로드하고 압축을 풉니다.
추출된 Tutorial_RaspberryPi3 폴더에서 Raspberry Pi 보드에 플래시할 수 있는 기본 이미지는 adu-base-image-raspberrypi3.wic입니다. 기본 이미지는 3.4.4 릴리스를 기반으로 하는 Yocto 빌드를 사용합니다. 이미지에는 디바이스 업데이트 이중 파티션 업데이트를 사용하도록 설정하는 디바이스 업데이트 에이전트 및 SWUpdate가 있습니다. Yocto 계층에 대한 자세한 내용은 Yocto 프로젝트를 사용하여 디바이스 업데이트 에이전트를 사용하여 사용자 지정 Linux 기반 시스템 빌드를 참조하세요.
디바이스 업데이트를 통해 가져오는 업데이트 파일은 다음과 같습니다.
- SWUpdate 파일 adu-update-image-raspberrypi3-1.2.0.swu
- 사용자 지정 SWUpdate 스크립트 example-a-b-update.sh
- 매니페스트 EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
bmaptool을 사용하여 SD 카드 플래시
Important
Azure Device Update for IoT Hub 소프트웨어에는 다음 사용 조건이 적용됩니다.
에이전트를 사용하기 전에 사용 조건을 읽습니다. 에이전트 설치 및 사용은 이러한 약관의 동의를 구성합니다. 사용 조건에 동의하지 않는 경우 디바이스 업데이트 에이전트를 사용하지 마세요.
OS 플래시 도구를 사용하여 Raspberry Pi 디바이스에서 사용하는 SD 카드에 디바이스 업데이트 기본 이미지를 설치합니다. 다음 지침은 SD 카드로 플래시하는 데 사용됩니다 bmaptool
. <device>
자리 표시자를 디바이스 이름으로 바꾸고 <path to image>
자리 표시자를 다운로드한 이미지 파일의 경로로 바꿉다.
유틸리티가
bmap-tools
없는 경우 설치합니다.sudo apt-get install bmap-tools
/dev에서 SD 카드 경로를 찾습니다. 경로는 /dev/sd* 또는 /dev/mmcblk*와 같이 표시됩니다.
dmesg
유틸리티를 사용하여 올바른 경로를 쉽게 찾을 수 있습니다.플래시하기 전에 탑재된 모든 파티션을 분리합니다.
sudo umount /dev/<device>
디바이스에 대한 쓰기 권한이 있는지 확인합니다.
sudo chmod a+rw /dev/<device>
SD 카드를 플래시합니다.
sudo bmaptool copy <path to image> /dev/<device>
팁
빠른 플래시를 위해 bimap 파일과 이미지 파일을 다운로드하여 동일한 디렉터리에 배치할 수 있습니다.
Raspberry Pi에서 디바이스 업데이트 에이전트 구성
Raspberry Pi가 네트워크에 연결되어 있는지 확인합니다.
PowerShell 창에서 다음 명령을 사용하여 Raspberry Pi에 SSH(보안 셸)를 사용합니다.
ssh raspberrypi3 -l root
디바이스 업데이트 구성 파일 만들기
디바이스 업데이트 du-config.json 및 du-diagnostics-config.json 구성 파일은 디바이스에 있어야 합니다. 파일을 만들려면 Raspberry Pi에 로그인한 터미널에서 다음 명령을 실행합니다.
du-config.json 파일을 만들거나 편집용으로 열려면 다음 명령을 실행합니다.
nano /adu/du-config.json
편집기에서 du-config.json 파일을 엽니다. 파일을 만드는 경우 비어 있습니다. 다음 코드를 복사하여 파일에 붙여넣고 예제 값을 디바이스에 필요한 구성으로 바꿉니다. 예제
connectionData
문자열을 디바이스 등록 단계에서 복사한 연결 문자열 디바이스로 바꿉다.{ "schemaVersion": "1.0", "aduShellTrustedUsers": [ "adu", "do" ], "manufacturer": "contoso", "model": "virtual-vacuum-v2", "agents": [ { "name": "main", "runas": "adu", "connectionSource": { "connectionType": "string", "connectionData": "HostName=<hub_name>.azure-devices.net;DeviceId=<device_id>;SharedAccessKey=<device_key>" }, "manufacturer": "contoso", "model": "virtual-vacuum-v2" } ] }
Ctrl+X를 눌러 편집기를 종료하고 y를 입력하여 변경 내용을 저장합니다.
유사한 명령을 사용하여 du-diagnostics-config.json 파일을 만듭니다. 파일을 만들고 엽니다.
nano /adu/du-diagnostics-config.json
다음 du-diagnostics-config.json 코드를 복사하여 파일에 붙여넣습니다. 값은 기본 디바이스 업데이트 로그 위치이며 구성이 기본값과 다른 경우에만 변경해야 합니다.
{ "logComponents":[ { "componentName":"adu", "logPath":"/adu/logs/" }, { "componentName":"do", "logPath":"/var/log/deliveryoptimization-agent/" } ], "maxKilobytesToUploadPerLogPath":50 }
Ctrl+X를 눌러 편집기를 종료하고 y를 입력하여 변경 내용을 저장합니다.
다음 명령을 사용하여 /adu/디렉터리에 있는 파일을 표시합니다. 두 구성 파일이 모두 표시됩니다.
ls -la /adu/
다음 명령을 사용하여 디바이스 업데이트 시스템 디먼을 다시 시작하고 구성이 적용되었는지 확인합니다.
systemctl start deviceupdate-agent
다음 명령을 실행하여 에이전트가 라이브 상태인지 확인합니다.
systemctl status deviceupdate-agent
상태는 활성 및 녹색으로 표시됩니다.
IoT Hub에서 디바이스에 연결하고 그룹 태그 추가
디바이스 업데이트 인스턴스에 대한 Azure Portal IoT Hub 페이지의 왼쪽 탐색 영역에서 디바이스 관리>디바이스를 선택합니다.
디바이스 페이지에서 디바이스 이름을 선택합니다.
디바이스 페이지의 맨 위에서 디바이스 쌍을 선택합니다.
디바이스 쌍 페이지의 디바이스 쌍
"properties"
섹션 아래에서"reported"
디바이스에 대한 Linux 커널 버전을 찾습니다.디바이스 업데이트 에서 업데이트를 받지 못한 새 디바이스의 경우 DeviceManagement:DeviceInformation:1.swVersion 속성 값은 디바이스에서 실행되는 펌웨어 버전을 나타냅니다. 디바이스에 업데이트가 적용 된 후 AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId 속성 값은 펌웨어 버전을 나타냅니다.
기본 및 업데이트 이미지 파일 이름에는 adu-image type-image-machine-version<><<> 번호> 형식이 있습니다.<확장.> 업데이트를 가져올 때 사용할 버전 번호를 기록해 둡니다.
그룹 태그 추가
디바이스 업데이트는 할당된 태그 및 호환성 속성에 따라 디바이스를 그룹으로 자동으로 구성합니다. 각 디바이스는 하나의 그룹에만 속할 수 있지만 그룹에는 여러 하위 그룹을 사용하여 다른 디바이스 클래스를 정렬할 수 있습니다. 태그 및 그룹에 대한 자세한 내용은 디바이스 그룹 관리를 참조하세요.
디바이스 쌍에서 기존 디바이스 업데이트 태그 값을 null로 설정하여 삭제한 다음, 다음 새 디바이스 업데이트 그룹 태그를 추가합니다. 디바이스 업데이트 에이전트와 함께 모듈 ID를 사용하는 경우 디바이스 쌍 대신 모듈 ID 쌍에 태그를 추가합니다.
"tags": { "ADUGroup": "<CustomTagValue>" },
다음 스크린샷은 파일에서 태그를 추가할 위치를 보여줍니다.
저장을 선택합니다.
업데이트 가져오기
디바이스 업데이트 인스턴스에 대한 Azure Portal IoT Hub 페이지에서 왼쪽 탐색 창에서 장치 관리> 업데이트를 선택합니다.
업데이트 페이지에서 새 업데이트 가져오기를 선택합니다.
업데이트 가져오기 페이지에서 스토리지 컨테이너에서 선택을 선택합니다.
Storage 계정 페이지에서 기존 스토리지 계정을 선택하거나 Storage 계정을 선택하여 새 계정을 만듭니다.
컨테이너 페이지에서 기존 컨테이너를 선택하거나 컨테이너를 선택하여 새 컨테이너를 만듭니다. 컨테이너를 사용하여 가져오기 위해 업데이트 파일을 준비합니다.
팁
이전 업데이트에서 실수로 파일을 가져오지 않도록 하려면 업데이트를 가져올 때마다 새 컨테이너를 사용합니다. 새 컨테이너를 사용하지 않는 경우 기존 컨테이너에서 파일을 삭제해야 합니다.
컨테이너 페이지에서 업로드를 선택합니다. 다운로드한 Tutorial_RaspberryPi3 폴더에서 다음 업데이트 파일을 끌어서 놓거나 찾아서 선택합니다.
- adu-update-image-raspberrypi3-1.2.0.swu
- example-a-b-update.sh
- EDS-ADUClient.yocto-update.1.2.0.importmanifest.json
업로드를 선택합니다. 업로드한 후 파일이 컨테이너 페이지에 표시됩니다.
컨테이너 페이지에서 가져올 파일을 검토하고 선택한 다음 선택을 선택합니다.
업데이트 가져오기 화면에서 업데이트 가져오기를 선택합니다.
가져오기 프로세스가 시작되고 화면이 업데이트 화면으로 전환됩니다 . 가져오기가 성공하면 업데이트 탭에 표시됩니다. 가져오기 프로세스에 대한 자세한 내용은 디바이스 업데이트로 업데이트 가져오기를 참조하세요.
디바이스 그룹 선택
디바이스에 적용한 그룹 태그를 사용하여 디바이스 그룹에 업데이트를 배포할 수 있습니다. 업데이트 페이지 맨 위에 있는 그룹 및 배포 탭을 선택하여 그룹 및 배포 목록과 업데이트 준수 차트를 확인합니다.
업데이트 준수 차트에는 최신 업데이트, 사용 가능한 새 업데이트 및 진행 중인 업데이트 등 다양한 준수 상태의 디바이스 수가 표시됩니다. 자세한 내용은 디바이스 업데이트 규정 준수를 참조하세요.
그룹 이름 아래에는 이 IoT Hub에 연결된 디바이스의 모든 디바이스 그룹 및 사용 가능한 업데이트 목록이 표시되며, 상태 아래에 업데이트를 배포할 수 있는 링크가 표시됩니다. 그룹의 디바이스 클래스 요구 사항을 충족하지 않는 디바이스는 해당 잘못된 그룹에 표시됩니다. 태그 및 그룹에 대한 자세한 내용은 디바이스 그룹 관리를 참조하세요.
이 자습서에서 설정한 디바이스와 그룹의 디바이스에 대해 사용 가능한 업데이트가 포함된 디바이스 그룹이 표시됩니다. 페이지를 새로 고쳐야 할 수 있습니다. 이 보기에서 그룹에 가장 적합한 업데이트를 배포하려면 그룹 옆에 배포를 선택합니다.
업데이트 배포
그룹 세부 정보 페이지에서 현재 배포 탭을 선택한 다음 사용 가능한 업데이트 섹션에서 원하는 업데이트 옆에 있는 배포를 선택합니다. 그룹에 사용할 수 있는 가장 좋은 업데이트는 가장 강조 표시되어 있습니다.
배포 만들기 페이지에서 즉시 또는 나중에 시작하도록 배포를 예약한 다음 만들기를 선택합니다.
팁
기본적으로 시작 날짜/시간은 현재 시간으로부터 24시간입니다. 배포를 더 빨리 시작하려면 다른 날짜와 시간을 선택해야 합니다.
배포 세부 정보에서 상태는 활성으로 바뀝니다. 사용 가능한 업데이트에서 선택한 업데이트는 (배포 중) 상태로 표시됩니다.
업데이트 페이지에서 준수 차트를 확인하여 업데이트가 현재 진행 중인지 확인합니다. 디바이스가 성공적으로 업데이트되면 준수 차트 및 배포 세부 정보가 해당 상태를 반영하도록 업데이트됩니다.
업데이트 배포 기록 보기
배포 기록을 보려면 다음을 수행합니다.
그룹 세부 정보 페이지의 맨 위에 있는 배포 기록 탭을 선택하고 만든 배포 옆에 있는 세부 정보 링크를 선택합니다.
배포 세부 정보 페이지에서 새로 고침을 선택하여 최신 상태 세부 정보를 봅니다.
리소스 정리
이 자습서에 대해 만든 리소스가 더 이상 필요하지 않으면 삭제할 수 있습니다.
- Azure Portal에서 리소스가 포함된 리소스 그룹으로 이동합니다.
- 그룹의 모든 리소스를 삭제하려는 경우 리소스 그룹 삭제를 선택합니다.
- 일부 리소스만 삭제하려면 확인란을 사용하여 리소스를 선택한 다음 삭제를 선택합니다.