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で動くように設定します。

WindowsのInsider Preview参加者の方へ(追記)

Windows 10のInsider Preview(ビルド21362以降)やWindows 11のInsider Previewをお使いの方は、本記事の「WSL2をインストールする」から「Linuxディストリビューションのインストール」のストアからアプリを落とすところまでの作業が簡素化されています。その上、追加設定不要でGUIアプリも動かせる、「WSLg (Windows Subsystem for Linux GUI)」のプレビュー版も利用できますので、Insider Preview参加者向けの記事をご覧いただくことをおすすめします。

Windows 10 Insider Previewの方向けのインストール方法は別記事にまとめていますので、こちらをご覧ください。

また、Windows 11 Insider Preview参加者向けのインストール方法はこちらをご覧ください。

2021/06/14時点の通常リリース版である「21H1」では、上記の方法はできませんので、本記事(次項以降)の通りにセットアップを進めてください。

システム要件の確認

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」を含むエラー(???というように文字化けしてるかも)が表示される場合は、後述のトラブルシューティングの項をご覧ください。

PS C:\> wsl --set-default-version 2
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細に ついては https://aka.ms/wsl2kernel を参照してください
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
WSL 2カーネルの更新を促すエラーです

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

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

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

「Ubuntu 20.04」アプリをインストールします
インストール中
インストールが終わりました

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

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

「Error: 0x800701bc」は、WSL 2カーネルの更新を促すエラーです

初回起動時は、数分間待たされます。その後、一般ユーザー作成の案内が表示されますので、それに従ってユーザーを作成します。ユーザー名を入れた後、パスワードを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」は、WSL 2カーネルの更新を促すエラーです

途中文字化けしてよく分からないですが、海外のサイトを見てみると、英語版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にアクセスすると、「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」というリンクがありますので、ここから「wsl_update_x64.msi」をダウンロードします(2020/12/27:リンクの文言が変わっていたので修正しました)。

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

WSL 2 カーネルのアップデート

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

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カーネルの更新で解決できますので、そのことについて追記しました。

Insider Preview(ビルド21362以降)の方向けの案内を追記しました(2021/6/14)

Windows 10 Insider Preview(ビルド21362以降)ではWSLgのプレビュー版が利用できるようになったのと同時に、WSL2の初期設定も簡素化されました。これに関する案内を追記しました。

Windows 11 Insider Previewの方向け案内を追記しました(2021/7/10)

Windows 11 Insider PreviewでのWSLgインストール方法の紹介記事も執筆しましたので、その案内を追記しました。

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