Hanaki's weblog

« OpenSSO Enterprise... | メイン | OpenSSO 日本語プロジェクトページ »

20081127 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 に配備する際に注意すべきことについて書きたいと思います。

説明のために、具体的なシナリオとして、以下のような手順でインストール、設定、配備を行うことにします。



1. Glassfish のインストール

Glassfish は、Sun download centerや、Glassfish のダウンロードページからダウンロードできます。
ダウンロードしたら、インストーラを起動して、画面の指示に従ってインストールを行ってください。 インストールが完了し、サーバーの起動を済ませたら、ブラウザで実際に確認してみます。
こんな画面が表示されていれば、OK です。



2. DSEE 6.3 のインストール

DSEE 6.3 は、こちらからダウンロードできます。 各選択肢については、以下のように選んで「View Downloads」をクリックします。 すると、次のような画面が表示されますので、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点です。



Posted by hanaki ( 11月 27日 2008年, 04:24:12 午後 JST ) Permalink 投稿されたコメント [0]

Trackback URL: http://blogs.sun.com/hanaki/entry/javaes_5_u1_%E3%81%AE_access
投稿されたコメント:

コメント

名前
メール
URL

投稿されたコメント

HTML文法 不許可