我正在尝试在由我的大学改编和管理的Scientific Linux 6.5(Carbon)版本上安装DOMJudge。为了获得我所在大学对机器的支持,我被迫使用基于RHEL的Linux版本,因此切换到基于Debian的Linux是不可行的。

我的工作就是建立网站并开始运作,并建立陪审团界面。当我尝试提交“ hello world”示例问题的解决方案时,法官主机吐出以下编译器错误(以下文本已完成;冒号之后没有任何内容):

Compiling failed: no executable was created; compiler output:

在对PREFIX / lib / domjudge / judge / compile.sh以及为提交创建的判断目录进行调查后,我发现编译后的二进制文件被赋予了权限,根本不允许编译脚本查看该二进制文件,从而导致编译后检查二进制文件是否存在时窒息的脚本。这是由compile.sh生成二进制文件时授予的权限和所有权:

$ ls -al /usr/local/var/lib/domjudge/judgings/domjudge/c2-s1-j11/compiletotal 1440drwxrwxrwx. 2 domjudge domjudge 4096 Jul 22 15:07 .drwx------. 3 domjudge domjudge 4096 Jul 22 15:07 ..-rw-rw-r--. 1 domjudge domjudge 106 Jul 22 15:07 helloworld.cpp-rwxr-x---. 1 domjudge-run root 1461083 Jul 22 15:07 program

我的Justicedaemon用户是domjudge,而我的chroot用户是domjudge-run。

我的问题是:如何获取compile.sh来设置二进制文件的适当权限,以便所有用户均可读取?如果我拨错了树,并且此问题表明我的DOMJudge配置中存在更大的问题,请告诉我。为了让DOMJudge在Scientific Linux上工作,我感到无比沮丧,而且我毫不怀疑我在此过程中搞砸了一些东西。

注意:我试图忽略compile.sh内的检查以使脚本完成,但是一旦编译完成,当尝试将二进制文件复制到chroot监狱时,法官daemon会打h,因为它再次没有读取权限。文件。因此,看来我必须解决权限问题,才能使其余的Justicedaemon正常工作。

最佳答案

为将来遇到这个问题的任何人回答我自己的问题。

在domjudge-devel邮件列表上进行询问可以使您对该问题有所了解。看来这是我的大学管理的映像上设置的安全策略特有的问题。解决此问题的方法是在编译命令之后立即将以下行放入lib / judge中的compile_*.sh文件中:

chmod -R a+rX .

Java比较棘手,需要其中两条语句,一条在编译命令之后,一条在创建可执行程序之后。

请注意,这是一个修补程序。要更正确地解决此问题,可能需要对DOMJudge代码本身进行修改,以适应具有任意安全策略的RHEL Linux安装,如果上面的hack修复不可行,这是读者的一项练习。

关于linux - DOMJudge安装:编译脚本未生成适当的权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24899171/

10-12 23:34