WSL上のUbuntuでRstudio-serverを動かしたときに出るエラーの正体

Uncategorized

はじめに

これ関連の検索ワードからこちらに飛んでこられた方がいるようなので、以下のエラーについて説明します。

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)

WSL2 で systemctl を使えるようにする

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

【WSL2】systemctlが動かない問題をきちんと解決する | しきゆらの備忘録
2021/07/19追記 またまた手順が変わっていたので、改めて記事をまとめなおしました。 こちらの記事をご覧下さい。 【WSL2】Ubuntu 20.04でPID1をsystem...

Fedoraでトライされている方

Windows Subsystem for Linux 2 (WSL 2)
Windows Subsystem for Linux 2 (WSL 2) ソースコード: GitHub - microsoft/WSL2-Linux-Kernel: The source for the Linux kernel used in Windows Subsystem for Linux 2 (WSL2...

CentOS8でトライされている方

Memo

systemdを含むwsl distrod

GitHub - nullpo-head/wsl-distrod: Distrod is a meta-distro for WSL 2 which installs Ubuntu, Arch, Debian, Gentoo, etc. with systemd in a minute for you. Distrod also has built-in auto-start feature on Windows startup and port forwarding ability.
Distrod is a meta-distro for WSL 2 which installs Ubuntu, Arch, Debian, Gentoo, etc. with systemd in a minute for you. Distrod also has built-in auto-start feat...

コメント

タイトルとURLをコピーしました