WSL2でsystemdをPID1にしてみる

  • 2021年4月26日
  • 2021年4月19日
  • Tips

参照したサイト

構築手順

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/
# 次行の{os-version}の所には、18.04とか20.10などのUbuntuのバージョンを設定
wget https://packages.microsoft.com/config/ubuntu/{os-version}/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

# rootになる
sudo su -
apt install apt-transport-https
wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg
cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
# 次行とその次の行の<distro>の所には、Ubuntuのバージョンに応じてbionicとかfocalなどを設定
# 名称は『 https://ja.wikipedia.org/wiki/Ubuntuのバージョン履歴 』を参照のこと
# エンコード済URLはこちら↓
#  https://ja.wikipedia.org/wiki/Ubuntu%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E5%B1%A5%E6%AD%B4

deb https://arkane-systems.github.io/wsl-transdebian/apt/ <distro> main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ <distro> main
EOF
apt update
apt install -y systemd-genie
exit
#一旦wslから抜ける
exit

 

genieを試しに起動してみる

#wsl2起動
#ユーザ権限で試しに実行してみる(suしていない状態)
genie -s
#psしてsystemdのPIDが1だったら成功

 

genieの自動起動設定

#wsl2起動ユーザの.bashrcに以下を追加
if [ "`ps -eo pid,cmd | grep systemd | grep -v grep | sort -n -k 1 | awk 'NR==1 { print $1 }'`" != "1" ]; then
  genie -s
fi

 

起動時に!が出る時

Waiting for systemd….!!!!

みたいになる場合、systemd起動時にタイムアウトになっています。

但し、タイムアウト待ち後や、別窓で起動したUbuntuでは、systemdがPID:1で上がっています。