RHELにOpenlibertyをインストールしてみた

# 目的
APM製品の検証のためにOSだけではなくてJavaのプロセスも動かした状態を作りたいと思ったので、
OpenlibertyをRHEL上で動かすことに挑戦してみました。

# 環境
今回は、Techzone（ https://techzone.ibm.com/environments ）で3日間使えるRHELの仮想サーバを借用しました。
とりあえず導入手順の確立だけ行いたかったので、短期間使えるTechzoneのサーバで十分検証ができました。

# 導入手順
#### Openlibertyモジュール取得
以下のサイトにアクセスします。
https://openliberty.io/start/

JavaSEのバージョンを8,11,17が選択できるため、この中では最も新しい17を選択し、
”GenerateProject”をクリックして、アプリケーションをダウンロードします。

ダウンロードしたファイル名はデフォルトだとapp-name.zipとなります。


#### Mavenモジュール取得
以下のサイトにアクセスします。
https://maven.apache.org/download.cgi

現在はの最新版は以下バージョンのモジュールとなりますので、これをダウンロードしました。
apache-maven-3.9.1-bin.tar.gz

#### OS最新化
仮想サーバにログインし、rootにスイッチしてOSを更新します。
```
# yum update
```


#### unzipインストール
unzipをインストールします。
```
# yum install unzip
```


#### javaインストール
導入可能なjava一覧を表示します。
```
# yum list | grep java
・・・
java-1.8.0-openjdk-accessibility.x86_64                            1:1.8.0.362.b09-2.el8_7
java-1.8.0-openjdk-demo.x86_64                                     1:1.8.0.362.b09-2.el8_7
java-1.8.0-openjdk-devel.x86_64                                    1:1.8.0.362.b09-2.el8_7
java-1.8.0-openjdk-javadoc.noarch                                  1:1.8.0.362.b09-2.el8_7
java-1.8.0-openjdk-javadoc-zip.noarch                              1:1.8.0.362.b09-2.el8_7
java-1.8.0-openjdk-src.x86_64                                      1:1.8.0.362.b09-2.el8_7 
・・・
java-17-openjdk.x86_64                                             1:17.0.6.0.10-3.el8_7
java-17-openjdk-demo.x86_64                                        1:17.0.6.0.10-3.el8_7
java-17-openjdk-devel.x86_64                                       1:17.0.6.0.10-3.el8_7
java-17-openjdk-headless.x86_64                                    1:17.0.6.0.10-3.el8_7
java-17-openjdk-javadoc.x86_64                                     1:17.0.6.0.10-3.el8_7
java-17-openjdk-javadoc-zip.x86_64                                 1:17.0.6.0.10-3.el8_7
java-17-openjdk-jmods.x86_64                                       1:17.0.6.0.10-3.el8_7
java-17-openjdk-src.x86_64                                         1:17.0.6.0.10-3.el8_7
java-17-openjdk-static-libs.x86_64                                 1:17.0.6.0.10-3.el8_7      
・・・
```
この中からOpenlibertyに合わせてJava17を選択して、インストールします。
```
# yum install java-17-openjdk java-17-openjdk-devel
```
この時、`yum istall java`としてしまうと、最新の1.8.0が入ってしまうので、
きちんとバージョンを指定して導入してください。

#### モジュール転送
以下のように作業用ディレクトリを作成します。
```
# mkdir /work
# chmod 777 /work
```
ここにteratermの”SSH SCP”やWinscpを使ってOpenlibertyとMavenモジュールを転送します。


#### Maven配置
Mavenモジュールを展開して、/optに配置します。
```
# cd /work
# tar zxvf apache-maven-3.9.1-bin.tar.gz
# cd /opt
# mv /work/apache-maven-3.9.1 .
# ln -s apache-maven-3.9.1 maven
```

#### グループ・ユーザ作成
デフォルトユーザでもいいのですが、アプリ実行用のユーザを作成します。
```
# groupadd -g 2000 aplgrp
# useradd -g aplgrp -u 2000 apluser
# cat /etc/passwd |grep apluser
apluser:x:2000:2000::/home/apluser:/bin/bash
```
作成したユーザはプロファイルを修正してMVNのパスを追加します。
```
su - apluser
vi .bash_profile

最終行に以下を追加
export PATH=$PATH:/opt/maven/bin
```
修正後はexit で抜けて、再度 apluserにスイッチします。


#### Openliberty配置
apluserのホームディレクトリ上にOpenlibertyのモジュールを展開します。
```
$ mkdir app-name
$ cd app-name
$ unzip /work/app-name.zip
```

#### server.xml修正
デフォルトではlocalhostでしかログインできないので、どのインターフェース経由でも接続できるように以下サイトを参考にserver.xmlを編集します。
https://qiita.com/rinaxsumomo/items/e5f2f34c54890f767182
```
$ vi src/main/liberty/config/server.xml
    <httpEndpoint id="defaultHttpEndpoint"
                  httpPort="9080"
                  httpsPort="9443" />
     ↓
    <httpEndpoint id="defaultHttpEndpoint"
                  host="*"
                  httpPort="9080"
                  httpsPort="9443" />
```

#### プロセス起動
以下コマンドでプロセスを起動します。
```
$ cd ~/app-name
$ mvn liberty:run
```
このコマンドで起動するとフォアグラウンド実行となります。
別のターミナルを開くと、以下のようなプロセスが起動しているはずです。
```
$ ps -ef |grep java
apluser    32648   32619  5 04:16 pts/0    00:00:52 /usr/bin/java -classpath  ・・・ liberty:run
apluser    32825   32648  3 04:17 pts/0    00:00:29 /usr/lib/jvm/java-17-openjdk-17.0.7.0.7-1.el8_7.x86_64/bin/java ・・・ defaultServer
```

バックグラウンド実行・停止したい場合は以下となります。
起動：`$ mvn liberty:start`
停止：`$ mvn liberty:stop`

この場合、liberty:run のプロセスは出てきません。

# 稼働確認
プロセスの確認だけだと物足りないので、以下コマンドでアクセスしてみました。
```
$ curl http://localhost:9080/health
{"checks":[],"status":"UP"}$
```
ちゃんとUPというStatusが返ってきました。


# 感想
当初はJavaを最新を入れておけばいいだろうと軽く考えていて、Java1.8.0をインストールしていたために、
Openlibertyのプロセスが起動できず、詰まってしまっていました。
そこを乗り越えれば、特に詰まることもなく簡単に30分程度で導入することができました。