【WSL2】Ubuntu20.04でPID1をSystemdにする

2021年7月19日

こんにちは、しきゆらです。
今回は、何度も書いていますがUbuntu20.04にてPID1をSystemdにする方法を改めてメモしておきます。

というのも、最近Windowsをクリーンインストールしたので改めて環境を構築していたんですが、
前回メモした内容ではうまくいかなかったからです。
何か変化したのかしら。

というわけで、何度かメモしていますが改めてメモしておきます。
なお、以下が関連する過去記事です。


前回の「【WSL2】Ubuntu20.04にてMySQL8.0が動かない問題を解決する」ではGenieというものを使いました。
前回はUbuntu20.04用のパッケージが公開されておらず、自前でビルドする必要がありましたが、2020/08/14時点では公開されていました。
なので、前回よりも格段に導入のハードルは低くなっています。
以下、手順をメモしておきます。

導入準備

Genieの依存するパッケージをインストールしていきます。
基本は自動でインストールされるはずですが、一応事前に手動で入れておきます。

sudo install -y daemonize dbus policykit-1

追加で必要な「dotnet-runtime-3.1」ですが、これは別途「Linux ディストリビューションに .NET Core をインストールする | Microsoft Docs | https://docs.microsoft.com/ja-jp/dotnet/core/install/linux」を参考に導入します。

# リポジトリを追加
wget https://packages.microsoft.com/config/debian/10/packages-microsoft-prod.deb -O packages-microsoft-prod.deb dpkg -i packages-microsoft-prod.deb

# いったん更新
sudo apt update; sudo apt upgrade

# 本命
sudo apt-get install -y dotnet-runtime-3.1

なお、「dotnet-runtime-3.1が見つからない」というエラーが出た場合は、公式にあるように「https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-debian#apt-troubleshooting」を参考にしてみてください。

これにて導入の準備は完了です。

Genieのインストール

導入は、公式に示されている手順でOKです。

# リポジトリの追加
curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash

# Genieをインストール
sudo apt install -y systemd-genie

これにて完了です。
すべて公式にある手順だけで完結するのでとても楽です。

動作確認

動作確認としては、まずは起動させるところから。

genie -s

これでエラーが出なければOKです。

それでは、公式から推奨されている「getty@tty」というサービスを止めてみます。 止めるには、普段通り「systemd」で行います。

sudo systemd stop getty@tty

Genieを問題なく動かせていればsystemdがPID1になっているのでsystemctlでプロセスを操作できるようになっているはずです。

WSLを起動時にGenieを実行しておく

前回の記事でも記載しましたが、以下のスクリプトを.bashrcや.zshrcあたりに追記しておけばOK。
PID1がsystemdでない場合にGenieを実行してくれます。

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

まとめ

今回は、執筆時点では以前にまとめた内容ではGenieの導入ができなかったので再度調べなおして導入手順をメモしました。
必要であれば、前回の記事で記載したスクリプトを仕込んでおけば手間なく普通のLinuxとほぼ同じような感覚でWSLを操作できます。

今回はここまで。
おわり