Menderで始める組み込みOTA 第4回 : Quickstart Part3 : アプリケーションを更新(その1)
MenderはオープンソースベースのLinux向けOTA(Over the Air Update)ソリューションです。
筆者の会社コードギアではこのたびご縁あってMenderの技術サポートを提供する機会を得ました。
この一連の記事ではMender OTAソリューションの技術的な側面を紹介します。
「Menderで始める組み込みOTA」記事インデックス
- 第0回 : 組み込み製品、IoTシステムに適したOTAとは?
- 第1回 : Menderのご紹介
- 第2回 : Quickstart Part1 : mender.ioの試用アカウントを取得
- 第3回 : Quickstart Part2 : Raspberry Pi 3/4を接続
- 第4回 : Quickstart Part3 : アプリケーションを更新(その1) (本記事)
- 第5回 : Quickstart Part4 : アプリケーションを更新(その2)
- 第6回 : Quickstart Part5 : OSアップデートを実行
- 第7回 : Quickstart Part6 : コンテナアップデートを実行
- 第8回 : Quickstart Part7 : リモートターミナル機能のご紹介
- 第9回 : 接続編1 : QEMUエミュレータを接続
- 第10回 : 接続編2 : Armadillo IoT G3を接続
- 第11回 : 接続編3 : Jetson AGX Orinを接続
はじめに
今回はSaaSの mender.io に接続中のRaspberry Pi 3/4 デバイスに対してアプリケーションの更新を配布するデモ手順を紹介します。
基本的な流れは docs.mender.io にあるDeploy an application updateの前半部の内容と同じです。
デバイスの接続確認
本来、OTA対象のデバイスは常時接続中でなくても構わない (次回接続したときにOTA実行される) のですが、このデモではあらかじめ接続中であることを確認後DEPLOIMENTを作成したほうがわかりやすいです。
ログイン画面 からSaaSのmender.ioにログインし、左の DEVICES をクリックして対象のRaspberry Pi 3/4デバイスが 「OFFLINEではない事」を確認します。
以下の画面では raspberrypi3 デバイスは数分前に接続していますが、raspberry4デバイスはしばらく接続しておらず OFFLINE になっています。特定のデバイスの行をクリックするとさらに詳しいデバイス状態が表示されます。
このデモではとりあえず raspberrypi3 デバイスを対象にOTAを実行しますが、もしraspberry4デバイスが接続するとその時点でこちらもOTAジョブの対象であることが認識され、その後OTAが実行されます。
新規DEPLOYMENT(アップデートジョブ)の作成
今回配布するアプリケーションはデモ用にあらかじめSaaSの mender.io に用意されているWebサーバーアプリです。
mender.ioのWebUI画面で左の RELEASES をクリックすると、mender-demo-artifact-2.7.0 というARTIFACT (アップデートファイル) が用意されています。これを配布するDEPLOYMENT(アップデートジョブ) を作成するために、CREATE DEPLOYMENT WITH THIS RELEASE ボタンを押します。
すると、Create a deployment ダイアログが表示されます。このダイアログを利用して deployment (アップデートジョブ) を作成します。
最初の画面では以下の2項目を設定します。
- Select device group
展開対象のデバイスグループを指定します。これまでのところグループは一つも定義していないので All devices のみ指定可能です。
- Select a Release to deploy
mender-demo-artifact-2.7.0 があらかじめ選択されています。各ARTIFACTには互換性のある Device Type を指定可能で、このARTIFACTの場合あらかじめ11種類のDevice Typeが既に設定済みです。この11種類の中にはraspberrypi3
raspberrypi4
も含まれています。
入力が終わると NEXT ボタンが押せるようになるのでこれを押します。
次の画面では配布スケジュールを設定します。Enterprise版では本来配布スケジュールや段階的配布が設定可能なのですが、このデモでは何も変更せずそのまま NEXT ボタンを押します。
この画面ではアップデート時のオプションを設定します。ここでも何も変更せずそのまま NEXT ボタンを押します。
最後にレビュー画面が表示されます。問題なければ CREATE ボタンを押します。
すると、DEPLOYMENTS 画面に遷移します。
しばらく待っていると、接続に来たデバイスに対するアップデートが実行されます。
以下は登録済の2台中一台のアップデートが終了した状態です。
アップデートジョブの結果を確認
アップデートが実行されると、対象のRaspberry PiのIPアドレスではWebサーバーが動作中のはずです。Webブラウザで http://<ターゲットのIPアドレス>:85/ (ポート85)を開くと、以下のようにWebサーバーが動作していることが確認できます。
もしアップデートがうまくいかない場合、デバイス内のファイル /var/lib/mender/device_type の設定がraspberrypi3
raspberrypi4
のいずれかのcompatible device 設定になっている事を確認ください。もしこのようになっていない場合はテキストエディタでこのファイルの内容を書き換えると、device typeを適切なものに変更できます。
device_type=raspberrypi3
また非常に基本的な事ですが、うちではRaspberry Pi3に 5V 2.5AのACアダプタを利用してモニタを接続していると電力不足でOTA実行がうまくいきませんでした。5V 3AのACアダプタだと問題なく動作しました。
OTAポーリング間隔の変更
menderサーバーに実行可能なOTAジョブが存在するかの確認は、mender-clientサービスにより一定時間間隔で実行されます。
この時間間隔の設定はデバイス内の設定ファイル /etc/mender/mender.conf の UpdatePollIntervalSeconds (ポーリング間隔)により設定されます。
{
"HttpsClient": {},
"Security": {},
"Connectivity": {},
"DeviceTypeFile": "/var/lib/mender/device_type",
"DBus": {
"Enabled": true
},
"UpdatePollIntervalSeconds": 1800, ← ここ
"InventoryPollIntervalSeconds": 28800,
"RetryPollIntervalSeconds": 300,
"TenantToken": "(省略)",
"Servers": [
{
"ServerURL": "https://hosted.mender.io"
}
]
2022年 8月現在、「CONNECT A DEVICE」の手順で設定される既定のOTAチェック間隔は 1800 (秒) = 30分に設定されています。また、接続ができなかったときの再接続間隔は 300 (秒) = 5分に設定されています。OTAチェック間隔はOTAジョブ作成後どの程度の時間で実行されるかに関係します。
任意のエディタ (例えば sudo vi /etc/mender/mender.conf
)でこの設定値を変更後、sudo systemctl restart mender-client
と実行することにより反映されます。また、ポーリングの進行状況は systemctl status mender-client
や journalctl -u mender-client
で確認可能です。
この記事のまとめ
SaaSのmender.ioに用意されているARTIFACTを利用してRaspbery Pi 3/4 にアプリケーションをOTA配布する事が出来ました。
今後の予定
コードギアでは 「Menderで始める組み込みOTA」 のタイトルで以下のZenn記事を公開しています。
- 第0回 : 組み込み製品、IoTシステムに適したOTAとは?
- 第1回 : Menderのご紹介
- 第2回 : Quickstart Part1 : mender.ioの試用アカウントを取得
- 第3回 : Quickstart Part2 : Raspberry Pi 3/4を接続
- 第4回 : Quickstart Part3 : アプリケーションを更新(その1) (本記事)
- 第5回 : Quickstart Part4 : アプリケーションを更新(その2)
- 第6回 : Quickstart Part5 : OSアップデートを実行
- 第7回 : Quickstart Part6 : コンテナアップデートを実行
- 第8回 : Quickstart Part7 : リモートターミナル機能のご紹介
- 第9回 : 接続編1 : QEMUエミュレータを接続
- 第10回 : 接続編2 : Armadillo IoT G3を接続
これ以降の記事も準備中です。ご期待ください。
Discussion