dmoj介绍
dmoj是一个开源的Online Judge(简称OJ)系统,正如其简介中描述的,它是一个现代的OJ系统,相比其他老牌的OJ系统,其主要特点是:
- 支持的语言非常丰富,其他OJ系统主要是Java、C++、Python,而dmoj几乎覆盖了所有主流的语言,其中比较吸引我的还支持JavaScript;
- 其judge系统的是高度可扩展的,首先是可方便的引入新语言的支持,其次是题目的评判过程可高度定制;
- 其功能性上非常完备,覆盖OJ系统必备的所有功能,比如有些OJ不支持组织,只有用户的概念,而dmoj都是支持的;
- 国际化、本地化支持非常出色,得益于django框架,dmoj对国际化、时区、本地化处理的非常好,还有其头像采用gravatar服务,也是加分项;
- 其WEB站点也是可定制的,通过管理后台可动态添加导航和简单页面,支持markdown页面。
安装问题总结
根据官方的安装手册,仍然会遇到不少问题,特将安装过程中遇到的问题记录下来,供其他人参考。我是在debian9虚拟机中安装的,安装分两部分,一部分是站点,一部分是judge,judge可以安装多个。
web站点安装
-
python版本
必须采用python3,代码中使用了仅python3才有的库。
-
pip install mysqlclient
时报错1
apt install libmysqlclient-dev
修改为:
1
apt install libmariadbclient-dev
-
内网屏蔽了git协议,
pip install -r requirements.txt
报错先将https://github.com/DMOJ/dmoj-wpadmin取到本地,然后修改requirements.txt中
-e git://github.com/DMOJ/dmoj-wpadmin.git#egg=dmoj-wpadmin
为本地路径。 -
USE_TZ = True
时在WEB站点上涉及时间字段的操作后报错:Database returned an invalid datetime value. Are time zone definitions for your database installed?
执行如下命令:
1
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -u root -p
-
发送邮件时异常:
Mail from must equal authorized user
local_settings中加入DEFAULT_FROM_EMAIL,赋值为使用的邮件发送地址。
judge安装
-
python版本
python2或python3均可
-
编译时找不到seccomp相关头文件
执行:
1
sudo apt install libseccomp-dev libseccomp2 seccomp
其他相关知识
-
vagrant安装增强功能
1
2
3
4
5apt-get install build-essential linux-headers-$(uname -r)
vagrant upload "C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso" /home/vagrant/VBoxGuestAdditions.iso
sudo mkdir /media/VBoxGuestAdditions
sudo mount -o loop,ro VBoxGuestAdditions.iso /media/VBoxGuestAdditions
sudo sh /media/VBoxGuestAdditions/VBoxLinuxAdditions.run -
source: not found
ls -l 'which sh'
提示/bin/sh -> dash
这说明是用dash来进行解析的。执行:sudo dpkg-reconfigure dash
,在界面中选择no,再ls -l 'which sh'
提示/bin/sh -> bash
,修改成功,source可以用了。 -
安装JDK
1
sudo apt-get install openjdk-8-jre openjdk-8-jdk
-
mariadb修改认证方式和root密码
使用说明
关于题目
安装后是不包含题目的,要让OJ真正运转起来,必须包含题目,通过爬虫程序可以从dmoj官网提取题目,可参考我写的爬虫程序:https://github.com/zhongpan/dmoj_problems。
增加语言
以增加V8JS为例:
-
安装v8dmoj
参考https://github.com/DMOJ/v8dmoj中的安装步骤安装,会安装v8dmoj程序到/user/bin下
-
修改judge的runtime
运行dmoj-autoconf,会自动检测本机上可用的编程语言环境,根据输出修改judeg的配置文件中的runtime,安装v8dmoj后会增加如下行:
1
v8dmoj: /user/bin/v8dmoj
重启judge,可以看到多了V8JS:
-
站点管理后台增加语言,注意标识符同上面裁判服务器的执行器标识符一致