CentOS上でのTomcat 6のインストール
February 3, 2010 – 3:43 pmRed5のサーバーサイドのプログラミングを目標に、JavaベースのWebプログラミングの学習を始めた。まず開発環境を整えなければということで、Tomcat6をサーバ(CentOS5)上にインストールした。このエントリーでは、ダウンロードから動作環境を整えるまでの一連の作業記録をメモしておいた。
Tomcatのダウンロード: Tomcatのオフィシャルサイト( http://tomcat.apache.org/ ) からBinary Distributionsの「Core」コンポーネントをダウンロードした。因みに、ダウンロード時点での最新版は、6.0.24 (2010年1月21日時点)、ミラーサイトの1つrikenのftpサイトからのダウンロードした。
ダウンロード時のログは以下:
# wget http://ftp.riken.jp/net/apache/tomcat/tomcat-6/v6.0.24/bin/apache-tomcat-6.0.24.tar.gz --2010-01-31 10:36:03-- http://ftp.riken.jp/net/apache/tomcat/tomcat-6/v6.0.24/bin/apache-tomcat-6.0.24.tar.gz ftp.riken.jp をDNSに問いあわせています... 134.160.38.1 ftp.riken.jp|134.160.38.1|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 6104116 (5.8M) [application/x-gzip] `apache-tomcat-6.0.24.tar.gz' に保存中 100%[======================================>] 6,104,116 2.50M/s 時間 2.3s 2010-01-31 10:36:05 (2.50 MB/s) - `apache-tomcat-6.0.24.tar.gz' へ保存完了 [6104116/6104116]
ダウンロードファイルの解凍: 次に、ダウンロードしたtar.gzファイルを以下の要領で解凍した:
# tar xvfz apache-tomcat-6.0.24.tar.gz apache-tomcat-6.0.24/bin/catalina.sh apache-tomcat-6.0.24/bin/digest.sh ------
解凍後、得られたディレクトリapach-tomcat-6.0.24を tomcat6 に変更し、/opt 配下に展開した。/opt/tomcat6以下のdirectory 構成をまとめると以下のようになる:
/opt/tomcat6 ---- ( 4 administrative files)
LICENSE NOTICE RELEASE-NOTES RUNNING.txt
-- + bin ----- catalina-tasks.xml
--- jsvc.tar.gz
--- tomcat-native.tar.gz
--- (3 jar files) bootstrap commons-daemon tomcat-juli
--- (7 sh files) catalina setclasspath shutdown startup
tool-wrapper version
--- (7 bat files) (省略)
-- + conf ----- (3 xml files) web server tomcat-users context
---- catalina.policy
---- (2 properties files) catalina logging
-- + lib ----- ( 16 jar files )
annotations-api catalina-ant catalina-ha catalina-tribes
catalina el-api jasper-el jasper-jdt
jasper jsp-api servlet-api tomcat-coyote
tomcat-dbcp tomcat-i18n-es tomcat-i18n-fr tomcat-i18n-ja
-- + logs ----- (empty)
-- + temp ----- safeToDelete.tmp
-- + webapps --+ ROOT ---+ WEB-INF ---- web.xml
----- build.xml
----- index.html
----- index.jsp
----- tomcat.svg
--+ docs ----- (省 略)
--+ examples ----+ WEB-INF ----- web.xml
----+ classes ---(7 class files)
CookieExample HelloWorldExample RequestHeaderExample
RequestInfoExample RequestParamExample SessionExample
ServletToJsp
---(7 java files)
class file に同じ
---(5 properties files)
LocalStrings LocalStrings_en LocalStrings_es
LocalStrings_fr LocalStrings_pt
---+ cal ----- (4 class files)
Entries Entry JspCalender TableBean
----- (4 java files)
---+ (14 directories)
chat checkbox colors compressionFilters dates error
examples fileters jsp2 listners num sessions util
validators
----+ jsp ---+ applet --- Clock2.java
---- debug-taglib.tld
---- example-taglib.tld
----+ jsp2 ---- jsp2-example-taglib.tid
----+ tags ---- (4 tag files)
displayProduct helloWorld panel xhtmlbasic
--+ host-manager ----- manager.xml
----+ META-INF ---- context.xml
----+ WEB-INF ---- web.xml
----+ images ---- (9 gif files)
--+ manager -----( 3 jsp files )
401 sessionDetail sessionsList
----- status.xsd
----- xform.xsl
----+ META-INF ---- context.xml
----+ WEB-INF ---- web.xml
----+ images ---- (7 gif files)
-- + work ----- (empty)
Tomcat 管理用のユーザー tomcat を登録するとともに、tomcat6の所有権をtomcatに変更、以降、今回インストールした Tomcat の管理を ユーザー tomcat に任せることになる:
#useradd -d /opt/tomcat6 -s /sbin/nologin tomcat #chown -R tomcat. /opt/tomcat6
Tomcatのデーモン化と起動スクリプトの作成: @ITの解説サイト(「安全のためにTomcatを理解し、動作させる」)を参考にTomcatの起動スクリプトを作成した。
起動スクリプト作成に先立ち、サーバコンポーネントのビルドに必要な環境で取り込まれていなかった autoconf, gcc, を yum を用いてインストールした。今回インストールしたパッケージは以下のものである:
Packages Installed:
glibc-devel-2.5-42.el5_4.3.i386
gcc-4.1.2-46.el5_4.2.i386
glibc-headers-2.5-42.el5_4.3.i386
libgomp-4.4.0-6.el5.i386
autoconf-2.59-12.noarch
kernel-headers-2.6.18-164.11.1.el5.centos.plus.i386
imake-1.0.2-3.i386
インストールしたTomcatの配下にある「/bin」ディレクトリ内に格納されている「jvc.tar.gz」を一時ディレクトリ「/tmp」に移動し、これを解凍することにより作成されたディレクトリ「jsvc-src」内で autoconfを用いてconfigure スクリプトを作成する
< 一時ディレクトリ「/tmp」への jvc.tar.gz の移動と解凍>
# cp jsvc.tar.gz /tmp/. # cd /tmp # tar xfvz jsvc.tar.gz jsvc-src/ jsvc-src/man/ jsvc-src/native/ jsvc-src/support/ jsvc-src/CHANGES.txt jsvc-src/INSTALL.txt jsvc-src/Makedefs.in jsvc-src/Makefile.in jsvc-src/configure jsvc-src/configure.in jsvc-src/man/README jsvc-src/man/fetch.sh jsvc-src/man/jsvc.1.xml jsvc-src/native/Makefile.in jsvc-src/native/Tomcat.sh jsvc-src/native/Tomcat5.sh jsvc-src/native/arguments.c jsvc-src/native/arguments.h jsvc-src/native/debug.c jsvc-src/native/debug.h jsvc-src/native/dso-dlfcn.c jsvc-src/native/dso-dyld.c jsvc-src/native/dso.h jsvc-src/native/help.c jsvc-src/native/help.h jsvc-src/native/home.c jsvc-src/native/home.h jsvc-src/native/java.c jsvc-src/native/java.h jsvc-src/native/jsvc-unix.c jsvc-src/native/jsvc.h jsvc-src/native/location.c jsvc-src/native/location.h jsvc-src/native/replace.c jsvc-src/native/replace.h jsvc-src/native/signals.c jsvc-src/support/apfunctions.m4 jsvc-src/support/apjava.m4 jsvc-src/support/apsupport.m4 jsvc-src/support/buildconf.sh jsvc-src/support/config.guess jsvc-src/support/config.sub jsvc-src/support/install.sh
<ディレクトリjsvc-srcへの移動 と autoconf による configure スクリプトの作成>
# cd jsvc-src # autoconf # ls CHANGES.txt Makedefs.in autom4te.cache configure.in native INSTALL.txt Makefile.in configure man support
< configureスクリプトの実行 >
# sh configure *** Current host *** checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking cached host system type... ok *** C-Language compilation tools *** checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking for ranlib... ranlib *** Host support *** checking C flags dependant on host system type... ok *** Java compilation tools *** checking for javac... /usr/java/default/bin/javac checking wether the Java compiler (/usr/java/default/bin/javac) works... yes checking for jar... /usr/java/default/bin/jar gcc flags added *** Writing output files *** configure: creating ./config.status config.status: creating Makefile config.status: creating Makedefs config.status: creating native/Makefile *** All done *** Now you can issue "make"
<ビルドの実行>
# make make -C native all make[1]: ディレクトリ `/tmp/jsvc-src/native' に入ります gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c jsvc-unix.c -o jsvc-unix.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c arguments.c -o arguments.o arguments.c: In function ‘arguments’: arguments.c:251: 警告: unused variable ‘temp’ gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c debug.c -o debug.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c dso-dlfcn.c -o dso-dlfcn.o dso-dlfcn.c:51: 警告: function declaration isn’t a prototype gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c dso-dyld.c -o dso-dyld.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c help.c -o help.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c home.c -o home.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c java.c -o java.o java.c:49: 警告: function declaration isn’t a prototype java.c: In function ‘java_init’: java.c:122: 警告: implicit declaration of function ‘dso_error’ gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c location.c -o location.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c replace.c -o replace.o gcc -g -O2 -DOS_LINUX -DDSO_DLFCN -DCPU=\"i386\" -I/usr/java/default/include -I/usr/java/default/include/linux -Wall -Wstrict-prototypes -c signals.c -o signals.o ar cr libservice.a arguments.o debug.o dso-dlfcn.o dso-dyld.o help.o home.o java.o location.o replace.o signals.o ranlib libservice.a gcc -ldl -lpthread jsvc-unix.o libservice.a -o ../jsvc make[1]: ディレクトリ `/tmp/jsvc-src/native' から出ます
< jsvc のowner を tomcat に変更し、 /opt/tomcat6 に移動 >
# chown tomcat. jsvc # mv -f jsvc /opt/tomcat6/bin
自動起動させるためのスクリプトの作成
#vi /etc/rc.d/init.d/jsvc
#!/bin/sh
#
# chkconfig: - 80 20
# description: jsvc
# Source function library.
. /etc/init.d/functions
JAVA_HOME=/usr/java/default
CATALINA_HOME=/opt/tomcat6
TOMCAT_USER=tomcat
TMP_DIR=/tmp
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
PIDFILE=/var/run/tomcat.pid
LOCKFILE=/var/lock/subsys/tomcat
DAEMON=$CATALINA_HOME/bin/jsvc
start(){
#
# Start Tomcat
#
echo -n "Starting jsvc: "
$DAEMON \
-pidfile $PIDFILE \
-user $TOMCAT_USER \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-Djava.io.tmpdir=$TMP_DIR \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile '&1' \
$CATALINA_OPTS \
-cp $CLASSPATH \
org.apache.catalina.startup.Bootstrap
#
# To get a verbose JVM
#-verbose \
# To get a debug of jsvc.
#-debug \
RETVAL=$?
if [ $RETVAL = 0 ]; then
echo_success
touch $LOCKFILE
else
echo_failure
fi
echo
}
stop(){
#
# Stop Tomcat
#
echo -n "Shutting down jsvc: "
$DAEMON \
-stop \
-pidfile $PIDFILE \
org.apache.catalina.startup.Bootstrap
RETVAL=$?
if [ $RETVAL = 0 ]; then
echo_success
rm -f $PIDFILE $LOCKFILE
else
echo_failure
fi
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status $DAEMON
RETVAL=$?
;;
*)
echo $"Usage: jsvc {start|stop|restart|status}"
exit 1
;;
esac
ここで作成したスクリプトファイルに実行権限を与え、chkconfigを実行して起動時のON/OFF設定を行なう:
#chmod +x /etc/init.d/jsvc #chkconfig jsvc on
ここまでで一応Tomcatの設定が完了する。これで、以下の要領で、Tomcatをインストールしたサーバー名あるいはipアドレスに8088ポートを介して接続するとブラウザ上にTomcatのページが出て、Tomcatが動作していることが確認できる。
http://ip-address:8080/
ApacheとTomcatの連携: Tomcat 単体でも、上記したようにクライアントのブラウザからTomcatにアクセスすることは可能である。しかし、実際の運用では、クライアント側からみてTomcatの動作するサーバーが異なるドメイン上にあり、ファイアウォールでポート8080を介したアクセスができないことが多い。そこで、TomcatとApacheを連携させ、ユーザ側にとっては、Tomcatを意識しないでWebサービスを受ける環境を作る必要がある。
Tomcat6では、Apache側のhttpd.confファイルに以下を付け加えることにより簡単に、ApacheとTomcatの連携を図ることができる。
ProxyPass /tomcat/ ajp://localhost:8009/
この設定を行って、http://host-name/tomcat/ で、tomcatのページにアクセスすることができる。
ただ、Apache側でバーチャルホストを運用している場合、上記設定では、全てのバーチャルホストに対してtomcatのページがアクティブになってしまう。この場合、同じくhttpd.confファイルでTomcatとの連携を図ろうとするバーチャルホストの設定にProxyPasの部分を付け加えることにより行うことができる。下記の例では、ホストを仮にtomcat.sample.comとし、このドキュメントルートにtomcat側のドキュメントルートが来るように設定した場合のバーチャルホストの設定例である;
<VirtualHost *:80>
・・・・
ServerName tomcat.sample.com
ProxyPass / ajp://localhost:8009/
</VirtualHost>
これでApacheの再起動、そしてTomcatを起動させれば、このホストから
以上で、Tomcat上でServlet/JSPの動作・開発環境が整えることができた。
かなり長くなってしまったので、Tomcat上でServletあるいはJSPのテストについては、次回ということにする。
3 Trackback(s)