WSL(Ubuntu)上でWAS Liberty環境を動かす

# 背景と目的
手元のWindows環境上で急いでWAS Liberty環境を動かすために行った手順です。同じような必要に迫られた方の試行錯誤の時間削減に貢献することを目的とします。

# WSLの有効化とUbuntuのインストール
1.「Windowsの機能の有効化または無効化」でWSLを有効化
 * 「検索」から「Windowsの機能の」で検索
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375055/ad9798f1-daf3-36d2-3459-ba48f9dd9864.png)

 * 「Linux用Windowsサブシステム」「Windowsハイパーバイザープラットフォーム」をクリックして、OKを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375055/34698cf3-85da-964b-90c6-2ef129d77e51.png)

2\. Ubuntuをインストール
* コマンドプロンプトを管理者として実行
* `wsl --list --online` でインストール可能なディストリビューションを確認
* `wsl --install Ubuntu` でWSLのUbuntuをインストールできる。
    * ユーザIDとパスワードを聞かれるので入力して設定
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375055/999df83a-043f-f741-0b09-a6f4bcfa71ec.png)

* Debianじゃないの？
    * WSL上のsystemdが最初から有効になっているのがUbuntuでした。
    * Debianでもsystemdを有効にできるはずですが、ここでは省略します。
* Debianが不要であれば`wsl --unregister Debian`で削除
* インストールされているディストリビューションの一覧を出したい場合は`wsl --list`で確認

3\. WAS Libertyをインストールする環境を用意
* 安全のため、インストールされた環境をコピーしてwasインストール用の環境を個別に用意する。
``` コマンドプロンプト上で実行
wsl --export Ubuntu c:\temp\Ubuntu.tar
mkdir %LOCALAPPDATA%\WslLocal (フォルダ名はお好みで)
wsl --import Ubuntu-was %LOCALAPPDATA%\WslLocal c:\temp\Ubuntu.tar
```
* `wsl -d Ubuntu-was`
    * 環境コピーで作成したイメージで起動した時はrootでのログインとなる

:::note info
なお、`wsl --install`でインストールしたディスクイメージは `%LOCALAPPDATA%\Packages\CnonicalGroupLimited.Ubuntu_xxxxxxxx\LocalState\ext4.vhdx`　に保管されている
:::

# WAS Libertyのインストール
1. WAS Libertyをダウンロード
* [IBM Support > WebSphere Liberty for developers](https://www.ibm.com/support/pages/websphere-liberty-developers) にある"Download Package"から `WebSphere Liberty xx.x.x.x + Java SE x for linux-x86` をダウンロード
```wsl環境で実行  
# wget https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/downloads/wlp/23.0.0.6/wlp-webProfile8-java8-linux-x86_64-23.0.0.6.zip
※ (2023/7時点)
# sudo apt install unzip
# unzip wlp-webProfile8-java8-linux-x86_64-23.0.0.6.zip
```

* 回答したwlpディレクトリを適当なディレクトリに配置
    * `sudo mv ./wlp /opt/.`

* Serverを作成（ここではwas1という名前で作成）
    * `sudo /opt/wlp/bin/server create was1`
    * `sudo /opt/wlp/bin/server run was1`
 
これでWindows側のブラウザ(Edgeなど)でhttp://localhost:9080 に接続するとWAS Libertyの画面が出てくるはず…だが、うまく接続できない。

何らかのセキュリティの設定なのだろうと思うが、WAS Libertyを設定方法がうまく調べきれず、急いでいたのでhttpサーバでリバースプロキシを立ち上げてワークアラウンドする。

なお、この状態で別のコンソールから`w3m http://localhost:9080/`などで接続すると、接続できていることができる。

一旦Ctrl+CでWAS Libertyを止める。

# lighttpdでリバースプロキシを設定する

* `sudo apt install ssh` 別コンソールからログインするため、SSHをインストール。
    * sshで2つのコンソールでログインする（詳細略）
    * 一つのコンソールでもう一度`sudo /opt/wlp/bin/server run was1` を実行

* もう一つのコンソールで以下を実行
    * `sudo apt update; sudo apt install lighttpd`
    * `sudo nano /etc/httpd.conf` 以下の行を書いて保存

```lighttpd.conf
# 既にある server.modules += ( ... に"mod_proxy"を追加するのでも良い。
server.modules = (
  "mod_proxy"
)

$SERVER["socket"] == ":81" {
  proxy.server = (
    "" => (
      (
        "host" => "127.0.0.1",
        "port" => 9080
      )
    )
  )
}
```

* `sudo systemctl restart lighttpd`
* http://localhost:81/ に接続してこの画面が出れば成功！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375055/fd87c10c-22a9-2a15-9ec6-773bc75a7479.png)

# アプリケーションの稼働を確認する
例として[Gitbucket](https://gitbucket.github.io/)を実行
* `wget https://github.com/gitbucket/gitbucket/releases/download/4.39.0/gitbucket.war` ※ ダウンロード先は適宜最新版を確認してください
* `sudo mv gitbucket.war /opt/wlp/usr/servers/was1/dropins/.`
* ファイルを配置するだけで自動的にwarファイルが展開
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375055/c94a31d6-0313-1914-4e26-a5f4260c485d.png)

* http://localhost:81/gitbucket に接続して、ログイン画面が出ればOK！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3375055/0cedfb67-c319-9255-dce4-446da6e48cd1.png)

    * id:root / pass:rootでログインできます

***
# 参考文献
Libertyクイックスタートのための情報をそろえていただき、大変参考になりました。

https://qiita.com/TTakakiyo/items/bb122f513a1bdf618adc