前書き#
WSL(Windows Subsystem for Linux)は、Microsoft が提供する非常に便利なツールですが、カスタムの init を使用しているため、systemd を使用すると次のエラーが発生します:
System has not been booted with systemd as init system (PID 1). Can’t operate.
systemd を使用するための genie の使用#
genie は、WSL 上で systemd を使用するために、pid スペースを作成することによって実現されます。
genie は.NET Core 3 に基づいて構築されており、使用する前に.NET Core ランタイムをインストールする必要があります。インストール方法については、Microsoft の公式ドキュメントを参照してください。
その後、genie をインストールします:
curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash
sudo apt install systemd-genie
genie の使用方法は非常に簡単です:
# systemd環境を起動する
genie -i
# systemd環境を起動し、環境内でシェルを開く
genie -s
# systemd環境を起動し、環境内でコマンドを実行する
genie -c command
起動時に自動起動するように設定する#
上記の設定だけでは、有効化されたサービスの起動が完了しません。引き続き起動項目を設定する必要があります。
まず、WSL 環境に入り、/etc/init.wsl
というファイルを作成し、以下の内容を追加します:
#!/bin/bash
/usr/bin/genie -i
その後、Windows に戻り、Win + R
キーを押して実行を開き、shell:startup
と入力して起動ディレクトリに移動します。
vbs
ファイルを作成し、任意の名前を付け、以下の内容を追加します:
Set ws = CreateObject("Wscript.Shell")
ws.run "wsl -d Debian -u root /etc/init.wsl", vbhide
注:パラメーターの
Debian
は、ご自身が使用している WSL ディストリビューションの名前に変更してください。