😎

Menderで始める組み込みOTA 第10回 : 接続編2 : Armadillo IoT G3を接続

2022/08/09に公開

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」記事インデックス

以下、Quickstart編

以下、接続編

はじめに

今回はアットマークテクノ社のArmadilloシリーズより、Armadillo IoT G3 を mender.io に接続し、いつものデモアプリを展開するまでをご紹介します。

Armadillo IoT G3は NXP社 i.MX7Dual CPUを搭載し、LTE通信も利用可能なIoT向け組み込みデバイスです。セキュアエレメントSE050を搭載し、Menderの Enterpriseプランでは セキュアエレメントを利用したTLSの双方向認証 を実装可能です。

前提として、mender.io 試用アカウントの取得 (第2回 記事参照)が必要です。接続手順は 第3回 の後半と同じなので、この記事では一部省略している箇所があります。

Armadillo IoT G3の準備

Armadillo IoT G3 は Debian系のLinuxを利用しますが、こちらで確認したところ Debian9 (stretch) の glibcバージョン 2.24 では以下のエラーが出てmender-client バイナリのインストールに失敗します。

Setting up mender-client (3.1.0-1) ...

mender: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.28' not found (required by mender)

アットマークテクノ社に確認したところ、以前は出荷時のバージョンがDebian 9でしたが、現在の出荷ではDebian 10とのこと。mender-client を Debian 9向けに再ビルドすることも不可能ではありませんが、ここでは単純に Debian 10 を利用することとします。


Debian 9 の Armadillo IoT G3 の場合は以下のページを参考に Debian 10にアップデートします。

https://armadillo.atmark-techno.com/blog/1913/2396

  1. 標準サイズのSDメモリカードか、アダプタ付きマイクロSDカードを用意します。

  2. 以下のページ

https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3/install-disk-image

から適切なモデル用の Debian GNU/Linux 10 (buster) イメージファイル(.IMG) をダウンロードします。

  1. 書き込みツールを利用して、イメージファイルを用意したSDメモリに書き込みます。

ここでは balenaEtcher

https://www.balena.io/etcher/

などが使用可能です。

  1. SDメモリカードをArmadillo IoT G3の標準SDメモリカードスロットに挿入し、以下の手順で本体eMMCに書き込みます。

11.1.2. インストールの実行

JP1ジャンパをショート、スライドスイッチを保守モードに設定、ユーザーボタン1を押しながら電源投入、ブートローダーのプロンプトで boot コマンドを投入し書き換え実行、最後に電源を切って、JP1ジャンパ/スライドスイッチを元の位置に戻します。

Armadillo IoT G3 を Menderに接続

Debian 10 (buster) がインストール出来たところで、以下を実行します。

  1. パソコンと接続

以下のドキュメントを参考に Armadillo IoT G3 と 製品付属のUSBシリアル変換アダプタ を接続し、さらに製品付属のUSBケーブルでパソコンと接続します。

以下、https://manual.atmark-techno.com/armadillo-iot-g3/armadillo-iotg-g3_startup_guide_ja-2.0.3/ch03.html#sct.before_work.connect_method より。

パソコン側では、たとえばWindows PCであればputty などのターミナルプログラムを利用して、USBシリアルポートを 115,200bps で開きます。

ユーザー名 root (初期パスワード root)でログインし、ログイン後にパスワードは変更しておきます。

  1. インターネットと接続

有線LAN / WiFi / セルラーのいずれかの方法でインターネットに接続します。 (こちらでは有線LAN接続を利用しました)

ping で接続確認

root@armadillo:~# ping www.google.com
PING www.google.com(nrt20s19-in-x04.1e100.net (2404:6800:4004:81d::2004)) 56 data bytes
64 bytes from nrt20s19-in-x04.1e100.net (2404:6800:4004:81d::2004): icmp_seq=1 ttl=115 time=124 ms
64 bytes from nrt20s19-in-x04.1e100.net (2404:6800:4004:81d::2004): icmp_seq=2 ttl=115 time=5.79 ms
64 bytes from nrt20s19-in-x04.1e100.net (2404:6800:4004:81d::2004): icmp_seq=3 ttl=115 time=5.65 ms
64 bytes from nrt20s19-in-x04.1e100.net (2404:6800:4004:81d::2004): icmp_seq=4 ttl=115 time=5.42 ms
^C
--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 8ms
rtt min/avg/max/mdev = 5.422/35.168/123.810/51.177 ms
root@armadillo:~# ping -4 www.google.com
PING www.google.com (172.217.31.164) 56(84) bytes of data.
64 bytes from nrt12s22-in-f4.1e100.net (172.217.31.164): icmp_seq=1 ttl=119 time=9.20 ms
64 bytes from nrt12s22-in-f4.1e100.net (172.217.31.164): icmp_seq=2 ttl=119 time=6.21 ms
64 bytes from nrt12s22-in-f4.1e100.net (172.217.31.164): icmp_seq=3 ttl=119 time=6.67 ms
64 bytes from nrt12s22-in-f4.1e100.net (172.217.31.164): icmp_seq=4 ttl=119 time=5.88 ms
^C
--- www.google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 8ms
rtt min/avg/max/mdev = 5.883/6.992/9.204/1.307 ms
root@armadillo:~#
  1. apt update を実行

aptリポジトリリストのアップデートを実行します。
これを行わないと、menderインストール時に以下のエラーで終了することがあります。

