WSL2入門メモ


windows上で超軽量なLinuxが動くようになったみたいなのでその入門メモです。
wsl2を導入してUbutuとCentOS7やCentOS8(無料)を入れて起動したり、エクスポートしたり削除したりするとこまで。
wsl1からwsl2への移行の話はありません。環境はWindows 10 Homeです。

WSL2 (Windows Subsystem for Linux 2)とは

Linux 用 Windows サブシステムとは
要するに超軽量な仮想PCを利用してwindowsからLinuxが動かせるという感じみたいです。正直ハイパーバイザー(Hyper-v)とかはまだよく分からない...
ターミナルから数秒でLinuxが起動して使える、ターミナルを閉じてしばらくするとLinuxが自動で終了する、とコマンドプロンプト開いてコマンド打つくらいの気軽さでLinuxが使えるようになったみたいです、凄い!
dockerとかも動くみたいなので、windowsでの開発が捗りそう。

WSL2導入

まずWindowsをアップデートします。WSL2を使うにはWindows May Update 2020 (2004ビルド19041)以上が必要。
(私が導入した時点ではまだWindows Updateに来てなかったのでWindows 10 のダウンロードからアップデートしました。)

Windows 10 用 Windows Subsystem for Linux のインストール ガイドに従ってWSL2をインストールしていきます。
PowerShellを管理者として実行し、以下を実行します。

# "Linux 用 Windows サブシステム" オプション機能を有効にする
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# "仮想マシン プラットフォーム" のオプション コンポーネントを有効にする
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

ここで一旦PCを再起動して以下コマンドを実行します。ここからはPowerShellを管理者として実行する必要はありません。

# WSL 2 を既定のバージョンとして設定する
wsl --set-default-version 2

私は上記導入で上手く行かず、途中でWSL 2 Linux カーネルの更新から最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロードしてインストール後再起動して進めたらいけました。

Ubuntuのインストール

「Windows Store」から「Ubuntu」を検索してインストールします。終わり!簡単!
以下コマンドでインストール済みのディストリビューションの一覧が表示できます。

wsl -l -v # wsl --list --verbose

起動

wsl -d Ubuntu # wsl --distribution Ubuntu

初回起動時はLinux用アカウントとパスワードの設定を求められるので設定します。

双方向のアクセス

linux側からwindows上のファイルシステムにアクセスする方法

  • 最初から/mntにマウントされています。Cドライブなら/mnt/cです。

windows側からlinux上のファイルシステムにアクセスする方法

  • linux上でexplorer.exe .とするとエクスプローラーが起動します。

  • linuxを起動しておき、ファイラから\\wsl$ (\\wsl$\Ubuntu)を直接開いてもアクセスできます。

CentOSのインストール (コマンドからインストール)

「Windows Store」から「CentOS」を検索すると有料のものが出てきますが、githubでもWSL2用CentOSが配布されていてそちらなら無料で入れれるみたいです。

https://github.com/yuk7/CentWSL/releasesでCentOS7もCentOS8も配布されています。
今回はCentOS8を入れてみます。もちろん両方入れることも可能です。

Assetsのところにzipファイルがあるのでダウンロードして解凍します。
中のCentOS8.exeを実行してもインストールできますが、コマンドからインポートすれば任意の登録名でインストールでき、保存先も好きに指定できるので、せっかくなのでコマンドからインポートしてみます。
コマンドからのインポートなら同一ディストリビューションを複数インストールすることも可能です。

rootfs.tar.gzが入ってますがインポートするにはtar.gz形式からtar形式に変換しないと駄目?みたいです。
windowsで変換する方法を調べましたが、すぐにもうそんなことを調べる必要は無いことに気づきました!
さっき入れたUbuntu上から変換してみます。以下例ではE:\wls2\images\CentOS8下にrootfs.tar.gzを解凍した場合です。

wsl -d Ubuntu
cd /mnt/e/wsl2/images/CentOS8
gzip -d rootfs.tar.gz

予め保存先ディレクトリを作ってからインポートします。
以下の例ではE:\wsl2\testディレクトリを作りそこにインポートしています。

# wsl --import <任意の登録名> "<保存先パス>" "<rootfs.tarのパス>" --version 2
wsl --import test-centos8 "E:\wsl2\test" "E:\wsl2\images\CentOS8\rootfs.tar" --version 2

これでインストール完了です。E:\wsl2\test内にext4.vhdxファイルが生成されています。

インストールしたLinuxの削除・エクスポート等

Windows Subsystem for Linux のコマンド リファレンス

エクスポートは以下コマンドでできます。インポートの方法は上のCentOSのインストールのところに記載してます。

wsl --export <登録名> <保存先パス/ファイル名.tar>

削除は以下コマンドでできます。データ(ext4.vhdx)も削除されます。

wsl --unregister <登録名>

おまけ:Windows TerminalでWSL2をより便利に使う

いちいちPowerShellからコマンドでLinuxを起動するのも面倒なので「Windows Store」から「Windows Terminal」をインストールして設定していきます。
Windows Terminalを起動するとタブ横の「∨」をクリックするとインストール済みのディストリビューションの一覧が出てくるのでそこから開くだけでWSL2を起動できます。
また、Windows Terminal起動時にデフォルトでUbuntuを起動するようにしたり、起動時のディレクトリを設定することも可能です。
設定方法は「∨」→「設定」からsetting.jsonを開きます。

setting.json
{
  "$schema": "https://aka.ms/terminal-profiles-schema",

  "defaultProfile": "{********-****-****-****-************}",
~

  "profiles": {
    "defaults": {
      // Put settings here that you want to apply to all profiles.
    },
    "list": [
~
      {
        "guid": "{********-****-****-****-************}",
        "hidden": false,
        "name": "Ubuntu",
        "source": "Windows.Terminal.Wsl",
        "startingDirectory": "//wsl$/Ubuntu/usr/local"
      },
~
    ]
  },
~
}
  • "profiles""list"からデフォルトにしたいディストリビューションを探し、その"guid"の値を"defaultProfile"に設定するとWindows Terminal起動時のデフォルトに設定できます。
  • "profiles""list"からデフォルトにしたいディストリビューションを探し、"startingDirectory"を上の様に追記すれば起動時の開始ディレクトリを設定できます。

docker

次はdockerを入れてみてる予定。
普通にlinuxに直接dockerを入れれば良い様な気がするけど、「Docker Desktop WSL 2」というのもあるみたいでその辺りも調べたい。