(2024/02/09 追記) 最新版を作成しました。
(2022/09/19 追記) Power Shellから wsl --install を行うと、WSL2がインストールされるようになりました。ネットワークも特別な設定は不要となっています。
暑いぞ~~。とは言っても昨日と変わらないか。最近疲れ気味なので今日はバイトを早めに切り上げて帰ってきました。
さて、Google Newsを眺めていたら、WSL2がWindows 10 2004を待たずとも使えるようになったというニュースが飛び込んできました。
中々来ないWindows 10 2004
Windows 10 2004 は、2020/04のWindows 10アップデートで、5月に配布が開始され、問題のないマシンから適用されていくということだったのですが、私のマシンにはまだ来ていません。 まだかなあと心待ちにしていたところに、私の使っているWindows 10 1909でも最新パッチをあてれば使えるようになったこのニュースです。
喜んで適用してみたので、そのメモを残しておきます。
WSL2の適用
以下の操作はパワーシェルを管理者で起動して実行します。
仮想マシン機能を有効にする
以下のコマンドを入力して仮想マシン機能を有効にします。システムが再起動されます。
PS C:\WINDOWS\system32> Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -NoRestart PS C:\WINDOWS\system32> Restart-Computer
デフォルトをWSL2に変更
システム再起動後、パワーシェルを管理者で起動して以下のコマンドを実行する。
PS C:\WINDOWS\system32> wsl.exe --set-default-version 2 WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
カーネルの更新が必要と言われますが、書かれているサイト(Manual installation steps for older versions of WSL | Microsoft Learn)から、インストールモジュールをダウンロードしてインストールするだけです。
インストールされているものをWSLに変換
現在インストールされているリストを表示する。VERSIONがWSLのバージョンを表しています。
PS C:\WINDOWS\system32> wsl -l -v NAME STATE VERSION * Ubuntu-18.04 Running 1
NAMEに表示された名称を指定して、バージョンを2にあげます。
PS C:\WINDOWS\system32> wsl --set-version Ubuntu-18.04 2 変換中です。この処理には数分かかることがあります... WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください 変換が完了しました。
バージョンを確認するとWSL2になったことがわかります。
PS C:\WINDOWS\system32> wsl -l -v NAME STATE VERSION * Ubuntu-18.04 Stopped 2
WSL2ではネットワーク環境が変わる点に注意が必要
WSL1はネットワークがWindowsと同じものだったので、127.0.0.1でWindowsとWSLが相互にアクセスできましたが、WSL2では仮想ネットワークインターフェースを使うようになったので、WSL2は別のIPアドレスが割り当てられるようになりました。このIPアドレスは動的に割り当てられるので結構厄介です。
WindowsからWSL2へは、localhostでアクセスした場合にWSL2にフォワーディングする機能が実装されていますので、それを使うようにすれば問題なさそうです。
WSL2からWindowsへのアクセスは/etc/resolv.confのnameserverに割り当てられているアドレスにアクセスする必要があるようです。
$ cat /etc/resolv.conf # This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf: # [network] # generateResolvConf = false nameserver 172.17.230.33
このアドレスはWSL2の起動時に動的に割り当てられるので、ちょっと面倒そう。