👻

Menderで始める組み込みOTA 第4回 : Quickstart Part3 : アプリケーションを更新(その1)

2022/05/30に公開

MenderはオープンソースベースのLinux向けOTA(Over the Air Update)ソリューションです。

Mender is a secure, risk tolerant and efficient over-the-air update manager. Remotely manage and deploy software updates to your IoT devices at scale, worldwide.

https://mender.io/

筆者の会社コードギアではこのたびご縁あってMenderの技術サポートを提供する機会を得ました。
この一連の記事ではMender OTAソリューションの技術的な側面を紹介します。


Menderで始める組み込みOTA」記事インデックス

はじめに

今回は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 ボタンを押します。

アプリケーションを更新1

すると、Create a deployment ダイアログが表示されます。このダイアログを利用して deployment (アップデートジョブ) を作成します。

アプリケーションを更新2

最初の画面では以下の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 ボタンが押せるようになるのでこれを押します。

アプリケーションを更新3

次の画面では配布スケジュールを設定します。Enterprise版では本来配布スケジュールや段階的配布が設定可能なのですが、このデモでは何も変更せずそのまま NEXT ボタンを押します。

アプリケーションを更新4

この画面ではアップデート時のオプションを設定します。ここでも何も変更せずそのまま NEXT ボタンを押します。

アプリケーションを更新5

最後にレビュー画面が表示されます。問題なければ CREATE ボタンを押します。
すると、DEPLOYMENTS 画面に遷移します。

アプリケーションを更新6

しばらく待っていると、接続に来たデバイスに対するアップデートが実行されます。

以下は登録済の2台中一台のアップデートが終了した状態です。

アプリケーションを更新7

アップデートジョブの結果を確認

アップデートが実行されると、対象のRaspberry PiのIPアドレスではWebサーバーが動作中のはずです。Webブラウザで http://<ターゲットのIPアドレス>:85/ (ポート85)を開くと、以下のようにWebサーバーが動作していることが確認できます。

動作中のWebサーバー

もしアップデートがうまくいかない場合、デバイス内のファイル /var/lib/mender/device_type の設定がraspberrypi3 raspberrypi4のいずれかのcompatible device 設定になっている事を確認ください。もしこのようになっていない場合はテキストエディタでこのファイルの内容を書き換えると、device typeを適切なものに変更できます。

/var/lib/mender/device_type の設定例
device_type=raspberrypi3

また非常に基本的な事ですが、うちではRaspberry Pi3に 5V 2.5AのACアダプタを利用してモニタを接続していると電力不足でOTA実行がうまくいきませんでした。5V 3AのACアダプタだと問題なく動作しました。

OTAポーリング間隔の変更

menderサーバーに実行可能なOTAジョブが存在するかの確認は、mender-clientサービスにより一定時間間隔で実行されます。
この時間間隔の設定はデバイス内の設定ファイル /etc/mender/mender.confUpdatePollIntervalSeconds (ポーリング間隔)により設定されます。

/etc/mender/mender.conf
{
    "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"
        }
    ]

https://docs.mender.io/client-installation/configuration-file/polling-intervals

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-clientjournalctl -u mender-client で確認可能です。

この記事のまとめ

SaaSのmender.ioに用意されているARTIFACTを利用してRaspbery Pi 3/4 にアプリケーションをOTA配布する事が出来ました。

今後の予定

コードギアでは Menderで始める組み込みOTA のタイトルで以下のZenn記事を公開しています。

これ以降の記事も準備中です。ご期待ください。

Discussion