RAPIRO(ラピロ)をWebサーバにする(Tomcat版)

node.js+Expressで作ったWebサーバから、SerialPortライブラリでラピロのArduino基盤を制御しようと試みましたが、なぜかうまくいかず。。。シリアルポートのOPENはできているし、送信でエラーを吐いている様子もないのだけれど、Arduino側が何の反応もしないし、Arduino側から何か受信することもない。うーん、悔しい。

もうちょっと解析したら何とかなるのかもしれませんが、ちょっと別のアプローチも試してみたいので、今回はラピロのWebサーバ化をTomcatを使ってやってみようと思います。node.js+Expressよりはだいぶ面倒ですが、ちょっと今後やりたいことがJavaベースじゃないとキツイっぽいので、ここでTomcatの準備をしておこうと思います。

以下を参考にさせてもらいながら進めます。

まずJava SDKのインストール。

$ sudo apt-get install oracle-java7-jdk

インストールできたら、バージョンを確認。

$ java -version
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode)

あれ、何故1.8.0?まあ、いいか。

次に、tomcat7のインストール。”$ sudo apt-get install tomcat7″でやる方法もあるみたいですが、どこにインストールされているかとかがよくわからなくなるので、Tomcatの公式サイトからtar.gzをとってきて自分で展開することにします。

Tomcatのダウンロードをする前に、実行専用のユーザ、tomcatアカウントを作成します。Tomcatをroot権限で実行するのはセキュリティ的によろしくないらしいので。といっても、今回作るのはローカルサーバなので、そんなにセキュリティを強く意識しなくても大丈夫だとは思いますが。

$ sudo useradd -s /sbin/nologin tomcat

これが済んだら、Tomcatの公式サイトのDownload -> Tomcat 7.0で、Coreの.tar.gzをとってきます。

$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat-7.0.56.tar.gz

とってきたら、tar.gzファイルを展開し、/usr/localに移動。ディレクトリのオーナーをtomcatユーザに変更し、tomcatという名前でシンボリックリンクを作成しておきます。

$ tar xvzf apache-tomcat-7.0.56.tar.gz
$ sudo mv apache-tomcat-7.0.56 /usr/local
$ cd /usr/local
$ sudo chown -R tomcat:tomcat apache-tomcat-7.0.56
$ sudo ln -s apache-tomcat-7.0.56 tomcat

次に、必要な環境変数を設定します。Raspberry Piの起動時に毎回設定されてほしい環境変数なので、/etc/profileの末尾に以下を追記します。

export CATALINA_HOME=/usr/local/tomcat
export JAVA_HOME=/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt
export PATH=$JAVA_HOME/bin:$CATALINA_HOME/bin:$PATH
export CATALINA_OPTS="-Xmx256M"

ちなみに、JAVA_HOMEで設定すべきパスは、以下のコマンドで調べました。

$ readlink $(readlink $(which java))
/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/bin/java

/etc/profileに追記できたら、環境変数を有効化します。

$ . /etc/profile

$ echo $JAVA_HOMEで環境変数の値が表示されればOK。

次に動作確認のため、Tomcatを起動させます

$ cd /usr/local/tomcat/bin
$ sudo ./startup.sh
Using CATALINA_BASE:   /usr/local/apache-tomcat-7.0.56
Using CATALINA_HOME:   /usr/local/apache-tomcat-7.0.56
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-7.0.56/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/apache-tomcat-7.0.56/bin/bootstrap.jar:/usr/local/apache-tomcat-7.0.56/bin/tomcat-juli.jar
Tomcat started.

うまく起動していれば、ブラウザで”http://192.168.xxx.xxx:8080/”にアクセスするとTomcatのインストール成功ページが表示されます。Tomcatを停止するときは、

$ sudo ./shutdown.sh

で。

次に、Raspberry Piの起動時にTomcatが自動起動するようにサービス化します。

まずは起動スクリプトの作成。こちらで書かれているものをベースに、環境変数の値だけ自分の環境に合わせます。ファイル名は”tomcat”で、/etc/init.dの下に置きます。置いたら、

$ sudo chmod 755 tomcat

で実行権限付与。次に、起動設定。

$ sudo insserv tomcat

起動スクリプトtomcatが中で呼び出している”daemon.sh”が使用している、jsvcをインストール。

$ sudo apt-get install jsvc

daemon.shの参照先が/usr/bin/jsvcになっていないので、シンボリックリンクで飛ばすようにします。

$ cd /usr/local/tomcat/bin
$ sudo ln -s /usr/bin/jsvc jsvc

これで準備OK。再起動してTomcatが立ち上がっている確認します。

$ sudo reboot

起動完了後、さっきと同じようにブラウザで”http://192.168.xxx.xxx:8080/”にアクセスします。Tomcatのインストール成功ページが開けばOK。

最後に、Tomcatに簡単にwarファイルをデブロイできるように、Managerウェブアプリケーションを使えるようにします。

Managerウェブアプリケーションにログインできるようにするには、$CATALINA_HOME/conf/tomcat-users.xmlを編集して、既存ユーザエントリの最後に以下を追記します。

<role rolename="manager-gui"/>
<user username="hogehoge" password="hugahuga" roles="manager-gui"/>

ユーザ名とパスワードは適宜変えてください。編集できたら、Tomcatを再起動。

$ sudo service tomcat stop
$ sudo service tomcat start

その後ブラウザ上から”http://192.168.xxx.xxx:8080/manager/html” にアクセスして、先ほど設定したユーザ名とパスワードでManagerウェブアプリにアクセスできるか確認します。”Tomcat Web アプリケーションマネージャ”の画面が出ればOKです。

と、ここまでやっておきながら、自分のやりたいことに本当にTomcatは必要なのか?という疑問がわいてしまいました。むしろ、このへんの方が自分のやりたいことに近いのでは。。。

まあやってしまったものは仕方がない。少なからず勉強にはなりましたし。でもやっぱり、node.jsよりずいぶん扱いづらく感じます。