wsl2をインストールしてwindows上でlinuxを使いこなそう

![wsl2title.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11770/30be5569-b97e-5a9d-67e5-b504615955ad.png)

内です。[前回の記事ではwindows10の標準機能となったwindows subsystem for linux(WSL1)を有効化してkali linuxを動かす](https://qiita.com/Uchitaso/items/eed51ff4613c4bcc56bb)という手順をご紹介しました。
今回は6月12日にリリースされた「Windows 10 Insider Preview ビルド」で使用できるWSL2を有効化してubuntuを使用したいと思います。

手順はいつも通り、わかりやすさよりも**意識の高さ**を重視し、なるべくGUIを使用しない方法で導入していきます。

# WSL2を入れる理由
**WSL1上で動かなかったソフトが動く！**


WSL1は全てのLinux上のソフトウェアを動かせるようになるわけではないということは、前回記事でも触れていますが、仕組み的にLinuxカーネルが動いているわけではなく、カーネルへのファンクションコールをlxcore.sysとlxss.sysいうカーネルドライバーがWindowsカーネルへのファンクションコールに変換して動いており、これらカーネルドライバーのシステムコールの実装が不完全なことが、動かないソフトウェアがあることにも起因してます。
その点、WSL2では**Hyper-V上で**Linuxカーネルが動くので、大抵のプログラムが動くようになります。

## WSL2その他特徴

- wsl1で使えなかったnmapやtcpdumpが動くようになってる。
- wsl2にするとwsl1が使えなくなるわけではなく、上で動かすOSごとに選べる。例えばkali-linuxはwsl1で動かし、ubuntu-18.04はwsl2で動かすといったことができる。
- もともとwsl1で入れていたubuntuをwslコマンドでwsl2に変換するといったことができる。
- wsl1ではwindowsで実行されているため、linux側から見たipアドレスは、windows側のipアドレスと共有されていたが、
wsl2はvm上で動き、ネットワークコンポーネントも仮想化されているため、windowsホストと異なるIPアドレスが割り当てられる。
- これまではwindows10でhyper-vを有効化するにはwindows10 ProやEnterpriseでなければ不可能だったが、
Homeでもこのwsl2用のhyper-vベースの仮想化技術が利用できるようになった。そのかわりに、Hyper-vが使用されている場合、
VMWareやVirtualBox6以前のバージョンが実行できない。
- 仮想化になったため、起動が遅くなっただろうと推測しがちだが、むしろ早くなっている。

# wsl2インストールの前提条件
- Hyper-Vのテクノロジーを使用しているため、Hyper-Vの要件である、64bit版であること、BIOSレベルでの仮想化テクノロジーサポート等々をクリアしていることが必要。
- 「Windows 10 Insider Preview ビルド」をインストールすること。


# 導入手順
## まずはシステムバックアップを
2020年3月現時点ではWSL2は「Windows 10 Insider Preview ビルド」でのみ提供されており、2020年5月に提供されるフィーチャーアップデート版からWSL2がデフォルトの機能として提供される予定です。

そもそも「Windows 10 Insider Preview ビルド」は、将来安定板としてリリースされる予定の現在開発中の機能をいち早く入手する仕組みなので、安定性が失われるというトレードオフが生じます。
実際私もPreviewビルドをインストールしてwsl2を使ってから、**これまでは起きなかった不具合でwindows自体が自動再起動するということを何度も経験しております。**

なので、まずは何はともあれシステムのバックアップをとっておきましょう。

## Windows10 Insider Previewビルドをインストール

1. [設定]
2. [更新とセキュリティ]
3. [Windows Insider Program]
の順に選択し、[開始する]をクリックして最新のビルドにアクセスします。
指示に従いプレビューを受け取れるようにして、再起動を実施。

この手順は[microsoft公式](https://insider.windows.com/ja-jp/getting-started/)にのっているので、従ってサクッとPreviewビルドをインストールする。

**ポイント：デフォルトでプレビュービルドを受け取る頻度が「ファストリング」となってますが、
これは、以降も新しい機能を１週間単位でインストールすることになり、その度にアップデートと再起動でパソコンが
使えなくなる時間が増えるので、スローリング（1ヶ月ごと）を選択するほうがお勧めです。**

その後、Windows 10 ビルド18917以降になっていることをコマンドプロンプトを立ち上げて、以下コマンドで確認してください。

コマンドプロンプト：

    C:\Users\uchi>ver
    
    Microsoft Windows [Version 10.0.19037.1]

## wsl2が動くようにwindowsの仮想化機能を有効化
powershellを管理者として実行。
![powershell.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11770/9630aa49-00ec-b70c-bc0d-7323f52bbcbe.png)

そして以下、windowsの仮想化機能を有効化するコマンドを実行

    Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

実行後に有効化するためにコンピュータを再起動してください。

wsl1含めてwslを初めて有効化する場合は、
**起動したpowershellで以下コマンドを入力します。**

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

### wsl2にubuntuのインストール
microsoft storeを起動して、ubuntuで検索してインストールを実行するだけです。
今回いれたのは、Ubuntu18.04 LTS版です。
コマンドプロンプト：

    C:\Users\uchi>start ms-windows-store:

インストールしたubuntuをwsl2に変換する。
インストールした状態だと、wslのubuntuバージョンは1になっているので、powershellを起動して、2に変換する。

**wslのバージョン確認**
powershell：

    PS C:\Users\uchi&gt; wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-18.04    Running         1
      kali-linux      Stopped         1


**バージョン変換**
powershell：

    PS C:\Users\uchi> wsl --set-version Ubuntu-18.04 2

**wslのバージョン再確認**
powershell：

    PS C:\Users\uchi&gt; wsl -l -v
      NAME            STATE           VERSION
    * Ubuntu-18.04    Running         2
      kali-linux      Stopped         1

これでUbuntu-18.04をwsl2で動かしながらkali-linuxをwsl1で動かすということができました。

左側：wsl1上のkali linuxでtcpdumpを実行し、失敗している図
右側：wsl2上のubuntu-18.04でtcpdumpを実行し実行出来ている図
![wsl1_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/11770/603eb39a-0998-0fc1-96b3-0864798b0141.png)

wsl2のlinux kernelは以下githubでソース公開されてます。
[WSL2-Linux-Kernel](https://github.com/microsoft/WSL2-Linux-Kernel)

## wsl2をWindowsにインストールする手順まとめ
- wsl2にするとwsl1で使えなかったコマンドやプログラムがいろいろ使えるようになるよ。
- でも現時点ではWindows 10 Insider Preview ビルドでのみの提供だからwindowsが不安定になるよ。
- だからバックアップとってね。
- wsl1と2同居ができて使い分けて便利だね