SACM (Service Adapter Control Manager) は、機器の自動接続、一元管理を可能にするマネージメントシステムサービスです。当初はSEILのみサポートするサービスでしたが、SACM との通信を担う libarms を組み込むことで SEIL 以外の機器も SACM から管理できるようになります。昨日(12/24(水))発売開始された Armadillo-IoT およびその開発環境では libarms が標準でサポートされました。SEILの話題からは逸れますが、このエントリでは実際にArmadillo-IoTをSACMから操作可能にするまでの手順を紹介します。
https://dev.smf.jp/sacm/からお申し込みください。
SACM トライアルプランは無料でご利用になれます。利用期間の制限もありません。ただし、管理できる機器は 5 台までです。
Armadillo のファームウェア開発はアットマークテクノ様が提供されている環境を使用します。http://armadillo.atmark-techno.com/start などを参考に開発環境を準備してください。
ATDE, atmark-dist には libarms (C API) とそれをデーモンとして実装した armsd が予め組み込まれているので、make menuconfig 等から有効化するだけで簡単にファームウェアに組み込めます。
ここでは menuconfig を使った手順をご紹介します。
make 実行後 images ディレクトリに linux.bin.gz と romfs.img.gz ができていれば成功です。このままでも使用できますが、この後の開発・デバッグを簡単にするために、armsd から再起動できないように(問題発生時に自動的に再起動してしまわないように)しておきましょう。vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/armsd/scripts/reboot をエディタで開き、以下のようにします。
#!/bin/sh # /usr/bin/nohup /sbin/reboot -d 5 > /dev/null 2>&1 & echo reboot >&2
保存したら make コマンドを実行して再度ビルドします。
なお、Armadillo-840 でも armsd 起動スクリプトと設定ファイル (vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/armsd) をコピーすることで、動作することを確認しています。また、他の Armadillo シリーズでも同様に動作するものと思われます。ただし、機種依存部分 (LEDの操作等) は変更が必要になります。
https://trial.sacm.jp/user/をブラウザで開き、ログインします。ログインアカウントは SACM トライアル申し込み後、メールでご連絡しています。
ログインしたら「管理」タブで、利用する Distribution ID の SA ラベルを「Armadillo」など、分かりやすいものに変更します:
SACM では管理対象の機器を SA (Service Adapter, サービスアダプタ) と呼んでいます。
Distribution IDはサービスアダプタを識別する一意のIDです。トライアルお申し込み時に5台分割り当てられており、後程サービスアダプタ(Armdillo)のフラッシュメモリに書き込みます。
「SA」タブで、「Armadillo」を選択します:
Armadillo を設置するネットワークがNAPT 配下の場合は「詳細情報」タブ >「操作」>「優先接続モード変更」で「接続持続型」を選択します (*1):
「コンフィグ」タブ(詳細情報タブの隣) > 「コンフィグ変更」で各モジュール毎それぞれ以下のように登録します:
モジュール0: ネットワーク設定(*2):
VERSION=1 # 必ず1行目に置く # eth0 用設定。DHCP のみサポート。eth0 を使用しない場合は不要 interface_eth0=enable interface_eth0_address=dhcp # 必須 interface_eth0_metric=1 # DHCPで設定される経路のメトリック # 3G 設定。3G モジュールを使用しない場合は不要。 interface_3g=enable interface_3g_address=dhcp # 必須 interface_3g_ppp_id="PPP ID" interface_3g_ppp_pass="PPP Password" interface_3g_apn="iijmobile.jp" interface_3g_metric=10 # コンフィグ変更者を信頼できるものと仮定しています。 # このファイルは shell script として source コマンドで読み込みます。 # このため、任意のコマンドの実行が module 0 から可能ですので、 # 最初の仮定を是とできない環境では、別途安全な方法をご検討ください。
module1: /etc/lighttpd.conf そのもの (*2)
module2: ~root/.ssh/authorized_keys そのもの (*2)
なお、入力後、「コンフィグ変更」ボタンを押す必要があります。全てのモジュールの設定が完了したら、「コンフィグ反映」から、「次回起動時反映」をしてください。
余談ですが、「接続中」の状態になった後は「即時反映」や、夜間などに実行する「反映スケジュール指定」が使用可能になります。
(*1):起動時間が短縮できます。「接続待受型」でも起動できますがタイムアウトを待つため、不利になります。 ただし、NAT セッション維持のため定期的にパケットを送受信するため、従量課金の回線ではご注意ください。目安として、一日あたり2.2MB程度使用します。
(*2): 実装例としてこのようにモジュールとコンフィグが定義されています。実環境で利用される際は、必要に応じてカスタマイズしてください。
以下のネットワーク環境が必要です。
また、シリアルコンソールをとるための PC も必要です。
まず SACM の認証情報をフラッシュメモリに書き込むため、一旦 armadillo を起動し、シリアルコンソールからログインします。root でログイン (初期パスワード:root) した後、/etc/config/armsd.conf.secretsに以下の内容でファイルを作成し、/bin/flatfsd -sを実行してフラッシュメモリに保存してください。
DIST_ID="SACM申し込みによって払いだされた Distribution ID" LS_SA_KEY="同 LS SA Key" MOBILE_ID="PPP ID" MOBILE_PASS="PPP Password" MOBILE_APN="APN (iijmobile.jp)"
次に先ほどビルドしたファームウェアを書き込みます。
フラッシュメモリへの書き込みは下記のWebページを参考にしてください。http://manual.atmark-techno.com/armadillo-iot/armadillo-iotg-std_product_manual_ja-1.0.0/ch12.html
ファームウェアの書き込みが終わったら準備完了です。さあ再起動してみましょう。
無事SACMと接続が完了すると、LED3 が点滅から点灯に、SACM の表示が「接続中」「操作・コンフィグ有効」に変わります。ただし、「接続中」への遷移は数分かかります。電源投入から数分待っても「操作・コンフィグ有効」にならない場合は設定、構成を見なおしてください。その際、ログ (デフォルトは /var/log/messages) がヒントになると思います。
接続を確認できたら、ファームウェアビルドで変更した reboot スクリプトを元に戻してください。また、ここに処理を追加することで、例えば再起動時に LED を点滅させるといった拡張が可能になります。
機能要素として、大きく3 つあります:
ゼロコンフィグは、機器固有の設定を一切持たない状態からネットワーク越しにコンフィグを取得することができます。機器の識別には、フラッシュメモリに書き込んだDistribution IDを使用します。標準の実装ではインターネット接続のためにモバイルの PPP ID/Password を書き込んでいますが、IIJ から払い出す、SACM サーバー群へのみ到達可能な特殊なアカウントを使うことで、ゼロの状態からコンフィグ取得が可能になります。(ご利用についてはお問い合わせください)
Pushオペレーションは、Web 画面からSA(サービスアダプタ)に対して操作ができます。
これらの他、コンフィグの即時反映が可能です。また、WebAPI (http://manual.sacm.jp/webapi) を使って機械的に実行することもできます(APIアクセスキーの発行には有料版の契約が必要です)。
Heartbeat監視は、機器の UP/DOWN 判定 (メール通知) と、CPU 使用率などのグラフ表示が可能です。「接続中」になったら、「監視」タブから SA と通知先メールアドレスを登録し、電源を落としてしばらく待ってください。15 分ほどで DOWN 検知メールが届き、Web画面でも「接続中」から「切断中」に変化します。また CPU 使用率などの送信も armsd に実装済みですので、しばらく待つと SA の「グラフ」タブから確認できるようになります。
先ほど Push オペレーションをご紹介しましたが「ステータス取得」と「任意コマンド」は、実は未実装です。例として「ステータス」を実装してみましょう。
vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/armsd/scripts/status を以下のように書き換えてください
#!/bin/sh id=$1 in=$2 out=$3 command=`head -n 1 $in` $command > $out
次に vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/armsd/gen-conf.sh の #script-status: /etc/armsd/scripts/status となっている行の先頭の # を外してください。
その後ファームウェアを再度ビルドし、Armadillo に書き込んでください。
再起動後、「操作・コンフィグ有効」になったら、オペレーション実行画面でモジュール0 を選択し、パラメータに "netstat -rn" を入力して「ステータス取得」を実行してください。成功すると経路表が表示されるはずです。(もしくは「タスク」タブから参照してください)
今回は実装例ということでこの様にしましたが、コマンド実行には制限が無いため、例えば rm -rf / のような危険なコマンドも実行できてしまいます。適宜制限をかけてください。
script-status 以外のスクリプトの役割は以下のようになります
script-app-event: IP アドレス変更の通知。定期的に実行される。
script-clear: ステータス初期化 (Push オペレーション)
script-command: 任意コマンド (Push オペレーション)
script-post-pull: Pull 完了後に実行され、コンフィグの反映を行う
script-reconfig: コンフィグ変更 (Push オペレーション)
script-start: Pull 時に実行され、コンフィグの保存を行う
script-status: ステータス参照 (Push オペレーション)
script-stop: モジュールの停止 (armsd 終了時)
script-reboot: 再起動 (Push オペレーション or armsdが異常を検知)
script-line-ctrl: Pull 時の回線接続
script-state-changed: ステータス変化の通知
なお、PING, TRACEROUTE, コンフィグ取得は armsd の中で処理します。
このエントリでは SACM から Armadillo を管理する方法を紹介しました。SACM を使うことで、ほとんど手を動かすこと無くリモート管理が実現できます。また、カスタマイズも容易です。ぜひ Armadillo-IoT と SACM をお試しください。