离队有一段时间了,队伍需要配置一个判题的环境,我比较熟悉Ubuntu的系统,老师让我来配置一下,这是我们学院第一次用这个DOMjudge平台,记录一下配置的过程
系统环境
ubuntu18.04
mysql-server-5.7
domjudge7.3.4
domjudge官网下载
点击release archive可以下载旧版本
这里下载的是DOMjudge7.3.4
新建domjudge用户并授予sudo权限
可用可不用,主要是为了分隔环境,同时输入命令时,需要权限的命令不用每次都输入sudo,方便一些
如果你的机器只运行一个domjudge就没必要新建用户,否则新建用户后记得切换用户
sudo adduser domjudge
sudo usermod -aG sudo domjudge
domserver配置
安装domserver所需软件
sudo apt install acl zip unzip apache2 php php-fpm php-gd php-cli php-intl php-mbstring php-mysql php-curl php-json php-xml php-zip composer ntp mysql-server-5.7
注意这里mysql安装的是5.7版本
配置mysql
-
启动mysql服务
service mysql start -
查看mysql用户名密码:
sudo cat /etc/mysql/debian.cnf
-
登陆mysql:
mysql -u <username> -p <password>
password就是前面查看的密码,复制下来就行
- 修改root用户密码:
注意:mysql 5.7.9版本以后修改密码的方式有变化
查看root用户的密码
select authentication_string from mysql.user where user=‘root’;
如果密码不为空需要先将原密码置空
update user set authentication_string=‘’ where user=‘root’;
然后修改密码
alter user ‘root’@‘localhost’ identified with mysql_native_password by ‘123456’;
若原密码为空直接修改密码
- 如需远程访问,权限远程访问限制:
update mysql.user set Host =‘%’ where user=‘root’; - 刷新权限(只是修改密码不需要刷新权限):
FLUSH PRIVILEGES;
- 如需mysql远程访问,权限远程访问限制:
修改/etc/mysql/mysql.conf.d/mysqld.cnf 中 bind-address 为bind-address = 0.0.0.0
修改后重启mysql服务生效
service mysql restart
domserver安装
- 解压下载好的domjudge安装包
tar -zxvf domjudge-7.3.4.tar.gz - 进入domjudge目录
cd domjudge-7.3.4/ - 安装目录
./configure --prefix=$HOME/domjudge --with-baseurl=127.0.0.1 - 安装domserver
make domserver && sudo make install-domserver - 进入安装目录:
cd $HOME/domjudge/ - 安装数据库结构及实例数据:
sudo domserver/bin/dj_setup_database genpass
sudo domserver/bin/dj_setup_database -u root -p 123456 install
这条命令的格式为dj_setup_database [-u <mysql admin user>] [-p <password>|-r] install
- 配置apache2:
sudo ln -s $HOME/domjudge/domserver/etc/apache.conf /etc/apache2/conf-available/domjudge.conf
sudo ln -s $HOME/domjudge/domserver/etc/domjudge-fpm.conf /etc/php/7.2/fpm/pool.d/domjudge.conf - 重启apache2服务:
a2enmod proxy_fcgi setenvif rewrite
a2enconf php7.2-fpm domjudge
service php7.2-fpm reload
service apache2 reload
-
浏览器访问地址:
http://127.0.0.1/domjudge/public
-
查看web管理员admin初始密码:
cat domserver/etc/initial_admin_password.secret -
login
judgehost配置
安装judgehost所需软件
sudo apt install make sudo debootstrap libcgroup-dev lsof
php-cli php-curl php-json php-xml php-zip procps
gcc g++ default-jre-headless default-jdk-headless ghc fp-compiler
安装jdugehost
安装
./configure --prefix=$HOME/domjudge
make judgehost && sudo make install-judgehost
- 添加user
domjudge-run用来执行选手提交的代码,所有只需要最少的权限。
sudo useradd -d /nonexistent -U -M -s /bin/false domjudge-run - 配置sudoer权限
sudo cp $HOME/domjudge/judgehost/etc/sudoers-domjudge /etc/sudoers.d/
安装chroot环境
sudo vim $HOME/domjudge/judgehost/bin/dj_make_chroot
- 修改UBUNTU镜像源,大概在180行左右:
阿里源:http://mirrors.aliyun.com/ubuntu/
- 执行judgehost安装目录下的 bin/dj_make_chroot
sudo bash $HOME/domjudge/judgehost/bin/dj_make_chroot
过程代该需要30分钟
设置cgroup
- 修改文件
sudo vim /etc/default/grub
改为
-
执行 sudo update-grub
-
重启电脑
配置 PHP 时区(最后看自己情况修改)
cd /etc/php/7.0/apache2/
sudo gedit php.ini
date.timezone = “Asia/Shanghai”
重启 Apache 服务
sudo service apache2 restart
启动judgehost
- 在judgehost安装路径下执行 bin/create_cgroups来启动cgroups
cd $HOME/domjudge/judgehost
sudo ./bin/create_cgroups
注:每次重启都需要运行bin/create_cgroups,否则提交会编译错误,或者将create_cgroups设置为开机启动 - 修改 rest 文件
因为judgehost通过http访问到judgeserver,所以我们需要产生一个judgehost的账号密码。找到domserver安装目录下的etc/restapi.secret文件。使得domhost安装目录下etc/restapi.secret文件与它相同即可。如果需要添加多个judgehost,具体步骤请翻阅官方文档。 - 启动judgedaemon
在judgehost安装路径下执行 ./bin/judgedaemon
这里就是等待题目上传的提示
DOMjudge配置
检查配置
在127.0.0.1/domjudge/public登陆管理员身份admin,密码前面有提到可以看
点击左上角DOMjudge标志,进入localhost/domjudge/jury界面
点击Administrator下面的configchecker项
绿色的代表已经配置ok。
黄色代表warning,比如题目没有设置气球颜色之类的,不改也没大问题。
红色代表配置不合理或者不正确
mysql配置
打开/etc/mysql/conf.d/mysql.cnf文档
sudo gedit /etc/mysql/conf.d/mysql.cnf
复制下面内容
[mysqld]
max_connections = 1000
配置会因为实际题目的不同(如测资大小,测资笔数)有不同的要求。
所以建议再添加完成题目之后,再回到config check页面检查一遍,按照给出的要求修改即可。
保存退出重启mysql
sudo service mysql restart
php配置
php配置
可以在configuration check页面的右边 system information一栏中,找到PHP:所在的一行,后面有一个蓝色的i。
点击进入页面找到Loaded Configuration File一栏可以看到php.ini配置文件所在的位置。
根据给出的要求修改
max_file_uploads 200
upload_max_filesize 128M
post_max_size 128M
memory_limit 512M
修改完保存php.ini文件重启php
sudo service apache2 restart
比赛创建
关于用户和队伍的添加,题目上传和创建比赛参考官方的博客就可以
其他问题
- 如果需要安装kotlin,建议用sdkman安装而不是snap,snap可能会有权限问题
- 安装sdkman时输入了:curl -s https://get.sdkman.io | bash后没有反应可能是没有配置Ubuntu的DNS
- 在/etc/resov.conf中添加
nameserver 202.96.134.133
nameserver 8.8.8.8
即可
参考内容
官方文档
DOMjudge中文文档
DOMjudge安装
DOMjudge安装笔记
记一次 DOMjudge 的安装经历
ACM中domjudge——judgehost评测机的安装与启动
DOMjudge安装与使用