E: The repository 'http://download.atmark-techno.com/debian buster Release' is no longer signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

正常に実行できると、以下のようになります。

root@armadillo:~# apt update
Get:1 http://security.debian.org buster/updates InRelease [65.4 kB]
Ign:2 http://download.atmark-techno.com/debian buster InRelease
Get:3 http://download.atmark-techno.com/debian buster Release [8870 B]
Hit:4 http://ftp.jp.debian.org/debian buster InRelease
Get:5 http://download.atmark-techno.com/debian buster Release.gpg [833 B]
Get:6 http://download.atmark-techno.com/debian buster/main armhf Packages [11.6 kB]
Fetched 86.7 kB in 3s (29.0 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
31 packages can be upgraded. Run 'apt list --upgradable' to see them.
root@armadillo:~#
  1. CA証明書の更新

Debian 10 (buster)の場合、インストールされている CA証明書が古いと curlで失敗します。

https://armadillo.atmark-techno.com/blog/10899/9638

rootユーザーで

update-ca-certificates --fresh

を実行し、CA証明書を更新します。

  1. Menderクライアントをインストール

この手順は第3回に Raspberry Pi 3/4 を接続するときに実行した手順と同じです。今回接続したいデバイスはRaspberry Pi 3/4 ではありませんが、同じビルド済み .deb モジュールが動作するためこのようなことが可能です。

第2回 : mender.ioの試用アカウントを取得 の内容にしたがって mender.io の試用アカウント取得後、mender.io の WebUIにログインします。

WebUIログイン後、DASHBOARDから CONNECT A DEVICE ボタンを押して開いたダイアログで、Raspbery Pi Quick Start の所にある GET STARTED ボタンを押します。

最初のOTAを実行するために、Device type には raspberrypi3を入力してください。 (本記事の「 Device type を変更 」でこの設定を変更する方法を紹介します)

次のダイアログに表示される接続文字列を COPY TO CLIPBOARD ボタンを押してコピーしたあと、Armadillo IoT G3 のコンソール画面にペーストして実行します。

最終的に

Setting up mender-connect with user 'root' and shell 'bash'
9793 2664
Success!

のように表示されると成功です。

  1. Mender WebUIで Acceptを実行

ネットワーク接続に問題なければ、Menrer WebUIの DASHBOARD で以下のように Pending Device が表示されます。

第3回の記事と同様に画面上の「+」をクリックすると、DEVICES画面に移行し「pending」状態のデバイスが表示されます。(ここでは raspberypi3 と表示されることに注意)

チェックボックスにチェックを入れると下のように右下に「+」ボタンが表示され、これにマウスオーバーすると「Accept Device」ボタンが現れるので、緑のチェックマーク部分を押します。

これでArmadillo IoT G3デバイスが mender.io と接続されました。

リモートターミナルを実行

WebUIの DEVICES画面 からこのデバイスを選んでリモートターミナルを実行可能です。

DEVICES画面で Status: フィルタを accepted に変更すると、これまでに接続承認したデバイスが一覧表示されます。ここからDevice Typeが raspberrypi3 のデバイスから、実際には Armadillo IoT G3 の行を見つけてクリックします。 (macアドレスなどで確認可能です)

表示されるデバイス詳細画面の一番下にある Launch a new Remote Terminal session をクリックすると、リモートターミナルがブラウザ内で実行開始されます。実行終了するときは CLOSE ボタンを押します。

アプリケーションアップデートを実行

第4回記事 でやっていたのと同様に、mender.ioにあらかじめ登録されている mender-demo-artifact をこのArmadillo IoT G3デバイスに配信することが可能です。

RELEASES 画面から mender-demo-artifact-3.1.0 をクリックし、表示される CREATE DEPLOYMENT WITH THIS RELEASE ボタンを押して新規DEPLOYMENTを作成します。 (もし実行途中のDEPLOYMENTSが残っている場合には、あらかじめキャンセルしておいた方がわかりやすいかもしれません)

特にオプション変更をせずにDEPLOYMENTを設定し CREATEボタンを押すと、すぐにArmadillo IoT G3デバイス上で更新が実行され、ポート85上でWebサーバーが動き始めます。開発PC上のWebブラウザからArmadillo IoT G3 (デフォルトのホスト名は armadillo)のIPアドレスのポート85を開きます。

たとえば、

http://armadillo.local:85/

とアクセスするか、別のPCのWebブラウザから開発PCのIPアドレスを (例えば 192.168.5.40 だった場合は以下のように)指定して

http://192.168.5.40:85/

のようにアクセスすると、第4回記事と同様なデバイス情報が表示されます。

Device type を変更

MenderのWeb UIに表示される Device type は Menderクライアントの /var/lib/mender/device_type に保存されている以下の設定から取り出されます。

/var/lib/mender/device_type
device_type=raspberrypi3

ここを

/var/lib/mender/device_type
device_type=Armadillo

のように変更後、mender-clientサービスを再起動する ( systemctl restart mender-client 等を実行) ことで、Mender WebUI上の表示が変化します。

この記事のまとめ

Armadillo IoT G3デバイスをMenderサーバーに接続し、リモートターミナル接続やアプリケーションアップデートが簡単に利用可能なことを確認しました。

今後の予定

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

以下、Quickstart編

以下、接続編

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

Discussion