3

更新:エラーはemacs内からRにログインした場合にのみ発生します

何が機能するか:

リモートサーバーにSSH接続して実行すると

$ ./foo.rb

bashシェルからは機能します。さらに、Rを起動して$Rを実行すると

system('./foo.rb')

私はファイルの読み取り/書き込み/実行の権限を持つグループに属しています。ファイルのアクセス許可は-rwxrwx---

動作しないもの:

emacsを起動し、Rセッションを開始します。

  • M-x R
  • ssh-myserver:

    system('./foo.rb')

次のエラーが発生します。

ruby: Permission denied -- foo.rb (LoadError)

どうしてこれなの?これを回避する方法はありますか?

?systemまたはからの情報が見つかりません?system2


これがsessionInfo()からの出力です

> sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: x86_64-redhat-linux-gnu (64-bit)

locale:
[1] C

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] PECAn_0.1.1      xtable_1.5-6     gridExtra_0.7    RMySQL_0.7-5    
 [5] DBI_0.2-5        ggplot2_0.8.9    proto_0.3-8      reshape_0.8.3   
 [9] plyr_1.6         rjags_2.2.0-2    coda_0.13-5      lattice_0.19-17 
[13] randtoolbox_1.09 rngWELL_0.9      MASS_7.3-11      XML_3.2-0       

loaded via a namespace (and not attached):
[1] digest_0.4.2
Warning message:
'DESCRIPTION' file has 'Encoding' field and re-encoding is not possible 

@sarnoldによるコメントごとのsshおよびemacsからの「id」および「env」の出力(変更されたユーザー名、グループ名、およびIPアドレス)

1.サーバー

1.1'id'

 uid=1668(dleb) gid=1668(dleb) groups=117(ebusers),159(lab_admin),166(lab),1340(pal_web),1668(dleb)

1.2'env'

LC_PAPER=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_MONETARY=en_US.UTF-8
SHELL=/usr/local/bin/system-specific
KDE_NO_IPV6=1
SSH_CLIENT=888.888.888.88 51857 22
NCARG_FONTCAPS=/usr/lib64/ncarg/fontcaps
LC_NUMERIC=en_US.UTF-8
USER=dleb
LS_COLORS=
LC_TELEPHONE=en_US.UTF-8
KDEDIR=/usr
NCARG_GRAPHCAPS=/usr/lib64/ncarg/graphcaps
MAIL=/var/mail/dleb
PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/opt/dell/srvadmin/bin
LC_IDENTIFICATION=en_US.UTF-8
LC_COLLATE=en_US.UTF-8
R_LIBS=/home/a-m/dleb/lib/R
PWD=/home/dleb
NCARG_ROOT=/usr
KDE_IS_PRELINKED=1
LANG=en_US.UTF-8
NCARG_DATABASE=/usr/lib64/ncarg/database
MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles
LOADEDMODULES=
LC_MEASUREMENT=en_US.UTF-8
NCARG_LIB=/usr/lib64/ncarg
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
NCARG_NCARG=/usr/share/ncarg
SHLVL=1
HOME=/home/a-m/dleb
LOGNAME=dleb
CVS_RSH=ssh
SSH_CONNECTION=888.888.888.88 51857 999.999.999.99 22
LC_CTYPE=en_US.UTF-8
MODULESHOME=/usr/share/Modules
LESSOPEN=|/usr/bin/lesspipe.sh %s
DISPLAY=localhost:15.0
LC_TIME=en_US.UTF-8
G_BROKEN_FILENAMES=1
LC_NAME=en_US.UTF-8
_=/bin/env

emacs /essRセッション

2.1 system('id')

uid=1668(dleb) gid=1668(dleb) groups=117(ebusers),159(lab_admin),166(lab),1340(pal_web),1668(dleb)

2.2システム('env')

LN_S=ln -s
R_TEXI2DVICMD=/usr/bin/texi2dvi
LC_PAPER=en_US.UTF-8
SED=/bin/sed
LC_ADDRESS=en_US.UTF-8
R_PDFVIEWER=/usr/bin/xdg-open
LC_MONETARY=en_US.UTF-8
HOSTNAME=ebi-forecast
R_INCLUDE_DIR=/usr/include/R
R_PRINTCMD=lpr
SHELL=/usr/local/bin/system-specific
TERM=dumb
AWK=gawk
HISTSIZE=1
R_RD4DVI=ae
SSH_CLIENT=888.888.888.88 51159 22
KDE_NO_IPV6=1
R_RD4PDF=times,hyper
R_PAPERSIZE=a4
NCARG_FONTCAPS=/usr/lib64/ncarg/fontcaps
PERL=/usr/bin/perl
LC_NUMERIC=en_US.UTF-8
SSH_TTY=/dev/pts/14
LC_ALL=C
EMACS=t
USER=dleb
LC_TELEPHONE=en_US.UTF-8
LS_COLORS=
LD_LIBRARY_PATH=/usr/lib64/R/lib:/usr/local/lib64:/usr/lib/jvm/jre/lib/amd64/server:/usr/lib/jvm/jre/lib/amd64:/usr/lib/jvm/java/lib/amd64:/usr/java/packages/lib/amd64:/lib:/usr/lib
TAR=/bin/gtar
ENV=
R_ZIPCMD=/usr/bin/zip
KDEDIR=/usr
PAGER=/usr/bin/less
NCARG_GRAPHCAPS=/usr/lib64/ncarg/graphcaps
R_GZIPCMD=/usr/bin/gzip
PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin
LC_COLLATE=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
EGREP=/bin/grep -E
PWD=/home/a-m/dleb/pecan
INPUTRC=/etc/inputrc
R_LIBS=/home/a-m/dleb/lib/R
NCARG_ROOT=/usr
R_SHARE_DIR=/usr/share/R
WHICH=/usr/bin/which
EDITOR=vi
LANG=en_US.UTF-8
KDE_IS_PRELINKED=1
R_LIBS_SITE=/usr/local/lib/R/site-library:/usr/local/lib/R/library:/usr/lib64/R/library:/usr/share/R/library
M    ODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles
NCARG_DATABASE=/usr/lib64/ncarg/database
LC_MEASUREMENT=en_US.UTF-8
LOADEDMODULES=
PS3=
R_BROWSER=/usr/bin/xdg-open
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
NCARG_LIB=/usr/lib64/ncarg
HOME=/home/a-m/dleb
SHLVL=1
NCARG_NCARG=/usr/share/ncarg
R_ARCH=
TR=/usr/bin/tr
MAKE=make
R_UNZIPCMD=/usr/bin/unzip
LOGNAME=dleb
CVS_RSH=ssh
LC_CTYPE=en_US.UTF-8
SSH_CONNECTION=888.888.888.88 51159 999.999.999.99 22
R_BZIPCMD=/usr/bin/bzip2
MODULESHOME=/usr/share/Modules
LESSOPEN=|/usr/bin/lesspipe.sh %s
PROMPT_COMMAND=
R_HOME=/usr/lib64/R
DISPLAY=localhost:22.0
R_PLATFORM=x86_64-redhat-linux-gnu
INSIDE_EMACS=23.2.1,tramp:2.1.18-23.2
R_LIBS_USER=~/R/x86_64-redhat-linux-gnu-library/2.12
LC_TIME=en_US.UTF-8
R_DOC_DIR=/usr/share/doc/R-2.12.2
R_SESSION_TMPDIR=/tmp/RtmpqA6bpJ
HISTFILE=/home/a-m/dleb/.tramp_history
G_BROKEN_FILENAMES=1
LC_NAME=en_US.UTF-8
_=/bin/env
4

