Trials and tribulations building Rstudio Server on a mac
I’ve been trying to get RStudio Server to build on my iMac all of yesterday. In my opinion, it’s the best IDE for R, and being able to run it on another computer remotely is icing on the cake. My Samsung Chromebook with crouton really doesn’t have the “oomph” to… well… do anything meaningful. But building has been anything but a trivial process, and I want to post here to document some pitfalls I’ve found myself running into… this isn’t a well-documented process.
I’ve been relying on instructions from this blog post by Ian Gow, which provides easy-to-follow commands (great when you’re too lazy to remember to type out build instructions into gcc by hand), and has supposedly worked for him. With my setup (which uses macports R 3.1.1 and the latest RStudio version on github), I’ve still run into some problems.
First, there’s a hidden dependency on java, which I installed with the OS X Installer. You need this to work with apache-ant, and it doesn’t come up until later in the build process. When I was building from scratch on my chromebook (RStudio does not supply ARM binaries), I ran into this problem and I assumed it would be an issue here.
Second, R is not recognized by RStudio when running cmake. I started running into these errors:
Rogers-iMac:build roger$ cmake -DRSTUDIO_TARGET=Server -DCMAKE_BUILD_TYPE=Release ..
-- Mac OS X version: 10.10
-- Boost version: 1.50.0
-- Found R: /opt/local/lib/libR.dylib/Resources
CMake Error at src/cpp/CMakeLists.txt:218 (message):
Minimum R version (2.11.1) not found.
-- Configuring incomplete, errors occurred!
See also "/Users/roger/projects/rstudio/build/CMakeFiles/CMakeOutput.log".
See also "/Users/roger/projects/rstudio/build/CMakeFiles/CMakeError.log".
I tried taking the easy way out initially, by passing -DRSTUDIO_VERIFY_R_VERSION=0
in the cmake
instructions instead (suggested on the RStudio forums here), but then ran into the same problem that the poster did, not being able to find Rinternals.h
Rogers-iMac:build roger$ cmake -DRSTUDIO_TARGET=Server -DCMAKE_BUILD_T[330/3072]
e -DRSTUDIO_VERIFY_R_VERSION=0 ..
-- The C compiler identification is AppleClang 6.0.0.6000054
-- The CXX compiler identification is AppleClang 6.0.0.6000054
[...]
[ 44%] Built target rstudio-monitor
Scanning dependencies of target rstudio-r
[ 44%] Building CXX object src/cpp/r/CMakeFiles/rstudio-r.dir/RErrorCategory.cpp
.o
[ 44%] Building CXX object src/cpp/r/CMakeFiles/rstudio-r.dir/RExec.cpp.o
In file included from /Users/roger/projects/rstudio/src/cpp/r/RExec.cpp:17:
In file included from /Users/roger/projects/rstudio/src/cpp/r/include/r/RExec.hp
p:30:
In file included from /Users/roger/projects/rstudio/src/cpp/r/include/r/RSexp.hp
p:33:
/Users/roger/projects/rstudio/src/cpp/r/include/r/RInternal.hpp:43:10: fatal err
or: 'Rinternals.h' file not found
#include <Rinternals.h>
^
1 error generated.
make[2]: *** [src/cpp/r/CMakeFiles/rstudio-r.dir/RExec.cpp.o] Error 1
make[1]: *** [src/cpp/r/CMakeFiles/rstudio-r.dir/all] Error 2
make: *** [all] Error 2
I wasn’t sure how to continue here, but I found an old forum post on the RStudio forums with a nice clue. Sometimes cmake
would have problems finding the R executable, especially if it was in an uncommon location. Macports generally puts its binaries in /opt/local/bin
, but RStudio was only searching /usr/bin
and /usr/local/bin
. So all I would have to do is point the cmake
command to the location of R (letting it complete successfully) with export STUDIO_WHICH_R=/opt/local/bin/R
right before running the command, and afterwards fixing a few lines in build/CMakeCache.txt
. (I also have this as a question/answer on StackOverflow)
cmake ran successfully, and afterwards I changed these lines in CMakeCache.txt:
//R doc directory
LIBR_DOC_DIR:PATH=/opt/local/Library/Frameworks/R.framework/Resources/doc
//R executable
LIBR_EXECUTABLE:PATH=/opt/local/bin/R
//R home directory
LIBR_HOME:PATH=/opt/local/Library/Frameworks/R.framework/Resources
//R include directory Think I found our problem!LIBR_INCLUDE_DIRS:PATH=/opt/local/lib/libR.dylib/Resources/include
LIBR_INCLUDE_DIRS:PATH=/opt/local/Library/Frameworks/R.framework/Versions/3.1/Resources/include/
//Path to a library.
LIBR_LIBRARIES:FILEPATH=/opt/local/lib/libR.dylib
The final result: Success!
Afterwards, I followed the suggestions of the developers and put RStudio behind a reverse proxy for better security. I chose nginx, which is rapidly growing in popularity, in part because of its usefulness as a reverse proxy (look how easy that configuration is!). This will also be useful if I want to host other unrelated stuff on my computer, I can easily throw rstudio behind a directory and have it work just like normal.