Win10にWSL2とUbuntu 20.04をインストールする
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のアップデートを確認してみましょう。バージョン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 を参照してください
Linuxディストリビューションのインストール
MicrosoftストアからLinuxディストリビューションをインストールします。
今回はUbuntu 20.04をインストールします。Microsoftストアのリンクはこちらです。
続いて、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 update
apt 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ではなく、スタートメニューの検索画面にwsl
やbash
と入れても起動できます。
マウス派なら、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...
途中文字化けしてよく分からないですが、海外のサイトを見てみると、英語版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]を押すだけです。
インストールが終わったら、続きの設定を行ってみてください。
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を実行すると、こんな感じのバージョン表記でした。
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インストール方法の紹介記事も執筆しましたので、その案内を追記しました。
Bashシェルスクリプトをイチから学べる本です。よく見かけるものの一見トリッキーな「ifの条件式にコマンドを書く」、「&&や||でコマンドをいくつか並べる」などの書き方も、一つ一つ細かく動きを解説していて分かりやすかったです。また、grep、sed、xargs、getoptなどの使い方や正規表現についても、詳細に説明があります。
網羅的に書かれており、辞書的に使えるおすすめの書籍です。
ディスカッション
ピンバック & トラックバック一覧
[…] https://astherier.com/blog/2020/07/install-wsl2-on-windows-10-may-2020/ […]