サン電子のゲートウェイRoosterにHULFT IoT(EdgeStreaming)を入れてみた

こんにちは、よろず相談担当 すぎもん :yum: です。


今回は、Linuxゲートウェイ機器であるサン電子Rooster(NSX7000)にHULFT IoT EdgeStreamingのパッケージを作成してみました！

## まずはやってみる
サン電子Rooster(NSX7000)は、サン電子株式会社のIoT/M2M向けルーターRoosterシリーズの機器です。
NSX7000は、マルチキャリア対応 LTE通信対応Linuxゲートウェイと位置づけられているそう。


[NSX7000機器情報] (https://www.sun-denshi.co.jp/sc/nsx7000/)

 
HULFT IoT EdgeStreamingをインストールするには、事前にパッケージ作成環境を準備する必要があるみたいなので、パッケージの作成をやってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/2d1167ce-0056-babb-e4bb-30b47dfb2465.png)

## パッケージ作成環境の準備

- HULFT IoT EdgeStreaming

  - 製品本体が含まれる zip ファイルを指定のサイトから[ダウンロード](https://www.hulft.com/download?&_ga=2.188013544.1972116588.1573457228-475003281.1503981102#anc_24)

  - HULFT IoT EdgeStreaming に関する用語や操作については zip ファイル内の「FirstStepGuide_jpn.pdf」にあります。
 

- NSX7000 パッケージ作成環境（※開発環境を別途準備します）
　[NSX7000マニュアル](http://www.sun-denshi.co.jp/sc/nsx7000/manual/)
　上記リンクから、パッケージ作成環境の構築手順のマニュアルを参照しました。
    - Add-onアプリケーション開発-パッケージ作成マニュアル.pdf
    - Add-onアプリケーション開発-環境構築マニュアル.pdf

これで事前準備完了です。

## パッケージ化するモジュールの準備

HULFT IoT EdgeStreaming Studio を使って、ストリーム処理を実装しパッケージ作成環境にデプロイします。

ストリーム処理を実装方法やデプロイ方法については、製品ダウンロード時に取得したzip ファイル内の「FirstStepGuide_jpn.pdf」を参考にやってみます。

- FirstStepGuide_jpn.pdf

1.　HULFT IoT EdgeStreaming Studio を起動し、ストリーム処理を表すスクリプトを作成
2.　開発したスクリプトを NSX7000 パッケージ作成環境上の任意のディレクトリにデプロイ
    　　- 指定した任意のディレクトリには `es-agent.tar.gz` がデプロイされました
3.　デプロイしたファイルを以下のコマンドで展開
   
```
   tar zxf es-agent.tar.gz
```

4.　コマンドを実行すると、同一ディレクトリに以下のファイルが展開されました。

   - es-agent 
   - es-agent.yaml
   - script.bql
   - (plugins)※プラグインモジュールを使用している場合

## パッケージの作成

NSX7000 パッケージ作成環境で HULFT IoT EdgeStreaing runtime のパッケージを作成してみます。

各種ファイルのパラメータについては以下の[マニュアル](http://www.sun-denshi.co.jp/sc/nsx7000/manual/)を参照しました。

- Add-onアプリケーション開発-パッケージ作成マニュアル.pdf



1.　規定のディレクトリを作成します

   ```
   トップ・ディレクトリ/
   |
   +-- object/
   |    |
   |    +-- run-es-agent 起動スクリプト
   +-- rpk/
   |    |
   |    +-- CONTROL/
   |    |      |
   |    |      +-- control ファイル
   |    |
   |    +-- appctl スクリプト
   |
   +-- EdgeStreaming-runtime
   +-- Makefile
   
   ```

2.　以下のファイルを object ディレクトリにコピーしました。
   - es-agent 
   - es-agent.yaml
   - script.bql
   - (plugins)※プラグインモジュールを使用している場合

3.　次に、control ファイルの作成してみます。
   わたしは、以下の通り作成してみました。

   ```
   Package: EdgeStreaming-runtime
   Version: 2.0.0
   Depends: 
   Runtime-Depends: 
   Maintainer: Company
   Architecture: nsx7000
   Provides: 
   Replaces: 
   Description: 
   ```

4.　appctl スクリプトを作成します

   わたしは、以下の通り作成してみました。

   ```sh
   #!/bin/sh
   
   PACKAGE_NAME=EdgeStreaming-runtime
   PACKAGE_DIR=/app/package
   
   exec $PACKAGE_DIR/$PACKAGE_NAME/sbin/$PACKAGE_NAME $@
   
   ```

5.　appctl スクリプトから実行される EdgeStreaming-runtime スクリプトを作成します。

   ```
   #!/bin/sh /etc/rc.common
   
   USE_PROCD=1
   
   PACKAGE_NAME=EdgeStreaming-runtime
   PACKAGE_DIR=/app/package
   COMMAND=$PACKAGE_DIR/$PACKAGE_NAME/sbin/run-es-agent
   
   start_service() {
   	procd_open_instance
   	procd_set_param command $COMMAND
   	procd_set_param respawn
   	procd_close_instance
   }
   
   stop_service() {
   	return 0
   }
   ```

6.　起動スクリプト（run-es-agent）を作成します

   わたしは、以下の通り作成してみました。

   ```sh
   #!/bin/sh
   
   PACKAGE_NAME=EdgeStreaming-runtime
   PACKAGE_DIR=/app/package
   
   LD_LIBRARY_PATH=${PACKAGE_DIR}/${PACKAGE_NAME}/lib
   BIN_DIR=${PACKAGE_DIR}/${PACKAGE_NAME}/bin
   COMMAND=${BIN_DIR}/es-agent
   
   export LD_LIBRARY_PATH
   cd $BIN_DIR
   
   exec $COMMAND run -c es-agent.yaml
   ```

7.　起動スクリプト（run-es-agent）に実行権限を付与します。

   ```sh
chmod 755 run-es-agent
   ```
   
8.　Makefile を作成します。

   わたしは、以下の通り作成してみました。

   ```makefile
   ROOSTER_TOP_DIR ?= $(HOME)/RoosterOS-SDK
   
   ADD_ON_PKG_NAME := EdgeStreaming-runtime
   ADD_ON_PKG_VERSION := 2.0.0
   ADD_ON_PKG_MAINTAINER := Company
   ADD_ON_PKG_DESCRIPTION := 
   
   OBJ_DIR=./object
   
   include $(ROOSTER_TOP_DIR)/mk/add-on-package.mk
   
   
   EdgeStreaming-runtime: 
   
   
   contents: $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR) EdgeStreaming-runtime
   	mkdir -p $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/bin
   	cp $(OBJ_DIR)/es-agent* $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/bin
   	cp $(OBJ_DIR)/script.bql $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/bin
   	cp -r $(OBJ_DIR)/plugins $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/bin
   
   	mkdir -p $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/sbin
   	cp $(OBJ_DIR)/run-es-agent $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/sbin
   	$(call replace_add_on_keyword,\
   		$(ADD_ON_PKG_NAME),\
   		$(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/sbin/$(ADD_ON_PKG_NAME))
   	chmod +x $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_DIR)/sbin/$(ADD_ON_PKG_NAME)
   
   	touch $(ROOSTER_PACKAGE_ADD_ON_CONTENTS_PREPARED)
   
   
   $(eval $(DefaultTarget))
   
   ```

9.　以下のコマンドを実行してパッケージを作成します。

   ```sh
   make rpk
   ```

10.　コマンドを実行すると以下のファイルが作成されました。

   - EdgeStreaming-runtime_2.0.0.rpk

後は、この作成したパッケージファイルをRooster上に持っていき、下記のマニュアルを参考にインストールすることで使用可能です。

   - Add-onアプリケーション開発-環境構築マニュアル.pdf

## 最後に
今回は、HULFT IoT EdgeStreamingをLinuxゲートウェイ機器にインストールしてみましたが、いかがでしたでしょうか。
パッケージの作成をしてみましたが、マニュアルも充実しているので作業自体は思うより簡単にすることができました！

また今回は、とっかかりのパッケージ作成をまずしてみましたが、
別の機会で、HULFT IoT EdgeStreamingを具体的に使ってみたいなーと思ってます！
そこでもっと具体的なところをお話しできたらと思います！

このブログでは、今後も技術の「よろず相談窓口」で相談を受けた内容や、誕生したワザをご紹介していけたらな、と思っています。

これからも是非チェックいただき、宜しければフォローをお願いします。

それでは、また！