MENU

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

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

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

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

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

[code language=”bash”]
$ sudo apt-get install oracle-java7-jdk
[/code]

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

[code language=”bash”]
$ 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)
[/code]

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

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

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

[code language=”bash”]
$ sudo useradd -s /sbin/nologin tomcat
[/code]

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

[code language=”bash”]
$ wget http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-7/v7.0.56/bin/apache-tomcat-7.0.56.tar.gz
[/code]

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

[code language=”bash”]
$ 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
[/code]

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

[code language=”bash”]
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"
[/code]

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

[code language=”bash”]
$ readlink $(readlink $(which java))
/usr/lib/jvm/jdk-8-oracle-arm-vfp-hflt/jre/bin/java
[/code]

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

[code language=”bash”]
$ . /etc/profile
[/code]

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

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

[code language=”bash”]
$ 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.
[/code]

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

[code language=”bash”]
$ sudo ./shutdown.sh
[/code]

で。

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

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

[code language=”bash”]
$ sudo chmod 755 tomcat
[/code]

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

[code language=”bash”]
$ sudo insserv tomcat
[/code]

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

[code language=”bash”]
$ sudo apt-get install jsvc
[/code]

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

[code language=”bash”]
$ cd /usr/local/tomcat/bin
$ sudo ln -s /usr/bin/jsvc jsvc
[/code]

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

[code language=”bash”]
$ sudo reboot
[/code]

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

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

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

[code language=”text”]
<role rolename="manager-gui"/>
<user username="hogehoge" password="hugahuga" roles="manager-gui"/>
[/code]

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

[code language=”bash”]
$ sudo service tomcat stop
$ sudo service tomcat start
[/code]

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

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

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

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次