Win10にWSL2とUbuntu 20.04をインストールする

2020年7月29日WSL 2Linux,Ubuntu,Windows,WSL2

Windows 10には「WSL(Windows Subsystem for Linux)」という、Windows上でLinuxディストリビューションを動かす仕組みがあります。Windows 10 May 2020になって、このWSLもバージョン2にアップデートされました。

WSL 2は、WSL 1よりもよりネイティブにLinuxが動くようになり、DockerもWSL 2に対応したものが公開されているようです。今回は、このWSL 2をインストールしてみました。ついでに、WSL1時代にインストールしていたUbuntu 18.04もWSL 2で動くように設定します。

システム要件の確認

WSL2はWindows 10の中でも「バージョン2004(May 2020 Update)・ビルド19041以上」もしくは「バージョン1903(May 2019 Update)・ビルド18362以上」である必要があります。

バージョンやビルドの確認は、Win+R(ファイル名を指定して実行)で「winver」と入力してOKを押します。次の画像の赤線部分に、バージョンとビルド番号が表示されますので、適合しているか確認します。

Windowsのバージョンの確認

古いバージョン、ビルドだった場合は、Windowsのアップデートを確認してみましょう。バージョン2004が配信されていたら、アップデートします。環境によっては、既知の不具合が報告されていて2004へのアップデートがブロックされているかもしれません。Insider Previewを使ったら配信されるかもしれませんが、基本的には配信されるまで待った方が無難でしょう。

もしくは、バージョン1903や1909のまま「KB4566116」の更新を適用しても使えるようになります。これを適用すると、OSのリビジョンナンバー(上の図の赤線でいう388の部分)が1049以上になります。

WSL2をインストールする

WSL2をインストールしていきます。

これ以降PowerShellを使っていますが、次の2つのコマンドと同等のことは「設定」アプリ → 「アプリ」 → 左の欄から「アプリと機能」 → 「オプション機能」 → 右の欄の「Windowsのその他の機能」からもできるはずです。

まず、管理者権限でPowerShellを開きます。"Linux 用 Windows サブシステム"をオンにするため、dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartを実行します。

PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.329
イメージのバージョン: 10.0.19041.388
機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

続いて"仮想マシン プラットフォーム"をオンにするため、dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartを実行します。

PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.329
イメージのバージョン: 10.0.19041.388
機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

ここでパソコンを再起動します。

次に、WSL2を既定のWSLバージョンとして設定します。こちらの設定を行うと、それ以降インストールするLinuxディストリビューションはWSL2で実行されます。(デフォルトバージョンは、後からでも変更可能です)

PowerShellを(一般ユーザー権限で)開いて、wsl --set-default-version 2を実行します。

PS C:\> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください

このとき、「https://aka.ms/wsl2kernel」を含むエラー(???というように文字化けしてるかも)が表示される場合は、後述のトラブルシューティングの項をご覧ください。

Linuxディストリビューションのインストール

MicrosoftストアからLinuxディストリビューションをインストールします。

今回はUbuntu 20.04をインストールします。Microsoftストアのリンクはこちらです。

Ubuntu 20.04のインストール
Ubuntu 20.04のインストール
Ubuntu 20.04のインストール

続いて、Linux側の初期設定を行っていきます。WindowsのスタートメニューからUbuntu 20.04を起動します。

このとき、「https://aka.ms/wsl2kernel」を含むエラー(???というように文字化けしてるかも)が表示される場合は、後述のトラブルシューティングの項をご覧ください。

初回起動時は、数分間待たされます。その後、一般ユーザー作成の案内が表示されますので、それに従ってユーザーを作成します。ユーザー名を入れた後、パスワードを2回入力します(パスワードは、***や●●●も表示されませんが、入力できています)。このユーザー名やパスワードは、Windowsログイン時のものと違くてOKです。

下図のように、プロンプトが表示されたら完了です。

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: ユーザー名
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 20.04 LTS (GNU/Linux 4.19.104-microsoft-standard x86_64)

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

  System information as of Sun Jul 26 11:37:17 JST 2020

  System load:  0.13               Processes:             8
  Usage of /:   0.4% of 250.98GB   Users logged in:       0
  Memory usage: 0%                 IPv4 address for eth0: 192.168.245.214
  Swap usage:   0%

0 updates can be installed immediately.
0 of these updates are security updates.


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/ユーザー名/.hushlogin file.
ユーザー名@ホスト名:~$

