Ubuntu上搭建hustoj
开始的时候看别人的博客,基本上大同小异,无非是先配置LAMP环境,然后去https://github.com/zhblue/hustoj 下载文件进行安装。
但是由于很多博客写的比较早,最晚的也是在2017年了,上面所说的安装hustoj这步
sudo apt-get update
sudo apt-get install subversion
sudo svn co https://github.com/zhblue/hustoj/trunk/trunk/install hustoj
cd hustoj
sudo bash install-interactive.sh
执行完前三步之后,切换到hustoj文件夹下,是没有install-interactive.sh这个文件的,开始以为是自己安装的问题,但是进入上面的网址https://github.com/zhblue/hustoj/trunk/trunk/ 之后发现这个文件的确没有了
那也就是说,继续安装下去肯定是不行的,我们需要新的安装方法。
进入https://github.com/zhblue/hustoj 可以看到上面是有安装步骤了,上面也明确表示网上教程都是比较老的,存在问题,而网址上面给出的安装方法是比较简单的,按照上面的方法,在Ubuntu14.04和16.04都成功安装了,下面整理一下我的安装流程。
一、安装hustoj
Ubuntu14.04 :
wget https://raw.githubusercontent.com/zhblue/hustoj/master/trunk/install/install-ubuntu14.04.sh
sudo bash install-ubuntu14.04.sh
ubuntu16.04:
wget https://raw.githubusercontent.com/zhblue/hustoj/master/trunk/install/install-ubuntu16+.sh
sudo bash install-ubuntu16+.sh
安装mysql:
apt-get install mysql-server mysql-client
直接执行对应版本的两条命令即可,然后就是等待。
PS:16.04可能需要先手动安装Mysql (安装过程会弹出密码设置,一定要设置为root。),然后再执行上述命令。按理说直接执行上面两条命令是没有问题的,14.04的确没问题,但是用16.04安装的时候数据库安装失败造成了很多问题,还需要在手动去改很麻烦。在几台电脑上试了,一次可以直接登录oj,两次需要自己装mysql,等后续再安装几次看看。
数据库密码一定要设置成 “root” ,执行第一条命令之后,会在账户文件夹下多出一个名字为“install-ubuntu14.04.sh”或“install-ubuntu16+.sh”文件,感兴趣的话可以打开看看,里面其实就是很多命令行,其中也包括配置LMAP环境的一些命令。
我们打开文件可以看到有两行关于数据库的
sed -i "s/DB_USER=\"root\"/DB_USER=\"$USER\"/g" src/web/include/db_info.inc.php
sed -i "s/DB_PASS=\"root\"/DB_PASS=\"$PASSWORD\"/g" src/web/include/db_info.inc.php
//set -i的作用是修改文件中的内容,格式如下:
// sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 文件所在目录`
//上述语句的大意就是,修改 /home/judge/src/web/include目录下的db_info.inc.php文件中的
//数据库账号和密码都为root,所以设置安装过程中设置数据库密码一定要设置成root
二、检测hustoj是否安装正常
安装完成之后,打开火狐浏览器输入localhost或本机ip地址进入oj,不需要加上JudgeOnline。如果没有什么问题的话,应该可以直接进入OJ了。
如果无法进入:
1、在/home/judge/src/web/include目录下找到db_info.inc.php文件。打开该文件,查看数据库账户密码是
否正常。如果为空,那么就是数据库安装的问题。
2、查看数据库,首先在终端下执行 mysql -u root -p 看是否可以进入数据库。
3、如果可以进入数据库,输入show databases 查看是否有一项的名称是 jol 如果有,只需要把
db_info.inc.php文件中的数据库账号密码填上即可(不要使用系统自带的gedit,用vi或者vim)。
4、如果不能进入数据库或者没有jol,则需要重新安装数据库,再安装一遍hustoj。
三、创建管理员账户
1、先在oj上创建一个普通用户。
2、在终端下输入: mysql -u root -p 进入数据库。
3、在数据库下输入:show databases;(数据库下输入注意分号)查看所有数据库,会出现如下界面:
4、输入 use jol 选择数据库,如果安装hustoj中间出现问题是没有jol这个数据库的。
5、输入:
insert into privilege(user_id,rightstr)
values('OJ账号','administrator');
例如:账户为 123456
就需要输入:
insert into privilege(user_id,rightstr)
values('123456','administrator');
6、重新登录账号,账户就是管理员账号了。
四、配置OJ
如果可以正常进入oj,那么接下来就可以对oj进行配置了。
首先我们需要找到配置oj的两个文件,一个是/home/judge/src/web/include目录下的db_info.inc.php文件,另一个是/home/judge/etc目录下的judge.conf 文件。(安装完之后,这两个文件所在位置是和17年写的博客上所说的位置是完全不同的。)
1、db_info.inc.php文件
<?php @session_start();
ini_set("display_errors","Off"); //set this to "On" for debugging ,especially when no reason blank shows up.
ini_set("session.cookie_httponly", 1);
header('X-Frame-Options:SAMEORIGIN');
//for people using hustoj out of China , be careful of the last two line of this file !
// connect db
static $DB_HOST="localhost";
static $DB_NAME="jol";
static $DB_USER="root";
static $DB_PASS="root";
//上面四行中如果没有问题就不要动,都是默认好的。可能数据库账户密码不是root,这点并不影响。
//16.04安装可能数据库账户密码为空,如果为空,账户填写为 root 密码填写 自己设置的。
//如果需要改写的话一定要用vim或者vi打开
static $OJ_NAME="HUSTOJ";
static $OJ_HOME="./";
static $OJ_ADMIN="root@localhost";
static $OJ_DATA="/home/judge/data";
static $OJ_BBS="discuss3";//"bbs" for phpBB3 bridge or "discuss" for mini-forum
static $OJ_ONLINE=false;
static $OJ_LANG="en";
static $OJ_SIM=false;
static $OJ_DICT=false;
static $OJ_LANGMASK=0; //1mC 2mCPP 4mPascal 8mJava 16mRuby 32mBash 1008 for security reason to mask all other language
static $OJ_EDITE_AREA=true;//true: syntax highlighting is active
static $OJ_ACE_EDITOR=true;
static $OJ_AUTO_SHARE=false;//true: One can view all AC submit if he/she has ACed it onece.
static $OJ_CSS="white.css";
static $OJ_SAE=false; //using sina application engine
static $OJ_VCODE=false;
static $OJ_APPENDCODE=false;
static $OJ_CE_PENALTY=false;
static $OJ_PRINTER=false;
static $OJ_MAIL=false;
static $OJ_MEMCACHE=false;
static $OJ_MEMSERVER="127.0.0.1";
static $OJ_MEMPORT=11211;
static $OJ_REDIS=false;
static $OJ_REDISSERVER="127.0.0.1";
static $OJ_REDISPORT=6379;
static $OJ_REDISQNAME="hustoj";
static $SAE_STORAGE_ROOT="http://hustoj-web.stor.sinaapp.com/";
static $OJ_TEMPLATE="bs3"; //使用的默认模板
if(isset($_GET['tp'])) $OJ_TEMPLATE=$_GET['tp'];
static $OJ_LOGIN_MOD="hustoj";
static $OJ_REGISTER=true; //允许注册新用户
static $OJ_REG_NEED_CONFIRM=false; //新注册用户需要审核
static $OJ_NEED_LOGIN=false; //需要登录才能访问
static $OJ_RANK_LOCK_PERCENT=0; //比赛封榜时间比例
static $OJ_SHOW_DIFF=false; //是否显示WA的对比说明
static $OJ_TEST_RUN=false; //提交界面是否允许测试运行
static $OJ_BLOCKLY=false; //是否启用Blockly界面
static $OJ_ENCODE_SUBMIT=false; //是否启用base64编码提交的功能,用来回避WAF防火墙误拦截。
//static $OJ_EXAM_CONTEST_ID=1000; // 启用考试状态,填写考试比赛ID
//static $OJ_ON_SITE_CONTEST_ID=1000; //启用现场赛状态,填写现场赛比赛ID
static $OJ_OPENID_PWD = '8a367fe87b1e406ea8e94d7d508dcf01';
/* weibo config here */
static $OJ_WEIBO_AUTH=false;
static $OJ_WEIBO_AKEY='1124518951';
static $OJ_WEIBO_ASEC='df709a1253ef8878548920718085e84b';
static $OJ_WEIBO_CBURL='http://192.168.0.108/JudgeOnline/login_weibo.php';
/* renren config here */
static $OJ_RR_AUTH=false;
static $OJ_RR_AKEY='d066ad780742404d85d0955ac05654df';
static $OJ_RR_ASEC='c4d2988cf5c149fabf8098f32f9b49ed';
static $OJ_RR_CBURL='http://192.168.0.108/JudgeOnline/login_renren.php';
/* qq config here */
static $OJ_QQ_AUTH=false;
static $OJ_QQ_AKEY='1124518951';
static $OJ_QQ_ASEC='df709a1253ef8878548920718085e84b';
static $OJ_QQ_CBURL='192.168.0.108';
//if(date('H')<5||date('H')>21||isset($_GET['dark'])) $OJ_CSS="dark.css";
if( isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && strstr($_SERVER['HTTP_ACCEPT_LANGUAGE'],"zh-CN")) {
$OJ_LANG="cn";
}
if (isset($_SESSION[$OJ_NAME.'_'.'OJ_LANG'])) $OJ_LANG=$_SESSION[$OJ_NAME.'_'.'OJ_LANG'];
require_once(dirname(__FILE__)."/pdo.php");
// use db
//pdo_query("set names utf8");
if(isset($OJ_CSRF)&&$OJ_CSRF&&$OJ_TEMPLATE=="bs3"&&basename($_SERVER['PHP_SELF'])!="problem_judge")
require_once('csrf_check.php');
//sychronize php and mysql server with timezone settings, dafault setting for China
//if you are not from China, comment out these two lines or modify them.
//date_default_timezone_set("PRC");
//pdo_query("SET time_zone ='+8:00'");
?>
2、judge.conf文件
OJ_HOST_NAME=127.0.0.1
OJ_USER_NAME=root
OJ_PASSWORD=root
OJ_DB_NAME=jol
OJ_PORT_NUMBER=3306
OJ_RUNNING=1
OJ_SLEEP_TIME=1
OJ_TOTAL=1
OJ_MOD=0
OJ_JAVA_TIME_BONUS=2
OJ_JAVA_MEMORY_BONUS=64
OJ_JAVA_XMS=-Xms64M
OJ_JAVA_XMX=-Xmx128M
OJ_SIM_ENABLE=0
OJ_HTTP_JUDGE=0
OJ_HTTP_BASEURL=http://127.0.0.1/JudgeOnline
OJ_HTTP_USERNAME=IP
OJ_HTTP_PASSWORD=admin
OJ_REDISENABLE=0
OJ_REDISSERVER=127.0.0.1
OJ_REDISPORT=6379
OJ_REDISAUTH=123456
OJ_REDISQNAME=hustoj
OJ_OI_MODE=1
OJ_SHM_RUN=1
OJ_USE_MAX_TIME=1
OJ_LANG_SET=0,1,2,3,4,5,6,7,8,9,10,11
OJ_COMPILE_CHROOT=1
OJ_TURBO_MODE=0
OJ_CPU_COMPENSATION=1.0