Apache Tomcat 7.0.50 on Mavericks

19 日投開票の沖縄県名護市長選で,米軍普天間飛行場(同県宜野湾市)の名護市辺野古への移設反対を訴えた稲嶺進市長(68)が再選された。この結果は予想できた。だから,推察するに,選挙の前に政府は病弱な仲井真弘多知事を籠絡して強引に辺野古埋め立てを承認させたのだ。いくら県のトップが認めても地元が反対なら辺野古移設は不可能である。

ネットニュースに付いたコメントを見ていると,「沖縄県は米軍がいるおかげで政府から大金をもらっているくせに普天間基地移設問題でごねてさらにタカろうとしていやがる」などと思っているヤツがあまりに多いのに驚く。若者(バカ者)ならまだしも,四十代,五十代と思われる者が多い。日本人としてホント恥ずかしい。どうして他者の痛みに思いを馳せられないのだろうか。恥を知れと思う。かくして,いま沖縄県の一般の人たちは,自分が「内地人から差別されている」,「カネで懐柔すれば言うことを聞くと思われている」に類した「人格的」非抑圧感に苛まれている。なんで大和人は同じ日本の沖縄のことを理解しないのか,と。私が沖縄県民だったら独立運動を支援するだろう。もともと琉球処分で日本に併合されたわけで旧に帰するだけだ。

安倍総理,腹の中では,五万に満たない名護市民の選択にいたく傷ついたはずである。いずれにせよ,普天間基地移設問題は米軍がグアムに「転進」して終わりだと思う。

***

Mac OS 10.9 Mavericks on Mac mini 上の開発環境を整えているところである。まず,Xcode 5.0.2JDK7(Java SE Development Kit 7),GNU Emacs エディタを設置し,基本的なプログラミング環境はできた。この休日は Web アプリケーション開発環境として Apache Tomcat を導入した。

Tomcat はオープンソースの JavaServer Page / Servlet Container リファレンス実装である。私は仕事では,顧客予算と運用要件に応じて,自社製アプリケーションサーバ(高価だが高信頼性と完全なるサポートを提供できる)と半々くらいの割合で Tomcat(ソフトウェア自体は無償だが問題発生時のサポートに限界がある)を顧客システム構築に利用して来た。一方プライベートでは,— やっぱりタダだから — Tomcat 5.5 だけをこれまで長らく使用して来た。Tomcat 最新版は 8.0RC なのだが,サーバソフトウェアは少し枯れた版を使うほうがより安定しているだろうしインターネット上の情報量も多かろうと判断し,今回は Tomcat 7.0.50(以下,Tomcat7)を設置することにした。

Tomcat7 インストールはいたって簡単。Apache Tomcat サイトからバイナリアーカイブをダウンロードし運用ディレクトリに解凍し,環境変数を調整するだけである。Mavericks でも考え方はまったく同じ。ただし,最近の Mac OS に特化した運用調整事項があって,導入のメモをここに残しておく。

まず Tomcat7 バイナリアーカイブを取得し運用ディレクトリに格納する。

$ cd ~/var
$ wget -nH -nd http://ftp.meisei-u.ac.jp/mirror/apache/dist/tomcat/tomcat-7/v7.0.50/bin/apache-tomcat-7.0.50.tar.gz
$ sudo tar zxvf apache-tomcat-7.0.50.tar.gz -C /usr/local
$ sudo ln -sf /usr/local/apache-tomcat-7.0.50 /usr/local/tomcat7

最後のシンボリックリンクの設置は,ディレクトリ名称を短くしたいだけなので,必須ではない。あとは環境変数 JAVA_HOME 及び CATALINA_HOME を適切に設定すればよい。自分でコマンドを叩いて JDK をインストールしなければならない Linux や FreeBSD と違って,Mac OS 用 jdk-7u51-macosx-x64.dmg から JDK7 をインストールした場合,インストーラが勝手にリソースを格納してしまうので JAVA_HOME がどこにあるのかわからない。/System/Library/Frameworks/JavaVM.framework 下に対し,find コマンドで java_home コマンドを探し,これを実行すると JAVA_HOME のパスが得られる。

$ find /Sysytem/Library/Frameworks/JavaVM.framework -name java_home
/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home
$ /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

CATALINA_HOME は,上記のとおりにアーカイブ展開を行ったのならば /usr/local/tomcat7 となる。Bash シェルを使っているなら,.bash_profile もしくはそこから読み込んでいる .bashrc に以下を追加する。

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"
export CATALINA_HOME="/usr/local/tomcat7"

さて,追加した設定を活かすためファイルを再読み込みし,Tomcat7 を起動する。

$ cd ~/
$ . .bashrc
$ echo $JAVA_HOME $CATALINA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home /usr/local/tomcat7
$ su -m
# /usr/local/tomcat7/bin/catalina.sh start

ブラウザで http://localhost:8080/ にアクセスし Tomcat7 の ROOT 画面が出力されれば,サーバは無事起動したといえる。

20140120-tomcat7-root.png
Tomcat7 ROOT 画面

最後に,Tomcat7 の起動・停止を行うシェルスクリプト tomcatctl を掲げておく。引数によって start (or -s): 起動,stop (-t): 停止,restart (-r): 再起動,log (-l): ログの表示を行う。log 以外は,スーパユーザ権限で実行しなければならない。

#!/bin/sh
#
#  Tomcat 7.0.50 control for Mac OS X Mavericks
#  usage: tomcatctl { start(-s) | stop(-t) | restart(-r) | log(-l) }
#  2014(c) isao yasuda
#
 
# Environment Valuables
LANG=ja_JP.UTF-8
LC_ALL=ja_JP.UTF-8
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
CATALINA_HOME=/usr/local/tomcat7
CATALINA_OPTS="-Dfile.encoding=UTF-8"
export LANG LC_ALL JAVA_HOME CATALINA_HOME CATALINA_OPTS 
 
# Valuables for Tomcat7
startup="$CATALINA_HOME/bin/catalina.sh start"
shutdown="$CATALINA_HOME/bin/catalina.sh stop"
log_dir=$CATALINA_HOME/logs
logf=$log_dir/catalina.out
apache=/usr/sbin/apachectl
 
# Misc Valuables
user=`whoami`
ARGC=$#
 
# check executing user
rootchk () {
    if [ "$user" != "root" ]; then
        echo "must be a superuser."
        exit 1
    fi
}
 
# check argument num and display usage
usage () {
    if [ $ARGC -ne 1 ]; then
        echo "usage: `basename $0` [start(-s)|stop(-t)|restart(-r)|log(-l)]"
        exit 1
    fi
}
 
# Main procedure
usage
case "$1" in
    start | -s)
        rootchk
        $startup
        echo "wait..."
        sleep 10
        $apache restart
        ;;
    stop  | -t)
        rootchk
        $shutdown
        ;;
    restart | -r)
        rootchk
        $shutdown
        $startup
        echo "wait..."
        sleep 10
        $apache restart
        ;;
    log | -l)
        tail -100 -f $logf
        ;;
    *)
        echo "$1 operand invalid."
        usage
        ;;
esac