6

へのアクセス権はないが/tmp、独自の一時ディレクトリ (たとえば/tmp/jeroen. ただし、TMPDIR環境変数を渡そうとしても、使用しようとするため失敗します/tmp以下は、 RAppArmorunixtoolsを使用したおもちゃの例です(テスト プロファイルについては、こちらを参照してください)。

> 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

4

2 に答える 2

3

install.packagesコメントで@hadleyによって正しい答えが与えられました:カスタム一時ディレクトリを確実に使用するには、次のことを行う必要があります

Sys.setenv(TMPDIR="/tmp/jeroen")

に加えて:

configure.vars="TMPDIR=/tmp/jeroen"

このようにして、パッケージの抽出とインストールの両方で、システムまたはユーザーのデフォルトの一時ディレクトリが回避されます。

于 2013-07-26T12:20:26.893 に答える
0

のドキュメントには、 、、 ... が使用されhelp(tempdir)ていることが明確に記載されています。TMPTMPDIR

デフォルトでは、「tmpdir」は「tempdir()」によって指定されたディレクトリになります。これは、R セッションの開始時に次のルールによって検出される、セッションごとの一時ディレクトリのサブディレクトリになります。環境変数 'TMPDIR'、'TMP' および 'TEMP' が順番にチェックされ、書き込み可能なディレクトリを指す最初に見つかったものが使用されます。成功しない場合は '/tmp' が使用されます。

したがって、1 つだけを設定しても問題が解決しない場合は、いくつかを設定して、「置換ディレクトリ」のアクセス許可が十分に許容されていることを確認してください。

于 2013-07-24T21:03:52.013 に答える