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)