Menderで始める組み込みOTA 第10回 : 接続編2 : Armadillo IoT G3を接続
MenderはオープンソースベースのLinux向けOTA(Over the Air Update)ソリューションです。
筆者の会社コードギアではこのたびご縁あってMenderの技術サポートを提供する機会を得ました。
この一連の記事ではMender OTAソリューションの技術的な側面を紹介します。
「Menderで始める組み込みOTA」記事インデックス
以下、Quickstart編
- 第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を接続
はじめに
今回はアットマークテクノ社の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にアップデートします。
-
標準サイズのSDメモリカードか、アダプタ付きマイクロSDカードを用意します。
-
以下のページ
https://armadillo.atmark-techno.com/resources/software/armadillo-iot-g3/install-disk-image
から適切なモデル用の Debian GNU/Linux 10 (buster) イメージファイル(.IMG) をダウンロードします。
- 書き込みツールを利用して、イメージファイルを用意したSDメモリに書き込みます。
ここでは balenaEtcher
などが使用可能です。
- SDメモリカードをArmadillo IoT G3の標準SDメモリカードスロットに挿入し、以下の手順で本体eMMCに書き込みます。
JP1ジャンパをショート、スライドスイッチを保守モードに設定、ユーザーボタン1を押しながら電源投入、ブートローダーのプロンプトで boot コマンドを投入し書き換え実行、最後に電源を切って、JP1ジャンパ/スライドスイッチを元の位置に戻します。
Armadillo IoT G3 を Menderに接続
Debian 10 (buster) がインストール出来たところで、以下を実行します。
- パソコンと接続
以下のドキュメントを参考に Armadillo IoT G3 と 製品付属のUSBシリアル変換アダプタ を接続し、さらに製品付属のUSBケーブルでパソコンと接続します。
パソコン側では、たとえばWindows PCであればputty などのターミナルプログラムを利用して、USBシリアルポートを 115,200bps で開きます。
ユーザー名 root
(初期パスワード root
)でログインし、ログイン後にパスワードは変更しておきます。
- インターネットと接続
有線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:~#
- 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:~#
- CA証明書の更新
Debian 10 (buster)の場合、インストールされている CA証明書が古いと curlで失敗します。
rootユーザーで
update-ca-certificates --fresh
を実行し、CA証明書を更新します。
- 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!
のように表示されると成功です。
- 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を開きます。
たとえば、
とアクセスするか、別のPCのWebブラウザから開発PCのIPアドレスを (例えば 192.168.5.40
だった場合は以下のように)指定して
のようにアクセスすると、第4回記事と同様なデバイス情報が表示されます。
Device type を変更
MenderのWeb UIに表示される Device type
は Menderクライアントの /var/lib/mender/device_type
に保存されている以下の設定から取り出されます。
device_type=raspberrypi3
ここを
device_type=Armadillo
のように変更後、mender-clientサービスを再起動する ( systemctl restart mender-client 等を実行) ことで、Mender WebUI上の表示が変化します。
この記事のまとめ
Armadillo IoT G3デバイスをMenderサーバーに接続し、リモートターミナル接続やアプリケーションアップデートが簡単に利用可能なことを確認しました。
今後の予定
コードギアでは 「Menderで始める組み込みOTA」 のタイトルで以下のZenn記事を公開しています。
以下、Quickstart編
- 第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