WSL 2のインストール

Windows Subsystem for Linux (ver.2) の利用によって,Windows 上でも Linux を動かせるといいます.

開発しようとしたときに UNIX 系じゃないと色々不便なことがあるので,普段使用している Windows 上でも Linux が動かせるならこれほど嬉しいことはないと思っていましたが,そうであれば別に仮想環境を用意するのでも良いわけです.

というわけで,今更ながら WSL が何なのかということと,VirtualBox 等の仮想環境とどう違うのか踏まえつつ,WSL を導入してみました.

WSLとは

一知半解なので話半分に聞いてください.

一言で表すと,Hyper-V アーキテクチャを利用した仮想マシンプラットフォーム上で動き,ホストのリソースやファイルシステムと互換性を持たせた Linux(たぶん).

Hyber-V ハイパーバイザーの仮想化技術によって Linux が動き,Hyper-V ネットワークによりホスト OS の localhost を使用できます.

ちなみに,仮想化技術にはハイパーバイザー型とコンテナ型があるようです.

ハイパーバイザー型とコンテナ型の違い

ハイパーバイザー型は VirtualBox のようにホスト OS 上で動くハイパーバイザーが提供する仮想マシンにゲスト OS を入れることで,隔離した環境で運用する技術です.

ハイパーバイザー型仮想化では仮想マシンをエミュレートするのでリソースを予め用意して置く必要があり,ホスト OS とゲスト OS でそれぞれ専有することになります.

ホストにもゲストにもそれなりのリソースを割かないとまともに動かないので,多くのリソースが必要とされます.

ハイパーバイザー型にも Type-1 と Type-2 があるらしく,Type-1 は Hyper-V や KVM,Type-2 は VirtualBox や VMWare が挙げられます.

一方で,コンテナ型は Docker や Kubernetes に代表されるようにホスト OS 上で動くコンテナエンジンがホスト OS のカーネルを共有することで,ホストのリソースを使い分ける技術です.

PC 上のアプリケーションは ABI (Application Binary Interface) を介したシステムコールがカーネルの機能を呼び出すことで動作するので, カーネルが共通の仕組みを持っていればよく,OS に依存するファイルシステムの違いなどはコンテナエンジンが解決することでホスト OS 上で異なる OS のコンテナを動かすことができます.

WSL は Hyper-V アーキテクチャを利用しているので一見ハイパーバイザー型ですが,リソースはホストと共有されていて起動も早いので,コンテナ型とのいいとこ取りみたいな感じです.

他の仮想環境との併用

Hyper-V ハイパーバイザーは VirtualBox 等にも使用されており,WSL 2 を使用することで専有されるため,対策しない状態で WSL 2 と仮想環境を共存させることはできません.

しかし,Windows ハイパーバイザープラットフォームを利用することで共存もできるんだとか….

実行環境

  • Windows 10 Home (Version 2004,OS Build 19041.685)
  • Intel Core i7-7700
  • RAM 16GB

Windows 10 のバージョン及びビルドは winver コマンドで確認できます.

WSL 2の有効化

インストール

Windows Insider Program に参加していない場合はマニュアルでインストールする必要があります.

以降は Powershell (as Administrator) で操作していきます.

Powershell

> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

WSL1 が入るので,WSL 2 にアップデートします(Microsoft 推奨).

アップデートの準備

必須環境はアーキテクチャにより異なります.

  • x64: Version 1903 以降,Build 18362 以降
  • ARM64: Version 2004 以降,Build 19041 以降

それ以前のバージョン,ビルドでは WSL 2 に対応していないため,WSL1 ではなく WSL 2 を利用するのであれば OS アップデートが必要です.

バージョンを確認したら,予め仮想マシンプラットフォームを有効にしておきます.

Powershell

> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

ここまで完了したら,一度 PC を再起動します.

WSL 2アップデート

Linux カーネルアップデートパッケージをダウンロードして動かします(x64 向け).

