WSLをWSL2に更新してみた

Windows 10 2004がリリースされ、WSL2が利用可能になったので、WSLのUbuntu LinuxをWSL2に変更してみた。

まず、このページのリンクから、wsl_update_x64.msiをダウンロードして実行。

その後、コマンドプロンプト等で、wslコマンドを使用して、WSLのバージョンを変更する。
まず、下記コマンドを実行して現在のバージョンを見てみよう。

C:\>wsl -l -v
  NAME                  STATE           VERSION
* openSUSE-Leap-15-1    Running         1
  Ubuntu                Running         1

次に、バージョンを2に変更したいディストリビューションを指定して、下記コマンドを実行する。今回はUbuntuをバージョン2にしてみる。

C:\>wsl Ubuntu --set-version 2

実行が終わると、指定したディストリビューションはWSL2で動作するようになる。

WSL2に変換後、使用してみて、ちょっと困った点がいくつか。

まず、WSL2はVMとして動作するので、今までは、Windowsと同じIPで動作していたものが、別IPとなる点。(仮想アダプタが作成され、Windows側とWSL側に別IPが振られる)

これは、WSL上のプログラムとWindowsのプログラムでポートがバッティングしなくなるので悪い点ばかりではないが、例えば、WSL上でasp.dotnet coreのアプリをdotnet run等で動かしてWindows側からブラウザでテストしようとした場合、launchsettings.jsonのIPを直さないと、Windows側からアクセスできない。
(デフォルトではhttps://localhost:5001;http://localhost:5000が指定されているため。)

後、デフォルト設定では名前解決が出来ない場合がある。これは、/etc/resolv.confの内容がクライアント(Windows)の仮想IPアドレスに設定されているので、Windows側に名前解決機能がないと、ホスト名等が解決されず、dotnet new等も失敗する。
(nuget.orgが解決できないため)

そういう場合は、/etc/resolv.confの内容をクライアント(Windows)のDNSサーバ設定に合わせる必要がある。
私の場合は以下のようなアドレスが振られていた。

イーサネット アダプター vEthernet (WSL):

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: fe80::bdb1:e7a4:4e3:46c4%45
   IPv4 アドレス . . . . . . . . . . . .: 172.23.240.1
   サブネット マスク . . . . . . . . . .: 255.255.240.0
   デフォルト ゲートウェイ . . . . . . .:
eth0      Link encap:Ethernet  HWaddr 00:15:5d:5d:24:31
          inet addr:172.23.251.65  Bcast:172.23.255.255  Mask:255.255.240.0
          inet6 addr: fe80::215:5dff:fe5d:2431/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12294 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2691 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15734461 (15.7 MB)  TX bytes:6991441 (6.9 MB)
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /e
tc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.23.240.1 # ←Windows側のIPアドレスが設定されている

速度に関してはVMになったことで、動作が遅くなるかと心配したが、普通に使う分には問題なさそうだ。

ちなみに、複数のディストリビューションをWSL2にしてみたところ、全て同じVMを共有しているようだ。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。
カテゴリー: Windows, 技術系 パーマリンク

2 Responses to WSLをWSL2に更新してみた

  1. takezou のコメント:

    名前解決ができなかったのは、どうも、この間乗換えたアンチウィルスソフトの影響だったようだ。
    クライアントマシンの内向け接続を全て拒否られてた・・・

  2. takezou のコメント:

    ちなみに、/etc/wsl.confを作成して、下記を記述しておかないと、
    generateResolvConf = false
    resolv.confはwslが再起動されるたびに上書きされるので注意!!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください