SYZOJ汉语安装指南

Made By:Spaceskynet
Thanks to other developers.

测试网 Ubuntu-17.04

图片 1

PS(全局变量):

[syzoj2 path] = 您git的syzoj的路径;
[syzoj-judge path] = 您git的syzoj-judge的路径

系统要求

1.node >=6.0.0 (node.js)
2.npm
3.p7zip-all && node-7z
4.boost库(c++)

安装node.js和npm

First(apt):

大家都知道
apt install nodejs
apt install npm

Second(更新node):

apt总有毒,node版本4.x.x,不升级没有办法。

全局安装n模块
sudo npm install -g n

提升node.js到最新稳定版
sudo n stable

翻开本机的node.js版本
node -v

Third(更新npm源):

npm是单好东西,但国内安装依赖太慢,所以于国内用户,cnpm挺不错。

但为堪直接吃npm配置taobao镜像的registry,也非是无得装cnpm。

npm config set registry https://registry.npm.taobao.org

下一场径直用npm install gulp less --save-dev,就是于taobao镜像以保了。

安装p7zip-all和node-7z

p7zip-all是配合node-7z依赖之网解压缩软件(记住一定要是安装完整版本,因为还有一个p7zip,安装是上传数据会报错)

Fisrt:

apt install p7zip-all

Second:

cd [syzoj2 path]
npm install node-7z

安装boost库

用以编译judge,
暨齐,这个家伙也有all与无all之分
sudo apt-get install libboost-all-dev --fix-missing

安装syzoj

Git Source-File

git clone https://github.com/syzoj/syzoj
cd syzoj

Config

将[syzoj2 path]下的 config-example.json 复制为 config.json,
然后因你的得修改.

cp config-example.json config.json

config.json

{
  "title": "SYZOJ",//oj名
  "hostname": "127.0.0.1",//web端ip
  "port": "5283",//web端端口
  "db": {           //如使用sqlite,则不用修改
    "database": null,//如使用mysql,改为mysql的数据库名还有
    "username": null,//用户名
    "password": null,//密码
    "host": null,//和地址
    "dialect": "sqlite",//并将此改为mysql
    "storage": "syzoj.db"//并将npm install后(稍后使用)生成的syzoj.db文件导入mysql中,并设为null
  },
  "register_mail": {//SMTP邮件验证
    "enabled": true,//建议设为false
    "address": "test@test.domain",
    "key": "test"
  },
  "upload_dir": "uploads",
  "default": {
    "problem": {
      "time_limit": 1000,
      "memory_limit": 256
    },
    "user": {
      "show": true
    }
  },
  "limit": {//时空等最大限制
    "time_limit": 10000,
    "memory_limit": 1024,
    "data_size": 209715200,
    "testdata": 209715200,
    "submit_code": 102400,
    "submit_answer": 10485760,
    "custom_test_input": 20971520,
    "testdata_filecount": 5
  },
  "page": {//题库页面设置
    "problem": 50,
    "problem_statistics": 10,
    "judge_state": 10,
    "ranklist": 20,
    "discussion": 10,
    "article_comment": 10,
    "contest": 10,
    "edit_contest_problem_list": 10,
    "edit_problem_tag_list": 10
  },
  "languages": {//语言配置
    "cpp": {
      "show": "C++",
      "highlight": "cpp",
      "version": "GCC 5.4.0",
      "editor": "c_cpp"
    },
    "cpp11": {
      "show": "C++11",
      "highlight": "cpp",
      "version": "GCC 5.4.0",
      "editor": "c_cpp"
    },
    "csharp": {
      "show": "C#",
      "highlight": "csharp",
      "version": "MCS 4.8.0.0, Mono 4.8.0",
      "editor": "csharp"
    },
    "c": {
      "show": "C",
      "highlight": "c",
      "version": "GCC 5.4.0",
      "editor": "c_cpp"
    },
    "vala": {
      "show": "Vala",
      "highlight": "vala",
      "version": "Vala 0.30.1, GCC 5.4.0",
      "editor": "vala"
    },
    "java": {
      "show": "Java",
      "highlight": "java",
      "version": "GCC 5.4.0",
      "editor": "java"
    },
    "pascal": {
      "show": "Pascal",
      "highlight": "pascal",
      "version": "FPC 3.0.0",
      "editor": "pascal"
    },
    "lua": {
      "show": "Lua",
      "highlight": "lua",
      "version": "Lua 5.2.4",
      "editor": "lua"
    },
    "luajit": {
      "show": "LuaJIT",
      "highlight": "lua",
      "version": "LuaJIT 2.0.4",
      "editor": "lua"
    },
    "python2": {
      "show": "Python 2",
      "highlight": "python",
      "version": "CPython 2.7.12",
      "editor": "python"
    },
    "python3": {
      "show": "Python 3",
      "highlight": "python",
      "version": "CPython 3.5.2",
      "editor": "python"
    },
    "nodejs": {
      "show": "Node.js",
      "highlight": "js",
      "version": "7.7.3",
      "editor": "javascript"
    },
    "ruby": {
      "show": "Ruby",
      "highlight": "ruby",
      "version": "2.3.1",
      "editor": "ruby"
    },
    "haskell": {
      "show": "Haskell",
      "highlight": "haskell",
      "version": "GHC 7.10.3",
      "editor": "haskell"
    },
    "ocaml": {
      "show": "OCaml",
      "highlight": "ocaml",
      "version": "Ocamlbuild 4.02.3",
      "editor": "ocaml"
    },
    "vbnet": {
      "show": "Visual Basic",
      "highlight": "vbnet",
      "version": "VBNC 0.0.0.5943, Mono 4.8.0",
      "editor": "vbscript"
    }
  },
  "links": [//友链
    {
      "title": "LibreOJ",
      "url": "https://loj.ac/"
    }
  ],
  "session_secret": "233",//加密Token,自定义,建议复杂些
  "judge_token": "233"//记得将judge配置中webtoken一同修改
}

