47歳でやむなくセミリタイア

病気のためセミリタイアをすることに。現在は週20時間程度のバイトをしています。その他、雑多なことを記録として書いています。

技術メモ: WSL2の設定 (情報が古いです)

(2024/02/09 追記) 最新版を作成しました。

ekutajp.hatenablog.com

(2022/09/19 追記) Power Shellから wsl --install を行うと、WSL2がインストールされるようになりました。ネットワークも特別な設定は不要となっています。

暑いぞ~~。とは言っても昨日と変わらないか。最近疲れ気味なので今日はバイトを早めに切り上げて帰ってきました。

さて、Google Newsを眺めていたら、WSL2がWindows 10 2004を待たずとも使えるようになったというニュースが飛び込んできました。

forest.watch.impress.co.jp

中々来ない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.1Windowsと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の起動時に動的に割り当てられるので、ちょっと面倒そう。

WSL2で色々と遊んでみたいと思います。WSL2ではtensorGPUが使えるらしいのでその辺りからかな。