2 に答える 2

3

同じユーザーとしてRを起動したとすると、そうします。ただし、エラーはの権限の問題によるものではありません。そうでない場合、シェルでエラーが発生します。(つまり、以下の例を参照してください)。ここでは、ルビー自体がエラーを出している。あなたの中に何が入っているのかを正確に知らなくても、そこを掘り下げてロード/ソースしようとしているものを確認し、それらの権限を確認することをお勧めします。foo.rbsh: ./test.rb: Permission deniedfoo.rb

#!/usr/bin/env ruby

puts 'Hello world'

今Rで...

> system('ls -l test.rb')
-rw-r--r--  1 jcolby  staff  40 Oct 21 08:23 test.rb
> system('./test.rb')
sh: ./test.rb: Permission denied
> system('chmod a+x test.rb')
> system('./test.rb')
Hello world
于 2011-10-21T15:33:35.083 に答える
2

M ODULEPATHEmacsから派生した出力のは単にコピーアンドペーストのタイプミスだと思います。

2つの出力の違いは、env私が予想していたよりもはるかに大きいです。少し疑わしいと思われるものを選択しました。

$ diff -u works fails
--- works   2011-10-24 15:04:02.000000000 -0700
+++ fails   2011-10-24 15:12:36.000000000 -0700
...
+LD_LIBRARY_PATH=/usr/lib64/R/lib:/usr/local/lib64:/usr/lib/jvm/jre/lib/amd64/server:/usr/lib/jvm/jre/lib/amd64:/usr/lib/jvm/java/lib/amd64:/usr/java/packages/lib/amd64:/lib:/usr/lib
...
-PATH=/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/opt/dell/srvadmin/bin
-PWD=/home/dleb
...
+PATH=/bin:/usr/bin:/usr/sbin:/usr/local/bin
...
+PWD=/home/a-m/dleb/pecan
...

emacsから派生したセッションでは、LD_LIBRARY_PATH環境変数によって、実行時に動的にリンクされたライブラリが使用されている詳細が変更されている可能性がありますrubysshサーバーにアクセスfoo.rbして、変更を加えて実行した場合LD_LIBRARY_PATH、それは機能しますか、それとも失敗しますか?

LD_LIBRARY_PATH=/usr/lib64/R/lib:/usr/local/lib64:/usr/lib/jvm/jre/lib/amd64/server:/usr/lib/jvm/jre/lib/amd64:/usr/lib/jvm/java/lib/amd64:/usr/java/packages/lib/amd64:/lib:/usr/lib ./foo.rb

2つのセッション間のPATH環境変数は異なります。おそらく、実行する権限/usr/local/bin/ruby(またはのライブラリ)はありますが、 (またはのライブラリ/usr/local/lib/ruby/)はありません。スクリプトは使用しますか、それとも使用しますか(または他の固定パス)?/usr/bin/ruby/usr/lib/ruby/#!env ruby#!/usr/bin/ruby

一方pwdのインスタンスは/home/dleb、もう一方のインスタンスです/home/a-m/dleb/pecanが、両方のシステムでにHOME設定されています。/home/a-m/dlebシンボリックリンクですか、それとも/home/dleb実際には別の場所に存在し/home/a-m/dlebますか?(これは本当にストローをつかんでいます-これはそうではないと思いますが、この問題困惑しています。)

最後に考慮すべきことは、サーバーがAppArmorSELinuxTOMOYOSMACKなどのツールに限定されているかどうかです。これらの必須アクセス制御ツールはいずれも、アプリケーションが特定の場所に書き込むのを妨げる可能性があります。おそらく、サイト用にまだ構成されていません。出力をチェックdmesg(1)して、拒否メッセージがあるかどうかを確認します。これらのツールのほとんどまたはすべてが、実行されていないdmesg(1)場合にログオンしますauditd(8)

于 2011-10-24T22:29:13.697 に答える