[IOT프로젝트] 5. dwconnector on AoL (+nodeenv 활용하기)

category 서버/리눅스 서버 2019.09.28 03:51

안녕하세요? node 버전 의존성을 가릴때가 많이 있습니다. 8 9 10 버전에 맞게 작동되는 경우도 있습니다.


이럴 경우에 해결하는 방법은 nvm 이나 nodenv 를 쓰는 것인데요. nodeenv가 편하여 작성하고 있습니다.





1. 설치


설치방법은 다양하지만, 파이썬 패키지임으로 easy_install 을 이용해 보겠습니다.


easy_install nodeenv





2. env 생성 및 테스트


각 CPU마다 존재하는 버전이 다르기 때문에 prebuild 바이너리 버전으로 다운이 안될 수 있습니다. 컴파일은 매우 오래걸리기 때문에 아래 사이트를 참고하시어 설치하시길 바랍니다.


https://nodejs.org/dist/


root@AOL-Debian:/home# nodeenv --node=10.16.3 ghconnector

 * Install prebuilt node (10.16.3) ..... done.

root@AOL-Debian:/home# cd ghconnector/

root@AOL-Debian:/home/ghconnector# source ./bin/activate

(ghconnector) root@AOL-Debian:/home/ghconnector# node -v

v10.16.3

(ghconnector) root@AOL-Debian:/home/ghconnector#


latest 폴더를 보시면 굉장히 편합니다. 0.10.16.3 이지만, 입력시에는 10.16.3 으로 입력을 하시면 됩니다. latest 에는 armv7 바이너리가 있어 금방 설치가 됩니다.


node 를 IOT 에서 많이 쓰는데 특히 홈브릿지 / 아기나무집 ST 패키지를 많이 사용합니다.


1. 홈브릿지 : V9

2. 미컨넥터 : V9

3. 구글컨넥터 : V10

4. 다원컨넥터 : V9


입니다. 아직 홈브릿지는 손대보지 않았는데 234 번은 이 글에서 서술 예정입니다.


한편, 저는 설정파일 및 바이너리 등을 한 폴더에 모아 놓는 것을 좋아해서 설정 파일도 /home/ghconnector/config/gh-config.json 으로 이렇게 넣어두는 편이고 절데 npm install -g 로 글로벌 하게 설치하지 않고 --prefix 나 해당 폴더에서 install 을 하고 있습니다.





3. ghconnector 올리기


(ghconnector) root@AOL-Debian:~# tar xf ghconnector.tar 

(ghconnector) root@AOL-Debian:~# cp app/* /home/ghconnector/ -R

(ghconnector) root@AOL-Debian:~# cd /home/ghconnector/


(ghconnector) root@AOL-Debian:/home/ghconnector# ls

app.js     gh-config.json  messages package.json     public   share  views

bin     include     node_modules package-lock.json  routes   src

Dockerfile  lib     nodesource_setup.sh  patch     service  util


(ghconnector) root@AOL-Debian:/home/ghconnector# ./bin/www

2019-09-28 02:35:14 [info]: WebSocket init

2019-09-28 02:35:15 [info]: Google TTS Init failed!!!

2019-09-28 02:35:16 [info]: No credentials.json

2019-09-28 02:35:17 [info]: Initiallize Google Calendar Service

2019-09-28 02:35:17 [error]: (node:17082) UnhandledPromiseRejectionWarning: Read Config File Error!!!!! >> SyntaxError: /config/gh-config.json: Unexpected end of JSON input

2019-09-28 02:35:17 [error]: (node:17082) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)

2019-09-28 02:35:17 [error]: (node:17082) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.


(ghconnector) root@AOL-Debian:/home/ghconnector# which node

/home/ghconnector/bin/node


(ghconnector) root@AOL-Debian:/home/ghconnector# vim /etc/init.d/ghconnector


DESC="ghconnector"

NAME=ghconnector

PIDFILE=/var/run/$NAME.pid

COMMAND="/home/ghconnector/bin/node"

DAEMON_ARGS="/home/ghconnector/bin/www"

RUN_AS=root


(ghconnector) root@AOL-Debian:/home/ghconnector# deactivate_node

root@AOL-Debian:/home/ghconnector# service ghconnector start

Starting ghconnector: ghconnector.