Second(安装):

npm install or yarn
耐心等后……
使用npm start启动web端
于浏览器中输入config.json中之[hostname]:[port],此时,您当好看见syzoj
web端正常运转。
接下来报用户,如想成顶尖管理员,只有一直修改数据库及时同办法。
当数据库中,user表中is_admin性能决定有平等用户是否也总指挥。
sqlite蒙,您可行使下列语句获取root权限。
cd [syzoj2 path]
sqlite3 syzoj.db
会进入sqlite
UPDATE user SET is_admin = '1' WHERE username='[Your username]';
其他数据库也一律,只要将is_admin特性修改为’1’即可。

其它

用 SYZOJ 设置也bash快速启动.

vim [syzoj2 path]/runsyzoj

runsyzoj 文件改也如下代码.

#!/bin/bash
cd [syzoj2 path]
npm start > log.txt 2>&1

告转吗自己的 [syzoj2 path].

用 SYZOJ 设置也系统服务

添加 /etc/systemd/system/syzoj.service 文件,加入如下内容.

[Unit]
Description=SYZOJ Online Judge
After=network.target

[Service]
Type=simple
PIDFile=/run/syzoj.pid
WorkingDirectory=[syzoj2 path]
ExecStart=[syzoj2 path]/runsyzoj
StandardOutput=null
StandardError=null

[Install]
WantedBy=multi-user.target

恳请转也和谐的 [syzoj2 path].

用办法

Start

systemctl start syzoj

Stop

systemctl stop syzoj

Restart

systemctl restart syzoj

安装syzoj-judge

Git Source-File

git clone https://github.com/syzoj/syzoj-judege2
cd syzoj-judege2

本需求

汝要以基础中打开 memory swap account (默认在 Debian 8/ubuntu中不打开)
。您可以经检查其的是来验证就一点:
/sys/fs/cgroup/memory/memory.memsw.usage_in_bytes

假如该文件不存在,那么你或许得利用grub打开该公文。

swapaccount=1 添加到/etc/default/grub文件中
GRUB_CMDLINE_LINUX_DEFAULT 选项.
尽管像这样:

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

下一场保留后运行下列命令还开:

update-grub && reboot

下载更多之负

syzoj-judege2凡基于沙盒的评测系统,所以若需要从Menci的服务器下充斥沙盒评测系统(建议于windows上就此迅雷下好了重复导入评测服务器)
Linux:

wget ip1.menci.moe/sandbox-rootfs.tar

windows:
http://ip1.menci.moe/sandbox-rootfs.tar //下载链接
解压沙盒服务器

tar -xvf sandbox-rootfs.tar

拿沙箱服务器移动及公想只要之路线(可选)(建议放入syzoj-judge2目录下)

mv sandbox-rootfs [Your Path]

专业安装

切换目录:

cd syzoj-judge2

然后经下列命令安装:

npm install
cd node_modules/syspipe
npm install
cd ../..
npn run build
cp instance-config-example.json instance-config.json
cp shared-config-example.json shared-config.json

或者 yarn (如果您曾经设置yarn)

设置

修改 instance-config.json shared-config.json
有些例证:

属性名 修改为 Example
sandboxRoot 您的 sandbox-rootfs 路径 "sandbox-rootfs"
WorkingDirectory 评测临时文件储存目录 "sandbox"
sandboxCgroup 沙盒名称 "syzoj-1"
webToken web端config.json中 judge_token "233"

运行 SYZOJ-JUDGE

cd [syzoj-judge path]
node lib/index.js -s shared-config.json -i instance-config.json > jlog.txt 2>&1

在web端提交代码,此时理应成功评测。

其它

拿 SYZOJ-JUDGE 设置为bash快速启动.

vim [syzoj-judge path]/runjudge

runjudge 文件改也如下代码.

#!/bin/bash
cd [syzoj-judge path]
node lib/index.js -s shared-config.json -i instance-config.json > jlog.txt 2>&1

求转吗自己的 [syzoj-judge path].

用 SYZOJ-JUDGE 设置也系统服务

添加 /etc/systemd/system/syzoj-judge.service 文件,加入如下内容.

[Unit]
Description=SYZOJ Judge Daemon
After=network.target

[Service]
Type=simple
PIDFile=/run/syzoj-judge.pid
WorkingDirectory=[syzoj-judge path]
ExecStart=[syzoj-judge path]/runjudge
StandardOutput=null
StandardError=null

[Install]
WantedBy=multi-user.target

告转也和谐的 [syzoj-judge path].

利用办法

Start

systemctl start syzoj-judge

Stop

systemctl stop syzoj-judge

Restart

systemctl restart syzoj-judge

PS

交这儿,syzoj应该就是安装成功了,Enjoy it!
倘您还眷恋折腾,您也足以尝试在docker中安装syzoj(UOJ便是如此),方便备份数据。
Thanks to other developers.
若有题目,欢迎举报……

开合作联合推进是OI的习俗,同时为是开源项目之稳定做法,正式为开放才使大家可以出重新多之学资源,希望大家共交流,共同进步!
—–By:Chenyao

网站地图xml地图