julia言語からR言語を呼び出すライブラリRCall.jl
を使用するために、最新版をソースからインストールした時の個人用メモ。apt install
で追加できる R v3.3.3 はライブラリRCall.jl
の要求バージョン未満だったので、最新版をソースからビルドしたのだが、かなり苦戦したので、記事に残すことにした。
この記事が私と同じ状況にある人の助けになれば幸いである。
以下の公式ドキュメントでは Other methods として、ソースからコンパイルする方法が紹介されている。
http://juliainterop.github.io/RCall.jl/stable/installation/
環境
いくつかのコマンド出力を貼っておく。
$ uname -s -r -v -m -o
Linux 4.19.104-microsoft-standard #1 SMP Wed Feb 19 06:37:35 UTC 2020 x86_64 GNU/Linux
$ cat /etc/issue
Debian GNU/Linux 9 \n \l
$ cat /etc/debian_version
9.12
$ julia --version
julia version 1.0.5
インストール手順
最新バージョンの R言語 をダウンロード
https://cran.r-project.org/src/base/R-4
執筆時の最新バージョンである R-4.0.2.tar.gz を上記ページから取得。
本文で登場するファイル名は適宜読み替えること。
ダウンロードしたファイルを解凍して適当な場所に移動
$ tar xf R-4.0.2.tar.gz
$ sudo mv R-4.0.2/ /root
tar
で生成したディレクトリが/root/R-4.x.x/
にある前提で以下の説明を読み進めてほしい。
足りないライブラリを追加する
./configure
に怒られつつ追加していったもののまとめ。
それなりに試行錯誤したところ。参考にしたWebサイトを列挙するのはやめておく。
ここらへん、不要なものまで追加しているかもしれないが、その点はご容赦願いたい。
コメント欄で知らせていただければなお幸いである。
$ sudo apt install gfortran gcc f2c libreadline-dev zlib1g zlib1g-dev bzip2 lbzip2 libbz2-1.0 libbz2-dev liblzma5 liblzma-dev libpcre2-dev libpcre2-8-0 libpcre2-16-0 libpcre2-32-0 libcurl4-gnutls-dev
GUIを有効化するためのライブラリを追加する
最初はxorg
x11-common
だけを追加して./configure
してみたが、次のようなエラーを吐いて上手くいかなかった。
configure: error: --with-readline=yes (default) and headers/libs are not available
ので、一度目は--with-x=no
オプションをつけてconfigure
してみた。
結論から言うとこれはミスで、安易にこのオプションをつけてコンパイルしたところ、インストール自体は成功するものの、その正体はグラフ描画機能が使えない残念なRである。
結論:libxt-dev
を追加すれば、--with-x=no
オプションを外すことができる。
次のコマンド行はもともと私の環境にてインストール済だったパッケージも含めて記述してある。
$ sudo apt install xorg x11-apps x11-common x11-utils x11-xserver-utils libxt-dev
お気持ちメモ:
オフラインでのR環境構築 on RHEL を読んでlibxt-dev
が必要という認識に至る。必要なXのライブラリを突き止めるのに、この記事に出会うまで本当に長い時間がかかった。
--with-x=no
オプションなしで./configure
成功したときは思わず叫んだ。
configure; make && make install
以下の手順では/usr/local
以下にインストールされる。
インストール先を変更したい場合は--prefix=/usr/local
の部分を適宜書き換えてほしい。
$ su -
[root]のパスワード:
# 以下の % プロンプトは root権限で実行
% ls ~
R-4.0.2
% cd R-4.0.2/
% ./configure --prefix=/usr/local --enable-R-shlib
--enable-R-shlib
のフラグは必須。このオプションをつけ忘れてしまうと、/usr/local/lib/R/lib/libR.so
が生成されないため、RCall.jl
が動かない。
./configure
の結果筆者の環境では次のような出力が得られた。
R is now configured for x86_64-pc-linux-gnu
Source directory: .
Installation directory: /usr/local
C compiler: gcc -fPIC
Fortran fixed-form compiler: gfortran -g -O2
Default C++ compiler: g++ -std=gnu++11 -fPIC
C++14 compiler: g++ -std=gnu++14 -fPIC
C++17 compiler:
C++20 compiler:
Fortran free-form compiler: gfortran -g -O2
Obj-C compiler:
Interfaces supported: X11
External libraries: pcre2, readline, curl
Additional capabilities: NLS
Options enabled: shared R library, shared BLAS, R profiling
Capabilities skipped: PNG, JPEG, TIFF, cairo, ICU
Options not enabled: memory profiling
Recommended packages: yes
configure: WARNING: you cannot build info or HTML versions of the R manuals
configure: WARNING: you cannot build PDF versions of the R manuals
configure: WARNING: you cannot build PDF versions of vignettes and help pages
Interfaces supported: X11
とOptions enabled: shared R library
を今一度確認する。
RのマニュアルまわりのWARNINGが出ているが、無視した。気に入らなければless config.log
して"WARNING"とか"ERROR"といった文字列を検索して周辺のメッセージを参考にする。
これが2,3度目の挑戦という読者におかれては、必ずmake clean
した後に、次の手順を踏んでほしい。
% make && make install
コーヒーを淹れる
気長に待つ。コーヒーを飲み終えたらrootを抜ける。
X Window Server が未設定ならばここで付録の手順を先に実施するとよい。
juliaにRCall.jl
を追加する
通常通りPkg.add("RCall") して Pkg.precompile するとエラーが表示された。
# Try adding /usr/local/lib/R/lib to the "LD_LIBRARY_PATH" environmental variable
このインストール方法ではあらかじめRのパスをjuliaに教えないとダメらしい。(冒頭のページに書いてある)
/usr/local
は読者において適宜読み替えるとして、次の一行を~/.bash_aliases
に追記しておく。
export LD_LIBRARY_PATH='/usr/local/lib/R/lib'
後は普通にパッケージ追加するだけだ。
julia> ]
(v1.0) pkg> add RCall
(v1.0) pkg> precompile
動作の確認
$
と打つとRのREPLモードに入ることができるとのこと。
julia> using RCall
julia> $
R> library(datasets)
R> plot(iris)
グラフが表示されたらインストールは成功だ。
付録:WSL 2 における X Server の使用
こちらは記事の最後に記載しているはてなブログと次の Issue を全面的に参考にさせていただきました。
Can't use X-Server in WSL 2 #4106
~/.bash_aliases
に以下の一行を追記。
WSL 2 に割り当てられたIPアドレスは毎回変化するらしく、ワンライナーで取得するのが安定。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
Windows 10 側で Windowsキー + X, (N) で「設定」を開き、「Windows ファイアウォールによるアプリケーションの許可」において VcXsrv Windows Xserver を追加し、プライベート/パブリック両方で許可する。
参考にしたサイトではこれで動いたそうなのだが、私の方ではもうひとつ手順を追加した。設定ファイル C:\Program Files\VcXsrv\X0.hosts
に一行追記して以下のように記述する:
X0.hosts
172.0.0.0 - 172.255.255.255
2020.07.06 追記
WSLにログインし直したら上の方法では必ずしも上手く行かなかった。
VcXsrv の XLaunch 実行時に Addicional parameters for VcXsrv 欄に-ac
と指定する方法で対応している。
以上。
参考サイト
https://qiita.com/tomotagwork/items/9e86d2fc67a7c7b644d5
https://odaryo.hatenablog.com/entry/2020/01/08/114846
変更履歴
2020.07.06 「付録:WSL 2 における X Server の使用」の修正