All Articles
    Search by

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

    はじめに

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

    `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)

    https://zenn.dev/km1992/articles/4dc74aa582be06

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

    https://shikiyura.com/2020/06/execute_systemctl_on_wsl2/

    Fedoraでトライされている方

    https://www.tomoyan.net/windows/wsl

    CentOS8でトライされている方

    https://memo.open-code.club/%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89/%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB/dnf.html

    systemdを含むwsl distrod

    https://github.com/nullpo-head/wsl-distrod

    Published May 7, 2022

    © 2020-2024 Hiroyuki Odake