竹形誠司 ブログ
OpenSolaris    »トピック一覧
掲示板へのスパムが多いため、「ご質問」のコーナーはユーザー登録制とさせていただきました。お手数ですが、上の「新規ユーザーの登録」メニューより登録をお願いします。
帳票Web
アプリケーション

受注開発始めました
詳しくは こちら
竹形 誠司 著/ラトルズ刊
JSP帳票アプリケーション実践開発入門
JSP帳票アプリケーション
実践開発入門

JSP業務アプリケーション短期開発入門
JSP業務アプリケーション
短期開発入門

Java+MySQL+Tomcatで始めるWebアプリケーション構築入門
Java+MySQL+Tomcatで始めるWebアプリケーション構築入門

Java+MySQL+Tomcatで作る掲示板とブログ
Java+MySQL+Tomcatで作る
掲示板とブログ
Tomcat6.0のインストール
by 竹形 誠司[takegata]
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を入力します。
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を入力します。
</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 です。
## checkinstall スクリプトを実行中です。
## パッケージ情報を処理中です。
## システム情報を処理中です。
## ディスク領域の要件を確認中です。
## すでにインストール済みのパッケージとの重複を確認中です。

次のファイルは、すでにシステムにインストールされていますが、 現在、他
のパッケージが使用中です:
  /opt <属性変更のみ>

これらの重複しているファイルをインストールしますか [y,n,?,q] y
んー?、よくわかりませんが、y で。
## setuid/setgid を行うプログラムを検査中です。

このパッケージには、パッケージのインストール処理中にスーパーユーザーの
アクセス権で実行するスクリプトが含まれています。

<CSKtomcat> のインストールを継続しますか [y,n,?] y
たぶんSunの中の人が書いたスクリプトなんでしょうから y で。

Apache Tomcat 5.5.23 を <CSKtomcat> としてインストール中です。

(中略)

<CSKtomcat> のインストールに成功しました。
サービスに追加されたことを確認します。
# svcs -a|grep tomcat
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)になっちゃいましたね。さて、何が悪いのでしょう。
/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をセットしろ、と。ご丁寧に、セットのしかたまで書いてくれていますね。
# 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が動きました。一応、ブラウザからアクセスして確認しておきましょう。

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にします。
#!/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のサービスを一度無効にしてから、再び有効にします。
# svcadm disable csk-tomcat
# svcadm enable csk-tomcat
サービスの状態を確認しましょう。
# svcs -a|grep tomcat
online        17:42:09 svc:/application/csk-tomcat:CSKtomcat
オンラインになっていますね。ブラウザからも確認しましょう。存在しないページを指定するなどして、エラー画面を表示させると、Tomcatのバージョン6.0.16になっていることが分かります。

ちょっと気になったのは、Tomcatがrootで実行されるようになっていることです。これが良いのか悪いのか、私には意見を言うほどの見識がないのでとりあえずはそのままです。
投稿:竹形 誠司[takegata]/2008年 04月 21日 15時 28分 /更新:2008年 05月 09日 14時 10分