4

Chromebook の Crouton chroot で奇妙なエラーが発生し、ターミナルapt-get install smlnjから呼び出しを試みた後、sml他のどこにも見つからなかったエラー:

$ sml
/usr/lib/smlnj/bin/sml: Error -- unable to map 1179648 bytes, errno = 1
/usr/lib/smlnj/bin/sml: Fatal error -- unable to allocate memory object for BIBOP

ガイダンスはありますか?

4

1 に答える 1

4

編集:この問題 (バグ #120) は、以前は Linux でサポートされていなかった MAP_ANONYMOUS を有効にすることで、SML/NJ バージョン 110.77 (リリース ノート) で修正されました。SMLNJ の最新バージョンをインストールすることは、システムのセキュリティを弱める必要がないため、以下のソリューションよりも望ましいでしょう。の権限を変更して続行する場合は、セッションごとに権限/devを削除することをお勧めします。exec


この問題は、主にChrUbuntu または Croutonを実行している Chromium OS 環境で再現可能ですが、同様の問題を抱えている他の環境の他のユーザーにも発生する可能性があります。

straceon で実行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)
...

したがって、解決策は、許可を得て再マウントすることです/devexec

$ sudo mount -o remount,exec /dev
$ sml
Standard ML of New Jersey v110.75 [built: Thu May  9 05:41:01 2013]
- 
于 2014-07-28T16:07:41.903 に答える