WSL2～WindowsでLinux～「その１：導入編」（旧バージョン）

WSL2は「Windows Subsystem for Linux2」の略で、Windows上でLinuxが動くものです。
Linux(WSL2)がとても手軽だった為、導入手順をまとめました。

<font color="Red">**本記事は、Windows10のバージョン20H2以前の手順になります**</font>


# 1. はじめに
## この記事の概要
1. WLS2の導入手順
2. 遭遇したエラーの回避方法

基本的にはマイクロソフトの手順でWSL2を導入しました。
その際、Linuxディストリビューション（Ubuntu-20.04）のインストールでエラーになった端末があった為、その回避方法について書き留めます。

## 記事の前提となる環境
- 導入するディストリビューション
Ubuntu-20.04（Windows Storeから導入）

- 導入対象のホスト（エラーが発生した）
  - Windows10 Pro 64bit 1909（OSビルド 18363,1198）  
      - uname -r の結果：4.19.128-microsoft-standard
      - CPU：Core-i7 5500U
      - プログラム：Windows Subsystem for Linux Update 4.19.128
  - Winodws10 Pro 20H2（OSビルド 19042,630）

- 導入対象のホスト（こちらはエラーが発生しなかった）
  - Windows10 Pro 64bit 1909（OSビルド 18363,1198）
      - uname -r の結果：4.19.128-microsoft-standard
      - CPU：Core-i7-7500U
      - プログラム：Windows Subsystem for Linux Update 4.19.128
      - KB4023057

エラーに至る環境的な違いが明確にわからなかったものの、なんとなくウィルス対策ソフトが原因のような気がしています。
ご参考になればと思い掲載しています。

## WSLの概要
- Windows上でLinuxが利用できる。
- Windowsとの連携が容易。
- WSL2は軽量仮想マシン上で動き、システムコールの互換性が高い。
    - https://docs.microsoft.com/ja-jp/windows/wsl/about
    - https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html

# 2. 導入本編
## WSL2の導入
#### (1) 管理者権限でプロンプトを起動
管理者権限でプロンプトを起動します。

```
powershell start-process cmd -verb runas
```

#### (2)システム要件を満たすかを確認する
x64 システムの場合: バージョン 1903 以降、 ビルド 18362 以上。
ARM64 システムの場合: バージョン 2004 以降、 ビルド 19041 以上。
18362 より前のビルドは WSL 2 をサポートしていません。とのこと。

バージョンとビルド番号を確認するにはプロンプトで「winver」を実行する。
Windows ロゴ キー + R キー を押して「winver」を実行してもよい。

```
winver
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324770/d49c40b1-4fe9-1171-8072-5f11ff01079a.png)


#### (3) Linux用Windowsサブシステムを有効にする
```
C:\>dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
```
- 実行結果

```
展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1139

イメージのバージョン: 10.0.18363.1198

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
```


#### (4)仮想マシンの機能を有効にする
```
C:\>dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
- 実行結果

```
展開イメージのサービスと管理ツール
バージョン: 10.0.18362.1139

イメージのバージョン: 10.0.18363.1198

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
```

#### (5)再起動
再起動します。

```
C:\>shutdown /r /t 0 
```

#### (6)Linuxカーネル更新プログラムのインストール
- 下記をダウンロード。
    - https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
- 実行してインストール。


#### (7)WSL2を既定のバージョンとして設定する
```
wsl --set-default-version 2
```

- 実行結果

```
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
```

#### (8)Linuxディストリビューションをインストールする
1. WindowsStoreにアクセスする。→[Windows Store](https://aka.ms/wslstore)
2. [Ubuntu 20.04 LTS]を選択してインストール。

    ※Ubuntsu20.04への直接リンク：https://www.microsoft.com/store/apps/9n6svws3rx71


#### (9)WSLを起動する。
WindowsStoreでUbuntsu20.04TLSの起動ボタンを押します。

うまくいけばusernameを尋ねられてLinuxのプロンプトが表示される。
**筆者の場合は、以下のエラーに遭遇した。**

```
Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x80370114
Error: 0x80370114 ???????????????????????????????????

Press any key to continue...
```

以下、エラーの回避方法を２つ記載します。

# 3. トラブルシュート

2種類の方法を紹介しています。

## 回避方法１（vmcomputeの設定を変更する）

この回避方法、マイクロソフトのCommunityに投稿されてた方法です。
https://answers.microsoft.com/en-us/insider/forum/all/wsl-2-installing-linux-failed-error-code/bae391d1-4215-4d93-b0c4-3d96404a7c74?auth=1

#### (1)[スタート]→[設定]→[更新とセキュリティ]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324770/63dc2ebb-2382-278c-cb30-e18cfb8e3c6c.png)
#### (2)[Windowsセキュリティ]→[Windowsセキュリティを開く]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324770/2f4f8e69-5a28-09ad-bfbb-b047c0235761.png)
#### (3)[アプリとブラウザーコントロール]→[Exploit Protectionの設定]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324770/c4363651-1900-69d6-1718-899a7a380dd0.png)
#### (4)[プログラム設定]→[vmcompute.exe]→[編集]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324770/574102ef-a718-5c24-120d-bae67e6940c3.png)
#### (5)[制御フローガード(CFG)]
**[システム設定の上書き]をオフにする**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324770/27e70247-3321-cf2c-da55-fda74cf05579.png)

#### (6)サービスを起動する。
```
net start vmcompute
```

