WSL で Amazon Linux 2 を使用する

## 概要

WSL では、linux ディストリビューションを起動することができます。
公式に対応するディストリビューションは、Microsoft Store から入手することになりますが、必要な条件を整えられれば、その他のディストリビューションを使用することもできます。

Amazon Linux 2 では、オンプレミスでの使用のために各種イメージファイルが配布されています。こちらの配布ファイルを利用して、WSL で Amazon Linux 2 を起動してみます。

[Amazon Linux 2 イメージファイル](https://cdn.amazonlinux.com/os-images/latest/)

## インストール・起動ツール

インストール・起動のために以下のツールを使用します。

[GitHub - noumia/wsl-toyc](https://github.com/noumia/wsl-toyc)

https://github.com/noumia/wsl-toyc/releases/download/v1.0/wsl-toyc.zip

## 準備

あらかじめ Windows の機能の有効化 から 「Windows Subsystem for Linux」 を有効化しておきます。

Amazon Linux 2 イメージファイル配布サイトから、コンテナ用のイメージファイルを入手します。記事執筆時点での最新版は、以下のファイルになりました。

https://cdn.amazonlinux.com/os-images/2.0.20181024/container/amzn2-container-raw-2.0.20181024-x86_64.tar.xz

## インストール

配布ファイルが、tar.xz フォーマットなので、tar.gz フォーマットへ圧縮変換を行います。
xz, gzip 等の変換ツールは、Git for Windows 等に付属しているものを使用するとよいでしょう。

```
> xz -d -c amzn2-container-raw-2.0.20181024-x86_64.tar.xz | gzip > rootfs.tar.gz
```

wsl-toyc.zip を展開して、アーカイブ内のファイルをリネームして、次のように配置します。起点となるフォルダーは、NTFS ファイルシステム上の任意の場所で良いようです。

```
amzn/rootfs.tar.gz # 上記で変換したイメージファイル
amzn/create-toyc.exe # wsl-toyc.zip 内のファイル
amzn.exe # wsl-toyc.zip 内の launch-toyc.exe をリネーム
```

amzn/create-toyc.exe を実行します。
エラーコード 0x80070005 が表示される場合は、「管理者として実行」で起動させてください。(以前は、管理者権限不要だったように記憶していますが、仕様変更されたようです。)

インストール成功すれば、数分ほどで、amzn/rootfs/ 以下に linux 環境のファイル群が展開されます。これらのファイルは、Windows 側から見ることができるのですが、直接書き込み操作を行うと、ファイル破損の原因になるので、触らないようにしてください。

## 起動

amzn.exe ファイルが、起動用実行ファイルになります。PATH 設定された、任意の場所に配置することができます。

初めに、パッケージの更新を行います。

```
> amzn yum update -y
```

インストールする時期によりますが、いくつかのパッケージが更新されるかと思われます。

amzn.exe を引数なしで実行すると、bash によるインタラクティブシェルが起動します。

Amazon Linux 2 をローカルで使用する目的としては、ソフトウェア開発があると考えられますが、開発ツールをインストールしてみます。

```
> amzn yum groupinstall -y "Development Tools"
```

gcc などの開発ツールが利用可能になります。

```
> amzn gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl --enable-libmpx --enable-libsanitizer --enable-gnu-indirect-function --enable-libcilkrts --enable-libatomic --enable-libquadmath --enable-libitm --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
```

話題の corretto も試してみましょう。
extras から、インストールできます。

```
> amzn amazon-linux-extras install -y corretto8
```

```
> amzn java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-amazon-corretto-preview-b12)
OpenJDK 64-Bit Server VM (build 25.192-b12, mixed mode)
```

良いようです。

Java コンパイラも必要なら、追加インストールします。

```
> amzn yum install -y java-1.8.0-amazon-corretto-devel
> amzn javac -version
javac 1.8.0_192
```

## 削除

環境が不要になったり、最初から作り直したい場合は、WSL 標準の wslconfig コマンドで、登録解除が可能です。

```
> wslconfig -u amzn
```