我正在尝试在我的大学改编和管理的Scientific Linux 6.5(Carbon)版本上安装DOMJudge。我被迫使用基于RHEL的Linux版本以获得我大学对该机器的支持,因此切换到基于Debian的Linux不是一种选择。
我得到了网站启动和运行并获得了陪审团界面。当我尝试提交'hello world'示例问题的解决方案时,judgehost会吐出以下编译器错误(下面的文本已完成;冒号后没有任何内容):
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/compile
total 1440
drwxrwxrwx. 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
我判断的用户是domjudge而我的chroot用户是domjudge-run。
我的问题是:如何让compile.sh为二进制文件设置适当的权限,以便所有用户都可以读取?如果我正在咆哮错误的树,这个问题表明我的DOMJudge配置存在更大的问题,请告诉我。我试图让DOMJudge在Scientific Linux上工作时遇到了不少挫折,我不怀疑我在此过程中搞砸了什么。
注意:我试图忽略compile.sh中的检查以完成脚本,但是一旦编译完成,当试图将二进制文件复制到chroot jail时,判断的查看器就会打嗝,因为它再次没有读取文件的权限。所以看起来我必须解决其他被判断的工作的权限问题。
答案 0 :(得分:0)
为将来遇到这个问题的人解答我自己的问题。
询问domjudge-devel邮件列表,对这个问题有了一些了解。看起来这是我大学管理的图像上设置的安全策略特有的问题。修复此问题的方法是在编译命令后立即将以下行放入lib /中的compile_*.sh
文件中:
chmod -R a+rX .
Java有点棘手,需要其中两个语句,一个在编译命令之后,一个在创建可执行程序之后。
请注意,这是一个黑客修复;对问题进行更正确的修复可能需要尝试使用DOMJudge代码本身来适应具有任意安全策略的RHEL Linux安装,如果上面的hack修复不是一个选项,这是练习留给读者的。