LoginSignup
11
4

More than 1 year has passed since last update.

WSL2でsystemdを使えるようにした話

Last updated at Posted at 2020-10-01

Genieを用いた方法

(古いため、下記にある公式対応のSystemdの話へどうぞ)

筆者環境: WSL2上のUbuntu-20.04 LTS (Windows 10 Home)

WSLを利用していたら、たまに見かけるこのエラー
System has not been booted with systemd as init system (PID 1)

どうも、原因はWSLでsystemdが使えないからみたいですね。
じゃあ、使えるようにしましょう。

先人の知恵は素晴らしいもので、Genieというリポジトリでsystemdを使えるようにできます。
https://github.com/arkane-systems/genie

コマンドの流れです

$ sudo apt install daemonize
$ sudo apt-get install -y gpg
$ wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
$ sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
$ wget https://packages.microsoft.com/config/ubuntu/20.04/prod.list
$ sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
$ sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
$ sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
$ sudo apt-get update; \
  > sudo apt-get install -y apt-transport-https && \
  > sudo apt-get update && \
  > sudo apt-get install -y dotnet-sdk-3.1

genieをセットアップするために必要なdotnetのSDKをインストールしました。

次に、genie本体をインストールします。

$ curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash
$ mkdir /etc/apt/sources.list.d
$ touch /etc/apt/sources.list.d/wsl-translinux.list
$ sudo vim /etc/apt/sources.list.d/wsl-translinux.list

vimでdeb [trusted=yes] https://wsl-translinux.arkane-systems.net/apt/ /を追記しておきましょう。
追記を忘れるとアップデート時に429 Too Many Requestsが発生します。

$ sudo apt install -y systemd-genie

インストールが無事に終わったら

$ genie -s

で実行しましょう。
アップデート時にエラーが出るのが気持ち悪いという方はsudo rm -rf /etc/apt/sources.list.d/wsl-translinux.listで解決できます。

最後に.bashrcか.bash_profileに

if [ "`ps -eo pid,cmd | grep systemd | grep -v grep | sort -n -k 1 | awk 'NR==1 { print $1 }'`" != "1" ]; then
  genie -s
fi

を書き込んでおけば、シェル起動時にgenieも起動してくれます。

ps aux

systemd+のプロセスが動いていれば大丈夫です。

お疲れ様でした。

WSL公式がSystemdをサポートしました (2021年9月更新)

記事を書いて2年ほど経ったある日、こんな記事が出てきました。

...自分がやった方法必要なくなったのでは?ということで、更新をかけておきます。

公式対応のSystemdを用いるためには、まずバージョン確認が必要です。

wsl --version

バージョンが 0.67.6 以上であれば、利用可能になっています。
Windows Insiderの対象ならすぐに使えますが、しばらく待てば全ての人が使えるようになるはずです...

バージョンに問題がなさそうであれば、wsl.confファイルに設定を追加します

# 公式ドキュメントでは nano を使っていますが、nanoは宗教上ちょっと...
sudo vim /etc/wsl.conf

追加する内容は下記の通りです。

[boot]
systemd=true

設定を追加した後はPowerShell等で wsl.exe --shutdown を実行し、WSLを再起動します。

その後、WSLでsystemctl list-unit-files --type=service を実行し、Systemd が動いているのが確認できれば終了です。

お疲れさまでした。

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4