Windows 10 20H1 Build 18917のWSL2を使ってみた
Build 18917でWSL2が使えるようになったようなので、早速動かしてみました。
※7/6追記
WSL2のコロコロ変わるIPをMyDNSで何とかするで、WSL2の動的プライベートIPに対する対策記事を書きました。
MyDNSのDirectIP機能を使って、ドメインと結びつけます。
※6/15追記
WSL1に関しては少々前にこちらに書いたので参照してください。
その後、使ってみて面倒だと思ったのがIPアドレスがらみです。
WSL2を起動すると、Windows側にブリッジ用の仮想nicが作成され、クラスBやクラスCのプライベートIPがランダムに割り当てられます。これはWindowsを再起動すると削除され、次回起動時に再作成されます。
そのブリッジを利用して、そのネットワークのIPをLinuxのnicに割り当てるのですが、wsl --shutdownしてから起動し直すと、毎回違うIPが割り当てられます。これを固定する方法を模索しましたが、再起動で削除されるのでどうにもなりませんでした。
- Windows [vEthernet (WSL)]
WSL2起動時に作成され、Windowsをシャットダウンすると削除
IPはあらゆるプライベートIPからランダムで、クラスBやクラスCなどのサブネットすら定まらず、割り当て方があまりにダイナミック - Ubuntu [eth0]
vEthernet (WSL)のネットワーク内からdhcpで割り当てられ、WSLをシャットダウンし、再び起動するとIPは変更される。ip addr changeで無理矢理IPを割り当てることは可能だが、vEthernet (WSL)のIPが変わってしまうので意味を成さない
開発者の話だとnicに関しては、Windows側からlocalhostでアクセスできるようにするという話なので、現時点ではお試し版と言うことで我慢するしかありません。
このあたりを回避するにはddnsでプライベートIPを無理矢理通知するぐらいしか手が浮かびません。この通知も、プライベートIPを抽出してダイレクトに設定しなければいけないので、それなりに面倒です。
ちなみにWindowsからLinuxファイルへは、\wsl$\Ubuntu のようなUNCパスでアクセスできるようになっています。どうもSambaとは違う感じのようです。
1.インストール
ディストリビューションのインストール
基本はWSL1と同じです。
WSLを有効にしたらMicrosoftStoreなどでLinuxのディストリビューションをインストールします。
WSL2で動作させる前に、一度起動してインストールを完了させておく必要があります。
WSL1からWSL2への変換と起動
条件が揃ったら、以下のコマンドを入力。
- HyperVの有効化(要管理者権限)
> Dism /online /Enable-Feature /FeatureName:HypervisorPlatform
展開イメージのサービスと管理ツール
バージョン: 10.0.18917.1000
イメージのバージョン: 10.0.18917.1000
機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。
- パッケージの確認
> wsl --list --quiet
Ubuntu
- 変換
> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。
- 起動
起動は一瞬、待ち時間は存在しないらしいです。
> wsl
guest@pc:/mnt/c/Users/guest$
2.状態の確認
- nicがどうなっているのか
Hyper-Vで仮想化している都合上、ホストとipは共有されません。
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 8a:f1:77:37:c1:b6 brd ff:ff:ff:ff:ff:ff
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:61:25:af brd ff:ff:ff:ff:ff:ff
inet 192.168.18.92/24 brd 192.168.18.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe61:25af/64 scope link
valid_lft forever preferred_lft forever
3.nginxを入れて動かしてみる
$ sudo su -
# apt -y install nginx
# service nginx start
普通に仮想マシンで動いているだけなので、eth0に割り当てられているipにWindowsのブラウザからアクセスすればOK。
4.メモリの状態
- Linux
# free
total used free shared buff/cache available
Mem: 15230732 82700 14993136 52 154896 14910492
Swap: 0 0 0
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 856 536 ? Sl 16:10 0:00 /init
root 8 0.0 0.0 860 76 ? Ss 16:10 0:00 /init
root 9 0.0 0.0 860 80 ? R 16:10 0:00 /init
guest 10 0.0 0.0 22996 4900 pts/0 Ss 16:10 0:00 -bash
root 28 0.0 0.0 64216 4332 pts/0 S 16:11 0:00 sudo su -
root 29 0.0 0.0 63476 3768 pts/0 S 16:11 0:00 su -
root 30 0.0 0.0 22988 4888 pts/0 S 16:11 0:00 -su
root 464 0.0 0.0 140628 1508 ? Ss 16:12 0:00 nginx: master process /usr/sbin/nginx
www-data 465 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
www-data 466 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
www-data 467 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
www-data 468 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
www-data 469 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
www-data 470 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
www-data 471 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
www-data 472 0.0 0.0 143304 6096 ? S 16:12 0:00 nginx: worker process
root 526 0.0 0.0 37792 3308 pts/0 R+ 16:33 0:00 ps aux
- Windows
ちなみにWSL2はHyper-Vマネージャでは操作できないというか、そもそも何も無いことになっています。
6.とりあえず
さっき入れたばかりですが、まだ誰も記事を書いていないようだったので取り急ぎ書きました。
WSL1の最大の利点、仮想化によるメモリ消費が無いという魔法みたいな動作が無くなってしまったのが寂しいところです。
そもそもHyper-Vに普通にLinuxを入れても同じような気はするのですが、差別化としては起動の早さと軽さが売りのようです。
これがどの程度使えるのかは、もう少し使い込んでみないとなんとも言えません。