English summary

はじめに

Raspberry Piの標準的なOSであるRaspbian Jessie with PIXELには,R3.1.1がインストールされていますが、統合開発環境のRStudioはインストールされていません。また、APT (Advanced Packaging Tool)でも提供されていないので,簡単にapt-getでインストールというわけにはいきません。RStudioのソースコードからビルドする必要があります。

ここでは,RStudioのソースコードからRStudioのデスクトップ版とRStudio Serverをビルドしてインストール方法について説明します。

RStudio Desktop on RasPi 3
RStudio Server on RasPi 3

準備

ビルドには多めのスワップ領域が必要でソースコードやパッケージを多数インストールするため,Raspbianを入れているmicroSDカードには十分な空き容量が必要です。16GBでも空き容量があれば問題ありませんが,足りない場合は32GBのmicroSDカードを用意するか,USBフラッシュメモリやUSBハードディスクなどに頼る必要があります。ここではそのままRaspbian上での作業を記載しますが,外部領域の利用については参考文献[1]を参考にしてください。RStudioインストール後は,マイクロSDカードの寿命を考えるとスワップ領域は元の値に戻しておく方が良いかもしれません。

  1. 最初にスワップ領域を変更します。 デフォルトのスワップ領域は
    pi@raspberrypi:~ $ swapon -s
    Filename	Type	Size	Used	Priority
    /var/swap	file	102396	0	-1
    
    となっていました。これを変更します。以下,root権限で実します。
    sudo su
    service dphys-swapfile stop
    
    でサービスを止めた後で,dphys-swapfileを変更します。(エディターをお好きなものを)
    nano /etc/dphys-swapfile
    
    以下の行を見つけ
    CONF_SWAPSIZE=100
    
    値の100を1024にするか空(empty)にします。空にすると適当に計算してくれるようです。ここでは空にしてみます。修正を保存した後で,サービスを開始します。
    service dphys-swapfile start
    
    結果このようになりました。
    swapon -s
    Filename	Type	Size	Used	Priority
    /var/swap	file	1914876	0	-1
    
    また,shはdashを使うようになっていますが,これをbashに変更するため次を実行します。(出てきたウインドウで「いいえ」を選択します。)
    dpkg-reconfigure dash
    
  2. 次にRstudioのソースコードをダウンロードして準備をしますが,ここは参考文献[2]の質問への解答で紹介されているRstudio Serverのインストール方法から,途中まで引用します。引用先ではそのままビルドすると出てくるエラーの解消を説明する形で行われているのでやや冗長な気がしますが,これで問題はないのでそのままにしておきます。(downloadsはDownloadsに変更して,他に一部ファイル名の変更や追加をしています。)
    apt-get update
    apt-get upgrade -y
    apt-get install -y git r-recommended python-dev
    cd /home/pi/Downloads/
    git clone https://github.com/rstudio/rstudio.git
    cd /home/pi/Downloads/rstudio/dependencies/common/
    ./install-common
    cd /home/pi/Downloads/rstudio/dependencies/linux/
    ./install-dependencies-debian
    
    #saw java 6 was not installed. installed v7
    apt-get install -y openjdk-7-jdk
    
    #tried to make install, got an error about dictionaries not installed and rerun install-dependencies
    cd /home/pi/Downloads/rstudio/dependencies/common/
    ./install-common
    
    #tried to make install, hangs at "ext:" so I tried manually installing pandoc, which should have been installed earlier, but apparently was not
    apt-get install -y pandoc
    
    #tried to make install, hangs at "ext:" so I tried installing the latest GWT compiler
    cd /home/pi/Downloads
    wget http://dl.google.com/closure-compiler/compiler-latest.zip
    unzip compiler-latest.zip
    rm COPYING README.md compiler-latest.zip
    mv closure-compiler-v20170218.jar /home/pi/Downloads/rstudio/src/gwt/tools/compiler/compiler.jar
    
    #build and install works!
    cd /home/pi/Downloads/rstudio/
    #remove build if exists
    rm -r ./build
    mkdir build
    
ここから先はRStudio ServerとRStudio Desktopで変わります。

RStudio Serverのインストール

