RSRubyのインストール: ログ

RubyからRを呼び出せるRSRubyをインストール。ものすごく苦労しました。とりあえずそのログを残しておきます。誰かの参考になれば。

注意
インストールが全て完了してから、やったことを思い返して書いているので、ところどころ曖昧な部分や、間違った部分があるかもしれません。ご了承を。
環境
Ubuntu8.0.4日本語版 VMware仮想マシン on WindowsXP SP3

RSRubyのインストール開始

公式ドキュメントREADMEを読む。

とりあえず sudo gem1.9 install rsruby -- --with-R-dir=/usr/lib/R を実行。エラー発生。

gemはインストールにすごく時間がかかるので、ソースからインストールすることにする。http://rubyforge.org/projects/rsruby/からrsruby-0.5.tgzをダウンロード。

tar xvzf rsruby-0.5.tgz で展開。ディレクトリに入って ruby setup.rb config -- --with-R-dir=/usr/lib/R を実行。上記と同様のエラー発生。

READMEから察するに、Rの共有ライブラリが存在しないため、エラーが発生しているようだ。

R must have been built with the ’―enable-R-shlib’ option enabled to provide the R shared library used by RSRuby.

拙訳: Rをビルドした際に、 --enable-R-shlib オプションをつけて、RSRubyが利用するRの共有ライブラリを使えるようにしておくことが必要となります。

http://web.kuicr.kyoto-u.ac.jp/~alexg/rsruby/files/README_txt.html

ということでRのソースからのビルドに移行。

Rのソースからのビルド

Rの公式から最新版(2.8.1)のソースコードを取ってくる。

tar xvzf R-2.8.1.tar.gz で展開。

ディレクトリに入って ./configure --enable-R-shlib を実行。エラー発生。

ネットで検索したところ、configureに必要なパッケージが入っていないためのようだ。しかし、どういうパッケージが必要なのかが、エラーメッセージからは大体のことしかわからず、厳密にどのパッケージが必要なのかがわからない。

とりあえず、ネットで検索したり、Synapticで検索して、それらしいパッケージを手当たり次第にインストールしていく。特にこのサイトを参照した。

エラーが出た場合はconfig.logの中身を確認して足りないライブラリやヘッダを調査してインストールした上で./configureを実行すること。(足らないライブラリとしてはXOrg-devel libpng-devel pcre-devel libjpeg-devel readline-devel ncurses-devel bzip2-devel zlib-devel などが候補に挙がる) apt-cache search XXX 等を実行して、足らないパッケージを探すこと。

http://www.okada.jp.org/RWiki/?R%20%A4%CE%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB


うまくいって、当該エラーメッセージが消えても、別のエラーが発生する。この「パッケージ不足エラー → 足りないパッケージを予想してインストール」を数回繰り返す。

この際、必要なパッケージの名前を予想して、さらにlibとかdevとかをキーワードにSynapticで検索すると、結構うまくいったような記憶がある。パッケージの説明文にdeveloperやheader、libraryといったタームがあるものを狙ってインストールしてみるといいかもしれない。

ようやく ./configure --enable-R-shlib が通る。

よって make 。成功。

sudo make install 。成功。

Rのインストールはこれで終了。

RSRubyのインストール再開

この辺、記憶が曖昧なので注意。

再び ruby setup.rb config -- --with-R-dir=/usr/lib/R を実行。前とは別のエラーが発生。

READMEを見ると、 /etc/ld.so.conf に /usr/lib/R/bin という一行を書くといいらしい。つまり、動的リンクの際に、共有ライブラリを探すためのパスが必要で、それを書いておくわけだ。よってそれを書き、 sudo ldconfig する。

共有ライブラリファイルの多くは/libや/usr/lib以下に配置されており、プログラム実行時にこれらの中から必要となるライブラリファイルが検索されることになります。

ダイナミックリンク時に共有ライブラリファイルを検索する対象ディレクトリを指定する設定ファイルが/etc/ld.so.confです。

しかし、実際にはこのファイルから生成されるファイル/etc/ld.so.cacheが利用されます。

従って、ld.so.confを更新した時にはldconfigコマンドを用いてld.so.cacheの内容も更新する必要があります。

ldconfigコマンド: Linux初心者のためのLinux入門


ruby setup.rb config -- --with-R-dir=/usr/lib/R する。成功。

ruby setup.rb setup する。成功。*1

sudo ruby setup.rb install する。成功。

RSRubyのインストールが完了した。

サンプルコード実行

READMEに書かれているサンプルコードを実行。エラー発生。

エラーメッセージから察するに、Rのホームディレクトリを環境変数に設定しておくことが必要なようだ。よって、 .bashrc に export R_HOME=/usr/lib/R の一行を追加。

サンプルコードを再び実行。成功し、よくわからんグラフが表示される(一瞬)。

これで、RSRubyの導入作業は全て終了したことになる。数時間かかった。疲れた。

*1:もしかしたら、共有ライブラリのパスの設定が必要だったのは、この段階だったかもしれない。