0.はじめに
久ぶりにIBM製品の紹介です。
今回はIHSとWAS Libertyを使用してWEB/APサーバを構築し、ブラウザから443ポート経由でAPの画面を表示するのが目標です。
IIM、IHS、Libertyのインストール方法や役立つコマンドや機能もナレッジとして紹介出来たらと思います。
1.ダウンロード
まずはIBMのInstallation Manager(略してIIM)をダウンロードします。
IIMはこちらのサイトからダウンロード可能です。
最新のIIMのバージョンが1.10.1.0
だったため、こちらを使用していきます。
2. IIMインストール
2-1.OS情報
今回はVMWare上に構築した、RHEL9を使用しています。
# cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="9.5 (Plow)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="9.5"
# 以下省略
2-2. ファイル解凍
先ほどダウンロードしたIIMのインストーラはzip形式のため解凍します。
# ls -l agent.installer.linux.gtk.x86_64_1.10.1000.20241118_1329.zip
-rw-r--r--. 1 root root 149992646 12月 27 09:09 agent.installer.linux.gtk.x86_64_1.10.1000.20241118_1329.zip
# unzip -q agent.installer.linux.gtk.x86_64_1.10.1000.20241118_1329.zip
# ls -la
合計 147124
drwxr-xr-x. 11 root root 4096 12月 28 23:17 .
drwxr-xr-x. 4 root root 27 12月 28 22:40 ..
drwxr-xr-x. 2 root root 64 12月 28 23:17 META-INF
drwxr-xr-x. 2 root root 130 11月 18 13:41 Offerings
-rw-r--r--. 1 root root 149992646 12月 27 09:09 agent.installer.linux.gtk.x86_64_1.10.1000.20241118_1329.zip
-rwxr-xr-x. 1 root root 4642 11月 18 13:41 con-disk-set-inst.sh
drwxr-xr-x. 3 root root 50 11月 18 13:41 configuration
drwxr-xr-x. 13 root root 122 11月 18 13:41 documentation
-rwxr-xr-x. 1 root root 80385 11月 23 2016 groupinst
-rwxr-xr-x. 1 root root 311 11月 18 13:41 groupinst.ini
-rwxr-xr-x. 1 root root 80385 11月 23 2016 groupinstc
-rwxr-xr-x. 1 root root 356 11月 18 13:41 groupinstc.ini
-rwxr-xr-x. 1 root root 80385 11月 23 2016 install
-rwxr-xr-x. 1 root root 309 11月 18 13:41 install.ini
-rwxr-xr-x. 1 root root 266 11月 18 13:41 install.xml
-rwxr-xr-x. 1 root root 80385 11月 23 2016 installc
-rwxr-xr-x. 1 root root 354 11月 18 13:41 installc.ini
drwxr-xr-x. 3 root root 17 11月 18 13:41 jre_11.0.23.20240702
drwxr-xr-x. 2 root root 4096 11月 18 13:41 license
drwxr-xr-x. 2 root root 4096 11月 18 13:41 native
drwxr-xr-x. 10 root root 65536 11月 18 13:41 plugins
-rwxr-xr-x. 1 root root 9909 5月 22 2024 readme.html
-rwxr-xr-x. 1 root root 278 11月 18 13:41 repository.config
-rwxr-xr-x. 1 root root 10718 11月 18 13:41 repository.xml
-rwxr-xr-x. 1 root root 360 11月 18 13:41 silent-install.ini
drwxr-xr-x. 2 root root 70 11月 18 13:41 tools
-rwxr-xr-x. 1 root root 367 11月 18 13:41 user-silent-install.ini
-rwxr-xr-x. 1 root root 80385 11月 23 2016 userinst
-rwxr-xr-x. 1 root root 313 11月 18 13:41 userinst.ini
-rwxr-xr-x. 1 root root 80385 11月 23 2016 userinstc
-rwxr-xr-x. 1 root root 358 11月 18 13:41 userinstc.ini
2-3. インストール
インストールにはGUIでインストールするinstall
コマンドと、コマンドでサイレントインストールするinstallc
の2種類があります。
今回はサイレントかつパスなども特に変更せずそのままインストールしようかと思います。
デフォルトのインストールパスは/opt/IBM/InstallationManager
となります。
もしインストールパスを変更したい場合は、-installationDirectory
オプションでインストールディレクトリを変更できます。
例として/usr/IBM/InstallationManager
にインストールしたい場合は、-installationDirectory /usr/IBM/InstallationManager
のようなイメージです。
# ./installc -acceptLicense -showProgress
25% 50% 75% 100%
------------------|------------------|------------------|------------------|
............................................................................
/opt/IBM/InstallationManager/eclipse ディレクトリーに com.ibm.cic.agent_1.10.1000.20241118_1329 がインストールされました。
インストールが問題なければ上記のようなメッセージが表示されます。
インストールパス配下にtools
というディレクトリがあるため、移動しインストールしたプログラムの一覧を確認します。
# cd /opt/IBM/InstallationManager/eclipse/tools;pwd
/opt/IBM/InstallationManager/eclipse/tools
# ls -l
合計 168
-rwxr-xr-x. 1 root root 80385 12月 28 23:31 imcl
-rw-r--r--. 1 root root 509 12月 28 23:31 imcl.ini
-rwxr-xr-x. 1 root root 80385 12月 28 23:31 imutilsc
-rw-r--r--. 1 root root 513 12月 28 23:31 imutilsc.ini
# ./imcl listInstalledPackages -verbose
[共有]
共有リソース・ディレクトリー:
[パッケージ・グループ]
名前: IBM Installation Manager
インストール・ディレクトリー: /opt/IBM/InstallationManager/eclipse
翻訳: ドイツ語 (de), ノルウェー語 (no), フィンランド語 (fi), ロシア語 (ru), クロアチア語 (hr), ポルトガル語 (ブラジル) (pt_BR), フランス語 (fr), ハンガリー語 (hu), 中国語 (繁体字) (zh_TW), 中国語 (繁体字) (zh_HK), スロバキア語 (sk), スロベニア語 (sl), スウェーデン語 (sv), 韓国語 (ko), ギリシャ語 (el), 英語 (en), イタリア語 (it), ヘブライ語 (iw), 中国語 (簡体字) (zh), スペイン語 (es), チェコ語 (cs), アラビア語 (ar), タイ語 (th), 日本語 (ja), ポーランド語 (pl), デンマーク語 (da), オランダ語 (nl), トルコ語 (tr)
アーキテクチャー 64 ビット
[パッケージ]
名前: IBM Installation Manager (com.ibm.cic.agent)
バージョン: 1.10.1 (1.10.1000.20241118_1329)
リポジトリー: /work/iim
フィーチャー:
なし
フィックス:
なし
ロールバック・バージョン:
なし
問題なくIIMが表示されることを確認できました。
2-4. 資格情報の保存
本作業は必須ではないですが、毎回パスワードの入力が大変なため資格情報を補完するファイルの作成を行います。
imutilsc saveCredential
コマンドで資格情報をファイルに保存することができます。
各オプションの内容は以下の通りです。
-
-url
:リポジトリのURLを入力します。今回はIBMのドキュメントに記載の複合リポジトリのURLを設定します。 -
-userName
:自身のIBMアカウントのIDを入力 -
-userPassword
:自身のIBMアカウントのパスワードを入力 -
-secureStorageFile
:資格情報を保存するためのファイルパスを入力
以下のオプションはどちらか1つとなります。予め資格情報ファイルにかけるパスワードは考えておきましょう。
-
-masterPasswordFile
:資格情報を保護するためのパスワードの外部ファイル化。./master_password_file.txt
のような形でファイルを作成し、中身にパスワードを入力しておきましょう。 -
-password
:資格情報を保護するためのパスワードをコマンドで直接指定できます。セキュリティなど気にしなくてよいのであればこちらで大丈夫でしょう。
# echo "Password" > master_password_file.txt
# ./imutilsc saveCredential \
-url https://www.ibm.com/software/repositorymanager/V9WASBase \
-userName test@test.com \
-userPassword Password \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt
資格情報がセキュア・ストレージ・ファイルに正常に保存されました。
# ls -l
合計 176
-rw-r--r--. 1 root root 956 12月 29 00:02 credentials.stg
-rwxr-xr-x. 1 root root 80385 12月 28 23:31 imcl
-rw-r--r--. 1 root root 509 12月 28 23:31 imcl.ini
-rwxr-xr-x. 1 root root 80385 12月 28 23:31 imutilsc
-rw-r--r--. 1 root root 513 12月 28 23:31 imutilsc.ini
-rw-r--r--. 1 root root 13 12月 29 00:01 master_password_file.txt
以上でIIMの設定、準備周りは完了です。
3. IHSインストール・設定
3-1. インストールリストの確認
まずはインストールするリポジトリから対象を出力しましょう。
imcl listAvailablePackages
コマンドに先ほど設定した資格情報のファイルパスなどを渡しましょう。
# _REPO_URL=https://www.ibm.com/software/repositorymanager/V9WASBase
# ./imcl listAvailablePackages \
-repositories ${_REPO_URL} \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt
com.ibm.java.jdk.v8_8.0.3000.20160526_1317
com.ibm.java.jdk.v8_8.0.3010.20160830_1018
com.ibm.java.jdk.v8_8.0.3011.20160909_1138
com.ibm.java.jdk.v8_8.0.3012.20160926_0717
com.ibm.java.jdk.v8_8.0.3020.20161207_0843
com.ibm.java.jdk.v8_8.0.3021.20161207_0751
com.ibm.java.jdk.v8_8.0.3022.20161219_1105
# 省略
com.ibm.java.jdk.v8_8.0.8035.20241125_0150
# 省略
com.ibm.websphere.IHS.v90_9.0.0.20160526_1854
com.ibm.websphere.IHS.v90_9.0.1.20160906_0049
# 省略
com.ibm.websphere.IHS.v90_9.0.5020.20240605_1405
非常に出力が長いですが、ここで注目する所は、com.ibm.java.jdk.v8
やcom.ibm.websphere.IHS.v90
といった_
で区切られた手前の場所です。
ここがインストールするべき対象のパッケージ名となります。
このパッケージ名を指定してインストールを行います。
なお、IHS、Plugin、Libertyなど全てIBM Javaが必須ですので一緒にインストールを行います。
# ./imcl install com.ibm.websphere.IHS.v90 com.ibm.java.jdk.v8 \
-repositories ${_REPO_URL} \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt \
-installFixes all \
-acceptLicense \
-showProgress
25% 50% 75% 100%
------------------|------------------|------------------|------------------|
............................................................................
/opt/IBM/HTTPServer ディレクトリーに com.ibm.websphere.IHS.v90_9.0.5020.20240605_1405 がインストールされました。
/opt/IBM/HTTPServer ディレクトリーに com.ibm.java.jdk.v8_8.0.8035.20241125_0150 がインストールされました。
IIM上からもインストールの確認ができました。
# ./imcl listInstalledPackages
com.ibm.cic.agent_1.10.1000.20241118_1329
com.ibm.java.jdk.v8_8.0.8035.20241125_0150
com.ibm.websphere.IHS.v90_9.0.5020.20240605_1405
IHSやIBM Javaのバージョンも問題なさそうです。
# /opt/IBM/HTTPServer/bin/apachectl -v
Server version: IBM_HTTP_Server/9.0.5.20 (Unix)
Server built: Apr 18 2024 10:53:25
# /opt/IBM/HTTPServer/java/8.0/bin/java -version
java version "1.8.0_431"
Java(TM) SE Runtime Environment (build 8.0.8.35 - pxa6480sr8fp35-20241105_01(SR8 FP35))
IBM J9 VM (build 2.9, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20240926_78736 (JIT enabled, AOT enabled)
OpenJ9 - 8ce0d57a2f6
OMR - 8eaf1a20f
IBM - dd9cff8)
JCL - 20241016_01 based on Oracle jdk8u431-b10
3-2. IHSの起動停止
IHSのインストールが完了したので、早速試しに起動停止してみたいと思います。
今回は全てrootユーザで実行するので、rootユーザの~/.bash_profile
に以下の情報を追記します。
export PATH=/opt/IBM/HTTPServer/bin:/opt/IBM/HTTPServer/gsk8/bin:$PATH
export LD_LIBRARY_PATH=/opt/IBM/HTTPServer/gsk8/lib64:/opt/IBM/HTTPServer/lib:$LD_LIBRARY_PATH
3-2-1. IHSの起動
起動停止ともに単純ですが、以下のコマンドを実行するだけです。
# apachectl start
psコマンドで確認すると起動しています。
# ps -ef | grep http
root 51100 1 0 00:34 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -k start
nobody 51101 51100 0 00:34 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -k start
nobody 51102 51100 0 00:34 ? 00:00:00 /opt/IBM/HTTPServer/bin/httpd -d /opt/IBM/HTTPServer -k start
http://ipアドレス
にアクセスすると初期ページが確認できます。
3-2-2. IHSの停止
停止はオプションをstop
に変更するだけです。
# apachectl stop
3-3. IHSのSSL化
3-3-1. 鍵の取得
私の記事では毎度お馴染みですが、Let's Encrypt
を使用してIHSをSSL化したいと思います。
まずは鍵ファイル格納用のディレクトを作成します。
# cd /opt/IBM/HTTPServer;pwd
/opt/IBM/HTTPServer
# mkdir ssl
作成したsslディレクトリには以下のファイルを格納しておきましょう。
-
privkey.pem
:Let's Encrypt
の秘密鍵 -
cert.pem
:Let's Encrypt
のSSL証明書 -
chain.pem
:Let's Encrypt
の中間証明書 -
ca.cer
:Let's Encrypt
のルート証明書をca.cer
で保存(ISRG Root X1はこちらで保存可能)
3-3-2. 鍵の作成
現在のssl
ディレクトリ配下は以下のようなファイル構成になっていると思います。
# ls -la
合計 20
drwxr-xr-x. 2 root root 72 12月 29 00:57 .
drwxr-xr-x. 26 root root 4096 12月 29 00:41 ..
-rw-r--r--. 1 root root 1970 12月 29 00:45 ca.cer
-rw-r--r--. 1 root root 1306 12月 1 23:23 cert.pem
-rw-r--r--. 1 root root 1566 12月 1 23:23 chain.pem
-rw-r--r--. 1 root root 241 12月 1 23:23 privkey.pem
早速鍵を作成していきます。
まずはキーストアファイル
と呼ばれる鍵を入れる箱を作成します。
パスワードの箇所は任意の値に変更してください。
オプションを1か所だけ解説すると、-stash
とはkey.kdb
のキーファイルを開くためのパスワードが暗号化された形式で格納されるファイル作成するオプションになります。
# gsk8capicmd_64 -keydb -create -db key.kdb -pw "Password" -stash
# ls -l key.*
-rw-------. 1 root root 144 12月 29 01:00 key.crl
-rw-------. 1 root root 144 12月 29 01:00 key.kdb
-rw-------. 1 root root 144 12月 29 01:00 key.rdb
-rw-------. 1 root root 193 12月 29 01:00 key.sth
続いて各証明書をキーストアファイル
に格納していきます。
# gsk8capicmd_64 -cert -add -db key.kdb -stashed -file ca.cer
# gsk8capicmd_64 -cert -add -db key.kdb -stashed -file chain.pem
秘密鍵はそのままインポートすることができない(確か)ため、一度サーバ証明書と結合させ、pfx
形式にしてからインポートを行います。
# openssl pkcs12 -password pass:Password -export -inkey privkey.pem -in cert.pem -out server.pfx
# gsk8capicmd_64 -cert -import -db server.pfx -pw Password -target key.kdb -stashed
一度ここで鍵の中身を確認してみたいと思います。
# gsk8capicmd_64 -cert -list -db key.kdb -stashed
証明書が見つかりました
* デフォルト, - 個人, ! トラステッド, # secret key
! "CN=ISRG Root X1,O=Internet Security Research Group,C=US"
! "CN=E5,O=Let's Encrypt,C=US"
- CN=*.motuni.work
# gsk8capicmd_64 -cert -details -db key.kdb -stashed -label "CN=*.motuni.work"
ラベル : CN=*.motuni.work
鍵サイズ : 256
バージョン : X509 V3
シリアル : 0338ea5602b51ddbbb286ab6eb654c37dadd
発行者 : "CN=E5,O=Let's Encrypt,C=US"
所有者 : CN=*.motuni.work
次の日付以降 : 2024年12月1日 22:25:10:JST
次の日付以前 : 2025年3月1日 22:25:09:JST
# 以下省略
ちゃんと表示できており問題ないですが、せっかくなのでラベル等も付与してわかりやすくしたいと思います。
# gsk8capicmd_64 -cert -rename -db key.kdb -stashed -label "CN=*.motuni.work" -new_label ssl-cert-202412
# gsk8capicmd_64 -cert -setdefault -db key.kdb -stashed -label ssl-cert-202412
無事ラベル名を変更し、デフォルトの証明書を変更できました。
# gsk8capicmd_64 -cert -list -db key.kdb -stashed
証明書が見つかりました
* デフォルト, - 個人, ! トラステッド, # secret key
! "CN=ISRG Root X1,O=Internet Security Research Group,C=US"
! "CN=E5,O=Let's Encrypt,C=US"
*- ssl-cert-202412
3-3-3. httpd.confの修正
最後にhttpd.conf
へ今作成したSSLの鍵情報の設定を行いたいと思います。
httpd.conf
は以下にあります。
# cd /opt/IBM/HTTPServer/conf;pwd
/opt/IBM/HTTPServer/conf
# ls -la httpd.conf
-rwxr-xr-x. 1 root root 30480 12月 29 00:19 httpd.conf
下記設定をhttpd.conf
に追加後、IHSを再起動します。
+ LoadModule rewrite_module modules/mod_rewrite.so
+ LoadModule ibm_ssl_module modules/mod_ibm_ssl.so
+ Listen 443
#SSLCheckCertificateExpiration 30
+ <VirtualHost *:443>
#ServerName VM-RHEL01
+ SSLEnable
+ SSLServerCert ssl-cert-202412
#Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
+ </VirtualHost>
+ KeyFile /opt/IBM/HTTPServer/ssl/key.kdb
+ SSLDisable
ドメインではなくIPアクセスなので証明書エラーになっていますが、ちゃんとSSL通信でアクセスできていることが確認できました!
4. Pluginのインストール
インストール前にここでいうプラグインとはなんぞやという方もいるので少しだけ解説します。
名称はIBM HTTP Server for WebSphere Application Server 用プラグイン
といい、現場ではWebSphere Plugin
と呼ばれたりしています。
IHS と WASの間でリクエストのルーティングを管理するためのモジュールという役割を担っているのが本プラグインとなります。
ちなみにですが、IHSやプラグインはあくまでWASのおまけという扱いのため単品でのサポートはしておらず、あくまでWASとセットで使うことが前提のMWとなっています。
4-1. インストール
インストールの流れはIHSと全く同じです。
imcl listAvailablePackages
コマンドで同様にパッケージ名を確認します。
# ./imcl listAvailablePackages \
-repositories ${_REPO_URL} \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt
com.ibm.websphere.PLG.v90_9.0.0.20160526_1854
com.ibm.websphere.PLG.v90_9.0.1.20160906_0049
com.ibm.websphere.PLG.v90_9.0.2.20161108_1719
# 省略
com.ibm.websphere.PLG.v90_9.0.5020.20240605_1405
こちらは、com.ibm.websphere.PLG.v90
がパッケージ名になります。
IHS同様にIBM Javaが必須ですので一緒にインストールを行います。
# ./imcl install com.ibm.websphere.PLG.v90 com.ibm.java.jdk.v8 \
-repositories ${_REPO_URL} \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt \
-installFixes all \
-acceptLicense \
-showProgress
25% 50% 75% 100%
------------------|------------------|------------------|------------------|
............................................................................
/opt/IBM/WebSphere/Plugins ディレクトリーに com.ibm.websphere.PLG.v90_9.0.5020.20240605_1405 がインストールされました。
/opt/IBM/WebSphere/Plugins ディレクトリーに com.ibm.java.jdk.v8_8.0.8035.20241125_0150 がインストールされました。
警告: 8.5.5.24/9.0.5.16、それ以降の既知の副次的な悪影響を確認: "PH48747: 「 WebSphere ウェブサーバープラグインの証明書ホスト名への変更」 (https://www.ibm.com/support/pages/node/6982543)
IIM上からも確認をします。
# ./imcl listInstalledPackages -long
/opt/IBM/InstallationManager/eclipse : com.ibm.cic.agent_1.10.1000.20241118_1329 : IBM Installation Manager : 1.10.1
/opt/IBM/HTTPServer : com.ibm.java.jdk.v8_8.0.8035.20241125_0150 : IBM SDK, Java Technology Edition, Version 8 : 8.0.8.35
/opt/IBM/HTTPServer : com.ibm.websphere.IHS.v90_9.0.5020.20240605_1405 : IBM HTTP Server for WebSphere Application Server : 9.0.5.20
/opt/IBM/WebSphere/Plugins : com.ibm.java.jdk.v8_8.0.8035.20241125_0150 : IBM SDK, Java Technology Edition, Version 8 : 8.0.8.35
/opt/IBM/WebSphere/Plugins : com.ibm.websphere.PLG.v90_9.0.5020.20240605_1405 : Web Server Plug-ins for IBM WebSphere Application Server : 9.0.5.20
プラグイン側の設定はLibertyインストール後に行うため一旦作業を終了します。
5. WAS Libertyのインストール
5-1. インストール
流れはLibertyもIHSなどと全く同じです。
imcl listAvailablePackages
コマンドで同様にパッケージ名を確認します。
WASはトライアル版も含め様々な種類があります。
詳細はこちらの記事に解説があるので見てみてください。
今回はBase
を使用していきたいと思います。
# ./imcl listAvailablePackages \
-repositories ${_REPO_URL} \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt
com.ibm.websphere.liberty.BASE_16.0.2.20160526_2338
com.ibm.websphere.liberty.BASE_16.0.3.20160831_1733
com.ibm.websphere.liberty.BASE_16.0.4.20161113_0220
# 省略
com.ibm.websphere.liberty.BASE_24.0.6.20240603_2002
com.ibm.websphere.liberty.BASE
のパッケージ名の物を使用します。
今回もIBM Java
が必須ですのでインストールを行いますが、
インストールを実行するとエラーとなりました。
書いてある通りなのですが、IIM側でIBM Java
が多数インストールされており困惑している模様です。
# ./imcl install com.ibm.websphere.liberty.BASE com.ibm.java.jdk.v8 \
-repositories ${_REPO_URL} \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt \
-installFixes all \
-acceptLicense \
-showProgress
25% 50% 75% 100%
------------------|------------------|------------------|------------------|
............................................................................
CRIMA1105E エラー: com.ibm.java.jdk.v8 は複数のインストール・ディレクトリーにインストールされています。 新規ディレクトリーまたは以下のいずれかのディレクトリーとともに、-installationDirectory オプションを指定してください:
/opt/IBM/HTTPServer
/opt/IBM/WebSphere/Plugins
-installationDirectory
オプションを使用し、明示的にパスの指定をして再度挑戦します。
# ./imcl install com.ibm.websphere.liberty.BASE com.ibm.java.jdk.v8 \
-repositories ${_REPO_URL} \
-secureStorageFile ./credentials.stg \
-masterPasswordFile ./master_password_file.txt \
-installFixes all \
-installationDirectory /opt/IBM/wlp \
-acceptLicense \
-showProgress
25% 50% 75% 100%
------------------|------------------|------------------|------------------|
............................................................................
/opt/IBM/wlp ディレクトリーに com.ibm.websphere.liberty.BASE_24.0.6.20240603_2002 がインストールされました。
/opt/IBM/wlp ディレクトリーに com.ibm.java.jdk.v8_8.0.8035.20241125_0150 がインストールされました。
警告: WebSphere Liberty での Java SE 7 および Java SE 7.1 の使用のサポートは終了しました。 Liberty カーネルは Java SE 7 および Java SE 7.1 で実行できなくなりました。
最後にIIM上からも確認をします。
こちらも想定通りです。
# ./imcl listInstalledPackages -long
/opt/IBM/InstallationManager/eclipse : com.ibm.cic.agent_1.10.1000.20241118_1329 : IBM Installation Manager : 1.10.1
/opt/IBM/HTTPServer : com.ibm.java.jdk.v8_8.0.8035.20241125_0150 : IBM SDK, Java Technology Edition, Version 8 : 8.0.8.35
/opt/IBM/HTTPServer : com.ibm.websphere.IHS.v90_9.0.5020.20240605_1405 : IBM HTTP Server for WebSphere Application Server : 9.0.5.20
/opt/IBM/WebSphere/Plugins : com.ibm.java.jdk.v8_8.0.8035.20241125_0150 : IBM SDK, Java Technology Edition, Version 8 : 8.0.8.35
/opt/IBM/WebSphere/Plugins : com.ibm.websphere.PLG.v90_9.0.5020.20240605_1405 : Web Server Plug-ins for IBM WebSphere Application Server : 9.0.5.20
/opt/IBM/wlp : com.ibm.java.jdk.v8_8.0.8035.20241125_0150 : IBM SDK, Java Technology Edition, Version 8 : 8.0.8.35
/opt/IBM/wlp : com.ibm.websphere.liberty.BASE_24.0.6.20240603_2002 : IBM WebSphere Application Server Liberty : 24.0.0.6
5-2. Libertyサーバーの作成
まずはLibertyのサーバを作成します。
IHS同様にrootユーザの~/.bash_profile
に以下の情報を追記します。
(変数の値はIHSと一緒にしても分けてもどちらでも良いです)
export JAVA_HOME=/opt/IBM/wlp/java/8.0
export PATH=/opt/IBM/wlp/bin:/opt/IBM/wlp/java/8.0/bin:/opt/IBM/wlp/java/8.0/jre/bin:$PATH
続いてserver
コマンドでサーバを作成していきます。
今回はtest01
という名称で作成します。
# server create test01
サーバー test01 が作成されました。
5-3. Libertyの起動停止
5-3-1. Libertyの起動
起動はserver start
を使用していきます。
# server start test01
サーバー test01 を始動中です。
サーバー test01 がプロセス ID 54012 で始動しました。
起動状態はserver status
で確認できます。
# server status test01
サーバー test01 はプロセス ID 54012 で稼働中です。
psコマンドで確認するとjavaのプロセスが起動しています。
# ps -ef | grep java
root 54012 1 11 19:21 pts/0 00:00:22 /opt/IBM/wlp/java/8.0/jre/bin/java -javaagent:/opt/IBM/wlp/bin/tools/ws-javaagent.jar -Djava.awt.headless=true -Djdk.attach.allowAttachSelf=true -jar /opt/IBM/wlp/bin/tools/ws-server.jar test01
5-3-2. Libertyの停止
停止はserver stop
で行えます。
# server stop test01
サーバー test01 を停止中です。
サーバー test01 は停止しました。
起動状態を確認すると停止しています。
# server status test01
サーバー test01 は稼働していません。
5-4. サンプルアプリの起動
Libertyの動作確認のために、サンプルのwarファイルをデプロイしてみます。
こちらのTomcatのサイトで配布されているsample.war
をデプロイしてみたいと思います。
まずはダウンロードしたsample.war
を/opt/IBM/wlp/usr/servers/test01/apps
へ格納します。
# ls -l /opt/IBM/wlp/usr/servers/test01/apps/
合計 8
-rw-r--r--. 1 root root 4606 12月 29 19:31 sample.war
続いてアプリを起動させるための設定を、/opt/IBM/wlp/usr/servers/test01
のserver.xml
にしていきます。
sample.war
に直接関係ない設定もあり、後ほど紹介するAdmin Center
という機能のための設定もあります。
今回注目するべき箇所は、<webApplication contextRoot="SAMPLE" location="sample.war" />
です。
まず、webApplication
ですが、先ほどアップロードしたsample.war
が格納された/opt/IBM/wlp/usr/servers/test01/apps
配下のアプリケーションをデプロイするための設定です。
location="sample.war"
では対象のアプリのwarファイル名を指定します。
最後にcontextRoot="SAMPLE"
ですが、sample.war
サーバーでホストされる際にアクセスするためのURLパスを指定します。
この場合、http://ipアドレス:9080/SAMPLE
にアクセスすると、sample.war
のWebコンテンツが表示されることになります。
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<!-- Enable features -->
<featureManager>
<feature>webProfile-8.0</feature>
<feature>adminCenter-1.0</feature>
<feature>websocket-1.1</feature>
</featureManager>
<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" httpsPort="9443" >
<accessLogging
filePath="${server.output.dir}/logs/access.log"
logFormat='"%h %u %{t}W "%r" %s %b"'
maxFileSize="500"
maxFiles="10"
/>
</httpEndpoint>
<virtualHost id="default_host">
<hostAlias>*:80</hostAlias>
<hostAlias>*:443</hostAlias>
<hostAlias>*:9080</hostAlias>
<hostAlias>*:9443</hostAlias>
</virtualHost>
<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>
<webApplication contextRoot="SAMPLE" location="sample.war" />
<basicRegistry>
<user name="admin" password="admin" />
</basicRegistry>
<administrator-role>
<user>admin</user>
</administrator-role>
<remoteFileAccess>
<writeDir>${server.config.dir}</writeDir>
</remoteFileAccess>
</server>
上記の設定を導入後Libertyを再起動します。
/opt/IBM/wlp/usr/servers/test01/logs/messages.log
を確認すると、以下のような出力が存在しているかと思います。
それぞれsample.war
が正常にデプロイできたこと、test01が正常に起動できたことがログから読み取れます。
もし起動しない場合はこのログなどに色々情報が出てくるので確認してみてください。
[24/12/29 19:43:51:332 JST] 00000035 com.ibm.ws.http.internal.VirtualHostImpl A CWWKT0016I: Web アプリケーションが使用可能です (default_host): http://vm-rhel01:9080/SAMPLE/
[24/12/29 19:43:52:018 JST] 0000002d com.ibm.ws.kernel.feature.internal.FeatureManager A CWWKF0011I: test01 サーバーは、Smarter Planet に対応する準備ができました。test01 サーバーは 2.960 秒で始動しました。
http://ipアドレス:9080
にアクセスするとLibertyの初期ページが確認できます。
また、http://ipアドレス:9080/SAMPLE
にアクセスするとアプリのページが確認できます。
5-5. Admin Centerへのアクセスと使い方
5-5-1. server.xmlの修正
先ほど少し触れたAdmin Center
について解説します。
Admin Center
とはLibertyをGUI上でのアプリの操作、定義の修正などが行える拡張機能になります。
Admin Center
のより詳細な設定方法などはこちらをご確認ください。
Admin Center
を有効化するにはいくつか設定があります。
1つ目は、adminCenter-1.0
およびwebsocket-1.1
のfeatureを有効にすること
<featureManager>
<feature>adminCenter-1.0</feature>
<feature>websocket-1.1</feature>
</featureManager>
2つ目は、httpsPort
ポートを有効にすること
<httpEndpoint id="defaultHttpEndpoint" host="*" httpPort="9080" httpsPort="9443" >
</httpEndpoint>
3つ目は、administrator
権限を持つユーザを作成することです。
今回はユーザ名、パスワードともにadmin
で作成します。
<basicRegistry>
<user name="admin" password="admin" />
</basicRegistry>
<administrator-role>
<user>admin</user>
</administrator-role>
4つ目は必須ではないですが、この設定を有効化しておくと後ほどAdmin Center
からserver.xml
の修正をすることができます。(ファイルへの書き込み権限アクセスの追加)
<remoteFileAccess>
<writeDir>${server.config.dir}</writeDir>
</remoteFileAccess>
上記設定が有効になっている状態であれば、messages.log
に以下の表示があるかと思います。
[24/12/29 20:02:34:337 JST] 0000003b com.ibm.ws.http.internal.VirtualHostImpl A CWWKT0016I: Web アプリケーションが使用可能です (default_host): http://vm-rhel01:9080/adminCenter/
[24/12/29 20:02:35:352 JST] 0000002d com.ibm.ws.tcpchannel.internal.TCPPort I CWWKO0219I: TCP チャネル defaultHttpEndpoint-ssl が開始され、現在、ホスト * (IPv6)、ポート 9443 の要求を listen しています。
[24/12/29 20:02:35:356 JST] 0000002d com.ibm.ws.kernel.feature.internal.FeatureManager A CWWKF0012I: サーバーは次のフィーチャーをインストールしました。[adminCenter-1.0, appSecurity-2.0, appSecurity-3.0, beanValidation-2.0, cdi-2.0, distributedMap-1.0, ejbLite-3.2, el-3.0, jaspic-1.1, jaxrs-2.1, jaxrsClient-2.1, jdbc-4.2, jndi-1.0, jpa-2.2, jpaContainer-2.2, jsf-2.3, json-1.0, jsonb-1.0, jsonp-1.1, jsp-2.3, managedBeans-1.0, restConnector-2.0, servlet-4.0, ssl-1.0, webProfile-8.0, websocket-1.1]。
5-5-2. Admin Centerへのアクセス
エラーが出ていない場合、https://ipアドレス:9443/adminCenter
にアクセスするとアプリのページが確認できます。
先ほど設定したユーザ名、パスワードでログインできます。
5-5-3. Exploreによるアプリの起動停止とモニタリング
トップページのExplore
へアクセスします。
左のアプリケーション
タブでは起動中のアプリを確認できます。
下向きのマークをクリックするとアプリの起動停止、再起動などが行えます。
実際に停止すると以下のように確認できます。
ちなみにここで注意するポイントとして、アプリの停止=Libertyの停止ではない所です。
当然今GUIで見ているアプリなどは止まらないのでその点注意する必要があります。
続いてモニター
タブでは起動中のアプリのモニタリングが行えます。
5-5-4. Server Configによるserver.xmlの修正
トップページのServer Config
へアクセスします。
そうするとWeb上からxmlの構成を確認することができます。
例えばfeatureを何か追加したい場合、フィーチャー・マネージャー
から子の追加
をクリックします。
そうすると子要素が追加され、画面上から追加するfeatureなどを選択することができます。
説明なども日本語で詳しく書かれておりかなり便利です。
保存する場合は右上の保存ボタンをクリックすると保存可能です。
5-5-5. server.xml上のパスワードの暗号化
Admin Centerの解説は一旦終わりでいくつか備忘も兼ねた機能を紹介します。
先ほどserver.xml
にパスワードを直接書いていました。
<basicRegistry>
<user name="admin" password="admin" />
</basicRegistry>
これではセキュリティ的に良くないので、Libertyとしてパスワードの暗号化などを用意しています。
securityUtility
というコマンドで文字列を変換することができます。
公式ドキュメントはこちらになります。
例えばadmin
という文字列をxor
でエンコードすると以下のようなコマンドになります。
securityUtility encode --encoding=xor admin
こちらを実際にエンコードすると標準出力でエンコードされた文字列が出力されます。
# securityUtility encode --encoding=xor admin
{xor}PjsyNjE=
この文字列をserver.xml
のパスワード部分に置き換えてLibertyを再起動します。
<basicRegistry>
- <user name="admin" password="admin" />
+ <user name="admin" password="{xor}PjsyNjE=" />
</basicRegistry>
5-5-6. コマンドラインからのアプリの起動停止
先ほどAdmin Center
上からアプリを起動停止できると紹介しました。
今回はsample.war
のみデプロイしていますが、他にも同一のサーバ上にアプリが載っている状態でsample.war
を再起動したいといった時に、GUI上から再起動を行うかtest01単位での再起動となってしまいます。
WAS traditionalではPythonなどを使用すれば起動停止がコマンドで行えるらしいですが、Libertyではそういった機能はありません。
前者の場合は都度SEにより手動オペレーションが発生してしまい、後者の場合他のアプリも再起動に巻き込まれてしまいます。
そこで先ほどAdmin Center
でクリックしていた起動停止のボタンの機能をAPIで呼び出します。
curl
でAPIを呼び出すための下調べから紹介していきます。
Admin Center
を有効化している場合、messages.log
に以下の表示があると思います。
(本番環境などでAdmin Center
を有効化しない場合は、別途restConnector
などのfeatureを有効化する必要があります。)
[24/12/29 20:44:37:386 JST] 00000037 com.ibm.ws.http.internal.VirtualHostImpl A CWWKT0016I: Web アプリケーションが使用可能です (default_host): http://vm-rhel01:9080/IBMJMXConnectorREST/
まずはここにcurl
でアクセスしてみます。
ここでmbeans
というURLを確認します。
# curl -k -u admin:admin -s https://localhost:9443/IBMJMXConnectorREST/ | jq
{
"version": "6",
"mbeans": "/IBMJMXConnectorREST/mbeans",
"createMBean": "/IBMJMXConnectorREST/mbeans/factory",
"mbeanCount": "/IBMJMXConnectorREST/mbeanCount",
"defaultDomain": "/IBMJMXConnectorREST/defaultDomain",
"domains": "/IBMJMXConnectorREST/domains",
"notifications": "/IBMJMXConnectorREST/notifications",
"instanceOf": "/IBMJMXConnectorREST/instanceOf",
"fileTransfer": "/IBMJMXConnectorREST/file",
"api": "/IBMJMXConnectorREST/api",
"graph": "/IBMJMXConnectorREST/graph"
}
続いてmbeans
のURLにアクセスします。
この際、name
には起動停止したいアプリのwar名(今回はsample
)を入力します。
すると更にURLが表示されます。
# curl -k -u admin:admin -s https://localhost:9443/IBMJMXConnectorREST/mbeans/ | jq '.[] | select(.objectName | contains("name=sample"))'
{
"objectName": "WebSphere:service=com.ibm.websphere.application.ApplicationMBean,name=sample",
"className": "com.ibm.ws.app.manager.internal.ApplicationConfigurator$NamedApplication$2",
"URL": "/IBMJMXConnectorREST/mbeans/WebSphere%3Aname%3Dsample%2Cservice%3Dcom.ibm.websphere.application.ApplicationMBean"
}
最後に上で表示されたURLにアクセスします。
そうすると、起動停止などを行えるURLが表示されます。
# curl -k -u admin:admin -s https://localhost:9443/IBMJMXConnectorREST/mbeans/WebSphere%3Aname%3Dsample%2Cservice%3Dcom.ibm.websphere.application.ApplicationMBean | jq '.operations[] | {name, URL}'
{
"name": "stop",
"URL": "/IBMJMXConnectorREST/mbeans/WebSphere%3Aname%3Dsample%2Cservice%3Dcom.ibm.websphere.application.ApplicationMBean/operations/stop"
}
{
"name": "restart",
"URL": "/IBMJMXConnectorREST/mbeans/WebSphere%3Aname%3Dsample%2Cservice%3Dcom.ibm.websphere.application.ApplicationMBean/operations/restart"
}
{
"name": "start",
"URL": "/IBMJMXConnectorREST/mbeans/WebSphere%3Aname%3Dsample%2Cservice%3Dcom.ibm.websphere.application.ApplicationMBean/operations/start"
}
実際にこちらのURLにアクセスしてみます。
今まではGET
メソッドでしたが、起動停止などはPOST
メソッドを使用します。
また、json
でアクセスしますが中身は空で送るため-d '{}'
を入れています。
curl -u admin:admin \
-k \
-H "Content-Type: application/json" \
-X POST -d '{}' \
https://localhost:9443/IBMJMXConnectorREST/mbeans/WebSphere%3Aname%3Dsample%2Cservice%3Dcom.ibm.websphere.application.ApplicationMBean/operations/stop
実際にGUIで確認するとアプリが停止しています。
同じく起動も投げてみます。
# curl -u admin:admin \
-k \
-H "Content-Type: application/json" \
-X POST -d '{}' \
https://localhost:9443/IBMJMXConnectorREST/mbeans/WebSphere%3Aname%3Dsample%2Cservice%3Dcom.ibm.websphere.application.ApplicationMBean/operations/start
こちらも問題なさそうです。
5-6. LibertyのSSL化
Admin Centerなどにアクセスする際既にSSL化されていますが、Libertyが発行したオレオレ証明書になっています。
IHSと同様にLet's Encrypt
の証明書を設定してみます。
作業前にサーバは停止しておきましょう。
Libertyの鍵はkey.p12
という名称で、/opt/IBM/wlp/opt/servers/test01/resources/security
に格納されています。
# cd /opt/IBM/wlp/usr/servers/test01/resources/security;pwd
/opt/IBM/wlp/usr/servers/test01/resources/security
# ls -l
合計 8
-rw-r-----. 1 root root 2738 12月 29 19:43 key.p12
-rw-------. 1 root root 897 12月 29 19:43 ltpa.keys
ここにprivkey.pem
とfullchain.pem
を置いておきます。
# ls -l
合計 16
-rw-r--r--. 1 root root 2872 12月 1 23:23 fullchain.pem
-rw-r-----. 1 root root 2738 12月 29 19:43 key.p12
-rw-------. 1 root root 897 12月 29 19:43 ltpa.keys
-rw-r--r--. 1 root root 241 12月 1 23:23 privkey.pem
key.p12
はデフォルトだとLibertyが自動生成したパスワードが設定されています。
パスワードは/opt/IBM/wlp/usr/servers/test01
のserver.env
に自動で設定されています。
ここでは_KEYSTORE_PASSWORD
変数に格納してしまします。
# cat /opt/IBM/wlp/usr/servers/test01/server.env
keystore_password=fYGBJf8II3AtprK3WWymwZ7
# _KEYSTORE_PASSWORD=$(egrep "^keystore_password" /opt/IBM/wlp/usr/servers/test01/server.env | awk -F '=' '{print $2}')
一旦元ファイルは削除し、openssl
コマンドで鍵をインポートします。
# rm -f key.p12
# openssl pkcs12 -password pass:${_KEYSTORE_PASSWORD} -export -in fullchain.pem -inkey privkey.pem -out ./key.p12
# ls -l key.p12
-rw-------. 1 root root 2752 12月 29 21:15 key.p12
この状態でサーバを起動しブラウザで確認すると、証明書が設定した物になっているかと思います。
6. LibertyとIHSの接続
最後の章になります。
先ほどhttp://ipアドレス:9080/SAMPLE
にアクセスするとアプリのページが確認できました。
ここではプラグインを設定しhttps://ipアドレス/SAMPLE
にアクセスすると、アプリのページが表示できるようにしたいと思います。
6-1. プラグインの設定ファイルの準備
実はプラグイン用のplugin-cfg.xml
ファイルはLiberty起動時に、/opt/IBM/wlp/usr/servers/test01/logs/state
に自動で生成してくれています。
[24/12/29 21:16:47:409 JST] 0000003a com.ibm.ws.webcontainer.osgi.mbeans.PluginGenerator I SRVE9103I: Web サーバー・プラグイン構成ファイルは、このサーバー用に、/opt/IBM/wlp/usr/servers/test01/logs/state/plugin-cfg.xml に自動的に生成されました。
場所はどこでも良いですが、このファイルをコピーします。
今回は/opt/IBM/WebSphere/Plugins/config
に格納します。
# ls -l /opt/IBM/wlp/usr/servers/test01/logs/state/plugin-cfg.xml
-rw-r-----. 1 root root 3423 12月 29 21:16 /opt/IBM/wlp/usr/servers/test01/logs/state/plugin-cfg.xml
# cp -p /opt/IBM/wlp/usr/servers/test01/logs/state/plugin-cfg.xml /opt/IBM/WebSphere/Plugins/config/
# ls -l /opt/IBM/WebSphere/Plugins/config/plugin-cfg.xml
-rw-r-----. 1 root root 3423 12月 29 21:16 /opt/IBM/WebSphere/Plugins/config/plugin-cfg.xml
また、以下のように編集していきます。
本来はIHSと鍵はきちんと分けるべきかと思いますが、今回はIHSと兼用してしまいます。
今回はIHSとLiberty間もHTTPSになるので、Hostname
は証明書と紐づくドメイン名を記載しましょう。
- <Log LogLevel="Error" Name="/opt/IBM/WebSphere/Plugins/logs/webserver1/http_plugin.log"/>
+ <Log LogLevel="Error" Name="/opt/IBM/WebSphere/Plugins/logs/http_plugin.log"/>
- <Transport Hostname="vm-rhel01" Port="9080" Protocol="http"/>
+ <Transport Hostname="vm-rhel01.motuni.work" Port="9080" Protocol="http"/>
- <Transport Hostname="vm-rhel01" Port="9443" Protocol="https">
+ <Transport Hostname="vm-rhel01.motuni.work" Port="9443" Protocol="https">
- <Property Name="keyring" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.kdb"/>
+ <Property Name="keyring" Value="/opt/IBM/HTTPServer/ssl/key.kdb"/>
- <Property Name="stashfile" Value="/opt/IBM/WebSphere/Plugins/config/webserver1/plugin-key.sth"/>
+ <Property Name="stashfile" Value="/opt/IBM/HTTPServer/ssl/key.sth"/>
</Transport>
また、自動生成されていれば大丈夫かと思いますが、以下の定義が存在しているか確認しましょう。
この定義によりIHSに来た/SAMPLE/*
へのアクセスをLibertyへ送ってくれます。
<Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/SAMPLE/*"/>
6-2. IHSの設定ファイルの修正
最後にIHS側へプラグインと連携する設定を入れます。
LoadModule was_ap24_module
はプラグインをインストールしたディレクトリにあるmod_was_ap24_http.so
を指定。
WebSpherePluginConfig
は先ほどコピーした/usr/IBM/Plugins/config/plugin-cfg.xml
を指定します。
+ LoadModule was_ap24_module /opt/IBM/WebSphere/Plugins/bin/64bits/mod_was_ap24_http.so
+ WebSpherePluginConfig /opt/IBM/WebSphere/Plugins/config/plugin-cfg.xml
上記設定を行いIHSを再起動します。
この際事前にhostsやDNSで証明書に紐づくドメイン名を解決できるようにしておきましょう。
この状態で各サイトにアクセスします。
まずはIHSの初期ページが443で問題なくアクセスできています。
続いてLibertyの初期ページです。
こちらも問題なくアクセスできています。
最後にポート番号を意識させずにアプリのページへアクセスしてみます。
手順外で試しに入れたGitbucketも同様にアクセスできました。
7.最後に
IBM製品として、MQ、IHS、WAS Libertyなどを紹介してきました。
一旦IBM製品については私の持ってる知識はアウトプットしきれましたので、IBM系の記事はこれで一旦の区切りとさせて貰います。
一応Db2なども個人では入れたことはあるのですが、あまり興味もないためそちらは本当に時間があればといつか書くかもしれないです。
参考サイト
・imcl コマンドを使用したパッケージのインストール
https://www.ibm.com/docs/ja/installation-manager/1.9.2?topic=line-installing-packages-by-using-imcl-commands
・コマンド行を使用した IBM HTTP Server のインストール
https://www.ibm.com/docs/ja/ibm-http-server/9.0.5?topic=manager-installing-http-server-by-using-command-line
・Admin Center のセットアップ
https://www.ibm.com/docs/ja/was-liberty/base?topic=center-setting-up-admin#twlp_ui_setup__uiconfserv
・securityUtility コマンド
https://www.ibm.com/docs/ja/was-liberty/base?topic=SSEQTP_liberty/com.ibm.websphere.wlp.core.doc/ae/rwlp_command_securityutil.htm
・WebSphere Application Server オファリングのオンライン製品リポジトリー
https://www.ibm.com/docs/ja/was/9.0.5?topic=installation-online-product-repositories-websphere-application-server-offerings
・IBM Installation Manager 1.9.1 on Windows Serverのインストール
https://qiita.com/spssfun2017/items/33ce4f9a0365e3bc44de
・Libertyの始め方
https://qiita.com/TTakakiyo/items/bb122f513a1bdf618adc
・WebSphere Liberty 導入・運用ガイド
https://community.ibm.com/community/user/wasdevops/viewdocument/websphere-liberty-1?CommunityKey=d6c93aa2-6e10-48da-96dc-3831da8ee185&tab=librarydocuments