OJ搭建详细

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 学校ACM部需要一个比赛的平台~于是找到hustoj架设方法如下:资料来源于:https://code.google.com/p/hustoj/wiki/ HUST JOL安装说明 by zhblue(newsclan@gmail.
学校ACM部需要一个比赛的平台~
于是找到hustoj
架设方法如下:
资料来源于:
https://code.google.com/p/hustoj/wiki/

HUST JOL安装说明

by zhblue(newsclan@gmail.com)
方法二选一

1、下载安装程序

debian/ubuntu用户:sudo apt-get update;sudo apt-get install subversion 
redhat/centos用户:sudo yum update;sudo yum install subversion.i386

svn checkout http://hustoj.googlecode.com/svn/trunk/install hustoj
cd hustoj
编辑install.shweb/include/db_info.inc.php,设定数据库用户名密码后
sudo ./install.sh

自动安装使用install.sh,运行前阅读脚本头部说明设置数据库帐号,使用root运行。

2、手动安装顺序如下:

下载源码

        http://code.google.com/p/hustoj/
        svn checkout http://hustoj.googlecode.com/svn/trunk/ hustoj-read-only

创建数据库

        mysql
        set names utf8; 
        create database jol;
        use jol;
        source db.sql

配置Web界面

cp -R web /var/www/html/JudgeOnline
注册用户
http://127.0.0.1/JudgeOnline/registerpage.php 注册一个普通帐号zhblue
创建管理员
insert into privilege(user_id,rightstr) values('zhblue','administrator'); zhblue 为需要加管理员权限的帐号
管理员登录
普通登录后访问 http://127.0.0.1/JudgeOnline/admin
##########添加用户 useradd --uid 1536 judge judge_client.cc:424
setuid(1536); ==> //设置判题用户//
编译判题服务器、客户端
          需要make g++ libmysql++-dev 
        (yum install gcc-c++  mysql-devel  / apt-get install g++ libmysql++-dev)
    mkdir /home/judge/
    mkdir /home/judge/etc
    mkdir /home/judge/data
    mkdir /home/judge/log
    mkdir /home/judge/run0

cd hustoj-read-only/core/
sudo ./make.sh
判题配置文件
########################/home/judge/etc/judge.conf###########################
        OJ_HOST_NAME=localhost    #数据库地址
        OJ_USER_NAME=jol #数据库用户名
        OJ_PASSWORD=# 数据库密码
        OJ_DB_NAME=jol #数据库名
        OJ_PORT_NUMBER=3306 #数据库端口
        OJ_RUNNING=1 #可以同时运行几个进程
        OJ_SLEEP_TIME=1 #如果有空闲 要休眠多久
        OJ_TOTAL=1 #总共有多少台机器负责判题
        OJ_MOD=0 #当前机器评判取模为多少的提交
########################/home/judge/etc/judge.conf###########################

设置启动脚本

   with root or sudo
   echo "LANG=C /usr/bin/judged" > /etc/init.d/judged
   chmod +x  /etc/init.d/judged
   ln -s /etc/init.d/judged /etc/rc2.d/S93judged
   ln -s /etc/init.d/judged /etc/rc3.d/S93judged

您需要修改系统php.ini,给予php操作数据目录的权限。 以下是推荐修改的设置

       sudo gedit /etc/php5/apache2/php.ini 
       open_basedir =/home/judge/data:/var/www/JudgeOnline:/tmp  
       max_execution_time = 300     ; Maximum execution time of each script, in seconds
       max_input_time = 600 
       memory_limit = 256M      ; Maximum amount of memory a script may consume (16MB)
       post_max_size = 64M
       upload_tmp_dir =/tmp
       upload_max_filesize = 64M
      
修改php.ini后apache需重启

Centos用户:

尽管我们强烈推荐使用Debian/Ubuntu,但是由于驱动或资源的原因,有的用户不得不使用CentOS/RE/Federa。

Through Debian/Ubuntu is highly recommended, but in case of server hardware drivers or something else, people like to install HUSTOJ on CentOS/RedHat/Federa system.

