Javaのアプリケーション・サーバー「Apatch Tomcat」。Javaで作られたサーブレットと呼ばれるプログラムを動かす際に必要となるサーバーソフトウェアです。
今回は、Apatch Tomcatの現時点での最新安定バージョン「Tomcat 8.x系」を「OS X Yosemite」にインストールして使用する方法を説明したいと思います。ただ単にインストールするだけではなく、Mac再起動時に自動的に起動するように設定します。
Oracle Java 8のインストール
OracleのサイトからJava 8をダウンロードしてインストールします。Java開発を全く行わない場合、JREでも良いかもしれません。今回はJDKの「jdk-8u31-macosx-x64.dmg」をインストールしました。
pkgファイルをダブルクリックして、インストーラーの指示に従ってインストールするだけで完了です。
Tomcat 8のインストール
Apache Tomcatのサイトから、Tomcat8をダウンロードします。今回はtar.gz形式のアーカイブ「apache-tomcat-8.0.18.tar.gz」をダウンロードしました。
ダウンロード後、ターミナルを開いて好みの場所に展開します。
$ gzcat apache-tomcat-8.0.18.tar.gz | (cd ~/ ; tar xvpf - )
この段階で一端動くかどうか確認したほうが安心できます。JAVA_HOMEをJava 8を使うように設定してから、Tomcatを起動してみます。
$ export JAVA_HOME=$(/usr/libexec/java_home -v1.8)
$ cd ~/apache-tomcat-8.0.18/bin
$ ./startup.sh
ブラウザで「http://localhost:8080/」を表示し、以下の画面が表示されたら動いています。確認できたら./shutdown.shを実行して停止しておきましょう。
Tomcat 8の自動起動設定
Tomcatの自動起動設定に関しては、Install Tomcat on Mac OS Xに詳しく書かれている方法が、Java 8 & Tomcat 8でも使えます。簡単に概要を示すと、org.apache.tomcat.plistというlaunchctlの設定ファイルから、[Tomcat home]/bin/tomcat-launchd.shという起動用のラッパースクリプトを呼び出す事で実現します。
同サイトの設定ではTomcatを展開するディレクトリが/Library/Tomcatですが、ここでは/opt/home/tomcatであるとして説明したいと思います。
rootで以下の作業を行います。
# mkdir -p /opt/home
$ gzcat apache-tomcat-8.0.18.tar.gz | (cd /opt/home ; tar xvpf - )
$ cd /opt/home
$ chown -R _www apache-tomcat-8.0.18
$ chgrp -R _www apache-tomcat-8.0.18
$ ln -s /opt/home/apache-tomcat-8.0.18 tomcat
最後シンボリックリンクを作成しているのは、スクリプト内でパスの指定を簡単化するためです(Tomcatのバージョンアップが簡単になるというメリットもあります)。
tomcat-launchd.sh
以下のファイルを/opt/home/tomcat/binに作成します。
#!/bin/sh
#
# Wrapper for running Tomcat under launchd
# Required because launchd needs a non-daemonizing process
function shutdown()
{
$CATALINA_HOME/bin/shutdown.sh
/bin/rm $CATALINA_PID
}
function wait_for_death()
{
while /bin/kill -0 $1 2> /dev/null ; do
sleep 2
done
}
export JAVA_HOME=$(/usr/libexec/java_home -v1.8)
export CATALINA_PID=$CATALINA_HOME/logs/tomcat.pid
$CATALINA_HOME/bin/startup.sh
trap shutdown QUIT ABRT KILL ALRM TERM TSTP
sleep 2
wait_for_death `cat $CATALINA_PID`
chmod 755 tomcat-launchd.shで実行可能にしておきましょう。環境変数JAVA_HOMEは後述のplistで設定することもできますが、今回はこのスクリプトで直接指定しました。
org.apache.tomcat.plist
/Library/LaunchDaemonsに以下の内容で作成します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.apache.tomcat</string>
<key>Disabled</key>
<false/>
<key>OnDemand</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>ProgramArguments</key>
<array>
<string>/opt/home/tomcat/bin/tomcat-launchd.sh</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>CATALINA_HOME</key>
<string>/opt/home/tomcat</string>
<key>JAVA_OPTS</key>
<string>-Djava.awt.headless=true</string>
</dict>
<key>StandardErrorPath</key>
<string>/opt/home/tomcat/logs/tomcat-launchd.stderr</string>
<key>StandardOutPath</key>
<string>/opt/home/tomcat/logs/tomcat-launchd.stdout</string>
<key>UserName</key>
<string>_www</string>
</dict>
</plist>
tomcatをインストールしたパスが、/opt/home/tomcat ではない場合、該当する箇所を全部置換してください。またTomcatの実行ユーザーが、_wwwとなっていることに注意してください。
launchctlを実行し、自動起動可能にします。
sudo launchctl load -w /Library/LaunchDaemons/org.apache.tomcat.plist
この後、「http://localhost:8080」にアクセスして正しくTomcatが表示できれば成功です。念のため再起動後Tomcatが起動しているかどうかも確認しておきましょう。
トラブルシューティング
うまく動かない場合、以下の項目をチェックします。
Java 8を使ってTomcat 8が実行されているか
環境変数JAVA_HOMEが正しく設定されているかどうか確認してください。
パーミッションチェック
自動起動する場合、Tomcatの実行ユーザーの権限でTomcatディレクトリが読み書きできるか確認してください。_wwwユーザでTomcatを実行する場合、/opt/home/apache-tomcat-8.0.18のオーナーが_www、グループも_wwwになっている必要があります。
$ ls -lh
total 8
drwxr-xr-x 13 _www _www 442B 2 18 15:39 apache-tomcat-8.0.18/
lrwxr-xr-x 1 root wheel 20B 2 18 15:40 tomcat@ -> apache-tomcat-8.0.18
まとめ
Linuxの各ディストリビューションではコマンド一発で自動起動設定まで行っているので楽なのですが、Macの場合少し作業が必要となります。すこし面倒ですが、launchctlを使って自動起動する設定はこれ以外でも使う場面が多いので、一度慣れておけば今後も役に立つ知識となるでしょう。