(直リンクにつき注意)WSL 2 Linux kernel update package for x64 machines

Caution

ARM64 アーキテクチャを利用している場合は ARM64 向けパッケージを使用してください.

インストールウィザードに従って作業を進めればアップデートが完了し,Powershell で切り替えられるようになります.

Powershell

PS C:\WINDOWS\system32> wsl --set-default-version 2

Linuxインストールと起動

ディストリビューションの選択

準備が整ったので Microsoft Store で好きな Linux ディストリビューションを選択し,インストールします.

(Ubuntu 20.04 LTS にしてみました.)

初期設定

インストール後,起動すると新規のユーザ名とパスワードの入力を求められます.

ここで作成したユーザが起動時のデフォルトのユーザかつアドミニストレータになります.

参考:Create a user account and password for your new Linux distribution | Microsoft Docs

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: <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.1 LTS (GNU/Linux 4.19.128-microsoft-standard x86_64)

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

  System information as of Thu Dec 31 18:03:27 JST 2020

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

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/<username>/.hushlogin file.
<username>@PC:~$

起動したらアップデートしておきます.

Ubuntu

$ sudo apt update && sudo apt upgrade

PowerShell で WSL のバージョンを確認できます.

参考:WSL 2の初歩メモ

Powershell

> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

ファイルシステム

エクスプローラで Windows から Ubuntu へアクセスすることが可能です.

アドレスバーに \\wsl$ と入力することで,起動中のディストリビューションが表示されます.

また,Ubuntu から Windows のファイルシステム(ドライブ内ルートディレクトリ)には /mnt/c でアクセスできます(予測:マウント C ドライブの意).

おまけ

zsh有効化

Ubuntu のデフォルトは bash になっていますが,普段 macOS で使っている zsh の環境が作業しやすくてお気に入りなので,シェルも変更しました.

https://blog.mktia.com/change-shell-from-bash-to-zsh-in-ubuntu

Caution

Oh My Zsh のインストール中に何故か $HOME/root に書き換えられてしまう現象が起きました.

通常はホームディレクトリ下にインストールされるはずなので,作成された /root/.oh-my-zsh を一度削除して $HOME を本来のホームディレクトリに設定し直してから再インストールすると良いかもしれません.

$HOME を書き換えるとルートユーザのホームディレクトリ下すべて sudo しなければならなそうなので,adduser でルートユーザと別に管理者権限を持たないユーザを作成し,インストール等のみをルート権限で行うようにするのが一番良さそうです.

ターミナル見づらい問題

デフォルトの Ubuntu コンソールは PowerShell を引き継いでいるようなのですが,色の具合が非常に見づらく感じたので変えようと思っていました.

調べてみると,どうやら Microsoft がコンソールのテーマを変更するツールを出しているようです.iTerm2 のスキームで色を指定できるとのことで既存のものから選べば OK.

参考:Introducing the Windows Console Colortool | Windows Command Line

ただ,その途中で Windows 10 向けに新たな Windows Terminal が開発されていることを知り,見た目を変えなくても見やすかったのでそれを入れて解決しました.

Windows Terminal はタブごとにターミナルが管理できて,PowerShell だけでなく Command Prompt や WSL にも対応しているので,それでいいじゃんということで.

また,Windows Terminal を使わずとも VS Code で WSL を立ち上げたときには問題ありません.

最後に

Python 動かす程度なら問題ないのですが,node.js 使いたいとか make コマンドでインストールしたいとか思い始めると,Windows 環境はなかなか辛いものがある気がしていましたが,WSL 2 を使えば素の Linux との互換性が高いまま Windows 10 Home でもいい感じに使えそうです.

ディストリビューションの選択も Microsoft Store で選んでくるだけで Ubuntu が使えるのであの大きな .iso ファイルを落としてくる必要もありません(複数併存はたぶんできないけれども…).

参考