【WLS2】みんなOracle Linuxであそぼうよ！！


やあやあ僕はただのいい男の子です。

## 2022/2/3 追記
MS Storeにでてるよ・・・1/31リリース

https://www.microsoft.com/store/productId/9P7L0QWBSLTK

8.5もでてます！！

## この記事を書いたきっかけ
WSLでUbuntuで結構遊んだんだけどさ、
自分は結構Oracle製品愛用してて、Oracle DBとかWebLogic Serverを使いたいときにさ、
Ubuntuでは動作保証されてないわけなのよ。

別にDockerやらのコンテナで動かせばいいんだけどさ、もうちょっとWindowsから近い場所で触りたいのよ。
だからコンテナでOracle DBを動かすんじゃなくてWSL上でOracle Linux(以下OL)を動かしたいのだ！

> Oracle Linuxは個人開発なら無償利用できます。
[Oracle Linux ダウンロード](https://www.oracle.com/jp/servers/technologies/linux/downloads.html)

## WSL用のOracle Linuxのイメージはないよ
残念ながらOLはMicrosoft Storeにリリースされてない。
あるのはUbuntuとその他有償の各種ディストリビューションのみ。
CentOSもStoreにないけれどGitHubのアーカイブから利用できるみたいだね。

## 【本題】Oracle LinuxをWSLとしてインストールする
参照：
[WSL で使用する Linux ディストリビューションをインポートする](https://docs.microsoft.com/ja-jp/windows/wsl/use-custom-distro)
ここみてやってるからわしは裏技みたいなすごいことしてないよ！

やること
**1.** UbuntuのWSLからOLのコンテナイメージをプル
**2.** イメージをTarファイルにしてWindowsの任意の場所に配置
**3.** WSLコマンドでインポート
⇒使える！！


### 1. UbuntuのWSLからOLのコンテナイメージをプル
この記事ではWLS2ですでにUbuntuが使えることを前提にしているよ！
どこかでお調べして前提条件クリアしてね(^▽^)/

Ubuntuで以下を実行してOLイメージをプル
※今回は最新の8.5をプルするよ

```docker
$ podman -v  　←Dockerでも大丈夫です
podman version 3.4.2
$ podman pull docker.io/library/oraclelinux:8.5
↑ container-registry.oracle.com/os/oraclelinux:8.5でも可
（Oracle公式のコンテナレジストリからプルすることになる、中身は同じ）
Trying to pull docker.io/library/oraclelinux:8.5...
Getting image source signatures
Copying blob 671f9b4a2df1 done
Copying config 7f20b3bf28 done
Writing manifest to image destination
Storing signatures
7f20b3bf28af8fe567962c2f39579436fe33c59232d95a27ab404aee89fe95e7

確認
$ podman images
REPOSITORY                                    TAG            IMAGE ID      CREATED        SIZE
docker.io/library/oraclelinux                 8.5            7f20b3bf28af  2 weeks ago    243 MB
```

### 2. イメージをTarファイルにしてWindowsの任意の場所に配置
ここでは
**イメージを実行⇒実行中のコンテナIDを取得⇒実行コンテナをTarファイルとしてエクスポート**
という流れだよ。


Ubuntuで作業するよ

* イメージを実行 lsコマンド実行したからプロセスダウンするけど大丈夫だよ

```docker
$ podman run -t docker.io/library/oraclelinux:8.5 ls /
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
```

* コンテナIDを取得

```docker
$ ContainerID=$(podman container ls -a | grep -i oracle | awk '{print $1}')
$ echo $ContainerID
42b479efd71b
```



* 実行コンテナをTarファイルとしてエクスポート

WSL2はデフォルトで/mntにWindowsのファイルシステムがマウントされてるよ
だから例えば/mnt/c/Users/[ユーザ名]配下に置けば、Windowsのホームディレクトリに置けるというわけだ！
今回はTarファイルを格納するディレクトリを作っておくよ（任意）

```docker
$ mkdir -p /mnt/c/Users/laxbl/oracle_linux 
$ podman export $ContainerID > /mnt/c/Users/laxbl/oracle_linux/ol85.tar

用済みのコンテナはさよなら🍤
$ podman rm -fv $ContainerID
```

Windows側からもTarファイルがあることを確認してね！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2493126/072d4b5e-f624-6c32-1075-b5c08013456e.png)

### 3. WSLコマンドでインポート
ここからはUbuntuマシンじゃなくてWindowsで作業するよ！
コマンドプロンプトを起動して作業するよ（PowerShellでもOK）
WSLのimportサブコマンドでディストリビューションをインポートするのだ

importサブコマンドの構文：

`wsl.exe –import <ディストリ名> <インストール先のフォルダパス> <インポートするファイルパス>`
今回はTarファイルがあるところにインストールする

```
C:\Users\laxbl>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
C:\Users\laxbl>wsl --import Oracle-8.5 C:\Users\laxbl\oracle_linux  C:\Users\laxbl\oracle_linux\ol85.tar
```

確認・起動

```
>wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
  Oracle-8.5      Stopped         2

[root@MSI ~]#
[root@MSI ~]# cat /etc/oracle-release
Oracle Linux Server release 8.5
```

できた！！！

インポートするとデフォルトではrootユーザしかないので適宜一般ユーザを作成して使ってくださいな。

```
[root@MSI ~]# useradd oracle
[root@MSI ~]# passwd oracle
Changing password for user oracle.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@MSI ~]# su - oracle
[oracle@MSI ~]$
[oracle@MSI ~]$ whoami
oracle
```

## その他
お気づきの方はわかると思うけど、この要領でほかのいろんなディストリビューションもWSLで使えるようになるよ(^▽^)/


以上！
最後まで見てくれてありがとうね！