0%

现代化OJ系统dmoj搭建问题总结及使用方法

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站点安装

  1. python版本

    必须采用python3,代码中使用了仅python3才有的库。

  2. pip install mysqlclient时报错

    1
    apt install libmysqlclient-dev

    修改为:

    1
    apt install libmariadbclient-dev
  3. 内网屏蔽了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为本地路径。

  4. 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
  1. 发送邮件时异常:Mail from must equal authorized user

    local_settings中加入DEFAULT_FROM_EMAIL,赋值为使用的邮件发送地址。

judge安装

  1. python版本

    python2或python3均可

  2. 编译时找不到seccomp相关头文件

    执行:

    1
    sudo apt install libseccomp-dev libseccomp2 seccomp

其他相关知识

  1. vagrant安装增强功能

    1
    2
    3
    4
    5
    apt-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
  2. source: not found

    ls -l 'which sh' 提示/bin/sh -> dash这说明是用dash来进行解析的。执行:sudo dpkg-reconfigure dash,在界面中选择no,再ls -l 'which sh' 提示/bin/sh -> bash,修改成功,source可以用了。

  3. 安装JDK

    1
    sudo apt-get install openjdk-8-jre openjdk-8-jdk
  4. mariadb修改认证方式和root密码

    https://www.cnblogs.com/zhuxiaoxi/p/10843659.html

使用说明

关于题目

安装后是不包含题目的,要让OJ真正运转起来,必须包含题目,通过爬虫程序可以从dmoj官网提取题目,可参考我写的爬虫程序:https://github.com/zhongpan/dmoj_problems

增加语言

以增加V8JS为例:

  1. 安装v8dmoj

    参考https://github.com/DMOJ/v8dmoj中的安装步骤安装,会安装v8dmoj程序到/user/bin下

  2. 修改judge的runtime

    运行dmoj-autoconf,会自动检测本机上可用的编程语言环境,根据输出修改judeg的配置文件中的runtime,安装v8dmoj后会增加如下行:

    1
    v8dmoj: /user/bin/v8dmoj

    重启judge,可以看到多了V8JS:

    1561363260451

  3. 站点管理后台增加语言,注意标识符同上面裁判服务器的执行器标识符一致

    1561363031075

-------------本文结束感谢您的阅读-------------