#### (7)個人的には念のためOSを再起動
（手順には再起動は指示されてないが、念のため）

```
C:\>shutdown /r /t 0
```

#### (8)再びUbuntuを起動

```
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: dev
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

dev@pc:~$
```

## 回避方法２（WSL1で導入する）

WSL1モードで導入すればvmcomputeの変更は不要です。

#### (1)WSL1モードにする。
```
C:\> wsl --set-default-version 1
```
#### (2)起動する。
```
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04.1 LTS (GNU/Linux 4.4.0-18362-Microsoft x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Nov 27 12:15:55 JST 2020

  System load:    0.52      Users logged in:       0
  Usage of /home: unknown   IPv4 address for eth0: 172.16.91.38
  Memory usage:   41%       IPv4 address for eth2: 172.18.78.193
  Swap usage:     0%        IPv4 address for eth3: 172.17.234.113
  Processes:      7

1 update can be installed immediately.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable


The list of available updates is more than a week old.
To check for new updates run: sudo apt update


This message is shown once once a day. To disable it please create the
/home/dev/.hushlogin file.
```

導入されたディストリビューションをWSLコマンドで確認する。（Windowsのコマンドプロンプトから確認）

```
C:\> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         1
```

以上でインストール出来ましたでしょうか？


# 4. 操作例
## WSLの操作
#### ディストリビューションの一覧
```
C:\> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Running         2
```

#### ディストリビューションを指定して起動
```
C:\> wsl -d Ubuntu-20.04
dev@pc:/$ ps
  PID TTY          TIME CMD
  262 pts/2    00:00:00 bash
  275 pts/2    00:00:00 ps
dev@pc:/$ uname -r
4.19.128-microsoft-standard
dev@pc:/$ cat /etc/issue
Ubuntu 20.04.1 LTS \n \l
```

#### LinuxからWindowsのファイルを見る
Cドライブは/mntにマウントされている。

```
C:\> wsl -d Ubuntu-20.04
dev@pc:/$ cd /mnt
dev@pc:/$ ls -l
total 4
drwxrwxrwx 1 dev     dev     4096 Dec 10 08:15 c
drwxrwxrwx 1 dev     dev     4096 Dec 10 08:14 d
drwxrwxrwx 2 root    root    4096 Nov 25 22:24 m
drwxrwxrwt 5 root    root     100 Dec 12 21:16 wsl
```

#### WSLのバージョンを変換する
WSL1で作成した後、WSL2にする例。

```
C:\> wsl --set-version Ubuntu-20.04 2
```
#### ディストリビューションのエクスポート
wsl --export <ディストリビューション> <ファイル名>

```
C:\> wsl --export Ubuntu-20.04 c:\work\Ubuntu-20.04.tar
```

#### ディストリビューションのインポート（コピー）
wsl --import <ディストリビューション> <インストール場所> <ファイル名> [オプション]

```
C:\> wsl --import MyUbuntu-20.04-dev c:\work\MyUbuntu-20.04-dev c:\work\Ubuntu-20.04.tar
C:\> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-20.04           Stopped         2
  MyUbuntu-20.04-dev     Stopped         2
C:\> dir /B c:\work\MyUbuntu-20.04-dev
ext4.vhdx
```

#### ディストリビューションの削除 
```
C:\> wsl --unregister <ディストリビューション>
```

#### WSLが有効になっているか確認する方法。
管理者権限でパワーシェルを起動する。

```
powershell start-process powershell -verb runas
```
WSLの有効性を確認するコマンドを実行する。

```
Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```
実行結果

```
FeatureName      : Microsoft-Windows-Subsystem-Linux
DisplayName      : Linux 用 Windows サブシステム
Description      : ネイティブなユーザー モードの Linux シェルおよびツールを Windows で実行するためのサービスと環境を提
                   供します。
RestartRequired  : Possible
State            : Enabled
CustomProperties :
                   ServerComponent\Description : ネイティブなユーザー モードの Linux シェルおよびツールを Windows で実
                   行するためのサービスと環境を提供します。
                   ServerComponent\DisplayName : Linux 用 Windows サブシステム
                   ServerComponent\Id : 1033
                   ServerComponent\Type : Feature
                   ServerComponent\UniqueName : Microsoft-Windows-Subsystem-Linux
                   ServerComponent\Deploys\Update\Name : Microsoft-Windows-Subsystem-Linux
```
参考：https://docs.microsoft.com/ja-jp/windows/wsl/troubleshooting

# 5. まとめ
Windows上でLinuxをかなり気軽に使えると思います。
DockerDesktopを導入する場合は、WSL1ではなくWSL2で導入するようにしてください。
WindowsStoreで使えるディストリビューションは限定的ですが増える事を期待しています。



# 6. 参考文献
- WSLドキュメント
  - https://docs.microsoft.com/ja-jp/windows/wsl/

- WSLの導入
  - https://docs.microsoft.com/ja-jp/windows/wsl/install-win10
  - https://docs.microsoft.com/en-us/windows/wsl/install-win10#update-to-wsl-2

- WSL1とWSL2の比較。WSL2でのVHD(ディスク領域）の拡張。
  - https://docs.microsoft.com/ja-jp/windows/wsl/compare-versions

- Windows10-1903でのWLSのサポート
  - https://devblogs.microsoft.com/commandline/wsl-2-support-is-coming-to-windows-10-versions-1903-and-1909/