RStudio 是一個 R 的整合開發環境,改良原有的 R 使用界面,加入更多便利的功能,是目前最受歡迎的 R 使用者介面之一。
RStudio 的版本分為 Desktop 與 Server 兩種,Desktop 版是給個人安裝在自己的電腦上使用的,而 Server 版則是安裝在伺服器上面,以網頁介面的方式提供使用者線上使用。
Server 版的部分,如果是 Ubuntu/Debian Linux 的話,可以直接用 apt 安裝打包好的 deb 檔,而如果是 RedHat/CentOS Linux 的話,也有現成的 rpm 可以裝,我們這裡介紹如何在一般其他的 Linux 下自行編譯與安裝 RStudio 的 Server 版。
Step 1
首先到 R 的官方網站下載最新的 R 原始碼。
wget http://cran.cs.pu.edu.tw/src/base/R-2/R-2.15.2.tar.gz
Step 2
解壓縮下載下來的 R 壓縮檔。
tar zxvf R-2.15.2.tar.gz
Step 3
執行 configure
,記得要加入 --enable-R-shlib
參數,如果沒有加入這個參數,則在後面編譯 RStudio 時候有問題。
cd R-2.15.2 ./configure --prefix /opt/R/R-2.15.2 --enable-R-shlib
而 --prefix 參數是指定 R 要安裝的路徑。
Step 4
編譯程式,現在的多核心 CPU 可以用 -j
參數指定平行化編譯,會加快很多,這裡我們使用 4 核心的 CPU 來編譯。
make -j4
Step 5
將編譯好的 R 程式安裝到 /opt/R/R-2.15.2
。
make install
Step 1
下載 Boost 1.50.0 版原始程式碼。
wget http://downloads.sourceforge.net/project/boost/boost/1.50.0/boost_1_50_0.tar.bz2
Step 2
解壓縮下載的壓縮檔。
tar jxvf boost_1_50_0.tar.bz2
Step 3
編譯 Boost 函式庫。
cd boost_1_50_0 ./bootstrap.sh ./b2
Step 4
將 Boost 1.50.0 安裝在 /opt/R/boost-1.50.0。
./b2 install --prefix=/opt/R/boost-1.50.0
--prefix
是指定 Boost 函式庫的安裝路徑。
Step 5
設定 ldconfig
:
sudo echo '/opt/R/boost-1.50.0/lib' > /etc/ld.so.conf.d/boost1.50.0.conf
重新載入設定:
sudo ldconfig
Step 1
從 RStudio 官方網站下載原始碼的 .tar.gz 壓縮檔。
Step 2
解壓縮下載的壓縮檔:
tar zxvf rstudio-rstudio-v0.97.318-0-gd528686.tar.gz
Step 3
安裝 RStudio 編譯所需的程式:
cd rstudio-rstudio-d528686/dependencies/common ./install-dictionaries ./install-mathjax ./install-gwt cd ../../
Step 4
執行 cmake
:
mkdir build cd build cmake .. -DRSTUDIO_TARGET=Server \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/opt/R/rstudio \ -DLIBR_HOME=/opt/R/R-2.15.2 \ -DLIBR_INCLUDE_DIRS=/opt/R/R-2.15.2/lib64/R/include \ -DLIBR_LIBRARIES=/opt/R/R-2.15.2/lib64/R/lib \ -DLIBR_DOC_DIR=/opt/R/R-2.15.2/lib64/R/doc \ -DBOOST_ROOT=/opt/R/boost-1.50.0
這裡所指定的參數會跟上面 Boost 與 R 的安裝路徑有關,如有需要,請依照自己系統的安裝路徑設定。而 CMAKE_INSTALL_PREFIX 是指定 RStudio 的安裝路徑。
Step 5
以 4 顆 CPU 編譯 RStudio 原始碼。
make -j4
Step 6
安裝 RStudio 至 /opt/R/rstudio。
make install
Step 7
新增 RStudio Server 系統用帳號 rstudio-server,
sudo useradd -r rstudio-server
只要這個帳號存在,RStudio 就會自動以這個帳號的權限執行。
Step 8
RStudio 是使用 PAM 的方式來進行使用者的認證,在 Ubuntu 或 Debian 中預設就會使用 PAM,而在其他的 Linux 中就要設定(如:Redhat、Fedora 與 openSUSE)。
設定方式就是將設定寫在 /etc/pam.d/rstudio
這個檔案中,在安裝路徑中的 extras/pam/rstudio
是一個範本檔案,可以參考,或是直接複製過去也可以。
sudo cp /opt/R/rstudio/extras/pam/rstudio /etc/pam.d/
Step 9
設定 init.d
服務(Ubuntu 則為 upstart
),讓 RStudio 開機自動啓動,在安裝路徑中的 extras/init.d
與 extras/upstart
中有各種常用 Linux 的範本檔案。
而安裝 init.d(或 upstart)script 需要將寫好的 script 檔複製到 /etc/init.d 資料夾中:
cp /opt/R/rstudio/extras/init.d/suse/rstudio-server /etc/init.d/
接著將執行權限打開,然後在設定啓動的 runlevel,例如:
sudo /sbin/chkconfig --add rstudio-server
Step 10
為 RStudio 管理者工具建立連結檔,方便管理用。
sudo ln -f -s /opt/R/rstudio/bin/rstudio-server /usr/sbin/rstudio-server
Step 11
如果你的 Linux 系統有支援 AppArmor,則可以再加入 AppArmor 的設定增加系統安全性,在安裝路徑的 extras/apparmor/rstudio-server 有一個是用於 Ubuntu Linux 的範例組態檔。
Step 12
建立 RStudio 設定檔,其設定檔是在放 /etc/rstudio
這個目錄下,而這個目錄要自行建立:
mkdir -p /etc/rstudio
接著建立 rserver.conf
設定檔,設定要使用的 R 所安裝的路徑:
echo 'rsession-which-r=/opt/R/R-2.15.2/bin/R' >> /etc/rstudio/rserver.conf
設定 RStudio 所佔的 port number,這個就依自己的狀況修改:
echo 'www-port=18000' >> rserver.conf
如果之前的 Boost 不想以 ldconfig 更動整個 Linux 系統的設定,也可以在這裡個別對 RStudio 做設定:
echo 'rsession-ld-library-path=/opt/R/boost-1.50.0/lib' >> /etc/rstudio/rserver.conf
Step 13
若之前已經設定好 init.d 服務了,則這時候就可以使用下面這個指令啟動 RStudio:
sudo rstudio-server start
除了 start 之外,其餘可用的參數有:stop、restart、offline、online 等。
通常作為雲端服務的伺服器都會有網頁伺服器的功能,最常使用的就是 Apache,為了避免開太多對外的 port 而增加風險,我們使用 Apache 的 proxy 功能,這樣連線時就可以透過 Apache 轉到 RStudio 的 port,避免 RStudio 直接對外。
Step 1
首先啓動 Apache 的 proxy
與 proxy_http
兩個模組。
sudo a2enmod proxy sudo a2enmod proxy_http
Step 2
更改 Apache 的設定檔,在 VirtualHost 中加入 proxy
的設定:
<VirtualHost *:80> <Proxy *> Allow from localhost </Proxy> ProxyPass /rstudio/ http://localhost:18000/ ProxyPassReverse /rstudio/ http://localhost:18000/ RedirectMatch permanent ^/rstudio$ /rstudio/ </VirtualHost>
這個設定是讓所有連到 /rstudio/ 這個位置的連線直接導入 RStudio 的登入網頁 http://localhost:18000/,這樣網址就會比較簡潔,不會出現 port number。
Step 3
重新啓動 Apache。
sudo /etc/init.d/apache2 restart
Problem 1
啟動 RStudio 時,如果出現類似下面這些訊息:
/opt/R/rstudio/bin/rserver: error while loading shared libraries: libboost_date_time.so.1.50.0: cannot open shared object file: No such file or directory /usr/sbin/rstudio-server: line 24: return: can only `return' from a function or sourced script Starting rstudio-server /opt/R/rstudio/bin/rserver: error while loading shared libraries: libboost_date_time.so.1.50.0: cannot open shared object file: No such file or directory startproc: exit status of parent of /opt/R/rstudio/bin/rserver: 127 failed
則表示 RStudio 啓動時,找不到 Boost 的 shared library,請參考上面的 Boost 安裝教學並檢查:
Problem 2
啟動 RStudio 時出現 failed,而 /var/log/messages 中出現類似下面這些訊息:
Mar 4 08:18:20 ngs1t rserver[33336]: ERROR Unable to find an installation of R on the system (which R didn't return valid output); LOGGED FROM: core::FilePath core::r_util::<unnamed>::systemDefaultRScript(std::string*) /home/seal/rstudio/rstudio-rstudio-d528686/src/cpp/core/r_util/REnvironmentPosix.cpp:217 Mar 4 08:18:20 ngs1t rserver[33336]: ERROR Unable to locate R binary by scanning standard locations; LOGGED FROM: core::FilePath core::r_util::<unnamed>::scanForRScript(const std::vector<std::basic_string char="" std::char_traits="">, std::allocator<char> >, std::allocator<std::basic_string char="" std::char_traits="">, std::allocator<char> > > >&, std::string*) /home/seal/rstudio/rstudio-rstudio-d528686/src/cpp/core/r_util/REnvironmentPosix.cpp:66 Mar 4 08:18:20 ngs1t rserver[33336]: ERROR Unable to find an installation of R on the system (which R didn't return valid output); Unable to locate R binary by scanning standard locations; LOGGED FROM: int main(int, char* const*) /home/seal/rstudio/rstudio-rstudio-d528686/src/cpp/server/ServerMain.cpp:342
就表示 RStudio 找不到系統上 R 所安裝的位置,請檢查:
原則上只要有問題,通常都可以在錯誤訊息中找到答案。