チュートリアル: Raspberry Pi 3 B+ 参照イメージを使用した Device Update for Azure IoT Hub
Device Update for Azure IoT Hub では、イメージベース、パッケージベース、スクリプトベースの更新がサポートされています。
イメージ更新を使用すると、デバイスの最終状態の信頼性が高くなります。 通常、運用前環境と運用環境の間でイメージ更新の結果をレプリケートする方が簡単です。そうすれば、パッケージやその依存関係の場合と同様の課題が生じることがないからです。 アトミックな性質のため、A/B フェールオーバー モデルを簡単に導入することもできます。
このチュートリアルでは、Raspberry Pi 3 B+ ボードで Device Update for IoT Hub を使用して、エンド ツー エンドのイメージベースの更新を行う手順について説明します。
このチュートリアルでは、次の方法について説明します。
- 画像をダウンロードする
- IoT デバイスにタグを追加する
- 更新プログラムをインポートする
- イメージの更新プログラムをデプロイします。
- 更新プログラムのデプロイを監視する
注意
このチュートリアルで取り上げるイメージ更新プログラムは、Raspberry Pi B3 ボードで検証されました。
前提条件
Device Update アカウントとインスタンスをまだ作成していない場合は作成し、IoT ハブをまだ構成していない場合は構成します。 このチュートリアルでは、デバイスをイーサネット接続経由で接続する必要があります。
Device Update GitHub リリース ページの [Assets] でファイルをダウンロードします。 Tutorial_RaspberryPi.zip には、チュートリアルに必要なすべてのファイルが含まれています。
IoT Hub でデバイスを作成して接続文字列を取得する
ここで、IoT Hub にデバイスを追加します。 IoT Hub 内から、デバイスの接続文字列が生成されます。
Azure portal で、ご使用の IoT ハブに移動します。
左側のペインで、[デバイス] を選択します。 次に、[新規] を選択します。
[デバイス ID] にデバイスの名前を入力します。 [キーの自動生成] チェックボックスがオンになっていることを確認します。
[保存] を選択します。 [デバイス] ページに、作成したデバイスが一覧に表示されているはずです。
デバイス ビューに移動し、[プライマリ接続文字列] の横にある [コピー] アイコンを選択して、デバイスの接続文字列を取得します。
後で次の手順で使用できるように、コピーした文字をどこかに貼り付けておきます。
このコピーした文字列は、対象のデバイスの接続文字列です。
Note
このチュートリアルでは、セットアップを容易にするために、デバイスの接続文字列を使用して、IoT Hub を認証および接続します。 運用環境のシナリオでは、モジュール ID を使用し、AIS (IoT ID サービス) を利用してデバイスをプロビジョニングすることをお勧めします。 詳細情報
Raspberry Pi のセットアップ
Device Update GitHub リリース ページの [Assets] に基本イメージと更新ファイルが用意されています。 Tutorial_RaspberryPi.zip には、チュートリアルに必要なすべてのファイルが含まれています。 .wic ファイルは、Raspberry Pi 3 B+ ボードにフラッシュできる基本イメージです。 swUpdate(.swu) ファイル、カスタム swupdate スクリプト、およびマニフェストは、Device Update for IoT Hub を介してインポートする更新プログラム ファイルです。
この基本イメージでは、以下を備えた Yocto ビルド (3.4.4 リリースに基づく) が使用されます。
- DU を使用してデュアル パーティションの更新を有効にする SWUpdate
- デバイス更新エージェント
使用される Yocto レイヤーの詳細については、Device Update Yocto の GitHub を参照してください。
お好きな OS フラッシュ ツールを使用して、Raspberry Pi 3 B+ デバイスで使われる SD カードに Device Update の基本イメージ (adu-base-image) をインストールできます。 bmaptool を使用して SD カードにフラッシュする手順を下に示します。
bmaptool を使用した SD カードのフラッシュ
まだ行っていなければ、
bmaptool
ユーティリティをインストールします。sudo apt-get install bmap-tools
/dev
で SD カードのパスを探します。 パスは/dev/sd*
または/dev/mmcblk*
のようになります。dmesg
ユーティリティを使用すると、正しいパスを探しやすくなります。フラッシュする前に、マウントされているすべてのパーティションをマウント解除します。
sudo umount /dev/<device>
デバイスへの書き込みアクセス許可があることを確認します。
sudo chmod a+rw /dev/<device>
省略可能: より高速なフラッシュを行うには、bimap ファイルとイメージ ファイルをダウンロードして、同じディレクトリに置きます。
SD カードをフラッシュします。
sudo bmaptool copy <path to image> /dev/<device>
Device Update for Azure IoT Hub ソフトウェアには、次のライセンス条項が適用されます。
エージェントを使用する前に、ライセンス条項をお読みください。 インストールして使用すると、これらの条項に同意したものと見なされます。 ライセンス条項に同意しない場合は、Device Update for IoT Hub エージェントをお使いいただけません。
Raspberry Pi で Device Update エージェントを構成する
Raspberry Pi 3 がネットワークに接続されていることを確認します。
PowerShell ウィンドウで次のコマンドを使用して、Raspberry Pi 3 に SSH 接続します。
ssh raspberrypi3 -l root
Device Update for IoT Hub を適切に構成するには、デバイスに DU 構成ファイル (du-config.json と du-diagnostics-config.json) が必要です。
- 次を使用して、編集のため
du-config.json
のファイルを作成または開きます。
nano /adu/du-config.json
コマンドを実行すると、ファイルを開いているエディターが表示されます。 ファイルを作成したことがない場合、ファイルは空です。 次に、下の du-config.json の内容をコピーし、デバイスに必要な構成に置き換えます。 続いて、接続文字列の例を、上記の手順で作成したデバイス用のものに置き換えます。
du-config.json
{ "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
ファイルを作成する必要があります。- まず、次を使用して編集のため
du-diagnostics-config.json
のファイルを作成または開きます。
nano /adu/du-diagnostics-config.json
- 下に示す du-diagnostics-config.json の内容をコピーし、既定のビルドとは異なる構成を置き換えます。 サンプルの du-diagnostics-config.json ファイルは、Device Update for IoT Hub の既定のログの場所を表しています。 これらの既定値を変更する必要があるのは、実装が異なる場合のみです。
du-diagnostics-config.json
{ "logComponents":[ { "componentName":"adu", "logPath":"/adu/logs/" }, { "componentName":"do", "logPath":"/var/log/deliveryoptimization-agent/" } ], "maxKilobytesToUploadPerLogPath":50 }
- 変更が完了したら、
Ctrl+X
キーを押してエディターを終了します。 次に、y
と入力して変更を保存します。
- まず、次を使用して編集のため
次のコマンドを使用して、
/adu/
ディレクトリにあるファイルを表示します。 両方の構成ファイルが表示されます (編集用の du-diagnostics-config.json ファイルなど)。ls -la /adu/
Device Update システム デーモンを再起動して、構成が適用されたことを確認します。
raspberrypi
にログインしているターミナル内で、次のコマンドを使用します。systemctl start deviceupdate-agent
次のコマンドを使用して、エージェントがライブ状態であることを確認します。
systemctl status deviceupdate-agent
状態が活動中として緑色で表示されます。
Device Update for IoT Hub でデバイスを接続する
左側のペインで、[デバイス] を選択します。
お使いのデバイス名が含まれるリンクを選択します。
ページの上部で [デバイス ツイン] を選択します。
[デバイス ツイン] プロパティの 「reported」 セクションで、Linux カーネルのバージョンを探します。
新しいデバイス (Device Update から更新プログラムを受信していないもの) の場合、DeviceManagement:DeviceInformation:1.swVersion 値は、デバイスで実行されているファームウェアのバージョンを表しています。 デバイスに更新プログラムが適用された後、Device Update では AzureDeviceUpdateCore:ClientMetadata:4.installedUpdateId プロパティ値を使用して、デバイスで実行されているファームウェアのバージョンを表します。
基本イメージ ファイルおよび更新イメージ ファイルには、ファイル名にバージョン番号が付いています。
adu-<image type>-image-<machine>-<version number>.<extension>
このバージョン番号は、後の「更新プログラムのインポート」セクションで使用します。
デバイスに Device Update グループ タグを追加する
Azure Portal で、お使いの IoT ハブに移動します。
左側のウィンドウの [デバイス]で、対象の IoT デバイスを見つけて、デバイス ツインまたはモジュール ツインに移動します。
Device Update エージェント モジュールの [モジュール ツイン] で、既存の Device Update タグ値を null 値に設定して削除します。 Device Update エージェントでデバイス ID を使用している場合は、[デバイス ツイン] でそれらの変更を行います。
次に示すように、Device Update の新しいタグ値を追加します。
"tags": { "ADUGroup": "<CustomTagValue>" }
''このスクリーンショットには、タグをツインに追加する必要があるセクションが示されています。''
更新プログラムをインポートする
最新のエージェントのリリース資産の下にある Tutorial_RaspberryPi.zip からサンプルのチュートリアル マニフェスト、サンプル更新プログラム (.swu ファイル)、サンプルの A/B スクリプトをダウンロードします。
Azure portal にサインインし、Device Update がある IoT Hub に移動します。 左側のウィンドウの [デバイスの自動管理]の下で、[更新プログラム] を選択します。
[更新] タブを選択します。
[+ 新しい更新プログラムのインポート] を選択します。
[+ ストレージ コンテナーから選択] を選択します。 [+ ストレージ アカウント] を使用して、既存のストレージ アカウントを選択するか、新しいストレージ アカウントを作成します。 次に、既存のコンテナーを選択するか、[+ コンテナー] を使用して新しいコンテナーを作成します。 このコンテナーは、インポート用に更新ファイルをステージするために使用されます。
注意
以前の更新プログラムから誤ってファイルをインポートしないように、更新プログラムをインポートするごとに新しいコンテナーを使用することをお勧めします。 新しいコンテナーを使用しない場合は、この手順を実行する前に、既存のコンテナーからファイルを削除してください。
コンテナーで [アップロード] を選択し、手順 1 でダウンロードしたファイルに移動します。 すべての更新ファイルを選択した後、[アップロード] を選択します。 続いて [選択] ボタンを選択して、[更新プログラムのインポート] ページに戻ります。
このスクリーンショットは、インポートの手順を示しています。 ファイル名は、例で使用されているものと一致しない場合があります。
[更新プログラムのインポート] ページで、インポートするファイルを確認します。 次に、[更新プログラムのインポート] を選択してインポート プロセスを開始します。 このチュートリアルでは、先ほどダウンロードしたサンプル チュートリアル マニフェスト、サンプル更新プログラム (.swu ファイル)、サンプル A/B スクリプトをインポートします。
インポート プロセスが開始され、画面が [インポートの履歴] セクションに切り替わります。 [状態] 列にインポートが正常に完了したことが表示されたら、[使用可能な更新プログラム] 見出しを選択します。 インポートされた更新プログラムが一覧に表示されるはずです。
インポート プロセスの詳細については、Device Update への更新プログラムのインポートに関する記事を参照してください。
デバイス グループを表示する
Device Update ではグループを使用してデバイスを整理します。 割り当てられたタグと互換性プロパティに基づいて、Device Update で自動的にデバイスがグループに並べ替えられます。 各デバイスは 1 つのグループにのみ属しますが、グループには複数のサブグループを含めることができ、さまざまなデバイス クラスを並べ替えることができます。
ページの上部にある [グループとデプロイ] タブに移動します。
グループの一覧と更新プログラムのコンプライアンス チャートを表示します。 更新プログラムのコンプライアンス チャートには、さまざまなコンプライアンス対応状態 (最新の更新状態、利用可能な新しい更新プログラムがある、更新プログラムのインストールが進行中) にあるデバイスの数が表示されます。 更新プログラムのコンプライアンスの詳細についてはこちらを参照してください。
このチュートリアルで設定したシミュレートされたデバイスを含むデバイス グループと、新しいグループ内のデバイスで使用できる更新プログラムが表示されます。 グループのデバイス クラスの要件を満たしていないデバイスがある場合は、対応する無効なグループに表示されます。 このビューから新しいユーザー定義グループに最適な利用可能な更新プログラムをデプロイするには、グループの横にある [デプロイ] を選択します。
タグとグループの詳細については、デバイス グループの管理に関する記事を参照してください。
更新プログラムをデプロイする
グループが作成された後、デバイス グループで利用可能な新しい更新プログラムが表示され、[最適な更新プログラム] の下にその更新プログラムへのリンクが表示されます。 場合によっては、一度最新の情報に更新する必要があります。
コンプライアンスの詳細については、「デバイス更新のコンプライアンス」を参照してください。
グループ名を選択してターゲット グループを選択します。 [グループの基本] の下にグループの詳細が表示されます。
デプロイを開始するには、[現在のデプロイ] タブに移動します。[使用できる更新プログラム] セクションで、目的の更新プログラムの横にある [デプロイ] リンクをクリックします。 特定のグループに最適な使用可能な更新プログラムには、最適 の強調表示が付けられます。
デプロイを直ちに開始するか、後で開始するようにスケジュールします。 [作成] を選択します。
ヒント
既定の開始日時は、現在の時刻から 24 時間後です。 もっと早くデプロイしたい場合は、異なる日時を選択してください。
デプロイの詳細 で、状態 が アクティブ に変わります。 デプロイされた更新プログラムには (デプロイ中) のマークが付きます。
コンプライアンス チャートを表示して、更新が進行中であることを確認します。
デバイスが正常に更新されると、コンプライアンス チャートとデプロイの詳細が、同じ内容を反映するように更新されていることがわかります。
更新プログラムのデプロイを監視する
これで、Raspberry Pi 3 B+ デバイス上で Device Update for IoT Hub を使用した、エンド ツー エンドのイメージ更新が正常に完了しました。
リソースをクリーンアップする
不要になったら、Device Update アカウント、インスタンス、IoT ハブ、IoT デバイスをクリーンアップします。