这里是已知的一些问题。 Here is something for those users:

  • yum install php httpd php-mysql mysql-server php-xml php-gd gcc-c++ php-mbstring glibc
  • 默认web目录在/var/www/html,需要调整install.sh中的设置
  • SELinux会影响PHP的运行,可能需要关闭(/etc/selinux/config and setenforce 0)才能web编辑测试数据。
    或者执行 chcon -R -t httpd_sys_content_t /home
  • PHP.ini的位置在/etc/php.ini
  • php.ini中short_open_tag必须设为On,但是似乎默认为Off
  • php.ini中register_globals必须设为Off,但是似乎默认为On
  • 编译时mysql库的位置在/usr/lib/mysql
    因此需要手工修改judged和judge_client中两个makefile 将 -L/usr/local/mysql/lib/mysql 改为 -L/usr/lib/mysql
    -I/usr/local/mysql/include/mysql 改为 -I/usr/include/mysql
  • install what you need before starting by :
    yum install php httpd php-mysql mysql-server php-xml php-gd gcc-c++
  • the default web site root directory is different from debian/ubuntu
    /var/www/html you gonna need to adjust it in install.sh before running "sudo ./install.sh"
  • SELinux settings will stop php when it trying to make file I/O, so if you don't know how to make SELinux working with HUSTOJ, just disable it for a moment(/etc/selinux/config and setenforce 0), and find the right way later.

this line should works

chcon -R -t httpd_sys_content_t /home
  • PHP.ini is located at /etc/php.ini
  • You need to change php.ini
    short_open_tag=On
    register_globals=Off
    open_basedir=/var/www/html:/var/www/html/JudgeOnline:/tmp:/home/judge/data
  • change makefiles in core/judged and core/judge_client
    change -L/usr/local/mysql/lib/mysql to -L/usr/lib/mysql
    -I/usr/local/mysql/include/mysql to -I/usr/include/mysql

for English user ,email or issue is recommended for Chinese user ,QQ-qun group IM is recomended.

刚刚在全新的CentOS 5.6中安装了OJ,主要遇到问题和解决方法如下:

  • 安装时候提示找不到www-data用户,修改web的用户为apache
  • 运行/etc/init.d/judged出错,提示/lib/init/vars.sh找不到,修改/etc/init.d/judged,删除原有内容,修改内容为:
    /usr/bin/judged
  • 打开页面空白,这是由于CentOS默认带的php版本为5.1,不支持mysql_set_charset函数,这个函数需要5.2.3的支持,打开include/db_info.inc.php,注释掉第37行:
    if(!$OJ_SAE)mysql_set_charset("utf8");
  • 打开题目列表页面不完全,yum install php-mbstring。

关 于Java,如果Java提示编译失败,可以尝试: 1、卸载Java,安装官方jdk 2、测试(应该继续失败) 3、卸载官方jdk,安装java-1.6.0-openjdk-devel 4、测试(貌似就没有问题了,原因不明) PS:在CentOS 6下测试通过。 

https://code.google.com/p/hustoj/wiki/CentOS


分布式系统搭建方法


Introduction

http://hustoj.5d6d.com/forum-4-1.html

Details

建立分布式判题系统 HUSTOJ 支持一台数据库服务器,多台web服务器和多台判题服务器,以承担较高的访问负荷。

首先,需要创建用于从远程连接数据库的帐号。

GRANT ALL PRIVILEGES ON jol.* TO 'judge'@'%'
IDENTIFIED BY 'judge_pass' WITH GRANT OPTION;

对于网络原因无法远程mysql的,请参考HTTPJudge

其中jol为数据库,judge为帐号,judge_pass为密码。 注意: 检查/etc/mysql/my.cnf 确保

bind-address        = 0.0.0.0
  • 为了提高性能,可以适当增大
    key_buffer              = 128M
    query_cache_limit       = 4M
    query_cache_size        = 128M

其次,配置各web程序连接到数据库。 修改include/db_info.inc.php

   static  $DB_HOST="数据库服务器ip";
   static  $DB_NAME="jol";
   static  $DB_USER="judge";
   static  $DB_PASS="judge_pass";

