本文参考与:https://github.com/cn-xcpc-tools/cn-xcpc-docs
domjudge官网:https://www.domjudge.org/
配置:
1. Huawei cloud学生机 Ubuntu18.04
2. domjudge v7.1.1
注:本篇文章的目的主要是记录自己的搭建过程(其实就是傻瓜式的跟着做的),在此同时帮助到可能能帮助到的小伙伴。并不是严格的教程向文章。
简单的使用domjudge需要安装两部分,一部分是Domserver,就是网页部分,另一部分是judgehost,即判题机。
Domserver
安装依赖包和功能
远程连接到服务器后首先安装依赖包和功能,一步步执行,
安装时选择 apache2
sudo apt-get upgrade && sudo apt-get update sudo apt install gcc g++ make zip unzip mariadb-server \ apache2 php php-cli libapache2-mod-php php-zip \ php-gd php-curl php-mysql php-json php-xml php-intl php-mbstring \ acl bsdmainutils ntp phpmyadmin python-pygments \ libcgroup-dev linuxdoc-tools linuxdoc-tools-text \ groff texlive-latex-recommended texlive-latex-extra \ texlive-fonts-recommended texlive-lang-european composer sudo apt install libcurl4-gnutls-dev libjsoncpp-dev libmagic-dev sudo phpenmod json
编译domjudge
wget https://www.domjudge.org/releases/domjudge-7.1.1.tar.gz
不知名原因导致下载速度感人,本地下载后通过ftp传到服务器里面,下载好之后解压配置编译安装即可。
tar -zxvf domjudge-7.1.1.tar.gz cd domjudge-7.1.1 ./configure --prefix=/opt/domjudge --with-baseurl=127.0.0.1 make domserver && sudo make install-domserver make docs && sudo make install-docs
./configure --prefix=/opt/domjudge --with-baseurl=127.0.0.1
执行这一步时遇到权限问题,按照报错提示在后面添加指定内容成功解决。
配置数据库
cd /opt/domjudge/domserver sudo bin/dj_setup_database -u root install
配置 Web 服务器
cd /opt/domjudge/domserver sudo ln -s /opt/domjudge/domserver/etc/apache.conf /etc/apache2/conf-available/domjudge.conf sudo a2enmod rewrite sudo a2enconf domjudge sudo systemctl reload apache2 sudo chown www-data:www-data -R /opt/domjudge/domserver/webapp/var/*
到这一步的时候如果没有出错,那么已经可以通过服务器的公网ip(ip/domjudge)查看domjudge了。
默认用户名为admin
,密码生成在/opt/domjudge/domserver/etc/initial_admin_password.secret
中,以后可以修改
配置 MySQL
编辑/etc/mysql/conf.d/mysql.cnf
,在里面添加
[mysqld] max_connections = 1000 max_allowed_packet = 16MB innodb_log_file_size = 48MB
其中max_allowed_packet
数值改成两倍于题目测试数据文件的大小,innodb_log_file_size
数值改成十倍于题目测试数据文件的大小。
若使用的是 mariadb,则 /etc/mysql/mariadb.conf.d/50-server.cnf
中 max_allowed_packet
一项也需要修改。(但是我用的不是)
然后重启mysql
sudo systemctl restart mysql
配置PHP
编辑 /opt/domjudge/domserver/etc/apache.conf
,取消以下几行内容前的注释:(在vim中直接输入/+内容就可以查找)
<IfModule mod_php7.c> php_value max_file_uploads 100 php_value upload_max_filesize 128M php_value post_max_size 128M php_value memory_limit 512M </IfModule>
编辑 /etc/php/7.2/apache2/php.ini
,搜索 date.timezone
关键字,取消其行前注释,并将其值设为 Asia/Shanghai
。搜索 max_execution_time
关键字,将其值由30改为300,防止生成队伍密码时 PHP 执行超时。
然后重启PHP
sudo systemctl restart apache2
配置 Apache
编辑 /etc/apache2/apache2.conf
,搜索 KeepAlive
关键字,将其值设为 Off
,并在其后新增一行内容:
MaxClients 1000
然后重启Apache
sudo systemctl restart apache2
到这里,Domserver就设置完成了,关于domjudge的使用下面统一再说。接下来总结一下judgehost的搭建
Judgehost
本着节约资源的理念(穷),domserver和judgeserver我都用在这个服务器上
安装依赖
sudo apt install make sudo debootstrap libcgroup-dev lsof \ php-cli php-curl php-json php-xml php-zip procps \ gcc g++ openjdk-8-jre-headless \ openjdk-8-jdk ghc fp-compiler \ libcurl4-gnutls-dev libjsoncpp-dev libmagic-dev
编译安装
cd domjudge-7.1.1 ./configure --prefix=/opt/domjudge --with-baseurl=127.0.0.1 make judgehost && sudo make install-judgehost
配置的命令跟上面安装domserver的时候一样,按照报错信息操作即可。
这会将 judgehost 安装在 /opt/domjudge/judgehost
里。
(make install-judgehost
会提示找不到 etc/restapi.secret
,可忽略,会在下面进行配置)
添加用户
useradd -d /nonexistent -U -M -s /bin/false domjudge-run
我只添加了一个判题机。有更多的需求的可以去本文开头提到的GitHub库中查看相关操作。
配置 sudoers
将 /opt/domjudge/judgehost/etc/sudoers-domjudge
复制到 /etc/sudoers.d/
目录下。
sudo cp /opt/domjudge/judgehost/etc/sudoers-domjudge /etc/sudoers.d/
修改 rest 密码
使用 vim 等文本编辑器编辑 /opt/domjudge/judgehost
目录下 etc/restapi.secret
这个文件。文件的格式为:
default http://example.edu/domjudge/api/ judgehosts MzfJYWF5agSlUfmiGEy5mgkfqU
格式为 endpoint api_url username password ,endpoint 可以保持不变,api_url 根据 judgeserver 的地址进行修改,username 和 password 要与 judgeserver 上的 etc/restapi.secret
保持一致。
(这一步我没找到judgeserver,应该就是让看的domserver吧,写成一样的就行了)
构建 chroot 环境
使用 vim 等文本编辑器编辑 ~/domjudge/judgehost/bin/dj_make_chroot 脚本,将 ubuntu 镜像改为国内源。(第 172 行)
# Ubuntu mirror, modify to match closest mirror [ -z "$DEBMIRROR" ] && DEBMIRROR="http://mirrors.aliyun.com/ubuntu/"
修改之后保存并运行此脚本(bash 运行)。这一步会从源上下载必要的软件包,所以请耐心等待。
设置cgroup
使用 vim 等文本编辑器编辑 /etc/default/grub
这个文件,对其中的这一行做如下修改:
GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1"
然后执行:update-grub
之后重启服务器
启动judgehost
bash /opt/domjudge/judgehost/bin/create_cgroups /opt/domjudge/judgehost/bin/judgedaemon
即可启动。若提示 error: Call to undefined function curl_init()
,则可以安装 php-curl 解决

大概意思就是,判题机已启动,队列中没有提交
到这里judgehost就安装好了
如果想要断开连接并且还可以正常使用判题机,这样来
bash /opt/domjudge/judgehost/bin/create_cgroups nohup /opt/domjudge/judgehost/bin/judgedaemon &
退出连接的时候记得用exit
,不要直接关闭
到这里,domjudge就可以正常投入使用了。
Domjudge的使用
一切都还在摸索
Loading~~~