freefcw/hustoj Install Guide
First of all, this version hustoj is a skin and improved for https://code.google.com/p/hustoj/. So the you can migrate the old version web to this version without any big chance.
This guide is not a deep tutorial for beginner, the base step for os and backend you should reference the old version of hustoj.
MySQL
- run the origin hustoj db script Origin Database of Hustoj
- run the db alter script database changed
set names utf8; create database judge; use judge; CREATE TABLE `compileinfo` ( `solution_id` int(11) NOT NULL DEFAULT '0', `error` text, PRIMARY KEY (`solution_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `contest` ( `contest_id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT NULL, `start_time` datetime DEFAULT NULL, `end_time` datetime DEFAULT NULL, `defunct` char(1) NOT NULL DEFAULT 'N', `description` text, `private` tinyint(4) NOT NULL DEFAULT '0', `langmask` int NOT NULL DEFAULT '0' COMMENT 'bits for LANG to mask', PRIMARY KEY (`contest_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8; CREATE TABLE `contest_problem` ( `problem_id` int(11) NOT NULL DEFAULT '0', `contest_id` int(11) DEFAULT NULL, `title` char(200) NOT NULL DEFAULT '', `num` int(11) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `loginlog` ( `user_id` varchar(48) NOT NULL DEFAULT '', `password` varchar(40) DEFAULT NULL, `ip` varchar(100) DEFAULT NULL, `time` datetime DEFAULT NULL, KEY `user_log_index` (`user_id`,`time`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `mail` ( `mail_id` int(11) NOT NULL AUTO_INCREMENT, `to_user` varchar(48) NOT NULL DEFAULT '', `from_user` varchar(48) NOT NULL DEFAULT '', `title` varchar(200) NOT NULL DEFAULT '', `content` text, `new_mail` tinyint(1) NOT NULL DEFAULT '1', `reply` tinyint(4) DEFAULT '0', `in_date` datetime DEFAULT NULL, `defunct` char(1) NOT NULL DEFAULT 'N', PRIMARY KEY (`mail_id`), KEY `uid` (`to_user`) ) ENGINE=MyISAM AUTO_INCREMENT=1013 DEFAULT CHARSET=utf8; CREATE TABLE `news` ( `news_id` int(11) NOT NULL AUTO_INCREMENT, `user_id` varchar(48) NOT NULL DEFAULT '', `title` varchar(200) NOT NULL DEFAULT '', `content` text NOT NULL, `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `importance` tinyint(4) NOT NULL DEFAULT '0', `defunct` char(1) NOT NULL DEFAULT 'N', PRIMARY KEY (`news_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8; CREATE TABLE `privilege` ( `user_id` char(48) NOT NULL DEFAULT '', `rightstr` char(30) NOT NULL DEFAULT '', `defunct` char(1) NOT NULL DEFAULT 'N' ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `problem` ( `problem_id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(200) NOT NULL DEFAULT '', `description` text, `input` text, `output` text, `sample_input` text, `sample_output` text, `spj` char(1) NOT NULL DEFAULT '0', `hint` text, `source` varchar(100) DEFAULT NULL, `in_date` datetime DEFAULT NULL, `time_limit` int(11) NOT NULL DEFAULT '0', `memory_limit` int(11) NOT NULL DEFAULT '0', `defunct` char(1) NOT NULL DEFAULT 'N', `accepted` int(11) DEFAULT '0', `submit` int(11) DEFAULT '0', `solved` int(11) DEFAULT '0', PRIMARY KEY (`problem_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8; CREATE TABLE `reply` ( `rid` int(11) NOT NULL AUTO_INCREMENT, `author_id` varchar(48) NOT NULL, `time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `content` text NOT NULL, `topic_id` int(11) NOT NULL, `status` int(2) NOT NULL DEFAULT '0', `ip` varchar(30) NOT NULL, PRIMARY KEY (`rid`), KEY `author_id` (`author_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `sim` ( `s_id` int(11) NOT NULL, `sim_s_id` int(11) DEFAULT NULL, `sim` int(11) DEFAULT NULL, PRIMARY KEY (`s_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `solution` ( `solution_id` int(11) NOT NULL AUTO_INCREMENT, `problem_id` int(11) NOT NULL DEFAULT '0', `user_id` char(48) NOT NULL, `time` int(11) NOT NULL DEFAULT '0', `memory` int(11) NOT NULL DEFAULT '0', `in_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `result` smallint(6) NOT NULL DEFAULT '0', `language` INT UNSIGNED NOT NULL DEFAULT '0', `ip` char(15) NOT NULL, `contest_id` int(11) DEFAULT NULL, `valid` tinyint(4) NOT NULL DEFAULT '1', `num` tinyint(4) NOT NULL DEFAULT '-1', `code_length` int(11) NOT NULL DEFAULT '0', `judgetime` datetime DEFAULT NULL, `pass_rate` DECIMAL(2,2) UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (`solution_id`), KEY `uid` (`user_id`), KEY `pid` (`problem_id`), KEY `res` (`result`), KEY `cid` (`contest_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8; CREATE TABLE `source_code` ( `solution_id` int(11) NOT NULL, `source` text NOT NULL, PRIMARY KEY (`solution_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `topic` ( `tid` int(11) NOT NULL AUTO_INCREMENT, `title` varbinary(60) NOT NULL, `status` int(2) NOT NULL DEFAULT '0', `top_level` int(2) NOT NULL DEFAULT '0', `cid` int(11) DEFAULT NULL, `pid` int(11) NOT NULL, `author_id` varchar(48) NOT NULL, PRIMARY KEY (`tid`), KEY `cid` (`cid`,`pid`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `users` ( `user_id` varchar(48) NOT NULL DEFAULT '', `email` varchar(100) DEFAULT NULL, `submit` int(11) DEFAULT '0', `solved` int(11) DEFAULT '0', `defunct` char(1) NOT NULL DEFAULT 'N', `ip` varchar(20) NOT NULL DEFAULT '', `accesstime` datetime DEFAULT NULL, `volume` int(11) NOT NULL DEFAULT '1', `language` int(11) NOT NULL DEFAULT '1', `password` varchar(32) DEFAULT NULL, `reg_time` datetime DEFAULT NULL, `nick` varchar(100) NOT NULL DEFAULT '', `school` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `online` ( `hash` varchar(32) collate utf8_unicode_ci NOT NULL, `ip` varchar(20) character set utf8 NOT NULL default '', `ua` varchar(255) character set utf8 NOT NULL default '', `refer` varchar(255) collate utf8_unicode_ci default NULL, `lastmove` int(10) NOT NULL, `firsttime` int(10) default NULL, `uri` varchar(255) collate utf8_unicode_ci default NULL, PRIMARY KEY (`hash`), UNIQUE KEY `hash` (`hash`) ) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; CREATE TABLE `runtimeinfo` ( `solution_id` int(11) NOT NULL DEFAULT '0', `error` text, PRIMARY KEY (`solution_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; CREATE TABLE `custominput` ( `solution_id` int(11) NOT NULL DEFAULT '0', `input_text` text, PRIMARY KEY (`solution_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
datavase changed:
# support language ALTER TABLE users ADD locale CHAR(7) NULL; # support user theme ALTER TABLE users ADD theme CHAR(30) NULL; # add option table CREATE TABLE `options` ( `option_id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL DEFAULT '', `desc` varchar(128) NOT NULL DEFAULT '', `value` varchar(128) NOT NULL DEFAULT '', PRIMARY KEY (`option_id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; INSERT INTO `options` (`option_id`, `name`, `desc`, `value`) VALUES (2, 'ga_code', 'Google Analytics Code', 'UA-YOURCODE-1');
Web
git clone https://github.com/freefcw/hustoj.git
into the code to your webdocs- follow the configure guide. notice, the old extension of mysql for php is deprecated, so you need use MySQLi, or PDO
configuren guide:
the config file is locate applicaiton/config directory
-
cp production/database.sample.php to production/database.php, set your database information
-
cp base.sample.php to base.php, set domain and base_url, domain should not contain the port
problems:
skys215 commented on 2 Aug 2014 When wil the Installation sction will be updated? I downloaded it, but I cannot install. Regards, @freefcw Owner freefcw commented on 5 Aug 2014 I will do it when I have enough time, you can install use the old judge database from google code @dotkrnl Collaborator dotkrnl commented on 5 Aug 2014 With an installed Google Code version HUSTOJ. See hints in https://github.com/freefcw/hustoj/wiki/database-changed and https://github.com/freefcw/hustoj/wiki/configure . This project just refactored the front-end. @skys215 skys215 commented on 6 Aug 2014 I did as you guys said, But it remains "出错了,请联系 freefcw#gmail". @skys215 skys215 commented on 6 Aug 2014 I got the 500 Http Response and this error message: Database_Exception [ 8192 ]: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead @freefcw Owner freefcw commented on 6 Aug 2014 please choose mysqli or pdo in database.php. the mysql driver is deprecated in the newest php version @skys215 skys215 commented on 6 Aug 2014 Yes, it solved the problem. But there's annother problem: When I click the links on the navbar, it get an 404 error. (eg.http://127.0.0.1:8889/problem/list) But when I add index.php in the url, then it's ok.(eg. http://127.0.0.1:8889/index.php/problem/list) Is it my Apache Configuration's problem? Update: It was my Apache Configuration's problem, AllowOverride was set to None. It works perfect after changed it to All and restarting the Apache. Thanks for the help! @skys215 skys215 commented on 10 Aug 2014 HustOJ works well at my localhost, but there's an error running on my vps. ErrorException [ Fatal Error ]: Call to undefined function __() SYSPATH/classes/Kohana/Kohana/Exception.php [ 53 ] It seems that I18n.php didn't load propperly. Update: One of my friend who is familiar with Kohana said, I need to give permissions to the application/cache/ and application/logs/ after that, the problem is solved. @freefcw Owner freefcw commented on 11 Aug 2014 yes, you should che the owner of the webdocs, chmod -R www-data:www-data DIR @skys215 skys215 commented on 11 Aug 2014 After asking a net-friend, he said that the judging system is not in this repository. This repository is just another web interface of the judging system. So I checkout the judge system which is in SVN, and did the sudo bash install/install-interactive.sh. This time, I can open the online judge, I can add problem, submit code and judge the code on localhost. But when I did the same thing on my vps, it seems that it can create the Problem-Id directory in the /home/judge/data, I don't know why. If I create the directory manualy, then the code could be accepted. @qhpeklh5959 qhpeklh5959 commented on 28 Oct 2014 I've configed the database and permission of the dictionary, but I get "出错了,请联系 freefcw#gmail". I wonder if I've made some mistake?? @freefcw Owner freefcw commented on 29 Oct 2014 please check the error log for the detail @qhpeklh5959 qhpeklh5959 commented on 29 Oct 2014 2014-10-29 09:03:05 --- DEBUG: #0 /var/www/hustoj/system/classes/Kohana/Request.php(986): Kohana_HTTP_Exception::factory(404, 'Unable to find ...', Array) #1 /var/www/hustoj/index.php(105): Kohana_Request->execute() #2 {main} in /var/www/hustoj/system/classes/Kohana/Request.php:98 How to fix it? @freefcw Owner freefcw commented on 29 Oct 2014 The imformation is hide the most important, please give me the whole log. Seems route set has some problem in route, did u installed in subdirectory? @jcf94 jcf94 commented on 26 Apr 2015 I think I get a same error like qhpeklh5959 do ..... Here is my log: 2015-04-26 16:20:42 --- EMERGENCY: HTTP_Exception_404 [ 404 ]: The requested URL hustoj was not found on this server. ~ SYSPATH/classes/Kohana/HTTP/Exception.php [ 19 ] in /var/www/html/hustoj/system/classes/Kohana/Request/Client/Internal.php:79 2015-04-26 16:20:42 --- DEBUG: #0 /var/www/html/hustoj/system/classes/Kohana/Request/Client/Internal.php(79): Kohana_HTTP_Exception::factory(404, 'The requested U...', Array) #1 /var/www/html/hustoj/system/classes/Kohana/Request/Client.php(114): Kohana_Request_Client_Internal->execute_request(Object(Request), Object(Response)) #2 /var/www/html/hustoj/system/classes/Kohana/Request.php(997): Kohana_Request_Client->execute(Object(Request)) #3 /var/www/html/hustoj/index.php(105): Kohana_Request->execute() #4 {main} in /var/www/html/hustoj/system/classes/Kohana/Request/Client/Internal.php:79 @Foxprodev Foxprodev commented on 21 May 2015 Same error. What should i do? @freefcw Owner freefcw commented on 24 May 2015 @xff252595680 @Foxprodev Please show me your nginx or apache site config file @Foxprodev Foxprodev commented on 25 May 2015 @freefcw Already fixed it, AllowOverride in this directory. But how to fix http://stackoverflow.com/questions/4624726/http-error-302-using-uploadify? In firefox, safari, os x browsers.
注意:
如果加了.htaccess文件出现500错误,有可能 没有开启rewrite模块
后来查到这是因为Php没有开启rewrite模块而无法重定向
启用 Mod_rewrite 模块:
sudo a2enmod rewrite
Admin
- open the site and register a user as the master admin.
- run the sql script
insert into privilege(user_id,rightstr) values('admin','administrator');
admin is the username of your registered