2013年10月10日木曜日

WebSphere 8.5 の Windows Service 化

WebSphere8.5 Network Deployment を 完全 Windows Service 化

はじめに:

JBoss AS 7 を Windows Service 化 に続き、WebSphere 8.5 Network Deployment の Node Agent と Application Server を Windows Service 化 してみます
更に、Windows サービス化した後に、Windows の SC コマンドを使って、Application ServerサービスとNode Agentサービスとの間に依存性(Depend)の設定をし、Windows OSを起動した時に、自動的に正しい順番でNode AgentとApplication serverが起動してくるようにしたいと思います

前提条件:

  • Windows OSは、Windows 2008 Server R2 64-bit
    Websphere8.5は、D:\app\IBM\WebSphere\AppServerにインストールされている
  • Profileは、AppSrv01でセットアップされていて、AppSrv01のNode Agentはnodeagentという名前でセットアップ済み (D:\app\IBM\WebSphere\AppServer\profiles\AppSrv01)
  • このnodeagent配下でserver1, server2, server3という3のApplication Serverが稼働している

Websphere8.5 インストール フォルダ構成の概要:

D:\app\IBM\WebSphere\AppServer\
+---bin
|       WASService.exe     [*1]
|
+---profiles
    +---AppSrv01
    |   +---servers     [*2]
    |       +---nodeagent

    |       +---server1
    |       +---server2
    |       +---server3
    |
    +---Dmgr01
        +---servers
            +---dmgr     [*3]
[*1] Windowsサービス化に使用するWebsphereのコマンド
[*2] 今回Windowsサービス化する対象となる、ノードエージェント(nodeagent)とアプリケーションサーバーたち(server1, server2, server3) がインストールされている場所
[*3] Deployment manager(dmgr)のインストール場所 (Deployment ManagerはWebsphere 8.5をインストール時に自動的にWindowsサービス化されています)

A. Windowsサービス化の手順:

1. まずはコマンドプロンプトを開き、WASService.exe がある D:\app\IBM\WebSphere\AppServer\にcd
cd D:\app\IBM\WebSphere\AppServer
2. ノードエージェント(nodeagent) をWindowsサービス化
WASService.exe -add "Node Agent" -serverName nodeagent -profilePath D:\app\IBM\WebSphere\AppServer\profiles\AppSrv01 -wasHome D:\app\IBM\WebSphere\AppServer -logRoot D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01 -logFile D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01\nodeagent_startServer.log -restart true -startType automatic
[※ WASService.exe のオプションについて]
  • addオプションで指定した文字列に "IBMWAS85Service - " を付けたものが、登録されるWindows サービス名になります 
  • serverNameオプションはApplication Serverの名前を指定してください 
  • logRootとlogFileは、Windowsサービス登録時やサービス開始・停止時のログになりますログの場所はWebsphereのマニュアルの場所を踏襲して、今回はそれぞれ次のようにしました
logRootは、D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01

logFileは、<Application Server名>__startServer.log 

3. Application Server(server1) をWindowsサービス化
WASService.exe -add "Server1" -serverName server1 -profilePath D:\app\IBM\WebSphere\AppServer\profiles\AppSrv01 -wasHome D:\app\IBM\WebSphere\AppServer -logRoot D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01 -logFile D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01\server1_startServer.log -restart true -startType automatic
4. 残り2つのApplication Server(server2, server3) をWindowsサービス化
WASService.exe -add "Server2" -serverName server2 -profilePath D:\app\IBM\WebSphere\AppServer\profiles\AppSrv01 -wasHome D:\app\IBM\WebSphere\AppServer -logRoot D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01 -logFile D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01\server2_startServer.log -restart true -startType automatic
WASService.exe -add "Server3" -serverName server3 -profilePath D:\app\IBM\WebSphere\AppServer\profiles\AppSrv01 -wasHome D:\app\IBM\WebSphere\AppServer -logRoot D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01 -logFile D:\app\IBM\WebSphere\AppServer\logs\manageprofiles\AppSrv01\server3_startServer.log -restart true -startType automatic

 この結果、4つのWindowsサービスが登録されていることが確認できれば成功です
IBMWAS85Service - Node Agent
IBMWAS85Service - Server1
IBMWAS85Service - Server2
IBMWAS85Service - Server3
Windowsサービスのリストから確認する場合は、それぞれ次のようにDisplay Nameでリストに表示されていると思います
IBM WebSphere Application Server V8.5 - Node Agent
IBM WebSphere Application Server V8.5 - Server1
IBM WebSphere Application Server V8.5 - Server2
IBM WebSphere Application Server V8.5 - Server3

 

B. Windowsサービス起動順の設定: 

