LiveCD版HUSTOJ迁移至Ubuntu 15.04试验

(前方高能坑预警:请将正式使用的OJ部署在Ubuntu12.04或14.04上,部署在15.04之后可能会遇到非常多奇怪的问题)

        我们用于比赛和刷题的OJ是用LiveCD版的HUSTOJ搭建的,一开始用着觉得没啥问题,但是在后来的使用过程中发现了很多问题(比如说最头疼的就是gcc一升级就没法开机…),最后不得已决定之后将OJ迁移到一台真正的Ubuntu机器上去。于是乎这个任务就交给我这个菜鸟来执行了,过程还是比较顺利(无脑)的,感谢HUSTOJ,感谢zhblue老师。

        百度上能找到一篇非常不错的文章Ubuntu下安装hustoj的步骤,看这篇文章基本上就完全能在Ubuntu上搭起Hustoj了,下面的步骤大多都与那篇文章作者描述相同。

以下简述搭建步骤:

一、前期准备(给同是菜鸟的人看的)

        1. 一台装有Ubuntu系统的机器或一台装有的Ubuntu系统的虚拟机(一般VBox或VMWare)

        2. 会最基本的linux操作,比如打开终端(Ctrl+Alt+T)等

        3. 会最基本的linux命令(大概知道sudo是管理员权限执行操作,需要在图形界面获取复制粘贴和删除权限要在终端输入sudo nautilus等最基础的指令就行了)

二、安装基础环境

        1. 在安装基础环境前先确认你没有执行其它的更新操作,否则可能会报获取不到锁等错误

        2. 打开终端,可以先输入 sudo su 获取root权限以避免之后还要反复地输入sudo(输入完sudo su后会让你输密码,该密码是安装时设定的用户密码,也是Ubuntu里该用户的登录密码,如果是第一次执行该操作,还有可能会再让你设置root密码,以下假设在没有获取root权限下进行操作)

        3. 安装文本编辑器gedit:这个一般会自带,如果没有的话可输入 sudo apt-get install gedit 进行安装

        3. 安装mysql:sudo apt-get install mysql-server mysql-client -y 安装过程中会提示输入mysql里root账号的密码…别把这个密码忘记了….

        4. 安装apache2:sudo apt-get install apache2 -y 需要注意下Ubuntu的配置文件是apache2.conf,在/etc/apache2/目录下,而不是windows的httpd.conf。另外,用以上方式安装,Ubuntu14.04之后的版本和12.04版的DocumentRoot是不同的,12.04是 /var/www/ 而14.04和15.04是 /var/www/html/

        5. 在firefox上输入localhost并回车,如果能显示出一个apache2的网页,上面写着“It works”,那说明安装成功了(Ubuntu12.04用以上方式安装的后localhost显示的页面不一定和下图相同

        6. 安装PHP:sudo apt-get install php5 libapache2-mod-php5 -y

        7. 检测PHP有没安装成功:sudo gedit,打开gedit并输入<?php phpinfo();?> 然后将文件保存在/var/www/html/目录下(Ubuntu12.04则在/var/www/ 目录下),最后在浏览器中输入localhost/info.php 若显示出php信息页面,则安装成功

三、安装HUSTOJ

        1. 先确认网络能否访问github 若不能,翻墙吧….

        2. 安装前先更新源:sudo apt-get update

        3. 安装svn:sudo apt-get install subversion -y

        4. 从github上获取代码:sudo svn co https://github.com/zhblue/hustoj/trunk/trunk/install hustoj

        5. 打开代码保存目录:cd ~/hustoj

        6. 安装:sudo bash install-interactive.sh -y 安装过程中需要输入mysql用户名和密码,用户名直接用root,密码为刚才安装mysql时设置的密码(对于Ubuntu 12.04 还需要先在/var/www/ 目录下创建一个html目录,因为该语句默认将网页代码放到 /var/www/html/ 目录下,如果代码没获取成功,有可能是网络问题,可以再执行一次试试

        7. 打开http://127.0.0.1/JudgeOnline看是否能正常访问页面

        8. 此时的OJ时没有一个用户的,如果要将此OJ作为一个全新独立的OJ(即不导入原OJ数据)使用,需要先注册一个用户(如果直接从原OJ导入,则忽略此步),先点击OJ右上角的“注册”,注册一个用户名为admin,密码为123456的用户(密码长度需要大于等于6位),然后打开终端,输入 mysql -uroot -p 进入数据库,再输入 use jol 选择jol数据库,最后输入insert into privilege(user_id, rightstr) values (‘admin’, ‘administrator’); 将用户名为admin的账户设置为管理员(administrator)权限,最后重新登录下admin,右上角就会多出个“管理”字样了

        9. 代码位置迁移以及修改服务器根目录(此处以迁移至www目录为例,若不想迁移可忽略此步):如果还在mysql界面,先输入exit退出mysql,然后再终端界面输入 sudo nautilus 打开文件管理器,进入/var/www/html/ 找到JudgeOnline文件夹,将其剪切至/var/www/ 目录。打开目录 /etc/apache2/sites-enabled/ 找到 000-default.conf 文件并打开,并找到DocumentRoot这一行,将目录改为 /var/www/JudgeOnline/ 修改完后保存并关闭文件,顺便把终端也给关闭了。

最后重新打开终端,输入 sudo /etc/init.d/apache2 restart 重启apache服务器,再次在浏览器上输入localhost即可进入OJ

四、文件迁移

        1. 从原OJ中导出数据库(后面的~/jol.sql可自己选一个目录,~/jol.sql表示导出到该用户的根目录的,文件名为jol.sql):mysqldump -uroot -p jol > ~/jol.sql

导出的过程中可能会报“The user specified as a definer (‘zhblue’@’%’) does not exist when using LOCK TABLE” 错误,原因是有个叫squid的视图的定义者是zhblue,要么把这个视图的定义者修改成root,要么给root授予所有权限

给root授予所有权限(最后双引号里的xxx是你的root密码):grant all privileges on *.* to root@”%” identified by “xxx”;

刷新一下:flush privileges;

再执行 mysqldump -uroot -p jol > ~/jol.sql 就可以看到/home/username/ 目录下有个jol.sql文件了(这里的username是你Ubuntu用户对应的名字)

        2. 复制jol.sql文件到新的机器上,登录mysql:mysql -uroot -p  登录后输入:use jol 选择jol数据库,然后用指令source route/jol.sql 导入sql文件(其中route为对应的路径名)

        3. 将原OJ中/home/中的judge文件夹复制,并拷入新OJ的/home/中(若新旧OJ数据库密码不一致,还需要再修改/home/judge/etc/judge.conf中的数据库密码),复制粘贴过程建议使用sudo nautilus。另外,因为测试数据全在judge/data目录中,如果忘记复制judge目录,可能导致判题时一直处于“运行并评判”状态

        4. 如果对前台代码进行过改动的,将原OJ的前台代码(即JudgeOnline文件夹中的代码)也复制过去

        5. 如果是旧版本的hustoj,数据库结构可能与最新版不一致,最好先将hustoj更新到最新版,更新方法可以见张老师的博客升级HUSTOJ

        6. 提交下A+B试试 如果一直在“等待”,说明judged没启动,可先重启Ubuntu试试。一般一直在“等待”中都是judged没启动导致的,可输入ps -A | grep judged 查看是否启动,若有字样,则说明已启动,若无,可输入sudo judged启动

到此为止,基本大功告成了!

此条目发表在OJ维护日记, 其它技术分类目录。将固定链接加入收藏夹。

发表评论