サマリ
WSL2上のUbuntuでsystemdはデフォルトでは使用不可。
WSLの最新バージョンへのアップデートと/etc/wsl.conf
の設定が必要
環境
- Windows11
- WSL 1.3.17
- Ubuntu 22.04 LTS
今回困ったこと
最近、ちいかわのアニメでハチワレ役の子役が回を重ねるごとに演技力が成長していって、なんだか微笑ましくなりますね。
さて自分はWSL2上のUbuntuでdockerを使おうとしたら、起動しないという状況に陥りました。全然微笑ましくないですね。
エラー文はこんな具合でした。
$ sudo systemctl start docker
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
なんか「systemdが動いてねえんだよ」と怒られてますね。
Ubuntuいじってたら、systemctlというのは何気なく日頃使っているものなので、いつもならできることが急にできなくなって「ウワーッ」ってなりました。
だって普通、UbuntuのsystemdってPIDの一番上に来るものじゃないんですかね。
いつも傍にいてくれた存在はいつだっていなくなってしまってから、その大切さに気づくものです。
なんでや
泣き言を言っても始まりませんので原因調査です。
原因調査といっても、WSL上のLinuxディストリビューションがsystemdに対応していなかった過去があることがしっかり報道されていました。
WSLにおいて、過去にはsystemdに対応してなかったとのことですが、2022年に対応するようになりました、とのことです。
が、systemdをPID1に持ってくるためにはひと手間必要ということには変わりありません。
というわけで、以下がそのひと手間の手順となります。
してみよう……「対応」!
さくさくやっていきましょう。
/etc/wsl.conf
というファイルを作成しまして、下記のように記述し、オプトイン設定を行います。
$ sudo vim /etc/wsl.conf
[boot]
systemd=true
次にWSLを再起動させます。
PowerShellからwslをシャットダウンさせます。
wsl.exe --shutdown
その後、通常通りWSL2上のUbuntuを起動。
が、駄目……!
これでもう一度systemctl
でDockerを起動しようとしましたが、先ほどと同じエラー文が出力されて、立ち上がらず。
もしやと思ってWSLのバージョンを確認。
wsl --version
WSL バージョン: 1.3.17
2024年2月時点で最新バージョンは2.1.3ですので、
WSL自体のバージョンが古かったことに原因がありましたね
WSL2を最新バージョンにアップデート
というわけで、WSLそのものを最新バージョンにアップデートします。
職場のセキュリティポリシーでMSstoreをブロックされているので、回避してPowerShellからアップデートを実行します。
というわけでPowerShellを管理者権限で起動して、下記のコマンドを実行。
PowerShellを管理者権限で起動するの、結構忘れがちになりますよね。
wsl --update --web-download
確認してみましょう。
# top
<中略>
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1 root 20 0 165832 11352 8376 S 0.0 0.1 0:01.20 systemd
これで、systemdがPIDになっていることを確認、dockerの起動もできました。
参照