UOJ社区版安装多个Judger
声明
本文档非官方文档,为我试坑的经验总结。
本文编写时间 2019.11.04 ,并不一定会随UOJ更新而更新。
由于UOJ需要用SVN传题,并不那么方便。于是我选择转用UOJ社区版。但是UOJ社区版并没有关于如何安装多个Judger的文档。本文是我通过部分UOJ和UOJ社区版的源码,经实践得到。
注意我并不清楚UOJ的具体架构与实现,同时也并不那么熟悉 Docker 。过程中可能有许多不合理的地方,还请谅解。如果有更好的方法或是使用心得,可以与我交流。
在同一台机器上安装
1
首先需要建起一个 judger ,并且让这个 judger 知道 main_server 在哪里。
你需要基于 main_judger 的 conf.json 写一个新的 conf.json :
运行 docker cp <uoj container id>:/opt/uoj/judger/.conf.json ./conf.json 将 main_judger 的 configure 拷贝到当前目录。其中 <uoj container id> 表示 uoj 容器的 id 。
如果你不知道 uoj 容器的 id ,可以 docker ps 来查看正在运行的容器,或是 docker ps -a 来看所有的容器。
然后修改 conf.json 里这个几个值:
- "uoj_host" : 改为你 uoj 的 ip (注意不是你主机的ip,而是那个容器的ip);
- "judger_name" : 起一个新名字,如 judger1 ;
- "judger_password" : 密码,如 H3b01oSP2Y5KzL4l1GYrA37jpgeQQLuS (我随的)
你可以这样获取一个docker容器的ip:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <container-id>
记住你修改的这些东西。
2
然后根据UOJ社区版的 Dockerfile ,建立一个 judger 的 image 。
这是 UOJ-System 那个 git 中的 judger 安装文件。
FROM ubuntu:18.04
MAINTAINER MascoSkray <MascoSkray@gmail.com>
ARG CLONE_ADDFLAG
WORKDIR /opt
#Update apt and install git
RUN apt-get update && apt-get install -y git
#Clone the latest UOJ Community verison to local
RUN git clone https://github.com/UniversalOJ/UOJ-System.git --depth 1 --single-branch ${CLONE_ADDFLAG} uoj
#Install environment and set startup script
RUN cd uoj/install/judger && sh install.sh -p && echo "\
#!/bin/sh\n\
if [ ! -f \"/opt/uoj/judger/.conf.json\" ]; then\n\
cd /opt/uoj/install/judger && sh install.sh -i\n\
fi\n\
service ntp start\n\
su judger -c \"/opt/uoj/judger/judge_client start\"\n\
exec bash\n" >/opt/up && chmod +x /opt/up
ENV LANG=C.UTF-8 TZ=Asia/Shanghai
EXPOSE 2333
CMD /opt/up
我们需要在 Install && Set Startup 之前加上一句话:
COPY conf.json /opt/uoj/judger/.conf.json
这是把配置放到 judger 里面。
然后构建这个镜像:
docker build -f Dockerfile .
Dockerfile 就是你更改之后的文件,同时不要漏掉那个点。
等待一会儿 ,如果构建成功,你能看到 Successfully built ... 。
3
运行 judger : docker run -it --cap-add SYS_PTRACE <image id>
其中 <image id> 是你刚刚构建的 judger 镜像 id 。这样是直接进入docker 终端,你可以看看有没有报错。或者 docker run -dit --cap-add SYS_PTRACE <image id> 让它直接在后台运行。
如果你在最后测试的时候遇到新加的评测机 judgement failed ,并且 fail to show details ,那么多半是忘记加 --cap-add SYS_PTRACE 。
4
最后你要在 main_server 上操作一下,让它知道又有一个 judger 了。
首先 docker exec -it uoj /bin/bash 来进入容器。
执行 mysql -p app_uoj233 来进入数据库。默认密码为 root 。
运行 insert into judger_info (judger_name, password, ip) values ('<judger_name>', '<password>', '<ip>'); 。
其中 <judger_name> 是刚才新 Judger 的名字, <password> 是新 judger 的密码, <ip> 是新 judger 的 IP(同样是容器的ip)。最后的命令可能是这样的:
insert into judger_info (judger_name, password, ip) values ('judger1', 'H3b01oSP2Y5KzL4l1GYrA37jpgeQQLuS', '172.17.0.3');
你应该能在网页上 你的账号->系统管理->评测机管理 里面看到这个评测机了。
然后随便 rejudge 一道题看看评测机正不正常?
在不同机子上安装
我决定先
坑着
UOJ社区版安装多个Judger的更多相关文章
- 【Git】 GitLab服务器社区版安装与配置
GitLab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务 GitLab系统架构 当~git在图片中引用时,它表示git用户的主目录 ...
- MYSQL社区版安装手册
https://www.jb51.net/article/140412.htm 在本教程中使用MySQL最新的MySQL服务8.0.11的社区绿色版本进行安装,绿色版为zip格式的包,安装分为以下四步 ...
- OpenAcc社区版安装教程(Linux版)(更新版)
官方安装过程如下图所示 1.安装前 下载OpenAcc社区版 1,目前为止的最新版,平台是Linux,选择Linux x86-64. 我的服务器系统是CentOs 下载地址链接:https://www ...
- MySQL 社区版 安装小记
根据刘铁猛老师的教程,自己折腾一下 1. 安装包准备 在Windows10 64bit上安装,故需要准备vc++ 2013和2015的Redistributable的包,搜索即有,无需细说. 示例数据 ...
- pycharm社区版安装及遇到的问题
1. 在官网上下载pycharm社区版安装包. 2. 按照该教程进行安装: https://jingyan.baidu.com/article/f00622286e92f4fbd2f0c855.htm ...
- 002.MongoDB社区版安装
一 前期准备 1.1 相关软件包介绍 包裹名字 描述 mongodb-org 一个将自动安装以下四个组件包的组合包. mongodb-org-server 包含mongod守护程序,关联的init脚本 ...
- Gitlab 社区版安装部署和维护指南
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.这篇文章是在 Gitlab 7.4 的环境下配置的,相关内容可能已经过时. 后续做了一次迁移,将 Gitlab 升级到了 ...
- win10 Ubuntu子系统安装&odoo10社区版安装
参考文档: http://www.cnblogs.com/odoouse/p/5995603.html https://www.jianshu.com/p/58090215bda8 一.win10 U ...
- Ubuntu 16.04 (官方命令行)安装MongoDB 3.6.2(社区版)
概述 使用本教程从 .deb 包在LTS Ubuntu Linux系统上安装MongoDB Community Edition. 虽然Ubuntu包含自己的MongoDB包,但官方的MongoDB社区 ...
随机推荐
- Python 变量作用域与函数
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- Codeforces 1247C. p-binary
传送门 首先 $n=\sum_{i=1}^{ans}(2^{x_{ans}}+p)$ 可以变成 $n-ans \cdot p=\sum_{i=1}^{ans}2^{x_{ans}}$ 注意到如果 $n ...
- Wannafly挑战赛23
B. 游戏 大意: $n$堆石子, 第$i$堆初始$a_i$, 每次只能选一堆, 假设一堆个数$x$, 只能取$x$的约数, 求先手第一步必胜取法. SG入门题, 预处理出所有$SG$值. 先手要必胜 ...
- 1-MySQL DBA笔记-理解MySQL
第一部分 入门篇 本篇首先介绍MySQL的应用领域.基础架构和版本,然后介绍MySQL的基础知识,如查询的执行过程.权限机制.连接.存储引擎,最后阐述一些基础概念. 第1章 理解MySQL 本章将介绍 ...
- Spring Boot 获取Bean对象实体
一.实现 ApplicationContextAware 接口 package com.zxguan; import org.springframework.beans.BeansException; ...
- H-ui前端框架,后端模板
http://www.h-ui.net/ H-ui前端框架系统是基于 HTML.CSS.JAVASCRIPT开发的轻量级web前端框架. H-ui是根据中国现阶段网站特性和程序员开发习惯,在boots ...
- No database provider has been configured for this DbContext
var context = ((IInfrastructure<IServiceProvider>)set).GetService<DbContext>(); 在EF Core ...
- 关于Highcharts数据量超过1000时无法显示问题
今天在vue的项目中引入Highcharts,想做一个大数据量的实时刷新曲线图,发现当数据量超过1000就无法显示. 经过排查发现 Highcharts为了保证更好的性能设置了一个性能阈值检查,当数据 ...
- vue项目在IE浏览器和360兼容模式下页面不显示问题,亲测有效
解决方法:安装 "babel-polyfill" 1.命令:cnpm install --save-dev babel-polyfill 2.在入口main.js文件引入:impo ...
- 17.SpringMVC核心技术-拦截器
SpringMVC 中的 Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定 的用户请求, 并进行相应的预处理与后处理.其拦截的时间点在“处理器映射器根据用户提 交的请求映射 ...