見出し画像

WSLで systemd がサポートされたらしいので確認しました

昨日、仕事でCircleCIで動かすjobの単体テストをしたいな~って思って、Dockerを使おうとしたら、systemd=PID1じゃないよエラーが発生して systemctl が使えませんでした。

WSL2の systemd サポートを確認する

見覚えがあるエラー

systemctl
> System has not been booted with systemd as init system (PID 1). Can't operate.
> Failed to connect to bus: Host is down

「あ、これ見たことあるやつ!」と思ったので、Dockerのハンズオンの投稿を見直して「これは、Genie要るやつだ」って思い出しました。

さて、この systemctl のエラー、「正確には、どんなメッセージだったっけ?」って検索していたら「WSLでsystemdのPID=1に対応したらしいので試してみた」という記事が見つかりました!これはGenieをインストールしないくても良いってことですね。すてき!

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

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

プライベートの環境はWindows 11なので対象です。これは、試さなくては!WSL2を最新にして、Genieを起動せずにsystemdが使えればOKですね。

Genieを使用しない設定に変更

現在はWSL2起動時にGenieが起動する設定にしています

ターミナルの起動時に、Genieのコマンドライン実行が追加されているので、これを削除します。

Genieが起動時に実行される設定

Genieの起動時実行を削除します。

WSL2の最新をインストール

WSL2はインストール済なので、WSLのGitHubから最新をダウンロードしてきます。参考にした記事では、0.67.6でしたが、2022/11/6現在の最新は 0.70.4みたいです。ダウンロードができたら、インストールします。

ダウンロードに時間がかかっています

よーし、インストールしてみよう!

最新のWSL2をインストール

あれ?

Genieが起動しているでは!?

ターミナルの起動オプションからGenieを削除したのに、起動しています。これは .bashrc にGenieの起動がある?

これだ!

削除してもいいけど、コメントアウトします。

こうだ!

今度はOKです!

Genieは起動していません。

systemctlお試し

systemctlを実行してみます。
うわぁ、話が違うでは!いきなり動きましたよ。というわけで、上記ブログで紹介されていた /etc/wsl.conf の編集は不要なのかな?

いきなりsystemctl動きました

でも、PID=1はinitのままです。

PID=1は。systemdじゃなかった

改めて、Microsoft公式ドキュメント「WSL での詳細設定の構成」 にしたがって、/etc/wsl.conf に以下を追記して再起動してみました。

[boot]
 systemd=true

PID=1のプロセスを確認します。

PID=1は、/sbin/init です

systemdのPIDは1ではないものの、systemctlは実行できます。

systemctlは実行できた

ps で表示したリストの中に、systemd+というのがあって、気になります。しかし、今日はここで時間切れです。
仕事用のPCはWindows 10なので、WSLのアップデートでsystemdが実行できるかどうかバージョンを確認しないと。こちらは、明日やります。

今週はここまで。続きは、また次の機会にやります。


この記事が参加している募集

今日やったこと

この記事が気に入ったらサポートをしてみませんか?