はじめに
これ関連の検索ワードからこちらに飛んでこられた方がいるようなので、以下のエラーについて説明します。
warning message: in system("timedatectl", intern = true) : running command 'timedatectl' had status 1
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to create bus connection: Host is down
TTY detected. Printing informational message about logging configuration.
結論から言うとほとんどの場合無視してOK
このエラーが原因で困ることは殆ど無いので無視しても平気だと思います。そうは言っても何が原因で、どういった時に問題になるのかを知っておきたいですよね。私も完璧に理解しているわけではないですが、知っている限りの情報を誰かのためにまとめておきます。
原因: WSLの仕様でsystemdがPID1で起動しないから
ネイティブのLinuxOSを使っている方ならご存じかもしれませんが、本来Rsutudio-serverをはじめとする常駐ソフトウェアを常駐させておくのに使うデーモンはsystemctlです💡 しかしどういうわけか、WSL2はsystemctlが使うsystemdを起動しない仕様になっているそうなのです。(じゃあどうやってsudo rstudio-server start
コマンドが通るんだ)
そしてどうにかこうにかRstudio-serverはsystemctlを使わずに起動しているので(ゴリ押してる?)ので、起動後にこの警告が出てしまっているという状況なわけです。
以後、この事象を「WSLにおけるsystemd問題」と呼称します👋
困ること: エラーが鬱陶しいだけ
約一年WSL2+Rstudio-server(+pythonやらgoやら)を体験してきましたが、これまでにsystemd問題が原因となって大きな問題に直面したことはありませんでした。強いていうならsystemctlを使いたい時は困るでしょうね😈(systemdないから当たり前)
というわけで、私の印象としてはエラーが鬱陶しいだけ、という感じです。
対処法: genieを導入する
とは言え毎回このメッセージが出てくるのはうっとうしいのでなんとかしたいですよね。一応対処法があります。それは、genieというサードパーティー製のツールを使う方法です。genieはこの問題のためだけに作られたものです。
先に言っておきますが、おそらくこの問題に対する根本的な解決方法は今のところありません。MicrosoftがWSL2そのものを今後改良してくれるのを待つ必要があると思います。また、ここで紹介する方法には山ほど注意事項があります。詳しくはgenieのレポジトリの説明を読んでください。(genieも全文読まなきゃインストールしちゃだめって言ってます⚠️)
まず、依存物を導入します。用意すべきものは以下です。
- WSL2 (Win10)
- Ubuntu
- python3.9以降
- .NET Runtime
- deamonize
python3.9以降
condaでもなんでも良いです。特にこだわりがなければapt install
でよろしいと思います。
pythonは3.9以降ならなんでも良いですが現状3.9までしかaptレポジトリにはありません。
sudo apt update
sudo apt install -i python3.9 python3-pip
.NET runtime
.NET runtimeのインストール方法についてはMicrosoftに解説ページがあります。トラブルシューティングなどはそちらでどうぞ👼
https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu#2004–
wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y aspnetcore-runtime-6.0
deamonize
deamonizeは.NET runtimeインストールが完了後に導入します。
sudo apt install deamonize
genieをインストールする
準備が整ったら、いよいよgenieを導入します🧞🧞♀️
既に様々なブログ等でインストール方法が解説されており、ソースからビルドする方法などが紹介されています。2022年5月現在、apt installで導入可能です。
sudo apt install -y systemd-genie
genieを使う
ここからはgenieをどうやって運用するかの話になります。
sudo genie -s
上記コマンドでgenieがsystemdをPID=1に起動させた状態のシェルが立ち上がります🎉
一応確認してみるとこんな感じ。
❯ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 173408 12620 ? Ss 09:04 0:00 systemd
root 50 0.0 0.2 67836 15132 ? S<s 09:04 0:00 /lib/systemd/systemd-journald
root 72 0.0 0.1 20564 6756 ? Ss 09:04 0:00 /lib/systemd/systemd-udevd
systemd+ 76 0.0 0.1 18380 7584 ? Ss 09:04 0:00 /lib/systemd/systemd-networkd
大丈夫そうですね!
私の環境では、genieを.zshrcでWSL2起動時に立ち上げさせることはできなかったため、必要になったら都度起動しています。
さいごに
というわけで、genieを使ったエラー対処までご紹介しましたが、多分Rstudioユーザーの人にとっては満足のいく内容ではなかったのでは?と思います🤔 言うてWSL2も出たてですし、Win11向けのWSLgなどの新環境も続々と登場している中ですので、今後WSL2やRstudio-serverが今回の問題に対応してくれる可能性もあるのかなと思います。
リファレンス
参考にさせていただいたchikoさんのZenn記事(Ubuntu)

昔genieをインストールしたときに参照させていただいたブログ様

Fedoraでトライされている方

コメント