美文网首页
SYZOJ安装与配置

SYZOJ安装与配置

作者: shellblock | 来源:发表于2021-04-26 22:02 被阅读0次

    简介

    SZYOJ是一个用于算法竞赛的在线评测系统。拥有这样一个平台之后,我们就可以在平台训练我们的算法能力。


    安装前的准备

    本教程基于Ubuntu 20.04.1 LTS,部分内容参考官方文档

    请参考官方文档进行安装:https://github.com/syzoj/syzoj/wiki

    也可参考下方,但是以官方文档为准,下方记录了安装过程中遇到的问题,如果遇到相同问题可参考解决。

    安装宝塔面板

    请参考:bt.cn

    安装完成之后请暂时不要安装任何软件

    安装node.js

    在软件商店中找到PM2管理器,点击安装

    安装完成之后更换nodejs版本为v10.23.1

    <

    安装yarn

    参考:https://yarn.bootcss.com/docs/install/#debian-stable

    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
    
    sudo apt update && sudo apt install yarn
    

    通过如下命令测试 Yarn 是否安装成功:

    yarn --version
    

    安装网站端

    安装系统依赖项

    使用下方方式安装安装 MariaDB 10.3 与 Redis :

    在宝塔面板的软件上的分别安装MariaDB和Redis即可,经测试Redis6可用。

    安装命令行工具

    7z:

    这个必须安装,不然导入题目会出错

    sudo apt-get install p7zip-full
    

    pygmentize

    sudo apt-get install pygmentize
    

    clang-format

    sudo apt-get install clang-format
    

    下载

    创建存放 SYZOJ 程序的目录并下载安装 SYZOJ。

    rm -rf /opt/syzoj /etc/systemd/system/syzoj*
    mkdir -p /opt/syzoj
    cd /opt/syzoj
    git clone https://github.com/syzoj/syzoj web
    cd web
    yarn
    

    配置

    从配置文件模板创建用于 SYZOJ 网站端的配置文件。

    mkdir -p /opt/syzoj/config
    cp /opt/syzoj/web/config-example.json /opt/syzoj/config/web.json
    ln -s ../config/web.json /opt/syzoj/web/config.json
    

    编辑 /opt/syzoj/web/config.json,如下是您可能需要修改的一些配置项。其中名称加粗的配置项是您很有可能需要修改的。

    • title:网站的标题。显示在网站每个页面的左上角与标题栏中。
    • hostname:网站端监听的 IP 地址。如果您按照本教程配置 Nginx 反向代理,请保留默认值 127.0.0.1,否则,如果您希望 SYZOJ 网站能够从本机之外访问,请改为 ::
    • port:网站端监听的 TCP 端口。
    • db:数据库的连接方式。
    • session_secret:为安全起见,请使用随机密钥填写。
    • judge_token:为安全起见,请使用随机密钥填写。
    • google_analytics:如果您使用 Google Analytics 统计您的 SYZOJ 网站访问数据,请设置为 Google 提供的形如 UA-XXXXXXXX-X 的字符串。保留默认值将禁用 Google Analytics。

    创建独立的目录用于存放数据和临时文件,这将便于您对网站的维护:

    mv /opt/syzoj/web/uploads /opt/syzoj/data
    ln -s ../data /opt/syzoj/web/uploads
    mkdir /opt/syzoj/sessions
    ln -s ../sessions /opt/syzoj/web/sessions
    

    创建数据库

    这一步直接在宝塔里面创建数据库即可

    运行

    执行以下命令以在前台以调试模式运行 SYZOJ,可用于收集错误信息:

    cd /opt/syzoj/web && node app.js
    # 默认运行在127.0.0.1:5283
    

    使用 systemd

    测试完成之后可以添加到systemd开机自启

    官方文档讲的有点浅显了

    首先打开/etc/systemd/system

    然后分别创建以下三个文件,注意是空白文件

    syzojweb.service 网站端自启服务
    
    syzoj-judge-daemon.service 评测机daemon
    
    syzoj-judge-runner.service 评测机runner
    

    首先编辑syzojweb.service,这个是网站端,另外两个是评测端,后面会讲到。

    [Unit]
    Description=SYZOJ web service
    After=network.target mysql.service rc-local.service
    Requires=mysql.service rc-local.service
    
    [Service]
    Type=simple
    WorkingDirectory=/opt/syzoj/web
    User=syzoj
    Group=syzoj
    ExecStart=/usr/bin/env NODE_ENV=production /usr/bin/node /opt/syzoj/web/app.js -c /opt/syzoj/config/web.json
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
    

    部署评测端

    准备沙箱

    SYZOJ 的评测全部在沙箱中进行。其沙箱实现基于 Linux 内核中一些不默认开启的特性,您需要在引导器中添加一些参数来开启这些特性,以 Ubuntu 的默认引导器 GRUB 2 为例,编辑 /etc/default/grub

    在其中

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    

    之后加入 cgroup_enable=memory swapaccount=1,变为:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1"
    

    运行以下命令更新 GRUB 2 的配置,然后重新启动。

    update-grub && reboot
    

    官方提供的沙箱根文件系统基于 Ubuntu 18.04,默认提供对 SYZOJ 网站端中所列的编程语言的评测支持。因为下载沙箱根文件系统所需的时间可能较长,我们把它放到第一步 —— 在下载的过程中,您可以进行其他步骤。

    这里建议使用科学的上网方式下载下来这个沙箱包,然后放到OSS或者又拍云存储,然后将下方的下载链接替换为加速的链接即可。

    wget -O /sandbox-rootfs.tar.xz https://github.com/syzoj/sandbox-rootfs/releases/download/181202/sandbox-rootfs-181202.tar.gz
    

    建议在下载后检验文件的 MD5 值,如果您的下载无误,输出应为 09fe4fc407e4580e9ae4de8e2af5918e sandbox-rootfs.tar.xz

    使用以下命令校验md5:

    md5sum /sandbox-rootfs.tar.xz
    

    将下载好的沙箱根文件系统解压。

    mkdir -p /opt/syzoj/sandbox/rootfs
    cd /opt/syzoj/sandbox/
    tar xvf /sandbox-rootfs.tar.xz
    

    建立一些沙箱需要使用的文件夹。

    mkdir -p /opt/syzoj/sandbox/{bin,tmp1}
    

    安装系统依赖项

    sudo apt install xxx # 下方的包名
    
    • build-essential
    • libboost-all-dev
    • redis-serve
    • rabbitmq-server

    下载评测端

    使用以下命令创建存放 SYZOJ 评测端程序的目录并从 GitHub 下载 SYZOJ 评测端。

    mkdir -p /opt/syzoj
    cd /opt/syzoj
    git clone https://github.com/syzoj/judge-v3
    mv judge-v3 judge
    cd judge
    yarn
    yarn run 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 的内存限制。

    使用 systemd

    首先打开/etc/systemd/system,然后编辑我们上方创建好的另外两个service文件

    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=/usr/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=/usr/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 Pages 10
    

    开关前端以及评测机的方式

    我们可以使用调试模式开启前台服务,但是会占用一个终端,现在我们配置的service文件就派上了用场:

    开启前台web服务:
    systemctl start syzojweb
    默认运行在127.0.0.1:5283
    
    开启评测机daemon服务
    systemctl start syzoj-judge-daemon
    
    开启评测机runner服务
    systemctl start syzoj-judge-runner
    
    注册开机自启:
    systemctl enable syzojweb
    systemctl enable syzoj-judge-daemo
    systemctl enable syzoj-judge-runner
    
    关闭服务:
    systemctl stop syzojweb
    systemctl stop syzoj-judge-daemo
    systemctl stop syzoj-judge-runner
    

    遇到的问题及解决方式

    评测显示NOTESTCASE

    按照官方wiki的路径来一般不会出现这个问题

    评测时一直出现wating

    这个问题是评测机没有正常运行导致的,使用上方的命令运行即可。

    出现无法删除题目,无权限删除题目的问题

    这个是路径授权用户的问题,请将data文件夹授权给运行syzoj程序的用户

    宝塔MariaDB和命令行装的MariaDB-server冲突导致无法启动

    参考:https://blog.csdn.net/w3045872817/article/details/77334886

    删除mysql服务

    然后删除宝塔安装的mysql

    rm -rf /www/server/mysql
    

    然后在宝塔面板重新安装Mariadb即可。

    相关文章

      网友评论

          本文标题:SYZOJ安装与配置

          本文链接:https://www.haomeiwen.com/subject/jyryrltx.html