Rstudio Serverは[2]の方法でそのままビルドできます。ただし,ミスではないですが,せっかく作ったbuildフォルダが意味のない記載になっているのでそこは修正します。make installの途中で Warning: swp{b} use is deprecated for ARMv6 and ARMv という警告が大量に出ますが,対処法が難しいようなのでこれへの対処はしません。makeには相当の時間がかかります。
  1. cd build
    cmake .. -DRSTUDIO_TARGET=Server -DCMAKE_BUILD_TYPE=Release
    make install
    
    # Additional install steps
    useradd -r rstudio-server
    cp /usr/local/lib/rstudio-server/extras/init.d/debian/rstudio-server /etc/init.d/rstudio-server
    chmod +x /etc/init.d/rstudio-server 
    ln -f -s /usr/local/lib/rstudio-server/bin/rstudio-server /usr/sbin/rstudio-server
    chmod 777 -R /usr/local/lib/R/site-library/
    
  2. 次に[2]ではロケールの設定でen_US.UTF-8にしていますが,ここではja_JP.UTF-8しています。Raspberry Piの設定でロケールをja_JP.UTF-8にしてあれば不要な気もしますが,念のため同じことをします。ロケールの設定は一般ユーザに戻って行います。
    # Setup locale
    apt-get install -y locales
    DEBIAN_FRONTEND=noninteractive dpkg-reconfigure locales
    exit
    pi@raspberrypi:~ $ echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc
    pi@raspberrypi:~ $ echo 'export LANGUAGE=ja_JP.UTF-8' >> ~/.bashrc
    
    [5]に,/usr/local/lib/rstudio-server/bin/pandoc にインストールされるpandocとpandoc-citeprocについて,x86用なので削除するか名前を変更せよ(変更後はRaspbianのRepositoryからインストールしたものが使用される)とあるので,以下を行います。
    sudo apt-get install pandoc-citeproc
    sudo rm  /usr/local/lib/rstudio-server/bin/pandoc
    sudo rm  /usr/bin/pandoc-cite-proc  /usr/local/lib/rstudio-server/bin/pandoc-citeproc
    
    daemonをreloadした後で,RStudio Serverを起動させます。
    sudo systemctl daemon-reload
    
    # Start the server
    sudo rstudio-server start
    
    # Go to localhost:8787
    
Webブラウザを立ち上げて,http://localhost:8787にアクセスするとRStudioの統合環境が現れます。

RStudio Desktopのインストール

Desktop版のビルドは,Server版に比べ準備がいろいろあります。まず最初にビルドに必要なQTの環境を揃えます。./install-dependencies-debianの実行時の最後にQT環境がダウンロードされますが,これはandroidとx86用でRaspberry Piでは実行できません。RStudioのソース内のcmake用のファイルはダウンロードされたファイルの構造を使って書かれているので,そこにRasbiann用のファイルを(シンボリックリンクで)配置します。

  1. 最初に環境を整備します。
    apt-get install -y qt5-default libqt5svg5-dev libqt5sensors5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev qtpositioning5-dev
    mv /root/Qt5.4.0/5.4/gcc/bin /root/Qt5.4.0/5.4/gcc/bin_orig
    mv /root/Qt5.4.0/5.4/gcc/lib /root/Qt5.4.0/5.4/gcc/lib_orig
    ln -sf /usr/lib/arm-linux-gnueabihf/qt5/bin/ /root/Qt5.4.0/5.4/gcc/bin
    ln -sf /usr/lib/arm-linux-gnueabihf /root/Qt5.4.0/5.4/gcc/lib
    
    もともとのbinやlibフォルダは実際は使えないものなので削除してもいいのですが,念のため移動しておきます。
  2. 次にソースファイルを一部書き換えます。いずれもcmake時に現れる警告に対処 するものです。[3][4]
    nano /root/Qt5.4.0/5.4/gcc/lib/cmake/Qt5Core/Qt5CoreMacros.cmake
    
    COPY_ONLYとある部分(一箇所)を,アンダースコアを削除して COPYONLYにします。あるいはsedを用いて
    sed -i -e s/COPY_ONLY/COPYONLY/g /root/Qt5.4.0/5.4/gcc/lib/cmake/Qt5Core/Qt5CoreMacros.cmake
    
    とします。
    nano /home/pi/Downloads/rstudio/src/cpp/desktop/CMakeLists.txt
    
    先頭にあるcmake_policy(SET CMP0020 OLD)を cmake_policy(SET CMP0043 OLD)に変更します。あるいはsedを用いて
    sed -i -e s/CMP0020/CMP0043/g /home/pi/Downloads/rstudio/src/cpp/desktop/CMakeLists.txt
    
    とします。

    ビルドします。-DRSTUDIO_TARGETの値がRStudio Serverとは異なることに注意します。

    cd /home/pi/Downloads/rstudio/build
    cmake .. -DRSTUDIO_TARGET=Desktop -DCMAKE_BUILD_TYPE=Release
    make -j3 install &> install_output
    
    makeに相当の時間がかかります。Raspberry PI 3, Transcend Premium 300x 32GBのmicroSDカード使用で16時間以上かかりました。 最後にServer版と同様に以下を行います。
    sudo apt-get install pandoc-citeproc
    sudo rm  /usr/local/lib/rstudio/bin/pandoc
    sudo rm  /usr/local/lib/rstudio/bin/pandoc-citeproc
    
    RStudioの起動は
    /usr/local/lib/rstudio/bin/rstudio
    
    を実行しますが,このまま実行すると"libEGL warning: DRI2: failed to authenticate"の警告が出ます。[6]などによると,/usr/lib/arm-linux-gnueabihf/ 内のlibEGL.soやlibGLESv2.soなどを変更する必要があるようです。/opt/vc/lib 内の該当ファイルからのシンボリックリンクをする記事が多いのですが,それをすると別のエラーが出ます。[6]には単にRaspbian 内で見つかるライブラリのシンボリックリンクを作るように書かれているので,/usr/lib/chromium-browser/にあるもののシンボリックリンクを試したところ警告が出なくなりました。これで正しい対処かどうかわかりませんが,一応対処法として記載します。(補足を見てください。)
    sudo apt-get install chromium-browser
    LIBEGL=`sudo find /usr/lib/chromium-browser -name libEGL.so`
    LIBGLES=`sudo find /usr/lib/chromium-browser -name libGLESv2.so`
    sudo ln -sf $LIBEGL /usr/lib/arm-linux-gnueabihf/libEGL.so
    sudo ln -sf $LIBEGL /usr/lib/arm-linux-gnueabihf/libEGL.so.1
    sudo ln -sf $LIBGLES /usr/lib/arm-linux-gnueabihf/libGLESv2.so
    sudo ln -sf $LIBGLES /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2
    
    RStudioの実行は,Raspberry PiのメニューにRStudioが追加されているのでそれを利用してもできます。

