某山寨

z4zr的待调教小窝

CentOS 6.4 安装HustOJ ACM在线评测平台

CentOS 6.4 安装HustOJ ACM在线评测平台

首先什么是hustoj...


Introduction 简介
HUSTOJ is an GPL FreeSoftware.
HUSTOJ 是一个开源OnlineJudge系统,广泛应用于计算机程序设计比赛和编程能力测试。
更多内容详见 Link


对于不想了解oj搭建的user来说
最好还是使用livecd吧 然后安装到电脑中 本人坚持选择centos纯属不可改变的抽风之举。。。

livecd 使用的时候 安装时创建的用户 不可用 只能使用:账户ubuntu 密码 freeproblemset
方便快捷啊。。。。。。。

安装HustOJ之前 我们至少需要有一个运行的环境,下面是两个链接 可以完成从系统安装到搭建环境
CentOS下搭建LAMP环境 Step 1 系统安装
CentOS下搭建LAMP环境 Step 2 Apache+MySQL+PHP5齐上阵

接下来需要写的东西算是一个记录由于OJ已经完成(部分内容与实际不同) 但是整体上无影响

本次安装机器配置:(简单谢谢 配置什么的淡定)
奔腾处理器x86 具体型号不知道。。
内存3G
硬盘40G
系统CentOS6.4 Apache MySQL PHP5.3

强烈感觉 代码维护方 对于文档方面巨大的欠缺 以及社区活跃度之低
在自己遇到问题卡住的情况下 坚持完成了。。。虽然购买了入群资格 但是没用上。。。。。
如果不了解Linux 那么 鸟哥私房菜 Linux学习必备!!!

CentOS特殊点 所以最好手动安装。。。。

yum -y install subversion 下载SVN

mkdir -p /data/svndata 创建放SVN版本库的文件

svnadmin create /data/svndata/winne winne为版本库名称

cd /data/svndata/winne #切换目录

svn checkout http://hustoj.googlecode.com/svn/trunk/ hustoj-read-only 签入

数据库部分
接下来创建MySQL数据库

mysql -u root -p(回车,前提已设置好mysql若未设置 参考开头处的文章)

(输入密码 并回车)

(下方为大致回忆过程。。。)
mysql->create database jol
->scouce /data/svndata/winne/hustoj-read-only/install/db.sql(这里需要去掉db.sql中的前几句)
->exit
如果没有错误就算完成了数据库的创建

页面部分
将hustoj-read-only文件夹中的web文件夹里面的文件全部移动到你的服务器根目录下。

cd /data/svndata/winne/hustoj-read-only #切换目录

CentOS下web目录为 /var/www/html/

mv web /var/www/html/JudgeOnline

接下来设置OnlineJudge的页面部分

vim /var/www/html/JudgeOnline/include/db_info.inc.php

[cpp]
文件内容 根据实际情况修改吧....
static $DB_HOST="localhost"; 数据库的服务器地址
static $DB_NAME="jol"; 数据库名* static $DB_USER="root"; 数据库用户名* static $DB_PASS="root"; 数据库密码* // connect db
static $OJ_NAME="HUSTOJ"; OJ的名字,将取代页面标题等位置HUSTOJ字样。* static $OJ_HOME="./"; OJ的首页地址
static $OJ_ADMIN="root@localhost"; 管理员email* static $OJ_DATA="/home/judge/data"; 测试数据所在目录,实际位置。
static $OJ_BBS="discuss";//"bbs" 论坛的形式,discuss为自带的简单论坛,bbs为外挂论坛,参考bbs.php代码。
static $OJ_ONLINE=false; 是否使用在线监控,需要消耗一定的内存和计算,因此如果并发大建议关闭
static $OJ_LANG="en"; 默认的语言,中文为cn
static $OJ_SIM=true; 是否显示相似度检测的结果。
static $OJ_DICT=true; 是否启用在线英字典
static $OJ_LANGMASK=1008; //1mC 2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason to mask all other language 用掩码表示的OJ接受的提交语言,可以被比赛设定覆盖。
static $OJ_EDITE_AREA=true;// 是否启用高亮语法显示的提交界面,可以在线编程,无须IDE。
static $OJ_AUTO_SHARE=false;//true: 自动分享代码,启用的话,做出一道题就可以在该题的Status中看其他人的答案。
static $OJ_CSS="hoj.css"; 默认的css,可以选择dark.css和gcode.css,具有有限的界面制定效果。
static $OJ_SAE=false; //是否是在新浪的云平台运行web部分
static $OJ_VCODE=true; 是否启用图形登录、注册验证码。
static $OJ_APPENDCODE=false; 是否启用自动添加代码,启用的话,提交时会参考$OJ_DATA对应目录里是否有append.c一类的文件,有的话会把其中代码附加到对应语言的答案之后,巧妙使用可以指定main函数而要求学生编写main部分调用的函数。
static $OJ_MEMCACHE=false;是否使用memcache作为页面缓存,如果不启用则用/cache目录
static $OJ_MEMSERVER="127.0.0.1"; memcached的服务器地址
static $OJ_MEMPORT=11211; memcached的端口
[/cpp]

