什么是需要为Scala创build一个监狱环境

什么是需要为Scala创build一个监狱环境,第1张

概述什么是需要为Scala创build一个监狱环境

我是程序员可以提交在游戏中相互竞争的机器人的网站的开发者。 我正在尝试将Scala添加到支持的语言列表中,但是我在这里遇到了麻烦。

问题是每个机器人都从自己的监狱运行,我无法从监狱(linux系统btw)运行scala,因为我得到一个错误,说可执行文件没有find。 在监狱之外,一切正常。 所以我错过了一些东西放入监狱。 我有所有的Java依赖库,整个jvm文件夹和整个scala文件夹..但还有一些其他的东西仍然失踪,我无能为力。

下面是编译脚本的重要部分(它应该像我想的那样工作)

#compile scalac -sourcepath src/ -d bin/ `find src/ -name '*.scala'` #create runscript echo "#!/bin/sh" > bin/run_ai echo "cd / && ./scala -Djava.security.manager -cp bin/ -J-Xss8m -J-Xmx450m '$MAIN'" >> bin/run_ai

run_ai是从监狱运行bot时调用的脚本,$ MAIN是要运行的主要scala文件。 正如我所说,这一切在监狱外都很好。

公平,安全,高效,多语言的沙盒

在监狱环境中运行Haskell程序需要什么

如何监禁linux用户

如何跟踪在特定内核上运行的PID列表?

linux chroot jail和FreeBSD jail有什么区别?

这里是创build监狱内所需要的一切的脚本。 在这里,我明显错过了一些重要的东西。

mkdir -p lib64 bin lib/x86_64-linux-gnu usr/lib/x86_64-linux-gnu scala jvm proc cp /lib64/ld-linux-x86-64.so.2 lib64/ cp /bin/sh bin/ #These dependency librarIEs are actually copIEd from the Java mkjail script. #Using 'ldd /usr/bin/scala' returns "not a dynamic executable" in the shell. #For other languages,it gives a nice List of dependencIEs,scala not :( cp /lib/x86_64-linux-gnu/libgcc_s.so.1 lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libz.so.1 lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/ cp /lib/x86_64-linux-gnu/libm.so.6 lib/x86_64-linux-gnu/ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 lib/x86_64-linux-gnu/ mount -o bind /proc proc echo "bound /proc" mount -o remount,ro proc echo "remounted /proc" #adding jvm to jail mount -o bind /usr/lib/jvm jvm mount -o remount,ro jvm #adding scala to jail mount -o bind /usr/share/scala scala mount -o remount,ro scala #some extra stuff to run Java from the jail,not actually needed here I think if [ -f jvm/java-7-openjdk-amd64/jre/bin/java ] then cp jvm/java-7-openjdk-amd64/jre/lib/amd64/jli/libjli.so lib/x86_64-linux-gnu/ ln -s jvm/java-7-openjdk-amd64/jre/bin/java . else cp jvm/java-6-openjdk-amd64/jre/lib/amd64/jli/libjli.so lib/x86_64-linux-gnu/ ln -s jvm/java-6-openjdk-amd64/jre/bin/java . fi #creating a soft link to run scala. trying to run the bots without the soft link gives the same error,so this is not the problem. ln -s scala/bin/scala ./scala

所以简而言之:从jail运行scala会导致一个错误:“./scala not found”,如果我尝试其他的东西,比如:/ scala / bin / scalac,我会得到相同的错误。 (运行在jail中添加的Java工作正常)。 所以我错过了一些运行Scala的东西。

我的问题是:运行Scala究竟需要什么?

创build一个Chroot监狱,并将所有系统文件复制到监狱

“scala”可执行文件引用/ usr / bin / env,它位于jail之外。

这可能工作:

java -cp /absolute/path/to/scala-library.jar:path/to/scala/classfiles/ MyMainClass

scala和scalac是shell脚本。 他们可能会缺少env和bash可执行文件。


您可以通过添加跟踪代码(例如echo "trace01" )来进一步调试脚本以查明问题。

总结

以上是内存溢出为你收集整理的什么是需要为Scala创build一个监狱环境全部内容,希望文章能够帮你解决什么是需要为Scala创build一个监狱环境所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1154814.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存