最後に、念のためUbuntu 20.04環境のバージョンアップをしておきます。apt updateapt upgradeでインストール済みパッケージのバージョンアップができます。(sudoのパスワードは、Unixユーザー作成時に入力したパスワードです)

ユーザー名@ホスト名:~$ sudo apt update
出力省略

ユーザー名@ホスト名:~$ sudo apt upgrade
出力省略

「wsl」コマンドの補足

WSLをインストールしている環境では、PowerShellやコマンドプロンプトから「wsl」というコマンドが利用できます。これについていくつか説明しておきます。

WSLのバージョンの確認

前述の説明でインストールしたUbuntu 20.04が、ちゃんとWSL2で動いているのか確認してみます。

コマンドプロンプトかPowerShellから、wsl --list --verboseを実行します(もしくは、ショートオプションを使ってwsl -l -v)。こちらのコマンドを実行すると、インストール済みのLinuxディストリビューション、WSLバージョン、デフォルトのLinuxディストリビューション(アスタリスク)が確認できます。

PS C:\> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         1
  Ubuntu-20.04    Running         2

Ubuntu 20.04は「VERSION:2」となっており、WSL2で実行されていることが分かります。私の場合、以前WSL1時代にUbuntu 18.04をインストールしていたので、2つのLinuxディストリビューションが列記されています。

WSLバージョンの変更

インストールしたLinuxディストリビューションをWSL1で動かすかWSL2で動かすかは、後からでも変更できます。

試しに、現在WSL1で動いているUbuntu 18.04を、WSL2で動くように設定してみます。

コマンドの書式は、wsl --set-version <distribution name> <versionNumber>です(ショートオプションはありません)。実際に実行してみると、WSLバージョンの変更のため数分間待たされます。

PS C:\> wsl --set-version Ubuntu-18.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

もう一度リストを表示します。

PS C:\> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-18.04    Stopped         2
  Ubuntu-20.04    Running         2

Ubuntu 18.04も「VERSION:2」になりました。

同様に、WSL1に戻すこともできます

デフォルトで起動するLinuxディストリビューション

上記のリストでUbuntu 18.04にアスタリスクが付いていますが、これはデフォルトで起動するLinuxディストリビューションであることを示します。つまり、コマンドプロンプトやPowerShellから「wsl」コマンドを実行すると、Ubuntu 18.04が起動します。

せっかくなので、デフォルトをUbuntu 20.04に変更してみます。

デフォルトの変更は、wsl --set-default <distributionName>です(もしくは、ショートオプションを使ってwsl -s <distributionName>)。

PS C:\> wsl --set-default Ubuntu-20.04

何も表示されず、プロンプトが帰ってきたらOKです。もう一度リストを表示してみます。

PS C:\> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2
  Ubuntu-18.04    Stopped         2

Ubuntu 20.04がデフォルトになりました。

これで、コマンドプロンプトなどからwslと打つだけで、Ubuntu 20.04が起動します。

PS C:\> wsl
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ユーザー名@ホスト名:/mnt/c/$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04 LTS"
ユーザー名@ホスト名:/mnt/c/$

ちなみに、wslではなくbashと入力しても、同様に起動できます。また、コマンドプロンプトやPowerShellではなく、スタートメニューの検索画面にwslbashと入れても起動できます。

マウス派なら、WindowsのスタートメニューからUbuntu 20.04をクリックしても実行できます。

トラブルシューティング

Error: 0x800701bcなどが出る場合

WSLのデフォルトバージョンを2にしたり、Ubuntu 20.04を初回起動したりしたとき、エラー0x800701bcなどが発生することがあります。

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 ???????????? ??????????????????????? https://aka.ms/wsl2kernel ?????????

Press any key to continue...
Error: 0x800701bc https://aka.ms/wsl2kernel

途中文字化けしてよく分からないですが、海外のサイトを見てみると、英語版Windowsだとこのようなエラーらしいです。(こちらのサイトから引用させていただきました)

Installing, this may take a few minutes...
WslRegisterDistribution failed with error: 0x800701bc
Error: 0x800701bc WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel

Press any key to continue...

訳すと「WSL2のカーネルコンポーネントが必要です。詳細はhttps://aka.ms/wsl2kernelを見てください」ということなので、この案内に従ってください。

https://aka.ms/wsl2kernelにアクセスすると、「最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロード」というリンクがありますので、ここからwsl_update_x64.msiをダウンロードします。

ダウンロードしたら実行してインストールすればOKです。とくに設定項目はなく[Next]を押すだけです。