Windows サービスへの登録が確認できたら、サービスの起動順を設定します。
Node Agentを先に起動してからApplication Serverを起動してくるように起動順序を設定します。
起動順を設定しておかないと、OS再起動時にNode AgentとApplication Serverのサービス起動がが同時に開始されてしまっては、Application Serverが正常に起動してきませんね。


1. コマンドプロンプトを開きます(カレントディレクトリはどこでもOKです)
2. Windowsのsc.exeコマンドから、server1のWindowsサービスをnodeagentのWindowsサービスに依存させる
SC config "IBMWAS85Service - Server1" depend= "IBMWAS85Service - Node Agent"
※ depend=の後には、スペースを入れる必要がありますのでご注意を!

3. server2、server3のWindowsサービスも同様に、nodeagentのWindowsサービスに依存させる
SC config "IBMWAS85Service - Server2" depend= "IBMWAS85Service - Node Agent"
SC config "IBMWAS85Service - Server3" depend= "IBMWAS85Service - Node Agent"


※ もう一回、depend=の後には、スペースを入れる必要がありますのでご注意を!

依存関係の設定が完了したらサービスプロパティで確認しましょう

  • IBMWAS85Service - Server1のプロパティ
Server1はNode Agentに依存している(Server1を起動するためには、Node AgentのWindowsサービスが起動している必要がある)ことを確認できます。
Server2、Server3のプロパティも同様に確認してみましょう


  • IBMWAS85Service - Node Agentのプロパティ





反対にNode Agentのプロパティでは、Node AgentがServer1, Server2、Server3を起動するための前提条件となっていることが確認できます。

稼働確認項目: 

最後に稼働確認して、完了です。
  • IBMWAS85Service - Node Agent が起動できること
  • IBMWAS85Service - Server1 が起動できること (この時Node Agentサービスが停止している場合、Node Agentサービスを起動してから、Server1サービスが起動してくること)
  • IBMWAS85Service - Server2 が起動できること (この時Node Agentサービスが停止している場合、Node Agentサービスを起動してから、Server2サービスが起動してくること)
  • IBMWAS85Service - Server3 が起動できること (この時Node Agentサービスが停止している場合、Node Agentサービスを起動してから、Server3サービスが起動してくること)
  • IBMWAS85Service - Node Agent を停止できること (このときServer1, 2, 3のサービスが起動している場合、これらのサービスを停止した後にNode Agentサービスが停止すること)
  • OSを再起動してNode Agent、Server1, 2, 3のサービスがすべて自動的に開始される

お疲れ様でしたー



2013年10月4日金曜日

Oracle Enterprise Manager (OracleDBConsole) がアクセスできない!? 原因解明編



あれから半年:

Oracle Enterprise Manager (OracleDBConsole) がアクセスできない!?
え?IEだと見れない? じゃあFireFoxでアクセスするかね

という 3時間を無駄にした日 から約半年。。。



理由が分かった:

Windowsの更新プログラムによりセキュリティ強化が図られたことが理由だった。

1024 ビット未満の暗号キーをブロックする更新プログラム(起源KB: 2661254) を適用すると、Windows レジストリにEnableWeakSignatureFlags が付与され、これが1024 ビット未満のRSA鍵を利用した証明書を無効としていたことが判明しました。
一方で私の環境はと言えば、、、OEMはテストDBということもあり、証明書のファイルサイズはデフォルトである 512bit のままであった。 よって無効な証明書として、間違いなく通信をブロックされてしまっていた。


FireFoxで問題なく閲覧できていたのは、おそらくこのレジストリの設定を使用していないためだったのでしょう。

で、やったこと:

暫定的な回避策としては、クライアント(つまりIEでOEMにアクセスしたいマシン上)でcertutil -setreg コマンドを実行し、EnableWeakSignatureFlagsのレジストリを変更
コマンドプロンプトから普通に実行した例:
c:\> certutil -setreg chain\EnableWeakSignatureFlags 8
c:\>certutil -setreg chain\EnableWeakSignatureFlags 8
Software\Microsoft\Cryptography\OID\EncodingType 0\CertDllCreateCertificateChainEngine\Config\EnableWeakSignatureFlags:

新しい値:
  EnableWeakSignatureFlags REG_DWORD = 8
CertUtil: -setreg コマンドは正常に完了しました。
変更を有効にするには、CertSvc サービスを再起動しなければなりません。
実行後、IEを再起動してください


でもほんとうは。。。:

今回の方法は、本当の意味での解決ではないですね
証明書をもっとセキュアにするのが良いでしょうね




参考URL:

Microsoft Support: セキュリティアドバイザリ
TechNet: