HZNUOJ 是基于 HUSTOJ 改造而来的,遵循GPL协议开源
- 更华丽的界面
- 更灵活的权限管理
- 支持多组样例
- 有封装好的Docker镜像,一键部署
支持提交量和访问量的统计
重写过的的榜单
能点开查看每题的提交状况
多样例支持
细分的权限分配
下载源文件,在仓库根目录下执行build:
admin@ubuntu16:~$ git clone https://github.com/wlx65003/HZNUOJ.git
admin@ubuntu16:~$ cd HZNUOJ
admin@ubuntu16:~/HZNUOJ$ sudo docker build -t hznuoj:latest -f docker/Dockerfile ./等待build完成即可。
完成后docker image ls,若有看到hznuoj的镜像即为成功。
如果你实在懒得build,也可以从Docker Hub下载。
HZNUOJ的Docker Hub主页:https://hub.docker.com/r/wlx65003/hznuoj ,会持续从master分支构建最新的镜像。
使用docker pull下载即可,由于HZNUOJ的Judger依赖较多,所以镜像很大,约1.2G,请耐心等待,或者自行寻找科学上网方式。最好还是自己build。
admin@ubuntu16:~$ docker pull wlx65003/hznuojadmin@ubuntu16:~$ docker run -it --rm -p 90:80 --privileged hznuoj:latest其中-p 90:80表示把容器的80端口映射到宿主机的90端口,可自行修改,可以直接改成http默认的80端口以省去网址里的端口号。
--rm 表示运行一次就删除容器,如果你想长期运行,当虚拟机用,需要去掉。
--privileged 不能省略,否则判题机会权限不足,判题功能无法正常运作。
然后访问localhost:90即可。
-
HZNUOJ目前只在Ubuntu16.04上跑过,在更高版本下判题机可能无法正常运行。(2020年12月已将判题机更新到hustoj的最新版本判题机,Ubuntu18/20都已适配。)
-
下载源码,root权限运行
judger/install/install.sh, 安装脚本会自动将系统默认更新源换成国内访问速度更快的阿里云更新源。 本地登录或者ssh远程登录Ubuntu16系统后,命令行下按顺序执行以下指令:admin@ubuntu16:~$ git clone https://github.com/wlx65003/HZNUOJ.git admin@ubuntu16:~$ sudo bash HZNUOJ/judger/install/install.sh
在Ubuntu18中安装时,命令行下按顺序执行以下指令:
admin@ubuntu18:~$ git clone https://github.com/wlx65003/HZNUOJ.git admin@ubuntu18:~$ sudo bash HZNUOJ/judger/install/install-ubuntu18.04.sh
源码或者还可以直接访问
https://github.com/wlx65003/HZNUOJ下载zip包 -
安装完成后访问localhost、服务器IP或相应域名即可。
-
若想在现存的hustoj上使用HZNUOJ,请参看HZNUOJ常见问题列表/将hustoj升级为HZNUOJ(只迁移web部分,后台的判题机不变),
-
OJ的默认运行模式为OJ_OI_MODE=0 ACM竞赛模式,若要用于OI信息学奥赛训练,可以在安装前修改
/judger/install/judge.confOJ_OI_MODE=1,或在安装后运行/judger/install/ch_OI_MODE.sh脚本修改运行模式。
系统分为后台的Core(判题机)和前台的web(网站)两大部分。两个部分相对独立,通过数据库关联。判题机通过轮询数据库提取判题队列,生成判题信息回写数据库,web部分读取数据库显示在网页上。
若发现提交代码后无法判题,一直显示pending或者等待,请尝试服务器中运行以下命令重启判题机进程
admin@ubuntu16:~$ sudo pkill -9 judged && sudo judged && ps -A | grep judged
若出现类似"xxxx ? 00:00:00 judged"的字样,说明进程重启成功更多原理和说明可参考hustoj文档大全.pdf及HZNUOJ常见问题列表
Core判题机部分的配置文件为/home/judge/etc/judge.conf,web网站部分的配置文件为/home/judge/HZNUOJ/web/OJ/include/static.php
详细的配置说明可以参看HZNUOJ配置手册或者配置文件中的注释。
下面把几个可能会用到的功能配置参数说明一下:
judge.conf中的OJ_OI_MODE负责标记判题机的判题模式是OI信息学奥赛模式还是ACM大学生程序设计竞赛模式。
判题模式默认为ACM大学生程序设计竞赛模式,一旦有测试实例出错就停止运行,比赛根据 AC 数量排名。
判题模式为OI信息学奥赛模式,即使有测试实例出错,它依旧会测试下去,比赛根据数据通过率排名,而不只看 AC 数量;另外会在status.php状态页中显示测试实例的通过率和程序最大运行时间。
可运行脚本快速修改或手动修改judge.conf文件
执行源码目录下的 `judger/install/ch_OI_MODE.sh` ,按照提示操作即可
admin@ubuntu16:~$ sudo bash HZNUOJ/judger/install/ch_OI_MODE.shjudge.conf中的OJ_FULL_DIFF负责标记判题机的错误信息对比说明输出模式,static.php中的$OJ_SHOW_DIFF负责控制用户是否有权限在reinfo.php页看到上述错误信息对比说明。
OJ_FULL_DIFF的修改不会对老的判题WrongAnswer信息产生影响,除非修改后重新判题。
部分输出模式,若有测试实例出错,将出错的各组测试实例数据的输出数据xx.out,以及代码运行结果输出到表runtimeinfo,供reinfo.php页调用显示。
全输出模式,若有测试实例出错,将出错的各组测试实例数据的输入xx.in、输出数据xx.out,以及代码运行结果全部输出到表runtimeinfo,若将此类reinfo开放给选手,很容易因为in、out文件输入输出数据的泄露而导致恶意刷题,请谨慎使用。
用户可以在reinfo.php页查看判题错误信息的对比说明。
reinfo.php页会被禁止访问,用户不能查看判题错误信息的对比说明。
OJ_SIM_ENABLE负责标记判题机是否开启代码相似度检测,$OJ_SIM负责标记web部分的状态页上是否显示代码相似度检测的结果。
通过配置judge.conf中的OJ_SIM_ENABLE = 1 和 static.php中的$OJ_SIM = true 开启代码相似度检测,也就是抄袭检查功能,但只针对AC的代码,不检测没通过的代码。
判题机通过调用第三方应用程序SIM对AC的提交代码进行语法分析判读文本相似度,通过检验的代码将由判题机复制进题目数据的 ac 目录成为新的参考样本(基于此,长期开启本功能会占用大量硬盘存储空间)。
默认管理员账号为admin/123456。
出题手册见https://www.yuque.com/weilixinlianxin/zcf10d/yfk05w
HZNUOJ目前开发人手很有限,只有已经上班的我和训练繁忙的一些学弟,有许多已知的不友好的功能和小BUG,只能抽时间慢慢改了。
同时也欢迎大家反馈issue/提交pull request帮忙一起完善HZNUOJ。
最后,如果您觉得HZNUOJ好用,请给我一个Star,这将是对我莫大的帮助与鼓励,十分感谢!