WSL

WSLでsystemdのPID=1に対応したらしいので試してみた

はじめに

WSLでsystemdをPID=1に対応しました。非常にうれしいニュースです。

Systemd support is now available in WSL! - Windows Command Line
Systemd support is now available in WSL! - Windows Command Line

Systemd support is now available in WSL! The Windows Subsystem for Linux (WSL) can now run systemd i ...

devblogs.microsoft.com

現状はWindows 11かWindows 10 Insider Programのみです。ビルドのバージョンは22000.0以上です。

WSLのインストール

WSLのインストールは通常通りインストールして問題ないです。

そのうえでWSLをアップデートします。

GitHubからダウンロードしてインストールするのが確実だと思います。

GitHub - microsoft/WSL: Issues found on WSL
GitHub - microsoft/WSL: Issues found on WSL

Issues found on WSL. Contribute to microsoft/WSL development by creating an account on GitHub.

github.com

0.67.6をダウンロードしてインストールします。

以上でWSLのインストール/バージョンアップは完了です。

PS C:\Users\azureuser> wsl --version
WSL version: 0.66.2.0
Kernel version: 5.15.57.1
WSLg version: 1.0.42
MSRDC version: 1.2.3401
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22000.1042
PS C:\Users\azureuser> wsl --version
WSL version: 0.67.6.0
Kernel version: 5.15.62.1
WSLg version: 1.0.44
MSRDC version: 1.2.3401
Direct3D version: 1.606.4
DXCore version: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows version: 10.0.22000.1042

確認

Ubuntu 20.04で試しています。

通常はsystemdは起動していません。

user@vm1:~$ systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is dow

下記のファイルを書き換えます。

/etc/wsl.conf

[boot]
systemd=true

プロセスを確認してみます。systemdがPID=1で動作していることがわかります。

user@vm1:~$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 3.1 0.2 103892 11144 ? Ss 10:07 0:00 /lib/systemd/systemd --unit=graphical.target
root 2 0.0 0.0 2412 1224 ? Sl 10:07 0:00 /init
root 56 0.8 0.3 43256 15072 ? S<s 10:07 0:00 /lib/systemd/systemd-journald
root 76 0.5 0.1 21612 5084 ? Ss 10:07 0:00 /lib/systemd/systemd-udevd
systemd+ 83 0.4 0.1 18380 7448 ? Ss 10:07 0:00 /lib/systemd/systemd-networkd
root 244 0.0 0.0 3644 1452 ? Ss 10:07 0:00 snapfuse /var/lib/snapd/snaps/snapd_14978.snap /snap/root 245 3.5 0.0 3768 1864 ? Ss 10:07 0:00 snapfuse /var/lib/snapd/snaps/core20_1361.snap /snap/root 246 0.0 0.0 3832 1656 ? Ss 10:07 0:00 snapfuse /var/lib/snapd/snaps/lxd_22526.snap /snap/lxsystemd+ 253 0.6 0.3 23928 12064 ? Ss 10:07 0:00 /lib/systemd/systemd-resolved
root 256 0.1 0.2 241048 9152 ? Ssl 10:07 0:00 /usr/lib/accountsservice/accounts-daemon
message+ 257 0.4 0.1 7536 4392 ? Ss 10:07 0:00 /usr/bin/dbus-daemon --system --address=systemd: --noroot 260 1.0 0.4 29196 17708 ? Ss 10:07 0:00 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-ssyslog 261 0.1 0.1 224348 6532 ? Ssl 10:07 0:00 /usr/sbin/rsyslogd -n -iNONE
root 262 2.5 0.9 873260 37704 ? Ssl 10:07 0:00 /usr/lib/snapd/snapd
root 263 0.6 0.1 16672 7476 ? Ss 10:07 0:00 /lib/systemd/systemd-logind
root 264 0.5 0.3 394916 13348 ? Ssl 10:07 0:00 /usr/lib/udisks2/udisksd
root 282 0.0 0.0 8540 2768 ? Ss 10:07 0:00 /usr/sbin/cron -f
root 291 0.8 0.5 108108 20504 ? Ssl 10:07 0:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattroot 305 0.0 0.0 7356 2244 pts/0 Ss+ 10:07 0:00 /sbin/agetty -o -p -- \u --noclear --keep-baud consolroot 310 0.0 0.0 5832 1844 tty1 Ss+ 10:07 0:00 /sbin/agetty -o -p -- \u --noclear tty1 linux
root 316 0.1 0.2 236312 8616 ? Ssl 10:07 0:00 /usr/lib/policykit-1/polkitd --no-debug
root 388 0.9 0.1 16232 6196 ? Ss 10:07 0:00 /lib/systemd/systemd-timedated
root 442 0.0 0.0 2412 108 ? Ss 10:07 0:00 /init
root 443 0.0 0.0 2428 108 ? S 10:07 0:00 /init
user 444 0.9 0.1 10044 5108 pts/1 Ss 10:07 0:00 -bash
root 445 0.0 0.1 5696 4156 pts/2 Ss 10:07 0:00 /bin/login -f
user 576 0.5 0.2 18408 9360 ? Ss 10:07 0:00 /lib/systemd/systemd --user
user 577 0.0 0.0 105248 3256 ? S 10:07 0:00 (sd-pam)
user 582 0.2 0.1 10020 4920 pts/2 S+ 10:07 0:00 -bash
user 593 0.0 0.0 10616 3220 pts/1 R+ 10:08 0:00 ps aux

まとめ

WSLでsystemdに対応することが簡単に行えるようになりました。

特にDockerを利用している人には朗報かもしれません。

さらに開発環境としてWSLの重要性が高くなると思いました。

-WSL
-,