2008年 11月 27日 木曜日
JavaES 5 U1 の Access Manager を Solaris 10 U6 上で Glassfish に配備する際の注意事項
今回は、JavaES 5 Update 1 の Access Manager (バージョン 7.1) を Solaris 10 Update 6 (Solaris 10 の最新のアップデートリリース) 上で、Glassfish に配備する際に注意すべきことについて書きたいと思います。
説明のために、具体的なシナリオとして、以下のような手順でインストール、設定、配備を行うことにします。
- プラットフォームは、Solaris 10 U6 for x86(64 bit) とする。
- まず、 Glassfish v2 Update release 2(Sun Java System Application Server 9.1 Update 2) をインストールする。
- 次に、Sun Java System Directory Server Enterprise Edition version 6.3(以下 DSEE 6.3) をインストールする。
- 最後に、JavaES 5 Update 1 のインストーラを用いて、同梱されている Access Manager 7.1 (以下 AM 7.1) をインストールし、amconfig コマンドを用いて、Glassfish に配備する。
1. Glassfish のインストール
Glassfish は、
Sun download centerや、
Glassfish のダウンロードページからダウンロードできます。
ダウンロードしたら、インストーラを起動して、画面の指示に従ってインストールを行ってください。
インストールが完了し、サーバーの起動を済ませたら、ブラウザで実際に確認してみます。
こんな画面が表示されていれば、OK です。
2. DSEE 6.3 のインストール
DSEE 6.3 は、
こちらからダウンロードできます。
各選択肢については、以下のように選んで「View Downloads」をクリックします。
- Step1 Select Component: Directory Server Enterprise Edition 6.x
- Step2 Select Version: 6.3
- Step3 Select Delivery Type: Compressed Archive(ZIP)
- Step4 Select Platform: Solaris 10 64x86
すると、次のような画面が表示されますので、Installation Type が "Full Install" となっている箇所のリンクをクリックします。(画面で紫色になっている箇所です。)
すると、次のような画面になりますので、再度 Platform を選択し、(Solaris x64) License Agreement のボックスをチェックして、「Continue」をクリックします。
新たに表示される画面で、DSEE.6.3.Solaris10-X86_AMD64-full.tar.gz のリンクをクリックするとダウンロードできます。
ダウンロードが終わったら、適当なディレクトリにファイルを置いて、解凍します。
# mkdir /export/DSEE
# cp DSEE.6.3.Solaris10-X86_AMD64-full.tar.gz /export/DSEE
# cat DSEE.6.3.Solaris10-X86_AMD64-full.tar.gz | gunzip | tar xf -
解凍後は、このような感じになっているはずです。
# ls /export/DSEE
DSEE_Directory_Editor
DSEE_Identity_Synchronization_for_Windows
DSEE_ZIP_Distribution
LICENSE.txt
Legal
README.txt
#
DSEE 6.3 をインストールします。(ここでは、Directory Editor と Identity Sync 以外の全てのコンポーネントをインストールします。)
# cd DSEE_ZIP_Distribution/
# ./dsee_deploy install -i /opt/dsee63
英語のライセンステキストが表示されるので、最後まで表示されるまでリターンキーを押し、
Do you accept the license terms ? : に対して、「yes」と入力。
これで、/opt/dsee63 に、DSEE6.3に含まれているディレクトリサーバーなどがインストールされました。
Access Manager の配備用に、インスタンスの作成、起動およびサフィックスの作成を済ませておきます。
# cd /opt/dsee63
# ./dsadm create /export/dsins1
# ./dsadm start /export/dsins1
# ./dsconf create-suffix dc=example,dc=com
# ./dsconf import /opt/dsee63/ds6/ldif/Example.ldif dc=example,dc=com
(ここでは念のため、空のサフィックス dc=example,dc=com を作ったあとに、Example.ldif をインポートしています。)
これで、ディレクトリサーバーの準備が整いました。
3. JavaES5 U1 のインストーラを用いて AM 7.1 をインストール
次に、JavaES 5 U1 のインストーラを起動して、AM 7.1 をインストールします。
インストーラを起動する際には、ja_JP.UTF-8 ロケールで起動することをお勧めします。
なぜその方がよいかはあとの項目で説明します。
諸事情により、ja ロケールなど、UTF-8 以外のロケールで起動したい場合は、それで進めてもかまいません。(あとでワークアラウンドで対処します。)
ソフトウェアコンポーネントの選択画面では、Access Manager 7.1 の全てのコンポーネントを選択し、Directory Server Enterprise Edition 6.2 のコンポーネントのチェックは全て外します。
「次へ」をクリックすると、Web コンテナの選択画面が表示されますので、「互換性のある Web コンテナが、このシステム上にすでにインストール済み」を選択します。
さらに、依存関係の警告画面が表示されますので、ここでは「リモートマシンにインストールされている Directory Server Enterprise Edition 6.2 を使用する」を選択します。
注意:これは、あくまで、DSEE6.2 のインストールを回避するためであり、実際には、ローカルにある DSEE6.3 を使います。
これで、画面を先に進めていくと、アップグレードの必要がある共有コンポーネントが表示されます。その中に、Cacao も含まれていますが、インストール済みと必要なバージョンについて見てみると、必要なバージョンの方が古い(パッチのリビジョンが低い)ことに気づくかと思います。
JavaES 5 U1 がリリースされた時点では、JavaES 5 U1 に同梱されている Cacao のパッチのリビジョン(123896-03)が最も新しかったために、その想定のもとにインストール時には常に Cacao のパッケージを入れ替える動作になっていました。
しかしながら、Solaris 10 U6 は、JavaES 5 U1 以降にリリースされましたので、パッチのリビジョンがより新しい(123896-05) Cacao が同梱されているわけですが、JavaES 5 U1 のインストーラはその想定外のことに対処できていないわけです。結果として、古いリビジョン (123896-03) の Cacao に入れ替わってしまいます。
とりあえずここでは、画面を先に進めて、設定タイプの選択画面では、「あとで設定」を選択し、インストールを完了させます。
4. amconfig を使って、AM 7.1 を設定し、Glassfish に配備する
次に、amconfig を使って、AM 7.1 を設定し、Glassfish に配備します。
/opt/SUNWam/bin/ にある amsamplesilent を環境に合わせて編集し、
"amconfig -s amsamplesilent"
と実行すればよいわけですが、
ここでストップ!!!このまま実行してはいけません!
もし、そのままコマンドを実行すると、途中で以下のようなエラーが出て設定に失敗してしまいます。
:
:
Creating the agent security materials in /etc/opt/SUNWmfwk/config/security
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
No Java runtime found.
Error : Calling [genkey]
Cleaning up config in /etc/opt/SUNWmfwk/config
amconfig : Looking for registered module...
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
Cannot find property: [cacao.embedded].
:
:
先ほど説明しましたように、JavaES 5 U1 によって、Cacao が古いリビジョンに入れ替わってしまってます。そのため、cacaoadm のコマンドが動きません。
試しに、以下のコマンドを実行してみてください。
# cacaoadm status
Cannot find property: [cacao.embedded].
こんな結果が返ってくるはずです。
この問題を解決するには、もう一度、パッチ 123896-05 をインストールして、Cacao のリビジョンを Solaris 10 U6 に同梱されているリビジョンに戻してあげる必要があります。(sparc 版の場合は、123893-05 です。)
注意事項1: JavaES 5 U1 のインストーラによって Cacao のパッチのリビジョンがダウングレードしてしまったため、Cacao の最新のリビジョンのパッチを再度インストールする。
必要なパッチは、
Sunsolveよりダウンロードできます。
# patchadd 123896-05
:
(中略)
:
Patch 123896-05 has been successfully installed.
See /var/sadm/patch/123896-05/log for details
Patch packages installed:
SUNWcacaort
#
試しにさきほどと同じコマンドを実行してみます。
# cacaoadm status
default instance is DISABLED at system startup.
default instance is not running.
今度はこのようにステータス情報が正しく返ってくるはずです。
これで、Cacao の状態は正常に戻ったので、amconfig コマンドを使って、
Access Manager の設定と配備を行うことができますが、
その前に注意すべきことがあります。
amconfig コマンドを使って、Access Manager の設定を行っている過程の最後の方で、
/etc/opt/SUNWam/config/com.sun.cmm.am.xml ファイルの中に、SUNWamsdkconfig パッケージのバージョン情報や、インストールされた日付などが書き込まれます。
amconfig 実行前のファイル:
<parameter>
<param-name>RevisionNumber</param-name>
<param-value>AM_VERSION</param-value>
</parameter>
<!--
The InstalledProduct's Installation Date in milliseconds.
-->
<parameter>
<param-name>InstallDate</param-name>
<param-value>AM_INSTDATE</param-value>
</parameter>
amconfig 実行後のファイル:
-->
<parameter>
<param-name>RevisionNumber</param-name>
<param-value>7.1,REV=06.12.15.12.35</param-value>
</parameter>
<!--
The InstalledProduct's Installation Date in milliseconds.
-->
<parameter>
<param-name>InstallDate</param-name>
<param-value>11月 27 2008 13:36</param-value>
</parameter>
ここで、InstallDate の日付の文字列に「月」という日本語が含まれています。これがちょっとくせものです。
JavaES 5 U1 のインストーラが、SUNWamsdkconfig を pkgadd したときのインストール日時の値が、/var/sadm/pkg/SUNWamsdkconfig/pkginfo の INSTDATE の値に書き込まれます。
INSTDATE=11月 27 2008 13:36
この日付の値は、インストーラを ja ロケールで起動していれば、EUC エンコーディングで、ja_JP.UTF-8 ロケールで起動していれば、UTF-8 エンコーディングで書き込まれます。
そして、amconfig の実行中に、この INSTDATE の値が、
/etc/opt/SUNWam/config/com.sun.cmm.am.xml に書き込まれます。
ところで、/etc/opt/SUNWam/config/com.sun.cmm.am.xml の最初の行を見ると、
<?xml version='1.0' encoding='utf-8'?>
という風に、"このファイルは UTF-8 エンコーディングで書かれてますよ。" と宣言されています。
つまり、JavaES 5 U1 のインストーラを ja_JP.UTF-8 ロケールで起動していれば、
日付の値が UTF-8 エンコーディングで書き込まれるため、そのまま amconfig を実行したときに何も問題が起こらないわけです。
さきほど、インストーラを ja_JP.UTF-8 ロケールで起動することをお勧めします。と書いたのはこういった理由があるからです。
もし、インストーラを ja ロケールで起動していたとすると、日付の値は EUC エンコーディングになっているため、そのまま amconfig コマンドを実行すると、
/etc/opt/SUNWam/config/com.sun.cmm.am.xml のヘッダーは、UTF-8 で定義されているのに、中身が EUC エンコーディングになっている、という矛盾によって、次のようなエラーが発生して、amconfig は途中で失敗してしまいます。
Cannot execute command deploy: Invalid byte 1 of 1-byte UTF-8 sequence.
このエラーに対処するには、あらかじめ、/etc/opt/SUNWam/config/com.sun.cmm.am.xml のヘッダーのエンコーディングの定義を適切な値に変えておく必要があります。
例えば、次のように編集します。
<?xml version='1.0' encoding='eucJP'?>
このように編集した上で、amconfig -s amsamplesilent を実行すると、ja ロケール環境でも amconfig による設定が完了します。
:
:
Deploying Node Agent in Cacao from descriptor '/etc/opt/SUNWmfwk/xml/com.sun.mfwk.xml'
Registering Node Agent in Cacao from descriptor '/etc/opt/SUNWmfwk/xml/com.sun.mfwk.xml'
amconfig : Looking for registered module...
amconfig : Registration successful !
amconfig : Restarting cacao. Please wait...
amconfig : Restart of cacao was successful !
#
注意事項2: JavaES 5 U1 のインストーラを ja_JP.UTF-8 ロケール以外で起動した場合には、amconfig を実行する前に、/etc/opt/SUNWam/config/com.sun.cmm.am.xml のヘッダーでのエンコーディングの定義を適切な値に変えておく。
5. 配備ができたことを確認する
さて、amconfig コマンドが完了したら、glassfish を再起動して、AM 7.1 が正しく配備できたかどうかを確認してみます。
が、その前に、またまた注意事項があります!
asenv.conf(アプリケーションサーバーをインストールしたディレクトリの下の config ディレクトリに含まれているファイル) の中の次の行を変更する必要があります。
< AS_NSS="/opt/SUNWappserver/lib"
> AS_NSS="/usr/lib/mps/secv1:/opt/SUNWappserver/lib"
この変更を行わずに glassfish を再起動すると、
[#|2008-11-27T15:51:42.027+0900|SEVERE|sun-appserver9.1|javax.enterprise.system.container.web|_ThreadID=10;_ThreadName=main;_RequestID=dd8f3ed3-c2f2-4847-bed0-c89e2003d13a;|WEB0207: 仮想サーバー server で Web コンテキスト StandardEngine[com.sun.appserv].StandardHost[server].StandardContext[/amserver] の起動中にエラーが発生しました
LifecycleException: java.lang.UnsatisfiedLinkError: no jss4 in java.library.path
このように、jss4 が見つかりません、というエラーが server.log に出力されます。
実際に、amserver コンソールにアクセスしても、次のようなエラーになります。
このエラーは、AS_NSS で定義された /opt/SUNWappserver/lib ディレクトリに libjss4.so が存在しないために発生します。libjss4.so は /usr/lib/mps/secv1 に存在するため、そのパスを
AS_NSS の値に追加する必要があります。
そのため、上記で述べたように asenv.conf を変更する必要があるわけです。
注意事項3: asenv.conf の AS_NSS に libjss4.so が存在するパスを指定してから、glassfish を起動する。
asenv.conf を修正してから、再度 glassfish を起動すると。。。。
このように、Access Manager のログインページが表示されます。
amadmin でログインしてみると、以下のように正しくページが表示されるはずです。
これで、Access Manager 7.1 を Solaris 10 U6 上で、Glassfish に配備することができました。
もう一度注意事項を以下に記しておきます。全部で3点です。
- 注意事項1: JavaES 5 U1 のインストーラによって Cacao のパッチのリビジョンがダウングレードしてしまうので、JavaES 5 U1 のインストールの後に、Cacao の最新のリビジョンのパッチを再度インストールする。
- 注意事項2: JavaES 5 U1 のインストーラを ja_JP.UTF-8 ロケール以外で起動した場合には、amconfig を実行する前に、/etc/opt/SUNWam/config/com.sun.cmm.am.xml のヘッダーでのエンコーディングの定義を適切な値に変えておく。
- 注意事項3: amconfig による設定が終わったら、asenv.conf の AS_NSS に libjss4.so が存在するパスを指定してから、glassfish を起動する。
Posted by hanaki
( 11月 27日 2008年, 04:24:12 午後 JST )
Permalink
Trackback URL: http://blogs.sun.com/hanaki/entry/javaes_5_u1_%E3%81%AE_access