-
Notifications
You must be signed in to change notification settings - Fork 214
评测端部署指南
如果您正在一台从未部署过 SYZOJ 的服务器上部署 SYZOJ 评测端,请确保您已经完成网站端部署指南中的步骤。或者,评测端也可被部署在不同于网站端的服务器上,请自行处理数据同步(推荐使用 Syncthing)。
SYZOJ 的评测全部在沙箱中进行。其沙箱实现基于 Linux 内核中一些不默认开启的特性,您需要在引导器中添加一些参数来开启这些特性,以 Ubuntu 的默认引导器 GRUB 2 为例,编辑 /etc/default/grub
。
在其中
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
之后加入 cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0 syscall.x32=y
,变为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0 syscall.x32=y"
运行以下命令更新 GRUB 2 的配置,然后重新启动。
update-grub && reboot
官方提供的沙箱根文件系统基于 Ubuntu 18.04,默认提供对 SYZOJ 网站端中所列的编程语言的评测支持。因为下载沙箱根文件系统所需的时间可能较长,我们把它放到第一步 —— 在下载的过程中,您可以进行其他步骤。
wget -O /sandbox-rootfs.tar.xz https://github.com/syzoj/sandbox-rootfs/releases/download/210521/sandbox-rootfs-210521.tar.xz
建议在下载后检验文件的 MD5 值,如果您的下载无误,输出应为 882b3de905107f5116b227c90c4b8857
。
将下载好的沙箱根文件系统解压。
mkdir -p /opt/syzoj/sandbox/rootfs
cd /opt/syzoj/sandbox/
tar xvf /sandbox-rootfs.tar.xz
建立一些沙箱需要使用的文件夹。
mkdir -p /opt/syzoj/sandbox/{bin,tmp1}
SYZOJ 评测端需要 Node.js 10,并且包含一些依赖 Boost 库的 C++ 代码,你需要安装基本的编译环境(build-essential
)和 Boost 库 libboost-all-dev
。依赖的服务有 redis-server
和 rabbitmq-server
。
使用以下命令下载 Node.js 10 并解压:
mkdir -p /opt/syzoj
wget -O /tmp/node-v10.24.1-linux-x64.tar.xz https://nodejs.org/dist/latest-v10.x/node-v10.24.1-linux-x64.tar.xz
tar xf /tmp/node-v10.24.1-linux-x64.tar.xz -C /tmp
mv /tmp/node-v10.24.1-linux-x64 /opt/syzoj/node10
# 如果没有部署过网站端,则安装 yarn
PATH=/opt/syzoj/node10/bin:$PATH /opt/syzoj/node10/bin/npm install yarn -g
使用以下命令创建存放 SYZOJ 评测端程序的目录并从 GitHub 下载 SYZOJ 评测端。
cd /opt/syzoj
git clone https://github.com/syzoj/judge-v3
mv judge-v3 judge
cd judge
PATH=/opt/syzoj/node10/bin:$PATH yarn
PATH=/opt/syzoj/node10/bin:$PATH yarn build
使用以下命令创建用于 SYZOJ 评测端的配置文件。
cd /opt/syzoj
cp judge/daemon-config-example.json config/daemon.json
cp judge/runner-shared-config-example.json config/runner-shared.json
cp judge/runner-instance-config-example.json config/runner-instance.json
如下是您可能需要修改的一些配置项。其中名称加粗的配置项是您很有可能需要修改的。
-
daemon.json
-
ServerUrl
:网站端的 Url。 -
ServerToken
:需要与网站端judge_token
相同。 -
TestData
:如果您在不同于网站端的主机上部署评测端,请改为本地的数据目录(注意:您需要自行同步测试数据)。
-
-
runner-shared.json
-
DebugMessageDisplayLimit
:调试信息显示字节数的限制。 -
OutputLimit
:用户输出显示字节数的限制。 -
StderrDisplayLimit
:用户标准错误输出显示字节数的限制。 -
DataDisplayLimit
:测试数据输出显示字节数的限制。 -
CompilerMessageLimit
:编译信息显示字节数的限制。 -
SpjTimeLimit
:Special Judge 的时间限制。 -
SpjMemoryLimit
:Special Judge 的内存限制。
-
syzoj-judge-daemon.service
:
[Unit]
Description=SYZOJ judge daemon service
After=network.target rabbitmq-server.service redis-server.service
Requires=rabbitmq-server.service redis-server.service
[Service]
Type=simple
WorkingDirectory=/opt/syzoj/judge
User=syzoj
Group=syzoj
ExecStart=/opt/syzoj/node10/bin/node /opt/syzoj/judge/lib/daemon/index.js -c /opt/syzoj/config/daemon.json
[Install]
WantedBy=multi-user.target
syzoj-judge-runner.service
:
[Unit]
Description=SYZOJ judge runner service
After=network.target rabbitmq-server.service redis-server.service
Requires=rabbitmq-server.service redis-server.service
[Service]
Type=simple
WorkingDirectory=/opt/syzoj/judge
User=root
Group=root
ExecStart=/opt/syzoj/node10/bin/node /opt/syzoj/judge/lib/runner/index.js -s /opt/syzoj/config/runner-shared.json -i /opt/syzoj/config/runner-instance.json
[Install]
WantedBy=multi-user.target