kotoyuuko

CORE

昨日より、明日より、笑える今が一番大好き。
github
telegram
email

WSLでsystemdを使用する

前書き#

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 ディストリビューションの名前に変更してください。

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。