isaaxdとは

isaaxdはRaspberry Piなどのデバイス上で動作するソフトウェアです。isaaxクラウドとの通信とユーザーアプリケーションの管理を担っています。語尾につくdはUNIXの慣習でデーモンとそうでないファイルを見分けやすくするための名前付けです。isaaxと混同しないように注意してください。

ユーザーアプリケーションについて

ユーザーアプリケーションは、開発者がisaaxを使ってデプロイするアプリケーションの実体です。

インストール

ユーザーアプリケーションは/var/isaax/project配下に展開されます。インストールが完了すると、isaaxdは後述のpre-installスクリプトを実行した後、自動的にアプリケーションをスタートさせます。

pre-installスクリプトの実行

isaaxdのインストール時に、任意のシェルスクリプトを実行することが可能です。このスクリプトはpre-installスクリプトと呼ばれ、デプロイするアプリケーションの依存関係のインストールやその他の設定を行うために使います。スクリプトは/var/isaax/projectディレクトリで実行されます。

アプリケーションの更新

git pushなどを通してユーザーアプリケーションに更新があると、isaaxdはその通知を受け取り、更新処理を行います。

アップデートの流れ

  1. ロールバックが必要な場合に備え、/var/isaax/projectに存在するアプリケーションのアーカイブを作成します。

  2. 新しいアプリケーションのアーカイブをダウンロードし、/tmp/isaaxディレクトリに展開します。

  3. 展開されたアプリケーションからisaax.jsonを見つけ、バリデーションを行います。

  4. tmp/isaax/project/var/isaax/projectに上書きします。

  5. エラーがあった場合、更新処理を中止してアプリケーションをロールバックします。

  6. pre-updateスクリプトを/var/isaax/project直下で実行します。

  7. こちらもエラーがあった場合は更新を中止してアプリケーションをロールバックします。

  8. ユニットファイル(/etc/systemd/system/isaax-project.service)を書き換えます。

  9. アプリケーションを起動します。

  10. 更新結果をクラウドに通知します。

  11. アプリケーションのリビジョン(gitのコミットID)を保存してアップデートを完了します。

ログの扱い

アプリケーションの標準出力と標準エラー出力はvar/isaax/log/project.logに記録されます。isaaxdはこれを監視し、定期的にクラウドへ送信します。送信されたアプリケーションのログはWEB画面から確認することができます。

アプリケーションの起動・停止

アプリケーションはisaaxのWEB画面から起動・停止を行うことができます。デバイスのターミナルから直接行うには、下記のコマンドを実行します。

sudo systemctl start isaax-project # 起動
sudo systemctl stop isaax-project # 停止

ライフサイクル

isaaxdが管理するユーザーアプリケーションのライフサイクルは、systemdのようなOSのシステム管理ソフトウェアによって制御されます。isaaxdはisaax.jsonを元に必要な設定ファイルを自動的に生成し、ユーザーアプリケーションを常駐化します。(isaax.jsonの詳細はこちら)

下記のようなisaax.jsonを元に、

{
  "name": "javascript-app",
  "version": "",
  "description": "My Javascript app",
  "main": "app.js",
  "author": "",
  "license": "",
  "language":"javascript",
  "scripts": {
     "start": "node app.js"
    }
}

設定ファイルを/etc/systemd/system/isaax-project.serviceとして生成します。(systemdを使用している場合)

[Unit]
Description=My Javascript app
Requires=network-online.target
After=network-online.target

[Service]
PIDFile=/var/run/isaax-project.pid
ExecStartPre=/bin/rm -f /var/run/isaax-project.pid
ExecStart=/bin/sh -c 'node app.js  2>&1 >> /var/isaax/log/project.log'
WorkingDirectory=/var/isaax/project/
Environment="TMP_DIR=/tmp/isaax/"
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

isaaxdの詳細

コマンド

isaaxdはコマンドを実行可能です。/var/isaax/ディレクトリに移動し、sudo ./isaaxd helpコマンドから使い方を確認できます。

usage: isaaxd [options] install | remove | version | status | start | stop | restart
options:
  -address string
    source address
  -d string
    Isaaxd working dir (writable) (default "/var/isaax/")
  -dir string
    Isaax working dir (writable) (default "/var/isaax/")
  -id string
    device id to be used
  -rpcport string
    RPC server port (default "1226")
  -source string
    source URL (default "mqtt")
  -token string
    JWT token to be used

isaaxdに関連するファイルについて

  1. isaaxdのログは/var/isaax/log/isaaxd.logに記録されます。

  2. /var/isaax/isaax.confはデバイスIDやクラウドと接続するために必要なトークンが含まれます。

  3. /var/isaax/isaaxd.envにはアプリケーションの自動更新の可否などisaaxdの設定情報を格納します。

isaaxdを介してデータを送信する

isaaxd127.0.0.1:8088にHTTPサーバーを立ち上げます。/deliverエンドポイントからPOSTリクエストを受け付け、そのペイロードをクラウドに送信・保存します。

セルフアップグレード

isaaxdは自分自身をアップグレードする機能を備えています。環境変数サービスからisaaxdのセルフアップグレードを有効にしている場合、新しいバージョンの更新通知を受け取ってアップグレード処理を行います。無効にしている場合はWEB画面からマニュアルで更新します。また、同様に環境変数からアップグレードするエージェントのバージョンを安定版(stable)か開発版(latest)に指定することができます。

RPC

isaaxdはRPC(リモートプロシージャコール)をサポートします。これは同じローカルネットワーク内に存在するisaaxd同士で通信するために用いられます。

archtecture

isaaxdは同じローカルネットワーク内に存在する他のisaaxdを見つけ、RPC通信を用いて接続することができます。これにより、isaaxdがインストールされているデバイス同士でスター型のネットワークトポロジを形成します。1つのisaaxdインスタンスにisaaxクラウドとの通信を任せ、デバイス間でメッセージをリレーします。

RPCサーバの起動

RPCアドレスは--source rpc--rpcport <ip_addr>:<port>フラグを使って設定します。