[Rcpp-devel] Rcpp / g++ ignoring TMPDIR

Dirk Eddelbuettel edd at debian.org
Mon Dec 2 03:33:46 CET 2013

Hi Jeroen,

On 1 December 2013 at 17:52, Jeroen Ooms wrote:
| Hi all :)
| I'm experiencing an issue with building Rcpp packages inside the OpenCPU
| sandbox. I think this issue was introduced with the upgrade to Rcpp 0.10.6. The

I don't think this is us, and I don't think something changed. See below.

| problem is that g++ seems to ignore the TMPDIR environment variable, and
| instead always tries to use the default /tmp. When /tmp is not writable, this
| causes the compiling to fail.
| I am personally using RAppArmor to enforce these security policies, but an
| easier way to reproduce the problem is by temporarily disable write access to /
| tmp. Something like this:
| #force custom TMP directory, replace jeroen with your username
| cd /tmp
| sudo mkdir test
| sudo chown jeroen test
| sudo chgrp jeroen test
| sudo chmod 755 /tmp
| TMPDIR=/tmp/test bash -c R

This should pass through to shells spawned.  

First, straight bash:

  edd at max:~$ FOOBAR=/bing bash
  edd at max:~$ echo $FOOBAR
  edd at max:~$ exit

Second, R

  edd at max:~$ FOOBAR=/bing R -q -e 'system("echo $FOOBAR")'
  R> system("echo $FOOBAR")
  edd at max:~$

| #then in R do:
| tempdir() #check 
| install.packages("RcppExamples") #or any other rcpp package

Note that install.packages() is a base R function, and not anything Rcpp adds.
We do have a few system() calls here or there for Rcpp Attributes and the like.
| The process fails with 'Fatal error: creating temporary file for '-e' failed -L
| /usr/lib/R/lib -lR'. When using AppArmor, the error is actually more detailed
| and says that g++ tried to create a file /tmp/tmpfDbJ9KD. 
| How can I make g++ use the same TMPDIR as the R process?

I think I'd start by setting TMPDIR. But here (in a virtual machine) I can't
even make g++ fail:

edd at billie:~/maxHome/tmp/jeroen$ cat hello.cpp 
#include <iostream>

int main(void) {
    std::cout << "Hello Jeroen\n";
    return 0;
edd at billie:~/maxHome/tmp/jeroen$ 

edd at billie:~/maxHome/tmp/jeroen$ g++ -o hello hello.cpp && ./hello
Hello Jeroen
edd at billie:~/maxHome/tmp/jeroen$ mkdir /tmp/test; sudo chown edd:edd /tmp/test; sudo chmod 0755 /tmp/test
edd at billie:~/maxHome/tmp/jeroen$ rm hello && TMPDIR=/tmp/test g++ -o hello hello.cpp && ./hello
Hello Jeroen
edd at billie:~/maxHome/tmp/jeroen$ 


Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com

More information about the Rcpp-devel mailing list