Bash on WindowsにRStudio Serverをインストールする。

r-wakalangでそういう話が上がってたのでちょっと試してみたときのメモです。

Rをインストール

R公式サイトに書かれている通りにインストールします。

ドキュメント:UBUNTU PACKAGES FOR R

echo "deb https://cran.rstudio.com/linux/bin/ubuntu trusty/"
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
sudo apt update
sudo apt install r-base

RStudio Serverをインストール

RStudio公式サイトに書かれている通りにインストールします。

www.rstudio.com

sudo apt-get install gdebi-core
wget https://download2.rstudio.org/rstudio-server-1.0.44-amd64.deb
sudo gdebi rstudio-server-1.0.44-amd64.deb

すると...

$ sudo gdebi rstudio-server-1.0.44-amd64.deb
Reading package lists... Done
Building dependency tree
Reading state information... Done
Building data structures... Done
Building data structures... Done

RStudio Server
 RStudio is a set of integrated tools designed to help you be more productive with R. It includes a console, syntax-highlighting editor that supports direct code execution, as well as tools for plotting, history, and workspace management.
ソフトウェアパッケージをインストールしますか? [y/N]:y
以前に未選択のパッケージ rstudio-server を選択しています。
(データベースを読み込んでいます ... 現在 35890 個のファイルとディレクトリがインストールされています。)
rstudio-server-1.0.44-amd64.deb を展開する準備をしています ...
rstudio-server (1.0.44) を展開しています...
rstudio-server (1.0.44) を設定しています ...
useradd: user 'rstudio-server' already exists
groupadd: group 'rstudio-server' already exists
rsession: no process found
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: 接続を拒否されました
initctl: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: 接続を拒否されました

なにか怪しげなエラーが出ています。たしかにUpstartは動かないですよねー。でもまあインストールはできてるっぽいです。

~$ dpkg -l rstudio-server
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)保持
| 状態=(N)/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前                                                   バージョン                       アーキテクチャ                   説明
+++-======================================================-================================-================================-=================================================================================================================
ii  rstudio-server                                         1.0.44                           amd64                            RStudio Server

Upstart on Windows

と思って調べてみると、known issueだ、といってるissueが出てきます。

ただこれは、インストール時に/usr/sbin/policy-rc.dを実行するやつ用のワークアラウンドみたいです。daemon化するのにUpstartを頼ってるやつには無理そうな気が...。

Upstartの設定ファイルを覗いてみる

なんとかならないのかなーと思ってとりあえず設定ファイルを覗いてみます。

$ cat /etc/init/rstudio-server.conf
# rserver - RStudio main gateway process
#
#
# upstart docs: http://upstart.ubuntu.com/getting-started.html
#               http://manpages.ubuntu.com/manpages/karmic/man5/init.5.html
#
# (note that embedding a script and pre-start and post-start actions are supported)
#

start on runlevel [2345]
stop on runlevel [!2345]

expect fork

respawn

pre-start script
   # Make sure our AppArmor profile is loaded on boot
   # (see: https://bugs.launchpad.net/ubuntu/+source/apparmor/+bug/577445)
   /usr/lib/rstudio-server/extras/apparmor/apparmor-profile-load rstudio-server
end script

# run the server
exec /usr/lib/rstudio-server/bin/rserver

expect forkとある。この意味は公式ドキュメントだとこの辺。まあ無視してよさそう。

pre-start scriptは、AppArmorの設定なのでこれもまあ今回は気にしないことにしましょう。(AppArmorが動くのか動かないのかは知らない)

execが一番コアの部分ですが、とりあえずこれを実行することにしましょう。setuidとかはないのでrootで実行すればよさそうです(注:RStudio Serverの中でforkするときにrstudio-serverユーザになるっぽいです)。

/usr/lib/rstudio-server/bin/rserver

すると、一瞬でコマンドが返ってきます。成功か失敗かよくわかりません。pgrepしてみましょう。

$ pgrep -lfa rserver
10735 /usr/lib/rstudio-server/bin/rserver

おお、成功してるっぽい。と思って http://localhost:8787/ にアクセスすると無事に RStudio Server が見えました。

f:id:yutannihilation:20161208225837p:plain:w450

めでたしめでたし。

自動起動するには?

Upstartは使えないので、OSを起動したら自動でRStudio Serverが立ち上がるようにするには、Windowsの側の仕組みでなんとかする必要があります。たぶんこんな感じでできるはず。試す気力はわかなかった。

ただし、もとのBashのセッションが切れてしまうとRのセッションも切れてしまうみたいです。daemon化をやめるには、--server-daemonize 0を指定します(デフォルトは1)。あと、--server-app-armor-enabled 0も指定しないとエラーになるようです(これはなぜかよくわからなかった...)。