久しぶりにwsl2環境で作業しようとしたところ、SSHなどあらゆるサービスが使えなくなっていた。原因はPID1で起動すべきsystemdがinitに代わっていたためだった。以下環境におけるssh接続までの手順を記載する。
環境情報
- wsl2
- Ubuntu18.04
- (後日Ubuntu20.04のwsl2環境で同様の手順を行い確認済)
wsl2でsystemdを使えるようにする過去記事の情報が古かった
こちらの記事などでgenieというのがsystemdの起動に必要と分かった。しかし、記載されている情報が古かったせいか手順通り行ってもうまくいかなかった。
wsl2でsystemdを使用する手順 (2022.2)
ほぼ文末記載の参考サイトを参考に設定してsshd起動までを確認した。以下はその際の手順メモ。
$ sudo apt install apt-transport-https
$ sudo wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
sudo nano /etc/apt/sources.list.d/wsl-transdebian.list
下記をwsl-transdebian.listに追記して保存する
deb https://arkane-systems.github.io/wsl-transdebian/apt/ focal main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ focal main
genieをインストール
$ sudo apt update ; sudo apt upgrade
$ sudo apt install systemd-genie
genieを起動するとタイムアウトした。
$ genie -s
Waiting for systemd....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Timed out waiting for systemd to enter running state.
This may indicate a systemd configuration error.
Attempting to continue.
Failed units will now be displayed (systemctl list-units --failed):
UNIT LOAD ACTIVE SUB DESCRIPTION
● ptp4l.service loaded failed failed Precision Time Protocol (PTP) service
● systemd-modules-load.service loaded failed failed Load Kernel Modules
● systemd-remount-fs.service loaded failed failed Remount Root and Kernel File Systems
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.
3 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
私の環境の場合、ptp4lがタイムアウトしていたのでサービスを無効化した。
$ sudo systemctl stop ptp4l ; sudo systemctl disable ptp4l
再度genieを起動してみたところすでに起動(ボトル?)していた。
$ genie -s
genie: already inside the bottle; cannot start shell!
wsl2を再起動。
PS> wsl2.exe shutdown
systemdがPID1で実行されていることを確認。
$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 225252 8592 ? Ss 11:05 0:01 systemd
wsl2でsshdのサービスがアクティブになっていることを確認でき、ホストからのSSH接続を確認出来た。ここではすでにWindowsホストからのSSH接続設定済だったのでSSH周りの設定は割愛する。