第三,配置各判题程序连接到数据库,分配任务。

   OJ_HOST_NAME=数据库服务器ip
   OJ_USER_NAME=judge
   OJ_PASSWORD=judge_pass
   OJ_DB_NAME=jol
   ...
   OJ_TOTAL=判题机总数
   OJ_MOD=本机编号,从0开始
   ...

其中OJ_TOTAL=判题机总数,OJ_MOD=本机编号,从0开始,例如 有3台机器判题,分别编号0,1,2 OJ_TOTAL都设为3,OJ_MOD分别设为0,1,2

从r784开始不必设置OJ_TOTAL和OJ_MOD,所有judged会自动分配任务。

第四,复制测试数据目录到各判题机。

从r1520开始,使用HTTP_JUDGE方式不必单独复制数据,数据将从web服务器按需下载。

从主机向判题机复制

   scp -r /home/judge/data  root@判题机ip:/home/judge/

或用同步命令。

   rsync -vzrtopg --progress --delete /home/judge/data root@判题机ip:/home/judge/

判题机从主机复制

   scp -r root@主机ip:/home/judge/data  /home/judge/

或用同步命令。

   rsync -vzrtopg --progress --delete root@主机ip:/home/judge/data /home/judge/

最后,在各判题机重启判题程序。

   sudo pkill judged&&sudo judged
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
弹性计算 云计算
基于ECS服务器搭建oj平台
对于在基于ECS服务器(使用的是Ubuntu20.04)搭建的oj平台,在搭建过程中提供了非常大的帮助,也在途中解决了之前很多没有的bug,不过也有一些小问题,但都在中途进行了解决,完美运行了oj平台。
898 0
基于ECS服务器搭建oj平台
|
运维 API 开发工具
当你下载并运行阿里云OpenAPI的工程时遇到“runtime error: invalid memory address or nil pointer
【1月更文挑战第8天】【1月更文挑战第38篇】当你下载并运行阿里云OpenAPI的工程时遇到“runtime error: invalid memory address or nil pointer
545 2
|
Ubuntu Oracle 关系型数据库
ubuntu18.04.6的安装教程
VirtualBox正在积极开发,发布频繁,功能、支持的客户操作系统和运行平台越来越多。VirtualBox是一个由专门公司支持的社区项目:鼓励每个人都做出贡献,同时Oracle确保产品始终符合专业质量标准。
429 1
|
数据采集 JSON JavaScript
Python爬虫案例:抓取猫眼电影排行榜
python爬取猫眼电影排行榜数据分析,实战。(正则表达式,xpath,beautifulsoup)【2月更文挑战第11天】
573 2
Python爬虫案例:抓取猫眼电影排行榜
|
算法 前端开发 开发工具
vitepress从0到1,让每个前后端小伙伴都拥有一个属于自己的博客
这篇文章详细介绍了如何从零开始使用VitePress搭建个人博客,包括项目初始化、配置美化及部署全流程。
|
人工智能 Java 测试技术
开源上新|FunASR英文离线文件转写软件包发布
开源上新|FunASR英文离线文件转写软件包发布
|
机器学习/深度学习 数据可视化 搜索推荐
用Python进行社交媒体分析:挖掘用户行为和趋势
【4月更文挑战第12天】本文介绍了Python在社交媒体分析中的应用,包括数据处理、可视化、机器学习等方面的优势。基本流程涉及数据获取、预处理、探索、模型选择与训练、评估优化以及结果可视化。文中给出了用户行为分析、话题趋势分析和用户画像分析的Python代码示例,展示了Python在这一领域的实用性。通过学习和实践,读者可以掌握Python进行社交媒体分析的技能。
1275 4
|
机器学习/深度学习 人工智能 自然语言处理
|
Ubuntu 网络协议 Linux
Ubuntu系统升级16.04升级18.04
Ubuntu系统升级16.04升级18.04
724 0
|
数据可视化 数据挖掘 API
python 画条形图(柱状图)
python 画条形图(柱状图)