CentOS 5.3/Apache/tomcat/Axis2

CentOSAxis2を入れた。ちょっとハマってしまったのは以下の2点。

  • ファイアーウォール/iptablesの設定でhttp(s)のポートを開けること。これはLinuxに慣れている人なら普通のことなのかも。
  • JAVA_HOMEの設定を確実にすること。パッケージでインストールされるtomcat 5.5の起動シェルスクリプトで設定ファイルが二つあったため、設定漏れが出た。(/etc/tomcat5/tomcat5.conf と /etc/sysconfig/tomcat5)

以下メモです。

CentOS

$ uname -a
Linux centos002 2.6.18-128.el5 #1 SMP Wed Jan 21 10:44:23 EST 2009 i686 i686 386 GNU/Linux
$ cat /etc/redhat-release
CentOS release 5.3 (Final)
$ cat /proc/version
Linux version 2.6.18-128.el5 (mockbuild@builder16.centos.org) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-44)) #1 SMP Wed Jan 21 10:44:23 EST 2009

Apache

  • CentOSに最初から入っていた。

$ rpm -q httpd
httpd-2.2.3-22.el5.centos.2

  • ApacheのWebサイトではApache HTTP Server 2.2.14が最新で、ちょっとだけ古いみたいだったが、とりあえず使う。
  • /usr/sbinにコマンドが、/etc/httpd/confに設定ファイルがあった。

/usr/sbin/apachectl
/usr/sbin/httpd
/etc/httpd/conf/httpd.conf

  • /etc/httpd/conf/httpd.confに以下の行を追加

ServerName ip-address:80

# chkconfig httpd on
# chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

iptables設定

  • サーバ内で telnet localhost 80 とやると接続OK。
  • しかし、他のマシンからは接続できない。ファイアウォールがあるためのようだ。
  • iptablesコマンドでもできるのだろうが、面倒だったのでCentOSのデスクトップにログインして、[システム] [管理] [ファイアウォールの設定]でHTTPとHTTPSを通すように設定変更した。
  • 以下のコマンドは試してないけど、コマンドでやるならこんな感じ?

iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
#-Aで最後に追加だと駄目な気がする。-Iで途中に挿入しないと駄目?
/etc/init.d/iptables save
service iptables restart

yumへproxyの設定

  • CentOSのデスクトップでソフトウェアアップデーターやパッケージマネージャーが失敗する。
  • /etc/yum.conf にプロキシの設定を追加する。

proxy=http://proxy:port/

java

  • 二つ入っているみたい。
  • Axis2は「JDK 1.5 or later」が必要。

# /usr/java/default/bin/java -version
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) Server VM (build 14.2-b01, mixed mode)


# /usr/bin/java -version
java version "1.4.2"
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-44)

Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

tomcat

# chkconfig tomcat5 on
# chkconfig --list tomcat5
tomcat5 0:off 1:off 2:on 3:on 4:on 5:on 6:off

  • /etc/httpd/conf.d/proxy_ajp.confに以下の行を定義する。

ProxyPass /tomcat/ ajp://localhost:8009/
ProxyPass /examples/ ajp://localhost:8009/jsp-examples/
ProxyPass /axis2/ ajp://localhost:8009/axis2/

  • /etc/tomcat5/tomcat5.confのJAVA_HOMEを修正する。

#JAVA_HOME="/usr/lib/jvm/java"
JAVA_HOME="/usr/java/default"

Axis2

  • axis2-1.5-war.zip から axis2.war を取り出して、以下に入れる。
    /usr/share/tomcat5/webapps/
    (※後でEclipse WTPとの整合性でaxis2-1.4.1-war.zipにバージョンを落とした)

Axis2 NG→OK

  • http://server/axis2/ にアクセスし、validate というリンクで動作を確認するとInternal Errorになってしまう。
  • 以下のエラーが出ている。(/usr/share/tomcat5/log/catalina.out)

java.lang.NoClassDefFoundError: org.apache.axis2.engine.AxisConfiguration

  • しかし、/usr/share/tomcat5/webapps/axis2/WEB-INF/lib/axis2-kernel.jar には対応するクラスが入っているように見えるが??
  • 1.4.2のJavaが起動してしまっているような感じ。

# /etc/rc.d/init.d/tomcat5 version
Server version: Apache Tomcat/5.5.23
Server built: Jul 27 2009 05:23:29
Server number: 5.5.23.0
OS Name: Linux
OS Version: 2.6.18-128.el5
Architecture: i386
JVM Version: 1.4.2
JVM Vendor: Free Software Foundation, Inc.

  • bash -x /etc/rc.d/init.d/tomcat5 restart を実行してスクリプトの内容を確かめてみる。
  • /etc/tomcat5/tomcat5.conf の後に /etc/sysconfig/tomcat5 が実行されていた。こちらのJAVA_HOMEが優先されていたみたいだ。
  • /etc/sysconfig/tomcat5 のJAVA_HOMEも修正する。

#JAVA_HOME="/usr/lib/jvm/java"
JAVA_HOME="/usr/java/default"

  • Axis2が動いた。
  • /usr/bin/tomcat5 というスクリプトでは動作しないみたいだが、使わないので放置。