[!IMPORTANT] この記事を執筆時点での情報です。正式リリース後のLTSバージョンでは修正されているかもしれません。
Ubuntu 24.04(beta)が降ってきたので早速手元のWSL環境をアップデートした。
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu Noble Numbat (development branch) Release: 24.04 Codename: noble $ wsl.exe --version WSL バージョン: 2.2.2.0 カーネル バージョン: 5.15.150.1-2 WSLg バージョン: 1.0.61 MSRDC バージョン: 1.2.5105 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp Windows バージョン: 10.0.22631.3447
systemctl --user statusがFailed to connect to bus: No such file or directory
毎回恒例のやつ。 これが起こるとユーザランドのserviceが起動しないので、そうすると私の場合はGNOME keyringがキックされない*1ので、毎回ssh鍵のパスワードを入力するハメになってかなりめんどくさい。。 そこで本腰を入れて調査した。 結果どうもsystemd-networkdがコケているのがわるいことがわかった 。
$ systemctl --failed UNIT LOAD ACTIVE SUB DESCRIPTION ● tpm-udev.path loaded failed failed Handle dynamically added tpm devices ● systemd-networkd-wait-online.service loaded failed failed Wait for Network to be Configured ● systemd-remount-fs.service loaded failed failed Remount Root and Kernel File Systems ● tpm-udev.service loaded failed failed Handle dynamically added tpm devices Legend: LOAD → Reflects whether the unit definition was properly loaded. ACTIVE → The high-level unit activation state, i.e. generalization of SUB. SUB → The low-level unit activation state, values depend on unit type. 4 loaded units listed.
WSLではsystemd-networkdはdisableでいい*2ので、disableにして再起動すると問題は解消される。
$ sudo systemctl disable systemd-networkd Removed "/etc/systemd/system/sockets.target.wants/systemd-networkd.socket". Removed "/etc/systemd/system/multi-user.target.wants/systemd-networkd.service". Removed "/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service". Disabling 'systemd-networkd.service', but its triggering units are still active: systemd-networkd.socket $ wsl.exe --shutdown # 再接続後 $ systemctl --user status ● zephyranthes State: running Units: 171 loaded (incl. loaded aliases) Jobs: 0 queued Failed: 0 units Since: Mon 2024-04-15 22:24:18 JST; 8s ago systemd: 255.4-1ubuntu7 -- snip --
tpm-udev.path/service と systemd-remount-fs.serviceがこけている
Ubuntu24.04からの変更だとおもうが…failedになっているのが気になってしまうのでなんかする。 tpm-udev.path/serviceはどうも、TPMモジュールを使うためのサービスのようだ。
$ dpkg -s tpm-udev Package: tpm-udev Status: install ok installed Priority: optional Section: admin Installed-Size: 28 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com> Architecture: all Multi-Arch: foreign Version: 0.6ubuntu1 Depends: adduser, udev Description: udev rules for TPM modules This package provides udev rules for the TPM modules. Both TPM1 or TPM2 need this package to be installed to provide proper permissions of the TPM. Original-Maintainer: Ying-Chun Liu (PaulLiu) <paulliu@debian.org>
TPMモジュールはWIndows側では利用するだろうが、WSLでは利用しない(とおもう)のでパッケージを削除してしまってよいだろう。
もし気になるなら tpm-udev.path
をdisableにすればよい*3。
systemd-remount-fs.serviceはエラーログをみると原因がわかる。
❯ sudo journalctl -u systemd-remount-fs.service | tail Apr 15 22:35:58 zephyranthes systemd-remount-fs[78]: mount: /: can't find LABEL=cloudimg-rootfs. Apr 15 22:35:58 zephyranthes systemd-remount-fs[70]: /usr/bin/mount for / exited with exit status 1.
fstabを見るとcloud-imageの一時的な領域をremountするような定義になっているっぽい。 これがなぜ必要なのか理解していないが、少なくともWSLでは不要*4なのでこの定義を削除してよいとおもう。
$ cat /etc/fstab LABEL=cloudimg-rootfs / ext4 discard,errors=remount-ro 0 1
これで、failedしたUnitはなくなるはず
$ systemctl --failed UNIT LOAD ACTIVE SUB DESCRIPTION 0 loaded units listed.
Waylandにつながらない
$ wl-paste Failed to connect to a Wayland server: No such file or directory Note: WAYLAND_DISPLAY is set to wayland-0 Note: XDG_RUNTIME_DIR is set to /run/user/1000/ Please check whether /run/user/1000//wayland-0 socket exists and is accessible.
はいぃ。。。
どうも /run/user/1000/wayland-0
がなくなっているようだ。
$ ls -lah /run/user/1000/wayland-0 lsd: /run/user/1000/wayland-0: No such file or directory (os error 2).
前に記事を書いたときは一度lnしてしまえば解決していた。 しかし、24.04(beta)からは起動ごとにクリアされるっぽく、毎回lnを実行する必要がありそうだ。 さすがに手動で実行するのはめんどくさいので↓のようなUnitファイルを作って解決することにした。 なお雛形はChatGPTに作ってもらった。
$ vim ~/.config/systemd/user/create-link-wayland.service [Unit] Description=Create symlink for Wayland socket at startup if not exists [Service] Type=oneshot ExecStart=/bin/ln -s /mnt/wslg/runtime-dir/wayland-0 /run/user/1000/wayland-0 ExecStart=/bin/ln -s /mnt/wslg/runtime-dir/wayland-0.lock /run/user/1000/wayland-0.lock RemainAfterExit=yes [Install] WantedBy=default.target
ファイルを作ったら有効化すれば次回からこのシンボリックリンクが作成されるはず。
$ systemctl --user daemon-reload $ systemctl --user enable create-link-wayland Created symlink /home/buty4649/.config/systemd/user/default.target.wants/create-link-wayland.service → /home/buty4649/.config/systemd/user/create-link-wayland.service. $ systemctl --user start create-link-wayland $ ls -1 /run/user/1000/wayland-0* /run/user/1000/wayland-0 ⇒ /mnt/wslg/runtime-dir/wayland-0 /run/user/1000/wayland-0.lock ⇒ /mnt/wslg/runtime-dir/wayland-0.lock
おまけ: xz-utils
話題となったxz-utils。24.04(beta)では 5.6.1+really5.4.5-1
がはいっていた。
5.6.1じゃん!!!っとおもったが、Changelogをみるとどうも5.4.5-0.2のバックポートバージョンだった。安心
$ apt changelog xz-utils xz-utils (5.6.1+really5.4.5-1) unstable; urgency=critical * Non-maintainer upload by the Security Team. * Revert back to the 5.4.5-0.2 version -- Salvatore Bonaccorso <carnil@debian.org> Thu, 28 Mar 2024 15:59:38 +0100 -- snip --
*1:昔ブログをかいたよなぁっとおもったら書いてなかったので書く
*2:https://zenn.dev/kenchan/articles/5f3d53182f0a75
*3:tpm-udev.serviceはtpm-udev.pathに依存しているのでtmp-udev.pathをdisableにすると連動して無効化される
*4:ログとかをみるとWSLでも、WSLで動いていると認識したうえでcloud-initが動いていてちょっと驚いた