Я хотел бы установить пакет с профилем безопасности, который не имеет доступа к /tmp
, но имеет свой собственный временный каталог, например /tmp/jeroen
. Однако, даже если я пытаюсь передать переменную среды TMPDIR
, это все равно не удается, потому что она пытается использовать /tmp
. Ниже приведен игрушечный пример с использованием RAppArmor и unixtools (см. здесь тестовый профиль)
> library(RAppArmor)
> library(unixtools)
> dir.create("/tmp/jeroen")
> set.tempdir("/tmp/jeroen")
> setwd(tempdir());
> aa_change_profile("r-test")
Switching profiles...
> print(tempdir());
[1] "/tmp/jeroen"
> install.packages("plyr", lib="/tmp/jeroen", configure.vars="TMPDIR=/tmp/jeroen")
trying URL 'http://cran.rstudio.com/src/contrib/plyr_1.8.tar.gz'
Content type 'application/x-gzip' length 384462 bytes (375 Kb)
opened URL
==================================================
downloaded 375 Kb
Fatal error: cannot create 'R_TempDir'
The downloaded source packages are in
‘/tmp/jeroen/downloaded_packages’
При просмотре файла kern.log
(который регистрирует сообщения безопасности) выясняется, что проблема в том, что R CMD INSTALL
все еще пытался использовать /tmp
, которому было отказано:
Jul 24 19:41:34 Jeroen-Antec kernel: [16270.696805] type=1400 audit(1374687694.097:599):
apparmor="DENIED" operation="mkdir" parent=5798 profile="r-test" name="/tmp/RtmpcUOJuQ/"
pid=5802 comm="R" requested_mask="c" denied_mask="c" fsuid=1000 ouid=1000
Могу ли я каким-либо образом указать R CMD INSTALL
использовать вместо него /tmp/jeroen
?
TMPDIR="/tmp/jeroen" R
- person GSee   schedule 24.07.2013install.packages
делает 2 вызоваtempdir()
; это может помочь проверить, когда он вызывается - person GSee   schedule 24.07.2013configure-vars
позаботится об этом. У процесса нет разрешения на редактирование .Renviron - person Jeroen   schedule 24.07.2013destdir
будет использоватьtempdir()
, о чем позаботились. Проблема возникает позже в процессе, когдаinstall.packages
обращается кR CMD INSTALL
. - person Jeroen   schedule 25.07.2013Sys.setenv()
. Переменные среды наследуются дочерними процессами. - person hadley   schedule 25.07.2013