WSL2カーネルコンポーネントのインストール

インストールが終わったら、続きの設定を行ってみてください。

2020年9月のWindowsアップデート後、WSL2が起動しなくなった場合

2020年9月のWindowsアップデートで、KB4571756が配信されています。このアップデートを適用すると、環境によってはWSL2や、WSL2を利用したDocker Desktopなどが動かなくなることがあるそうです。(「Element not found」などというエラーが出るそうです)

現在のところ対応策はなく、このアップデートをアンインストールするしかないそうです。

うちの環境では特に問題なく動いているのですが、もし「最近WSL2が動かなくなった」という症状が出る場合は、KB4571756のアンインストールを試してみると解決するかもしれません。(もちろん、セキュリティー上はよろしくないですが)

(2020/10/01追記1)

「Element not found」エラーについては、次のWindows 10半期アップデート(Windows 10 20H2、October 2020 Update)で修正される見込みのようです。

(2020/10/01追記2)

GitHubを見ていたところ、この問題が解決できた人がいるようです。

なんでも、正常にWSL2が動いているWindows 10機からC:\Windows\System32\VmSynthNic.dllをコピーしてきて、管理者権限コマンドプロンプトでregsvr32 C:\Windows\System32\VmSynthNic.dllを実行すると直るらしいです。

うちのパソコンは元々問題がなかったので、これで直るのかは確認できていないのですが、急いで直したい方は試してみる価値はあるかもしれません。詳しくは、こちらの記事(英語)をご覧ください。

(2020/10/06追記)

マイクロソフトが、Windows 10のアップデート「KB4577063」のプレビュー版をリリースしました。こちらの更新で、WSLが「Element not found」となるトラブルは解決されるとのことです。これを受けて、GitHubのIssueもクローズされました。この更新は、来月(11月)の月例で配信されるようです。

参考サイト

この記事は、Microsoftのドキュメントを参考にしました。

おすすめ記事

インストールしたWSL2環境を使って、いろいろ試してみています。よければ、これらの記事もご覧ください。

GUIアプリ関連

Docker関連

バックエンドにWSL2を使用したDocker環境の構築もしてみました。

トラブルシューティング記事

何かおかしいと思ったときは、一度WSL2の再起動を試してみてください。

通常、WSL2上のUbuntuからみたWindows側のフォルダは/mnt/c/などにマウントされており、所有者はUbuntuのユーザーになっています。これが、Ubuntuインストール直後だと所有者がrootになっており、それに起因してソフトがうまく動かないことがあります。それについては次の記事をご覧ください。(解決法は上と同じで、WSL2の再起動です。)

記事の変更履歴

Windows 10 ver1903以降対応になりました(2020/8/30)

今まで、WSL2はWindows 10 ver2004(May 2020 Update)以降に対応するとされていましたが、少し前のバージョンにバックポートされてWindows 10 ver1903(May 2019 Update)以降使用可能になりました。この点に関する参考サイトはこちらです。

実際に、未だにver2004が落ちてこないSurface Pro 7(Windows 10 ver1909 build18363)にWSL2をインストールしてみたので、それに合わせて記事の内容を少し変更しました。Surfaceの方でwinverを実行すると、こんな感じのバージョン表記でした。

Windowsのバージョンの確認(Surface Pro 7)

2回も再起動する必要ありませんでした(2020/8/30)

当初、「"Linux 用 Windows サブシステム"をオンにして再起動し、"仮想マシン プラットフォーム"をオンにしてもう一度再起動する」と紹介していましたが、途中の再起動は不要でしたので書き換えました。

初回起動時のエラーについて追記しました(2020/8/30)

Surfaceにインストールしたところ、Ubuntu 20.04を初回起動した際、0x800701bcエラーが発生して起動しませんでした。これはWSL2カーネルの更新で解決できますので、そのことについて追記しました。

created by Rinker
SB Creative
¥2,970(2020/10/28 03:05:59時点 楽天市場調べ-詳細)
著者・三宅英明
Bashシェルスクリプトをイチから学べる本です。よく見かけるものの一見トリッキーな「ifの条件式にコマンドを書く」、「&&や||でコマンドをいくつか並べる」などの書き方も、一つ一つ細かく動きを解説していて分かりやすかったです。また、grep、sed、xargs、getoptなどの使い方や正規表現についても、詳細に説明があります。
網羅的に書かれており、辞書的に使えるおすすめの書籍です。