16: Intel Edison上のxdk-daemonの動きを把握する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

よく訓練されたアップル信者、都元です。昨日のエントリーはこちらです。Intel XDKについて基礎知識は、下記を読んでおいてください。

[Edison]Intel XDK IoT Edisonをつかってプログラムのビルドをしてみる

Intel Edison側の内部の動き

上記エントリー内にある通り、XDKは開発マシン内で動くIDEの一種です。一方、Edison内ではxdk-daemonというプロセスが動いており、XDK上で開発したアプリケーションを受け入れ、アプリケーションプロセスを管理する役割を担っています。

Edison内でxdk-whitelist --add xx.xx.xx.xxというコマンドを入力したと思います。このコマンドは、58888番ポートで待ち受けているxdk-daemonに対して接続を許可するIPアドレスを指定するものです。SSH等のようにパスワードや鍵による認証はありませんので、まじめに運用するEdisonに対しては、利用後xdk-whitelist --remove xx.xx.xx.xxで許可を取り除いておく必要がありますね。

ホワイトリストの設定変更を行った後、設定が反映されない場合はsystemctl restart xdk-daemonコマンドで、プロセスを再起動してみましょう。

XDKからアプリケーションを受け取ったり、package.jsonに基づいたライブラリの導入時には、journaldにログが送信されます。ログの確認は、journalctlコマンドで行います。-fオプションを付与すると、tail -fよろしく、標準出力に最新のログを随時出し続けます。ログには様々なプロセスのログが出てくるため、grep "xdk-daemon"でフィルタをしておくといいかもしれません。

# journalctl -f | grep "xdk-daemon"

ホワイトリストへの登録

まず、ホワイトリスト登録を忘れた時。ログにはこんな出力が。

Dec 16 05:38:03 edison-miyamoto-x xdk-daemon[779]: Loading /opt/xdk-daemon/config.json last modified: Tue Sep 23 2014 20:39:34 GMT+0000 (UTC)
Dec 16 05:38:03 edison-miyamoto-x xdk-daemon[779]: UNAUTHORIZED: IP address xx.xx.xx.xx is not in the whitelist (see config.json)

ホワイトリストは/opt/xdk-daemon/config.jsonに記述されるんですね。

# cat /opt/xdk-daemon/config.json
{
  "name":"",
  "whitelist":[]
}
# xdk-whitelist --add xx.xx.xx.xx


xx.xx.xx.xx added to whitelist!

# cat /opt/xdk-daemon/config.json
{
  "name": "",
  "whitelist": [
    "xx.xx.xx.xx"
  ]
}

XDKからの接続時

特になんてことありませんが。下記ドロップダウンでデバイスを選択した時の挙動です。

xdk-device

Dec 16 05:45:38 edison-miyamoto-x xdk-daemon[779]: Loading /opt/xdk-daemon/config.json last modified: Tue Dec 16 2014 05:39:46 GMT+0000 (UTC)
Dec 16 05:45:38 edison-miyamoto-x xdk-daemon[779]: clientAddress: xx.xx.xx.xx

npmパッケージのインストール

例えばプロジェクトのpackage.jsonが以下のようになっていた時、aws-sdkがインストールされます。

{
  "name": "OnboardLEDBlink",
  "description": "",
  "version": "0.0.0",
  "main": "main.js",
  "engines": {
    "node": ">=0.10.0"
  },
  "dependencies": {
    "aws-sdk": "*"
  }
}

このボタンをクリックすると、パッケージのダウンロードとインストールが行われます。

xdk-install-build

アプリケーションをEdisonに流し込みつつ、aws-sdk(及びその依存ライブラリ)をインストールしているのが分かります。

Dec 16 05:53:53 edison-miyamoto-x xdk-daemon[779]: received: {"channel":"clean","message":{"type":"fileInfo","data":{"name":"blink","size":2344960,"type":"bundle"}}}
Dec 16 05:53:55 edison-miyamoto-x xdk-daemon[779]: receviing file data
Dec 16 05:53:55 edison-miyamoto-x xdk-daemon[779]: /usr/bin/bsdtar
Dec 16 05:53:55 edison-miyamoto-x xdk-daemon[779]: rebuild /node_app_slot/
Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: stdout: aws-sdk@2.1.2 /node_app_slot/node_modules/aws-sdk
Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: xml2js@0.2.6 /node_app_slot/node_modules/aws-sdk/node_modules/xml2js
Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: sax@0.4.2 /node_app_slot/node_modules/aws-sdk/node_modules/xml2js/node_modules/sax
Dec 16 05:53:58 edison-miyamoto-x xdk-daemon[779]: xmlbuilder@0.4.2 /node_app_slot/node_modules/aws-sdk/node_modules/xmlbuilder

アプリケーションは/node_app_slotに展開されているのが分かります。パッケージのインストールは不要で、単にアプリケーションを/node_app_slotにアップロードするだけであれば、下記のボタンでOKです。

xdk-upload

アプリケーションの起動

アップロードしたアプリケーションを起動するにはこのボタンです。

xdk-run

この時起動ログが大量に流れます。また、プログラム内でconsole.log('MRAA Version: ' + mraa.getVersion());等、console.logで出力する内容もここに出てきているのがわかると思います。

Dec 16 05:56:09 edison-miyamoto-x xdk-daemon[779]: received: {"channel":"command","message":"run"}
(略)
Dec 16 05:56:09 edison-miyamoto-x xdk-daemon[779]: V8PORT REC
Dec 16 05:56:09 edison-miyamoto-x xdk-daemon[779]: stdout: MRAA Version: v0.5.4-34-g4d8b82e

アプリケーションの停止

起動したアプリケーションを停止するにはこのボタンです。

xdk-stop

この時のログはこんな感じです。

Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: received: {"channel":"command","message":"stop"} Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: => Stopping App <= Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: null Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: child exited Dec 16 06:00:26 edison-miyamoto-x xdk-daemon[779]: Child process closed [/text]

まとめ

XDK(IDE)の操作に対して、Edison上ではこのようなログの出力があります。Edison上のアプリケーションをXDKで開発する時、色々試行錯誤することになると思いますが、このあたりの挙動を押さえておくと、開発がテキパキ進むことでしょう。

明日のエントリーはこちらです。