WindowsでWSL2(Ubuntu)でsystemctlを使用する方法【最短1分】

~ある日のこと~

イヌガジェ
イヌガジェ

UbuntuでLAMPでも作るか~

あれ?systemctrl が効かない…なんかエラーが出てるぞ

root@MSI:~# systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
イヌガジェ
イヌガジェ

なにこれ…ダル…

原因を調べてみると、どうやらsystemdがPID=1になっていないことが原因だそうです。

ということで、今回はWindowsでWindowsでWSL2(Ubuntu)でsystemctlを使用するとエラーが出る時の対処方法(systemdをPID1で動作させる方法)について解説したいと思います!

環境

まずは私の環境から紹介していきます。

Windowsは11でUbuntuは22.04.1 LTSを利用しています。

root@MSI:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy

このエラーは昔からあった?

どうやらこの問題は前からあった問題だそうで、結構話題になっていたみたいです。

2022年9月21日に公式よりSystemdのサポートがあったようでこの問題の解決策を提示してくれており、一瞬で解決できそうな感じでしたので早速設定をしていきましょう!

Systemd support is now available in WSL!
Systemd support is now available in WSL! The Windows Subsystem for Linux (WSL) can now run systemd inside of your WSL distros, empowering you to do more with yo...

解決方法

手順は以下の通りでかなり簡単です。

1.WSL2(Ubuntu)で「/etc/wsl.conf」というファイルを作成します。

Winodws側の「C:\Users\[ユーザ]\.wslconfig」とは別物なので注意してください。

vi /etc/wsl.conf

2.以下の内容を記載し保存します

[boot]
systemd=true

書き込む時はiコマンドを押して保存は:wqをして保存します。

3.WSLを再起動

あとはpowershellを開いて以下のコマンドを実行します

wsl --shutdown

再起動後、WSL2を起動します。

4.PIDの確認

以下コマンドでsystemdがPID 1で起動していることを確認できれば完了です!

# ps -ae | head -2
PID TTY TIME CMD
1 ? 00:00:00 systemdps -ae | head -2

まとめ

これでWSLでsystemdに対応し簡単に行えるようになりました。

特にDockerを利用して開発環境を構築しようとしている人にはかなり嬉しいですよね!

 

ではでは~

コメント

タイトルとURLをコピーしました