ふるきのガベージコレクション2

脳内を通り過ぎたイメージの残骸の記録

WSLの時刻が遅れる問題 systemd-timesyncdで解決

スリープするとWSLの時計が遅れる不具合について、Githubのissueにsystemd-timesyncdを使った解決策が出ていた。途中経過も含めて手順を書いてみる。
情報源
WSL2 date incorrect after waking from sleep · Issue #8204 · microsoft/WSL · GitHub

(1)systemdとtimesyncdの有効化
Systemd support is now available in WSL! - Windows Command Line
・設定ファイル作成
$ sudo nano /etc/wsl.conf
[boot]
systemd=true
・シャットダウンして再起動。
$ wsl.exe --shutdown
・systemdの動作確認
$ systemctl list-unit-files --type=service
-> 沢山のサービスが動いている。
(2)systemd-timesyncdの動作を確認。
$ sudo systemctl status systemd-timesyncd
○ systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Condition: start condition failed at Sat 2022-11-19 19:38:06 JST; 8s ago
└─ ConditionVirtualization=!container was not met
Docs: man:systemd-timesyncd.service(8)
Nov 19 19:38:06 HM-WIN3 systemd[1]: Condition check resulted in Network Time Synchronization being skipped.
-> systemd-timesyncdは動いているように見えて、エラーで動いていない(コンテナ内不可)。
(3)timesyncdの設定。
$ sudo nano /etc/systemd/timesyncd.conf
NTP=ntp.nict.jp
$ sudo systemctl edit systemd-timesyncd
-> nanoが起動されるので、以下の2行を追加。
[Unit]
ConditionVirtualization=
-> /etc/systemd/system/systemd-timesyncd.service.d/override.confが作成される
$ sudo systemctl restart systemd-timesyncd
-> サービスの再起動だけではダメだったので、WSLを再起動(wsl.exe --shutdown)。

スリーブ復帰から数秒遅れるものの、時刻が同期するようになった。