好了 这时访问服务器已经可以看到HustOJ的页面了

web端做好后,我们可以在OJ中注册一个账户了
然后将账户提升为管理员。。。不解释
同样先登陆mysql
mysql->use jol
->insert into privilege(user_id,rightstr) values(‘admin’,'admin’);
->exit

接下来
我们需要去做评测端judge
首先安装一点必需品。。。

yum install gcc gcc-g++ make mysql-devel flex

在这里遇到了不少的坎坷
推荐修改install.sh进行安装。。(一句句的来也行。。中枪)
首先 make.sh 额 似乎不需要修改
但是有两处需要修改的地方(这里大多都是绝对路径进行写的。。。但实际中我很懒)

vim /data/svndata/winne/hustoj-read-only/core/judged/makefile

================================================================
all: judged.cc
g++ -Wall -c -I/usr/local/mysql/include/mysql -I/usr/include/mysql judged.cc
g++ -Wall -o judged judged.o -L/usr/lib/mysql -L/usr/lib/mysql -lmysqlclient
================================================================
:wq #保存退出

vim /data/svndata/winne/hustoj-read-only/core/judge_client/makefile

================================================================
all: judge_client.cc
g++ -Wall -c -I/usr/include/mysql -I/usr/include/mysql judge_client.cc
g++ -Wall -o judge_client judge_client.o -L/usr/local/mysql/lib/mysql -L/usr/lib/mysql -lmysqlclient
================================================================
:wq #保存退出

这里暂时完毕 修改install.sh

vim /data/svndata/winne/hustoj-read-only/install/install.sh

================================================================
#!/bin/bash
#before install check DB setting in

judge.conf

hustoj-read-only/web/include/db_info.inc.php

and down here

#and run this with root

#CENTOS/REDHAT/FEDORA WEBBASE=/var/www/html APACHEUSER=apache
WEBBASE=/var/www/html **** APACHEUSER=apache **** DBUSER=root ****数据库用户名
DBPASS=root ****数据库密码

#try install tools *****这一段没有去管他...不过确实重复了一些东西。。。
sudo apt-get install flex g++ libmysql++-dev php5 apache2 mysql-server php5-mysql php5-gd php5-cli mono-gmcs subversion
sudo /etc/init.d/mysql start

sudo yum -y update
sudo yum -y install php httpd php-mysql mysql-server php-xml php-gd gcc-c++ mysql-devel php-mbstring glibc-static
sudo /etc/init.d/mysqld start

sudo svn checkout http://hustoj.googlecode.com/svn/trunk/ hustoj-read-only

#create user and homedir
sudo /usr/sbin/useradd -m -u 1536 judge

#compile and install the core
cd hustoj-read-only/core/
sudo ./make.sh
cd ../..
#install web and db
sudo cp -R hustoj-read-only/web $WEBBASE/JudgeOnline
sudo chmod -R 771 $WEBBASE/JudgeOnline
sudo chown -R $APACHEUSER $WEBBASE/JudgeOnline
sudo mysql -h localhost -u$DBUSER -p$DBPASS < db.sql

#create work dir set default conf
sudo mkdir /home/judge
sudo mkdir /home/judge/etc
sudo mkdir /home/judge/data
sudo mkdir /home/judge/log
sudo mkdir /home/judge/run0
sudo mkdir /home/judge/run1
sudo mkdir /home/judge/run2
sudo mkdir /home/judge/run3
sudo cp java0.policy judge.conf /home/judge/etc
sudo chown -R judge /home/judge
sudo chgrp -R $APACHEUSER /home/judge/data
sudo chgrp -R root /home/judge/etc /home/judge/run?
sudo chmod 775 /home/judge /home/judge/data /home/judge/etc /home/judge/run?

#boot up judged
sudo cp judged /etc/init.d/judged
sudo chmod +x /etc/init.d/judged
sudo ln -s /etc/init.d/judged /etc/rc3.d/S93judged
sudo ln -s /etc/init.d/judged /etc/rc2.d/S93judged
sudo /etc/init.d/judged start
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/httpd restart
================================================================
:wq #保存退出
执行一下

install.sh 如果没有其他的报错 应该就算完成了(其实突然发现 之前的操作全白费了)

实际操作中 似乎只需要执行带有%%%%%%%的部分就可以解决问题了。。。

接下来需要修改judge的配置文件
#vim /home/judge/etc/judge.conf

[cpp]
注意和上面的配置文件一样 参考修改
OJ_HOST_NAME=127.0.0.1 如果用mysql连接读取数据库,数据库的主机地址
OJ_USER_NAME=root 数据库帐号
OJ_PASSWORD=root 数据库密码
OJ_DB_NAME=jol 数据库名称
OJ_PORT_NUMBER=3306 数据库端口
OJ_RUNNING=4 judged会启动judge_client判题,这里规定最多同时运行几个judge_client
OJ_SLEEP_TIME=5 judged通过轮询数据库发现新任务,轮询间隔的休息时间,单位秒
OJ_TOTAL=1 老式并发处理中总的judged数量
OJ_MOD=0 老式并发处理中,本judged负责处理solution_id按照TOTAL取模后余数为几的任务。
OJ_JAVA_TIME_BONUS=2 Java等虚拟机语言获得的额外运行时间。
OJ_JAVA_MEMORY_BONUS=512 Java等虚拟机语言获得的额外内存。
OJ_SIM_ENABLE=0 是否使用sim进行代码相似度的检测
OJ_HTTP_JUDGE=0 是否使用HTTP方式连接数据库,如果启用,则前面的HOST_NAME等设置忽略。
OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline 使用HTTP方式连接数据库的基础地址,就是OJ的首页地址。
OJ_HTTP_USERNAME=admin 使用HTTP方式所用的用户帐号(HTTP_JUDGE权限),该帐号登录时不能启用VCODE图形验证码,但可以登录成功后启用。
OJ_HTTP_PASSWORD=admin 密码
OJ_OI_MODE=0 是否启用OI模式,即无论是否出错都继续判剩余的数据,在ACM比赛中一旦出错就停止运行。
OJ_SHM_RUN=0 是否使用/dev/shm的共享内存虚拟磁盘来运行答案,如果启用能提高判题速度,但需要较多内存。
OJ_USE_MAX_TIME=1 是否使用所有测试数据中最大的运行时间作为最后运行时间,如果不启用则以所有测试数据的总时间作为超时判断依据。
[/cpp]

最后大功告成 可以去试一试oj了。。。。。

注:以上内容为大致回忆 期间进行了大量为记录的操作
add:
/home/judge中
进行了chmod,chgrp,chown操作(因为之前是手动弄的。。当时没考虑权限。。不考虑权限 2B青年啊。。)

不可照搬照抄........(处于安全考虑 实际操作中有写自己修改的地方。。忘掉了)
最后对于以上内容仅供参考,本人不负任何责任,此文章只作为一个小记录 若有疑问请留言。。。
目前题目导入部分有问题。。。 未解决

后期安装了java 这样oj支持了c c++ java 其他的暂时用不上(吐槽 java 效率“高”的吓人不敢恭维啊)

一些可能用上的指令:
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
judged 首次安装需要手动启动

总结起来oj各种不好使的地方几乎都是权限问题导致的 要了解Linux的权限问题

推荐参考资料:
GOOGLECODE项目页
牛逼哄哄的HustOJ维护者的blog(似乎是)
这一页是CentOS需要注意的地方(很有用。。)
对于64位CentOS用户需要的


Warning: file_get_contents(http://api.hitokoto.us/rand): failed to open stream: Connection timed out in /data/htdocs/z4zr.host.smartgslb.com/usr/themes/Wcat/functions.php on line 87

文章二维码