SNMOJ全指南

一、搭建

本地搭建SNMOJ需要一个64位系统。

推荐使用最新版Ubuntu,不推荐使用Windows。

首先需要安装Docker,Ubuntu下直接在终端中运行

sudo apt-get install docker.io

即可安装。

其它系统可以在Docker官网进行下载。但下文仅提供Ubuntu下的操作说明。

安装好Docker后,将备份文件导入为镜像,再从镜像创造出容器,就算是搭建完成了。

sudo docker import SNMOJ_20170527.tar snmoj:v2.0

sudo docker run -dit -p 80:80 -p 3690:3690 --name SNMOJ --cap-add SYS_PTRACE snmoj:v2.0 /root/up

对外网开放的话需要安装autossh,Ubuntu下运行

sudo apt-get install autossh

点此下载已经认证的rsa私钥和公钥,解压密码请私聊本人提供。将解压出的除 command 外的文件放入 ~/.ssh/ 下。

需要开放外网时运行 command 内的指令即可。

二、维护

使用 sudo docker start SNMOJ 启动SNMOJ。

有时可能启动失败,请使用 sudo docker restart SNMOJ 重启SNMOJ。

要对SNMOJ进行修改,请使用 sudo docker exec -it SNMOJ /bin/bash 进入SNMOJ的容器。网站相关文件在 /var/www/uoj/app/ 下。

要将SNMOJ备份至文件,请使用 sudo docker export SNMOJ > SNMOJ_yyyymmdd.tar

更多指令参考内网UOJ搭建笔记

三、权限/会员系统介绍

SNMOJ的用户权限组分为以下五类:

  • U:普通用户。
  • B:被封禁用户,无法登录。
  • S:SVIP,即超级管理员,拥有最高权限。
  • V:VIP,拥有大部分管理员权限,无法进入系统管理。
  • C:长郡信息组成员,可以查看被权限的题目。

SVIP可以在系统管理-用户操作中修改用户所属的权限组,但不能直接授予SVIP。

 

SNMOJ的题目可见情况分为以下三类:

  • 公开:所有人可见。
  • 权限:普通用户不可见。
  • 隐藏:仅管理员可见。

SVIP可以在系统管理-权限题管理中修改题目的可见情况。

也可以在某个题目的管理-数据页面,通过点击“权限该题”将该题设为权限。

管理员可以在题库界面勾选“显示题目可见情况”来查看题目可见情况。

 

SNMOJ的VIP系统介绍见OJ内公告。

SVIP可以在系统管理-VIP积分管理中进行相关操作。

四、题目管理

首先需要安装svn。

sudo apt-get install subversion

添加一道题目按以下流程进行:

  1. 点击题库下方的“添加新题”,“确定”。
  2. 进入题目的“管理”页面,在“编辑”页将题目补充完整。
  3. 在“管理者”页将自己加入管理者。(目前OJ会自动将已有的五个管理员加入管理者,如需更改请在 /var/www/uoj/app/controllers/problem_set.php 中自行调整。)
  4. 在本地新建一个文件夹作为工作目录,并在工作目录下新建一个名为“1”的文件夹。
  5. 在“数据”页找到“SVN地址”,执行 svn co [SVN地址] [工作目录] 并输入用户名和密码。用户名为您在SNMOJ的用户名,第一次使用请在个人信息-更改个人信息中设置svn密码。每次修改svn密码后都需要把自己从题目管理者中删除再加入使新密码生效。
  6. 在文件夹“1”中放置下列文件:
    1. problem.conf ,为题目的配置文件。传统题的文件格式为:

      其中前四项分别为输入、输出文件的前缀名和后缀名。 n_tests 为正式数据的组数。 n_ex_tests 为hack数据的组数。 n_sample_tests 表示hack数据的前多少个是样例。样例至少要有一组。接下来分别为时间和空间限制。正式数据的命名格式为 [input/output_pre][1~n_tests].[input/output_suf] ,hack数据要在前面加上 ex_ 。

      对于字符串比较的题目,将最后一行的 ncmp 改成 wcmp

      如需捆绑测试,则需要增加以下几行:

      依此格式书写即可。

      如需spj,请将最后一行去掉。

      如需设置此题为提交答案题,请将最后一行替换为 submit_answer on

    2. 数据文件。包括至少一组样例。上文中已提到数据文件的命名方式。
    3. std.cpp ,标程。若不开放hack可以没有此文件。
    4. val.cpp ,数据校验器,用于检验hack数据是否合法。若不开放hack可以没有此文件。书写格式请参考OJ已有题目。
    5. chk.cpp ,spj。需要时添加。书写格式请参考OJ已有题目。
    6. download 文件夹,里面的文件会下发给选手。需要时添加。
  7. cd至工作目录下,执行 svn add 1 ,再执行 svn ci -m "" 。然后在“数据”页点击“与svn仓库同步”即可。如需对已有文件进行修改,则在本地修改后再次执行 svn ci -m "" 并在OJ上同步即可。如需增加新的文件,还要先执行 svn add 1/新增文件名

对一道题目数据的编辑与上述类似,先 co 至一个工作目录,进行编辑,再上传同步即可。

五、其它

注意如果想让比赛后VIP积分不发生变化请在比赛的管理-其它中点击“设置比赛为unrated”。

其它功能比较简单,就不一一赘述了。

如果发现任何问题或对OJ的功能有任何需求,请随时联系本人。

说点什么

您将是第一位评论人!

提醒
wpDiscuz