OpenSolarisにTomcatが入っていない件
OpenSolarisをインストールすると、ApacheやPostgreSQLもMySQLもデフォルトでインストールされていて、サービスを開始さえすれば使えるようになっているのに、Tomcatは入っていないんですよね。SunはJSP/Servletの提唱者なんですから、サーブレット・コンテナの1つも入れておけばいいのにと思うんですけど。CoolStack
SunはSolaris向けに最適化したCoolStackというパッケージを提供していて、その中にTomcatもあるのですが、収録されているバージョンがいまだにTomcat5.5なんですよね。私が使っている範囲では、5.5と6.0でそれほど大きな違いはないのですが、5.0が既にサポート終了になったりしているので、なるべく新しいバージョンを入れておきたいですよね。CoolStackのドキュメントを読むと、Tomcat自体は特にSolaris向けにチューニングしているわけではなく、SMFでの登録に必要な設定が含まれているとのことです。そういうことなら自分でTomcat6.0を入れてみようってんで、やってみました。
SMF
Tomcatを入れること自体はそれほど難しくないのですが、問題はサービスとして起動するための設定ですね。Solaris10からSMFという仕組みが導入され、マニフェストにxml形式で依存関係や起動方法を記述するようになりました。ところが、このマニフェストの書き方がよく分かりません。そこで、まずSunのサイトからCoolStackを落としてTomcat5.5をインストールしてみました。まず、bz2ファイルを解凍してpkgファイルを取り出します。
# bunzip2 CSKtomcat_1.2_x86.pkg.bz2
このpkgファイルはSolaris10用らしく、OpenSolarisの場合はpkgtransで変換するように、とCoolStackのページに説明があったので、その通りにします。# pkgtrans CSKtomcat_1.2_x86.pkg /var/tmp
The following packages are available:
1 CSKtomcat Apache Tomcat 5.5.23
(i386) 5.5.23
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: 1
「パッケージを選びなさい」と言っているので1を入力します。The following packages are available:
1 CSKtomcat Apache Tomcat 5.5.23
(i386) 5.5.23
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: 1
Transferring <CSKtomcat> package instance
次にpkgaddを実行します。# pkgadd -d /var/tmp
The following packages are available:
1 CSKtomcat Apache Tomcat 5.5.23
(i386) 5.5.23
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: 1
ここでも「パッケージを選びなさい」といわれるので、1を入力します。The following packages are available:
1 CSKtomcat Apache Tomcat 5.5.23
(i386) 5.5.23
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: 1
</var/tmp> 中のパッケージインスタンス <CSKtomcat> を処理中です。
Apache Tomcat 5.5.23(i386) 5.5.23
Apache
Do you also want to configure csk-tomcat service [y,n,?,q] y
「サービスを設定したいか」と聞かれます。もちろん y です。Apache Tomcat 5.5.23(i386) 5.5.23
Apache
Do you also want to configure csk-tomcat service [y,n,?,q] y
## checkinstall スクリプトを実行中です。
## パッケージ情報を処理中です。
## システム情報を処理中です。
## ディスク領域の要件を確認中です。
## すでにインストール済みのパッケージとの重複を確認中です。
次のファイルは、すでにシステムにインストールされていますが、 現在、他
のパッケージが使用中です:
/opt <属性変更のみ>
これらの重複しているファイルをインストールしますか [y,n,?,q] y
んー?、よくわかりませんが、y で。## パッケージ情報を処理中です。
## システム情報を処理中です。
## ディスク領域の要件を確認中です。
## すでにインストール済みのパッケージとの重複を確認中です。
次のファイルは、すでにシステムにインストールされていますが、 現在、他
のパッケージが使用中です:
/opt <属性変更のみ>
これらの重複しているファイルをインストールしますか [y,n,?,q] y
## setuid/setgid を行うプログラムを検査中です。
このパッケージには、パッケージのインストール処理中にスーパーユーザーの
アクセス権で実行するスクリプトが含まれています。
<CSKtomcat> のインストールを継続しますか [y,n,?] y
たぶんSunの中の人が書いたスクリプトなんでしょうから y で。このパッケージには、パッケージのインストール処理中にスーパーユーザーの
アクセス権で実行するスクリプトが含まれています。
<CSKtomcat> のインストールを継続しますか [y,n,?] y
Apache Tomcat 5.5.23 を <CSKtomcat> としてインストール中です。
(中略)
<CSKtomcat> のインストールに成功しました。
# svcs -a|grep tomcat
disabled 17:14:25 svc:/application/csk-tomcat:CSKtomcat
サービスに追加されていますね。ただし、無効な状態になっています。これを有効にします。disabled 17:14:25 svc:/application/csk-tomcat:CSKtomcat
# svcadm enable csk-tomcat
もう一度サービスの状態を確認します。# svcs -a|grep tomcat
maintenance 17:16:40 svc:/application/csk-tomcat:CSKtomcat
あらら、要保守(maintenance)になっちゃいましたね。さて、何が悪いのでしょう。maintenance 17:16:40 svc:/application/csk-tomcat:CSKtomcat
/var/svc/log/application-csk-tomcat:CSKtomcat.log を見ると、次のようなエラーメッセージがあります。
[ 4月 21 17:14:25 Disabled. ]
[ 4月 21 17:14:25 Rereading configuration. ]
[ 4月 21 17:16:39 Enabled. ]
[ 4月 21 17:16:39 Executing start method ("/opt/coolstack/lib/svc/method/svc-csktomcat st
art"). ]
JAVA_HOME not set properly. Set the JAVA_HOME environment variable
Set the JAVA_HOME using the following commands :
# svccfg -s svc:/application/csk-tomcat:CSKtomcat setenv -m start JAVA_HOME /usr/java
# svccfg -s svc:/application/csk-tomcat:CSKtomcat setenv -m stop JAVA_HOME /usr/java
Then refresh and restart the instance
[ 4月 21 17:16:40 Method "start" exited with status 96. ]
ふーむ、そうですか。環境変数でJAVA_HOMEをセットしろ、と。ご丁寧に、セットのしかたまで書いてくれていますね。[ 4月 21 17:14:25 Rereading configuration. ]
[ 4月 21 17:16:39 Enabled. ]
[ 4月 21 17:16:39 Executing start method ("/opt/coolstack/lib/svc/method/svc-csktomcat st
art"). ]
JAVA_HOME not set properly. Set the JAVA_HOME environment variable
Set the JAVA_HOME using the following commands :
# svccfg -s svc:/application/csk-tomcat:CSKtomcat setenv -m start JAVA_HOME /usr/java
# svccfg -s svc:/application/csk-tomcat:CSKtomcat setenv -m stop JAVA_HOME /usr/java
Then refresh and restart the instance
[ 4月 21 17:16:40 Method "start" exited with status 96. ]
# svccfg -s svc:/application/csk-tomcat:CSKtomcat setenv -m start JAVA_HOME /usr/java
# svccfg -s svc:/application/csk-tomcat:CSKtomcat setenv -m stop JAVA_HOME /usr/java
# svcadm disable csk-tomcat
# svcadm enable csk-tomcat
# svcs -a|grep tomcat
online 17:30:35 svc:/application/csk-tomcat:CSKtomcat
はい、これでTomcat5.5が動きました。一応、ブラウザからアクセスして確認しておきましょう。# svccfg -s svc:/application/csk-tomcat:CSKtomcat setenv -m stop JAVA_HOME /usr/java
# svcadm disable csk-tomcat
# svcadm enable csk-tomcat
# svcs -a|grep tomcat
online 17:30:35 svc:/application/csk-tomcat:CSKtomcat
Tomcat6.0に入れ替え
SMFが呼び出すtomcatの起動スクリプトは/opt/coolstack/lib/svc/method/svc-csktomcat です。この中を見てみると、冒頭部分が次のようになっています。#!/sbin/sh
#
# Modified for tomcat in CSKtomcat package of Cool Stack
# This file should reside in /opt/coolstack/lib/svc/method
. /lib/svc/share/smf_include.sh
TOMCAT_HOME=/opt/coolstack/tomcat
TOMCAT_HOMEにTomcat6.0をインストールしたディレクトリを指定してやればよさそうです。まず、Tomcat6.0をダウンロードして/optの下に展開しておきましょう。現時点の最新バージョンは6.0.16です。展開したディレクトリは/opt/apache-tomcat-6.0.16です。起動スクリプトを修正して、このディレクトリをTOMCAT_HOMEにします。#
# Modified for tomcat in CSKtomcat package of Cool Stack
# This file should reside in /opt/coolstack/lib/svc/method
. /lib/svc/share/smf_include.sh
TOMCAT_HOME=/opt/coolstack/tomcat
#!/sbin/sh
#
# Modified for tomcat in CSKtomcat package of Cool Stack
# This file should reside in /opt/coolstack/lib/svc/method
. /lib/svc/share/smf_include.sh
JAVA_HOME=/usr/java
TOMCAT_HOME=/opt/apache-tomcat-6.0.16
Tomcatのサービスを一度無効にしてから、再び有効にします。#
# Modified for tomcat in CSKtomcat package of Cool Stack
# This file should reside in /opt/coolstack/lib/svc/method
. /lib/svc/share/smf_include.sh
JAVA_HOME=/usr/java
TOMCAT_HOME=/opt/apache-tomcat-6.0.16
# svcadm disable csk-tomcat
# svcadm enable csk-tomcat
サービスの状態を確認しましょう。# svcadm enable csk-tomcat
# svcs -a|grep tomcat
online 17:42:09 svc:/application/csk-tomcat:CSKtomcat
オンラインになっていますね。ブラウザからも確認しましょう。存在しないページを指定するなどして、エラー画面を表示させると、Tomcatのバージョン6.0.16になっていることが分かります。online 17:42:09 svc:/application/csk-tomcat:CSKtomcat
ちょっと気になったのは、Tomcatがrootで実行されるようになっていることです。これが良いのか悪いのか、私には意見を言うほどの見識がないのでとりあえずはそのままです。
投稿:竹形 誠司[takegata]/2008年 04月 21日 15時 28分
/更新:2008年 05月 09日 14時 10分