LoginSignup
0
0

More than 3 years have passed since last update.

WSL Debian 9にR言語 v4.0.2をインストールする

Last updated at Posted at 2020-06-27

julia言語からR言語を呼び出すライブラリRCall.jlを使用するために、最新版をソースからインストールした時の個人用メモ。apt install で追加できる R v3.3.3 はライブラリRCall.jlの要求バージョン未満だったので、最新版をソースからビルドしたのだが、かなり苦戦したので、記事に残すことにした。
この記事が私と同じ状況にある人の助けになれば幸いである。

以下の公式ドキュメントでは Other methods として、ソースからコンパイルする方法が紹介されている。
http://juliainterop.github.io/RCall.jl/stable/installation/

環境

いくつかのコマンド出力を貼っておく。

terminal
$ 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してみたが、次のようなエラーを吐いて上手くいかなかった。

terminal
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: X11Options 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 するとエラーが表示された。

juliaREPL
# Try adding /usr/local/lib/R/lib to the "LD_LIBRARY_PATH" environmental variable

このインストール方法ではあらかじめRのパスをjuliaに教えないとダメらしい。(冒頭のページに書いてある)
/usr/localは読者において適宜読み替えるとして、次の一行を~/.bash_aliasesに追記しておく。

~/.bash_aliases
export LD_LIBRARY_PATH='/usr/local/lib/R/lib'

後は普通にパッケージ追加するだけだ。

juliaREPL
julia> ]
(v1.0) pkg> add RCall
(v1.0) pkg> precompile

動作の確認

$と打つとRのREPLモードに入ることができるとのこと。

juliaREPL
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アドレスは毎回変化するらしく、ワンライナーで取得するのが安定。

~/.bash_aliases
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 の使用」の修正

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0