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
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 18.104.22.16800054 -- The CXX compiler identification is AppleClang 22.214.171.12400054 [...] [ 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: *** [src/cpp/r/CMakeFiles/rstudio-r.dir/RExec.cpp.o] Error 1 make: *** [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/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.