每个学校 ACM 队在训练或者招生的时候可能都需要一个 oj ,我们常用的 oj 是杭电的,但是有些不是很满意的地方。
首先是界面,国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑, 10 多年前的风格,可能因为 oj 就是 10 年前写的吧。
用起来也有些不是很方便的地方,比如提交题目要新开页面,要再选择题号,再手动刷新看结果。自己内部比赛有些规则也没办法去设置,自己没法去添加题目去查看测试用例等等。
所以我们实验室三个人用了大约暑假一个半月的时间,自己写了一个 oj ,我们的定位不仅仅是 ACM 训练,还有学校平时教学的作业考试等也可以在上面进行。 老师作为普通管理员可以创建小组,相当于一个班级,内部举办比赛,创建修改题目,外人不可见,超级管理员才可以管理公开的题目和比赛。
后端涉及到的技术有 Python 、 Django 、 Docker 、 MySQL 、 Redis 、 Celery 等,后台的前端是一个 SPA 页面,使用 avalon js 。
GitHub: https://github.com/QingdaoU/OnlineJudge (顺手 star 一个吧~)
文档: https://www.zybuluo.com/virusdefender/note/171932
demo: https://qduoj.com
给大家提前注册了账号,用户名 V2EX (都是小写的,论坛会自动转换为大写),密码 123456 ,欢迎去试用一下。
有什么问题或者建议欢迎在下面回复。
谢谢啦~
1
hcymk2 2015-09-17 17:12:59 +08:00
我怎么 star 过?
|
2
Nan7Huang 2015-09-17 17:19:19 +08:00
哦~厉害~我要推荐给队友
|
3
maemual 2015-09-17 17:47:39 +08:00
不好意思。。。似乎被我一个 fork 炸弹就玩挂了。。。
|
6
virusdefender OP @maemual 额 我看到了 现在系统调用过滤还是 todo 的状态。。
|
7
virusdefender OP @maemual docker 里面跑的 https://github.com/quark-zju/lrun docker 只是用来方便隔离环境用的,只是 lrun 的系统调用过滤我还没写
|
8
wph95 2015-09-17 17:54:27 +08:00
> 国内的 oj 除了 pat 、 codevs 等大多数都很丑很丑
赞的不能再多 整体写的非常好 部分代码有待商榷 比如: contest_submission 和 submission 可以和到一起的 评测机代码问题很严重 , 这个等下私聊告诉你 , 已经看出起码 3 种方式搞坏 。 个人还是推荐 不开源 评测机 , 或者集成 hustoj 的评测机(虽然渣的厉害 , 但是安全) 或者给等即将开放的 CodeVS 的评测 API :) |
9
maemual 2015-09-17 17:55:44 +08:00
还有, Django 的 settings 里的 SECRET_KEY ,开源出来会有安全隐患的。
|
10
wph95 2015-09-17 17:57:26 +08:00
@virusdefender 不能隔 fork 的 隔了 fork () , 会让 java 性能锐减 , lrun 我记得有个参数的 开启那个参数就可以防止 fork 炸弹,
没记错应该是 --isolate-process |
11
virusdefender OP @maemual 这个只有在 signed cookie 里面用到吧,如果用了 signed cookie 会有问题的。
|
12
virusdefender OP @wph95 嗯~代码中就可以看到 lrun 的那些参数都是 todo 的状态~docker 隔离性也有问题
|
14
learnshare 2015-09-17 18:03:02 +08:00
为什么感觉山东的 ACM 搞得比较热闹
|
15
wph95 2015-09-17 18:15:05 +08:00
@maemual
CodeVS 的核心技术都在评测机了 233 安全部分 还是传统做法 不过没用 ptrace ( ptrace 太傻 x ) 我原来也是用 lrun (Orz quake ) , 不过和 docker 无法兼容 就放弃了 , 自己写了一套 , 正努力的和整个 docker 生态融合 。 还有就是 动态弹性的评测集群 , 这个有很多花式解决方案 。 --- 有兴趣可以多多交流 , 也可以使用 codevs 的 开放 api 。 已经接受近 300 万次代码提交的检验 , 2 台单核 1g 机器就能承受年百万次评测哦 :—) 。 即将开放 平时 2 路, 峰值 10 路评测 的集群给大家用:) |
17
breeswish 2015-09-17 19:06:47 +08:00
安利一个久经考验(经过多位就职于国内著名安全实验室小伙伴测试)的,基于 Windows Sandbox 的评测机( from Vijos )
https://github.com/iceboy-sjtu/winjudge |
18
iniwap 2015-09-17 19:15:41 +08:00
@wph95 OJ 是 Online Judge 系统的简称,用来在线检测程序源代码的正确性。著名的 OJ 有 TYVJ 、 RQNOJ 、 URAL 等。国内著名的题库有北京大学题库、浙江大学题库、电子科技大学题库、杭州电子科技大学等。国外的题库包括乌拉尔大学、瓦拉杜利德大学题库等。
|
19
Delbert 2015-09-17 20:17:53 +08:00 via Android
@learnshare 山大 7 年表示不知道 acm 是啥
|
20
wph95 2015-09-17 20:37:44 +08:00
@maemual 还在实现中 可以 mail [email protected] 交流
|
21
ChiangDi 2015-09-17 21:34:05 +08:00
哎哟不错哦,支持
|
22
virusdefender OP @learnshare 可能是高考遗留问题。。但是成绩不好
|
23
tuteng 2015-09-18 19:00:19 +08:00
好炫呢
|
24
Changxu 2015-10-10 23:16:41 +08:00
docker 最近新加入了一个特性,是--kernel-memory 参数,据说可以用来解决 fork 炸弹问题: https://github.com/docker/docker/issues/6479
另外,常见的攻击 OJ 的手段都有什么? |
25
virusdefender OP @Changxu 调用各种命令 删除修改文件 fork 占用大量内存 include </dev/random>等
|
26
virusdefender OP @Changxu 我在系统调用上限制了一下,直接 fork 应该不行了,其余的我也不会写。。
|
27
nisekoi 2015-10-13 12:20:23 +08:00
已 star..不过按照文档配置了一下,返回 Server Error (500),不清楚是什么问题
|
28
virusdefender OP @nisekoi 看日志
|
29
nisekoi 2015-10-13 18:37:30 +08:00
@virusdefender 已解决。说说我遇到的问题:
提示 TemplateDoesNotExist: oj/index.html 将 /qduoj/template/src 中的 src 改为 release 可以访问后静态文件没显示出来? 由于我把静态文件放在了 /root/下,换到其他目录即可 |
30
virusdefender OP @nisekoi 你是不是没设置环境变量啊,会判断环境变量来决定配置文件的,一个是 src 一个是 release 。
要不你就是没打包 js , python tools/release_static.py 就行,这个时候会生成 release 目录。 不打包的话文件很大,有的页面 1M 多。 |
31
nisekoi 2015-10-13 20:08:10 +08:00
@virusdefender oj_env 么,那应该是没有设置环境变量了
|
32
junnplus 2015-10-17 10:06:28 +08:00
我们学校也在开发新的 OJ ,测试地址 http://oj.sdutacm.org 目前功能还没写完
|
33
virusdefender OP @junnplus looks great~
|
34
junnplus 2015-10-17 11:27:45 +08:00
@virusdefender thanks
|
35
virusdefender OP @junnplus http://oj.sdutacm.org/u/1/ 我们也在写这样一个个人主页,仿 github
|
36
virusdefender OP @junnplus 看了下你们的后台,也是 django 的?
|
37
junnplus 2015-10-17 13:54:07 +08:00
@virusdefender 后端是 flask
|
38
junnplus 2015-10-17 13:54:50 +08:00
@virusdefender 方便的可以交流下,微信 jun_nplus
|
39
kzzhr 2015-10-18 00:15:33 +08:00 via iPhone
作为一个折腾过 oj 的人。挺支持这样做的。
不过有一些个人看法,浙大在很多年前开源了一个判题的 core ,我觉得其实够用了。并没有必要去用 docker 从头搞。但是其他地方,我们称之为用户体验吧,确实应该改一改。功能上很多不足,应该才是需要花很多精力的 |
40
snnn 2015-10-18 01:04:20 +08:00 via Android
直接刷 UVA 什么的不好吗?
|
41
virusdefender OP @kzzhr 你是说 lrun 么,我们用到了那个, docker 只是一个壳
|
42
virusdefender OP @snnn 自己考试测评比较方便
|
43
Omitted 2015-10-18 09:20:07 +08:00
信工大二,对 python 感兴趣,请问加入学习嘛 0.0
|
44
virusdefender OP @Omitted 青大的?
|
45
Omitted 2015-10-18 10:36:41 +08:00
@virusdefender 是的, 14 级软外
|
46
Omitted 2015-10-18 10:45:29 +08:00
@virusdefender 对 Python 和 Docker 都感兴趣,不过仅仅算是知道吧,想深入学习,但没有方向,学长能否带走😶
|
47
virusdefender OP @Omitted http://weibo.com/277116340 私信我个 qq
|
48
jzp113 2015-12-14 16:45:50 +08:00
哈哈 用 python 写的也支持下 python 在线编译吧
|
49
virusdefender OP @jzp113 acm 没用 Python 的,所以就没加
|
50
samhjn 2016-01-05 18:15:51 +08:00
@wph95 其实很多年以前 CodeVS ( WikiOI )的评测机也是不安全的。当年他们的安全控制还是字符串匹配。最后我用了伪汇编调用 fork 把服务器整个搞瘫了。
|
51
wph95 2016-01-05 22:17:21 +08:00
|
52
felix021 2016-01-31 21:53:19 +08:00
写 OJ 的人真多……我想找个能跑 PHP 的,我之前写的那个 Judge 完全是基于 ptrace 限制系统调用,这个对付 PHP 的话很不灵活。
|
53
virusdefender OP |
54
felix021 2016-02-01 10:02:03 +08:00
@virusdefender 我是从最小权限开始,一点一点尝试,一点一点放开,直到把必须权限都放开为止。
|
55
xiaoqiang179 2018-05-05 19:06:28 +08:00
支持学长!!!
|
56
bulabean 2020-02-08 01:16:32 +08:00
支持,厉害了。
和 oj.youdao.com 好像,简直一毛一样。我觉得他们用的你这个开源 |