はじめに
CentOS WSLを使うと、WSL2上でCentOS8を使えて便利です。
ただsystemctlを呼びだそうとすると、次のようなエラーメッセージが表示されて使えません。(2021年4月現在)
systemctlが使えないとMariaDBなどのサービスが起動できず不便です。
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to create bus connection: Host is down
起動しない理由や対策
起動しない理由や対策は、こちらのブログ記事の説明が詳しいです。
systemctlを有効化する
上記の記事によると、systemctlを使えるようにするには、genieを用いる方法が解説されています。
記事では、make installでビルドしてインストールする方法が説明されていますが
genieのgithubのページを見ると、releasesにfedora用のrpmが公開されています。
CentOS8でもこのrpmが使えました。
なおgenieをインストールする前には、EPELを有効にしておきます。
rpmインストール時に依存するdaemonizeやdotnet-runtimeもインストールされます。
dnf install epel-release
cd /root/
wget https://github.com/arkane-systems/genie/releases/download/v1.36/genie-1.36-1.fc33.x86_64.rpm
dnf install genie-1.36-1.fc33.x86_64.rpm
WSL 1で起動している場合
環境によってはgenie -s
を実行すると、WSL2ではなく WSL1で起動している旨にエラーが表示される場合があります。
この場合、PowerShellかコマンドプロンプトでWSLの既定バージョンを2に変えてからCentOS8 WSLをインストールします。
wsl --list --verbose
wsl --set-default-version 2
次回起動時にも有効化する
.bashrcの末尾にコマンドを入れておきます。
vi /root/.bashrc
# 末尾に追記する
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
これでsystemctlが使えるようになります。