root@AOL-Debian:/home/ghconnector#





4. dwconnector 올리기


root@AOL-Debian:/home# nodeenv --node=9.11.2 dwconnector

 * Install prebuilt node (9.11.2) ..... done.


root@AOL-Debian:~# tar xf dwconnector.tar 

root@AOL-Debian:~# cp app/* /home/dwconnector/ -R


root@AOL-Debian:/home/dwconnector# source ./bin/activate
(dwconnector) root@AOL-Debian:/home/dwconnector# node -v
v9.11.2

(dwconnector) root@AOL-Debian:/home/dwconnector# ./bin/www
2019-09-28 02:44:26 [info]: {"system":{"mode":"Auto","address":"","port":"30040"},"user":{"name":"admin","password":"12345","googleId":""},"dawon":{"pollingTime":10},"st":{"app_url":"","app_id":"","access_token":""},"token":{"value":"","enable":false},"devices":[]}
2019-09-28 02:44:26 [info]: Save Config >> {"system":{"mode":"Auto","address":"","port":"30040"},"user":{"name":"admin","password":"12345","googleId":""},"dawon":{"pollingTime":10},"st":{"app_url":"","app_id":"","access_token":""},"token":{"value":"","enable":false},"devices":[]}
2019-09-28 02:44:26 [info]: Web Port >> 30040
2019-09-28 02:44:26 [error]: Google ID is empty!!!!!!
2019-09-28 02:44:26 [error]: Google ID is empty!!!
2019-09-28 02:44:26 [info]: Save Config >> {"system":{"mode":"Auto","address":"","port":"30040"},"user":{"name":"admin","password":"12345","googleId":""},"dawon":{"pollingTime":10},"st":{"app_url":"","app_id":"","access_token":""},"token":{"value":"e6233e406b7b29ba002f57594821ac59410cc6356d646f3dc571a4ca41100b175bf2e9c909a8d455452d462eb31e3ab2","enable":false},"devices":[]}
2019-09-28 02:44:26 [info]: WebSocket is Connected
2019-09-28 02:44:26 [info]: Polling Time >> 20 second


init.d 파일은 뭐 아래와 같이 작성하면 됩니다.


root@AOL-Debian:/home/dwconnector# vim /etc/init.d/dwconnector 



#!/bin/sh


### BEGIN INIT INFO

# Provides:          dwconnector

# Required-Start:    $remote_fs $all

# Required-Stop:     $remote_fs $all

# Default-Start:     2 3 4 5

# Default-Stop:      0 1 6

# Short-Description: dwconnector init script

# Description:       initscript by djjproject

### END INIT INFO



DESC="dwconnector"

NAME=dwconnector

PIDFILE=/var/run/$NAME.pid

COMMAND="/home/dwconnector/bin/node"

DAEMON_ARGS="/home/dwconnector/bin/www"

RUN_AS=root


d_start() {

    start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --chuid $RUN_AS --exec $COMMAND -- $DAEMON_ARGS

}


d_stop() {

    start-stop-daemon --stop --quiet --pidfile $PIDFILE

    if [ -e $PIDFILE ]

        then rm $PIDFILE

    fi

}


case $1 in

    start)

    echo -n "Starting $DESC: $NAME"

    d_start

    echo "."

    ;;

    stop)

    echo -n "Stopping $DESC: $NAME"

    d_stop

    echo "."

    ;;

    restart)

    echo -n "Restarting $DESC: $NAME"

    d_stop

    sleep 1

    d_start

    echo "."

    ;;

    *)

    echo "usage: $NAME {start|stop|restart}"

    exit 1

    ;;

esac


exit 0


root@AOL-Debian:/home/dwconnector# update-rc.d dwconnector defaults

root@AOL-Debian:/home/dwconnector# service dwconnector start

Starting dwconnector: dwconnector.


root@AOL-Debian:/home/dwconnector# mkdir config

root@AOL-Debian:/home/dwconnector# cp dw-config.json config/

root@AOL-Debian:/home/dwconnector# vim util/config.js


  8   constructor(){

  9     this.configPath = "/home/dwconnector/config/dw-config.json";

 10     this.config = {};

 11   }





5. 마음이 편안..


한 폴더에 묶어 두어 마음이 너무 편합니다.






댓글을 달아 주세요