補足

Raspbian jessieでは試みとして,experimental OpenGL driverが導入されています。"In this release we are shipping an experimental OpenGL driver for the desktop which uses the GPU to provide hardware acceleration."([7]) これを適用すると,"libEGL warning: DRI2: failed to authenticate"の警告は消えて,特に上記のようなシンボリックリンクを作らなくても,元からある/usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0を使うことができます。ただし,今度は,"MESA-LOADER: failed to retrieve device information"の警告が出てきます。こちらはどうやらlibdrmのバグのようで,[8]によると,libdrm 2.4.73で解消されるようです。 Experimentalな試みなので注意が必要ですが,こちらを採用することもできます。

参考文献

  1. Native Build of Qt 5.4.1 on a Raspberry Pi - Qt Wiki(2017年2月25日閲覧)
  2. raspbian - Error while trying to compile RStudio - Raspberry Pi Stack Exchange(2017年2月25日閲覧)
  3. [QTBUG-44637] Qt5CoreMacros.cmake uses COPY_ONLY instead of COPYONLY for configure_file() - Qt Bug Tracker(2017年2月25日閲覧)
  4. Bug #2603: CMake 3.0 で大量に警告が出る - Mroonga - Groonga issues!(2017年2月25日閲覧)
  5. RStudio on RaspberryPi 3 | R-bloggers(2017年2月25日閲覧)
  6. raspbian - Qt applications don't work due to libEGL - Raspberry Pi Stack Exchange(2017年2月28日閲覧)
  7. Another new Raspbian release - Raspberry Pi(2017年3月18日閲覧)
  8. Bug #1656930 " OpenGL applications warns “MESA-LOADER: failed to...” : Bugs : Raspbian(2017年3月18日閲覧)

2017.3.19 libEGLの警告に関する補足を追加
2017.3.14 pyconfig.hが見つからないというエラーに対処するためpython-devを追加
2017.3.12 chromium-browserのインストールを追加
2017.3.10 ファイルの編集をsedで行う場合の記述を追加
2017.3.8 uic等を含むbinフォルダのパスの記載ミス等を修正
2017.3.7 2017-03-02-raspbian-jessieでlibEGL.soなどのファイル配置が変更されていたためそれに伴う修正とrstudio-server起動前にdaemonをreloadすることを追加
2017.3.5 ページタイトルの一部修正
2017.3.3 pandocとpandoc-citeprocについて,[5]の記述のまま削除することに変更(最初はシンボリックリンクの作成を行っていた。)
2017.2.28 libEGLの警告への対処について追加
2017.2.27 RStudio Desktopの起動について追加
2017.2.25 作成