CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
前回は、bashの履歴の展開の応用編について説明しました。今回は5月末にリリースされたWSL2について説明します。
WSL(Windows on Linux)は、Linuxカーネルへの命令をWindowsカーネルに変換して伝える仕組みで動作します。ネットワークがWindowsと同じものを使用し、/ パーティション を wsl ファイルシステムという仮想的なファイルシステムでマウントしています。
Linuxカーネルを持たないことから、ネットワークコマンドの一部が使用できない、カーネルモジュールに関わるコマンドを使用できないという問題がありました。
WSL2では、Windows10 2020 May Updateから追加された機能「仮想マシン プラットフォーム」という軽量の仮想マシンを使用してLinuxカーネル(どのディストリビューションでも共通のもの)を動作します。このため、いくつかの違いが発生します。
現在使用中のWSLを、そのままWSL2へ移行可能です。
Windowsアップデートを行い、Windows 2020 Mayを適用(何度か再起動を繰り返す)
管理者権限のあるPowerShell もしくは cmd.exe を起動し以下のコマンドを実行し、「Linux 用 Windows サブシステム」と「仮想マシン プラットフォーム」を有効にする
> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
「WSL 2 Linux カーネルの更新」の手順通り、x64 マシン用の最新の WSL2 Linux カーネル更新プログラム パッケージをダウンロードし、パッケージを実行してインストールする
再起動を実施し、管理者権限のあるPowerShellもしくはcmd.exeを実行する
現在の状況を確認する
PS C:\WINDOWS\system32> wsl.exe -l -v
NAME STATE VERSION
* Ubuntu-18.04 Running 1
Ubuntu-16.04 Running 1
wsl.exe
を使用して、指定ディストリビューションのバージョンを2に変更する
PS C:\WINDOWS\system32> wsl.exe --set-version Ubuntu-18.04 2
Ubuntu-18.04を起動すると、WSL2になっています。
では、実際にディストリビューションを起動し、WSL2で変更になったことを確認しましょう。
$ mount
/dev/sdc on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
tmpfs on /mnt/wsl type tmpfs (rw,relatime)
tools on /init type 9p (ro,relatime,dirsync,aname=tools;fmask=022,loose,access=client,trans=fd,rfd=6,wfd=6)
none on /dev type devtmpfs (rw,nosuid,relatime,size=52715152k,nr_inodes=13178788,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,gid=5,mode=620,ptmxmode=000)
none on /run type tmpfs (rw,nosuid,noexec,noatime,mode=755)
none on /run/lock type tmpfs (rw,nosuid,nodev,noexec,noatime)
none on /run/shm type tmpfs (rw,nosuid,nodev,noatime)
none on /run/user type tmpfs (rw,nosuid,nodev,noexec,noatime,mode=755)
binfmt_misc on /proc/sys/fs/binfmt_misc type binfmt_misc (rw,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (rw,nosuid,nodev,noexec,relatime,mode=755)
cgroup2 on /sys/fs/cgroup/unified type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
cgroup on /sys/fs/cgroup/cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
cgroup on /sys/fs/cgroup/net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_prio)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids)
cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,rdma)
C:\ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8)
$ ip addr show
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 e2:1d:71:66:f2:db brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether c2:9c:8d:b0:5e:f8 brd ff:ff:ff:ff:ff:ff
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:15:5d:83:10:8e brd ff:ff:ff:ff:ff:ff
inet 172.31.194.177/20 brd 172.31.207.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::215:5dff:fe83:108e/64 scope link
valid_lft forever preferred_lft forever
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
link/sit 0.0.0.0 brd 0.0.0.0
$ uname -r
4.19.104-microsoft-standard
root ファイルシステムがext4になっていること、ネットワークがWindowsのネットワークとは異なること、カーネルバージョンの変更が分かります。
また、PowerShell側でも、WSL2のファイルシステムにアクセスできることが分かります。
PS C:\Users\User> cd \\wsl$\Ubuntu-18.04
PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu-18.04> ls
ディレクトリ: \\wsl$\Ubuntu-18.04
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2020/06/14 17:24 home
d----- 2020/04/17 0:52 srv
d----- 2020/07/03 8:23 etc
d----- 2020/06/15 22:26 opt
d----- 2020/06/14 17:24 root
d----- 2020/06/15 19:14 lib
d----- 2020/06/18 14:28 mnt
d----- 2020/04/17 0:52 usr
d----- 2020/04/17 0:52 media
d----- 2020/04/17 0:52 lib64
d----- 2020/07/03 8:23 sys
d----- 2020/07/03 8:25 dev
d----- 2020/06/15 19:47 sbin
d----- 2020/04/17 1:06 boot
d----- 2020/06/15 19:47 bin
d----- 2020/07/05 13:28 run
d----- 2020/07/03 8:23 proc
d----- 2019/10/30 21:17 snap
d----- 2020/07/05 13:31 tmp
d----- 2020/06/15 22:26 var
d----- 2019/04/11 1:35 lost+found
------ 2020/06/13 19:01 631968 init
PS Microsoft.PowerShell.Core\FileSystem::\\wsl$\Ubuntu-18.04>
今回は、WSL 2 と WSL2へ移行する手順について説明しました。ユーザランドを使用するだけならWSLで問題ありませんが、今後何らかのサービスを起動するためにはWSL2の方が有利でしょう。次回はWSL2の補足事項と、WSL2でサービスを動かす方法を説明します。次回をお楽しみに。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes