Domjudge/CDS/Presentation大屏配置指南&踩坑记录

部分参考链接:https://zhuanlan.zhihu.com/p/446109056

以下命令都在 root 用户下执行

安装 Docker

bash <(curl -f -s --connect-timeout 10 --retry 3 https://linuxmirrors.cn/docker.sh) --source mirrors.tencent.com/docker-ce --source-registry docker.1ms.run --protocol https --install-latested true --close-firewall false --ignore-backup-tips

Docker换源

curl -s https://static.1ms.run/1ms-helper/scripts/install.sh | sudo bash /dev/stdin config

需要注册账号登录即可

GRUB

/etc/default/grub,修改:

GRUB_CMDLINE_LINUX_DEFAULT="quiet cgroup_enable=memory swapaccount=1"
update-grub
reboot

数据库

docker run -d -it --name dj-mariadb -e MYSQL_ROOT_PASSWORD=ROOT998244353 -e MYSQL_USER=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=DOM998244353 -e MYSQL_DATABASE=domjudge -p 13306:3306 mariadb --max-connections=1000 --max-allowed-packet=10240000000 --innodb-log-file-size=20240000000

domserver

docker run --link dj-mariadb:mariadb -d -it -e MYSQL_HOST=mariadb -e MYSQL_USER=domjudge -e MYSQL_DATABASE=domjudge -e CONTAINER_TIMEZONE=Asia/Shanghai -e MYSQL_PASSWORD=DOM998244353 -e MYSQL_ROOT_PASSWORD=ROOT998244353 -p 80:80 --name domserver domjudge/domserver:latest

Domjudge后台管理员的初始密码:

docker exec -it domserver cat /opt/domjudge/domserver/etc/initial_admin_password.secret

进入后第一时间请把 Configure Setting 里面的 data source 改为第二个 Local or External 模式,同时记得挂载 admin 用户到 domjudge 队伍上(导入题目的时候会自动测STD),Configure Setting 里 display 把 affiliation 的 flag 打开 national 的 flag 关闭,视情况修改 judge 里面的 output limit,开启python两倍时限,修改 language 中 py3 的 timefactor 为 2

队伍导入

第一个是【唯一队伍编号】,你可以从某个数字任意开始,但是不能够与以往的数据重复;
第二个是【ICPC ID】,可以不管,这里选择和队伍编号一直;
第三个是【队伍类型】,填入对应catogories的ExternalId,如果默认给的participate和observer之类的不满意可以自己加;
第四个是【队伍名称】,将会显示在榜单上。
第五个是【学校名称】
第六个是【学校英文缩写】
第七个是【国籍】,默认写CHN
第八个是【affiliation的ExternalID】,如果信息与存在的不一样会自动新建(建议affiliation里提前建好)

affiliation 的 LOGO 需要 64x64

例子

teams	1						
1	1	1	没有以前那么喜欢你了(庄瑜,庄子涵,肖建华)	闽南师范大学计算机学院	MNNUCS	CHN	1

账号导入

第一个是 team
第二个是【姓名】,可以不管
第三个是【用户名】,需要和team里面的externalid对应,前面加字母和前导0没关系,team01会对应到externalid为1的队伍上;
第四个是【密码】,可以随便搞

accounts	1		
team	1	01	01
team	2	02	02
team	3	03	03

Domjudge的API KEY,配置judgehost需要:

docker exec -it domserver cat /opt/domjudge/domserver/etc/restapi.secret

judgehost

docker run -d -it --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name judgehost-0 --link domserver:domserver --hostname judgedaemon-0 -e DAEMON_ID=0 -e JUDGEDAEMON_PASSWORD=YOURPASSWORD -e CONTAINER_TIMEZONE=Asia/Shanghai domjudge/judgehost:latest

请将 YOURPASSWORD 改为 restapi.secret 获取到的密码

多台评测机请修改 --name --hostname --DAEMON_ID 三个地方后面的数字

试题导入

Polygon 里面每一题都导出 full package,记得选 Linux 格式,然后用 p2d 导成 domjudge 格式再导入

https://github.com/cn-xcpc-tools/Polygon2DOMjudge

python -m pip install pipx
python -m pipx ensurepath

重启终端

pipx install p2d
p2d --code A /path/to/polygon-package.zip -y

如果报错缺少依赖

pipx inject 少的依赖 p2d

记得把 code 改为对应题目的编号,之后每个题目都会生成一个 {{ code }}.zip 的压缩包,扔到 domjudge 里导入即可(记得检查 domjudge 测出来的 STD 运行情况)

CDS

https://tools.icpc.global/ 里面下载 Contest Data Server

解压修改 cds/usr/servers/cds/config/cdsConfig.xml,里面所有的内容替换成如下:

<cds>
    <!-- Set location= to a directory that the user running the CDS can write to -->
    <contest location="/home/cds/contest-data" recordReactions="false">
        <!-- Set the url to the URL of your DOMjudge installation, followed by /api/contests/<cid>, where <cid> is your CID or external ID -->
        <!-- Set the user and password to the user you created in the previous step -->
        <ccs
            url="https://yourdomjudgeserverip/api/contests/CIDorExternalID"
            user="username"
            password="password" />
    </contest>
</cds>

修改 yourdomjudgeserverip 为 domjudge服务器ip, CIDorExternalID 为对应比赛的信息,username 为具有 API 权限的用户名,password 为用户密码

切换到 bin 目录下面

./server run cds

启动 CDS 服务器

Presentation大屏

https://tools.icpc.global/ 里面下载 Presentation Client

另外中文字体修改需要启动时加上ICPC_FONT,要 bash 环境,这里建议直接下个 git ,进 git bash 里执行 bash 命令

ICPC_FONT="DengXian" ./client.bat https://yourdomjudgeserverip:8443/api/contests/CIDorExternalID presentation presentat1on --name 1 --display_name "{org.formal_name} - {team.name}"

修改 yourdomjudgeserverip 为 domjudge服务器ip, CIDorExternalID 为对应比赛的信息,如果有改 CDS 的用户名和密码记得把presentation presentat1on 改成对应的用户名密码

--display_name 参数填的是名称显示的规则,这里配的是 "学校名称 - 队伍名称",还有一些其他变量可以看 icpc.global 里的 PDF 文档

大屏切换进入 https://yourdomjudgeserverip:8443/ 登录账号密码如果没改默认是 admin adm1n,里面 Presentation Admin 直接切换即可

posted @ 2025-05-24 15:04  MNNUACM_2024ZY  阅读(139)  评论(0)    收藏  举报