編集:この問題 (バグ #120) は、以前は Linux でサポートされていなかった MAP_ANONYMOUS を有効にすることで、SML/NJ バージョン 110.77 (リリース ノート) で修正されました。SMLNJ の最新バージョンをインストールすることは、システムのセキュリティを弱める必要がないため、以下のソリューションよりも望ましいでしょう。の権限を変更して続行する場合は、セッションごとに権限/dev
を削除することをお勧めします。exec
この問題は、主にChrUbuntu または Croutonを実行している Chromium OS 環境で再現可能ですが、同様の問題を抱えている他の環境の他のユーザーにも発生する可能性があります。
strace
on で実行sml
すると、エラー出力の前に次の (試行された) 操作が行われます。
open("/dev/zero", O_RDONLY) = 4
mmap2(NULL, 1245184, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 4, 0) = -1 EPERM (Operation not permitted)
mmap(2)のドキュメントによるとEPERM
、 は、システムが とマークされたディレクトリに実行権限を持つメモリを割り当てようとしていることを示していますnoexec
。
確かに、mount
与えます:
...
devtmpfs on /dev type devtmpfs (rw,nosuid,noexec,relatime,size=960456k,nr_inodes=240114,mode=755)
...
したがって、解決策は、許可を得て再マウントすることです/dev
。exec
$ sudo mount -o remount,exec /dev
$ sml
Standard ML of New Jersey v110.75 [built: Thu May 9 05:41:01 2013]
-