WSL2でUbuntuを使えるようにする


参考


Windows 10のWLS2でUbuntu20.04を使えるようにします。

Windows 10のアップデート

WSL2を使うにはWindowsのバージョン 1903以降、ビルド 18362以上である必要があります。
バージョンを確認するには「Winキー+Rキー」で『ファイル名を指定して実行』を開き、
名前にwinverを入力して「OK」をクリックします。

Windows Updateで最新化できれば良いですが、更新が来ない場合もあるので
その場合は更新アシスタントを利用します。
https://www.microsoft.com/ja-jp/software-download/windows10

WSL2をインストールする

管理者権限でPowerShellを開いて、以下を実行します。

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

ここまで実行したら一度再起動します。

再起動後、再度PowerShellを管理者権限で開き、以下コマンドを実行します。

wsl --set-default-version 2

もしカーネルの更新が必要という旨のメッセージが表示された場合は
以下を参考にカーネルの更新をしてから再実行します。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel

Ubuntuのインストール

Microsoft Storeで「Ubuntu」と検索し、Ubuntu20.04をインストールします。
その後、Ubuntuを起動すると初期設定が走るので、アカウント設定等をします。

デフォルトではaptでの取得元が海外になっているので、以下コマンドで日本に変更します。

sudo sed -i -e 's|archive.ubuntu.com|ftp.riken.go.jp/Linux|g' /etc/apt/sources.list

ここまででWSL2 でUbuntuを使えるようになりました。
ですが、デフォルトではCドライブにUbuntu用の領域をとってしまうので、Dドライブに移したいと思います。

WSLの場所を移動させるツール『LxRunOffline』を利用します。
まず、GitHubより圧縮ファイルをダウンロードして解凍しておきます。(LxRunOffline-vX.X.X-mingw.zip)
https://github.com/DDoSolitary/LxRunOffline/releases

次にWSLを配置するフォルダを作成しておきます。
本例ではD:\wslを作ります。

PowerShellを管理者権限で開き、以下コマンドで先ほど作成したフォルダに権限を付与します。

icacls D:\wsl /grant $env:USERNAME":(OI)(CI)(F)"

そのままPowerShellでLxRunOfflineを解凍したフォルダに移動し、以下コマンドを実行します。

net stop LxssManager
.\LxRunOffline.exe move -n Ubuntu-20.04 -d d:\wsl\Ubuntu-20.04
net start LxssManager

これでUbuntuのインストールは完了です。
もしアンインストールする場合は以下のコマンドを実行してください。

wsl -t Ubuntu-20.04
.\LxRunOffline.exe ui -n Ubuntu-20.04

※補足

WSL2配置の場所を移動させなくても/mnt/d/にDドライブがマウントされているのでDドライブを利用することは可能です。
ただし/mnt/配下のWindowsディレクトリへのアクセスは時間がかかるので、WSLの配置場所を変更する方がおススメです。

Ubuntu内で起動しているサーバーにWindows側からローカルとしてアクセスする

Ubuntu内のDocker等でWEBサーバーを立ち上げた際に、Windows側のブラウザからhttp://localhostでアクセスできない場合があります。
ローカルとして繋ぐために、Windows側のホームディレクト(C:\Users\hogeUser)直下に.wslconfigというファイルを作成し、
以下を記載しておきます。

[wsl2]
localhostForwarding=True

また、Windowsの高速スタートアップが有効になっていると上手くいかない事があるので無効にしておきます。
「設定>システム>電源とスリープ>電源の追加設定>電源ボタンの動作を選択する」を開き、
『高速スタートアップを有効にする(推奨)』のチェックボックスを外してください。

Ubuntuから参照するDNSサーバーを変更する

WSLでは名前解決に使うDNSサーバーが自動で設定され、/etc/resolv.confに記載されます。
このファイルは修正してもデフォルトではWSL起動の度に書き換えられてしまいます。

このままだと稀にUbuntu内で名前解決ができなることがあるので、
resolv.confが自動更新されないようにして、向け先をGoogleのDNSサーバー「8.8.8.8」に変更します。

まず、自動更新を止めるために/etc/wsl.confに以下を追記します。(ファイルがなければ新規作成)

[network]
generateResolvConf = false

※この内容は自動生成されているresolv.confにも記載されています。

この状態でWSLを再起動すると設定が反映されます。
PCを再起動するか、Windows側のPowershellなどでwsl --shutdownを実行してください。

WSLに再度アクセスして/etc/resolv.confにDNS設定をします。
もし/etc/resolv.conf/run/~へのリンボリックリンクになっている場合はunlinkコマンドでリンク解除しておきます。

/etc/resolv.confを編集し、nameserverを以下のように編集します。

nameserver 8.8.8.8

これでWSL(Ubuntu)での名前解決に使うDNSサーバーをGoogleのDNSサーバーに変更できました。

Ubuntu側からWindows側のフォルダで権限変更できるようにする

Ubuntu側では/mnt/内にWindows側のフォルダがあるので参照はできますが、
デフォルトではchmodでの権限変更ができません。

もしWindows側のフォルダ・ファイルの権限変更をしたい場合は/etc/wsl.confを作成して以下を記載します。

[automount]
options = "metadata"

※補足
Ubuntu側からWindows側のファイルへアクセスするのは激重なので、
基本的にはUbuntuからWindows側のファイルを扱うことは勧めません。