zoukankan      html  css  js  c++  java
  • HUSTOJ(转发)

    来源:http://blog.csdn.net/xiajian2010/article/details/12954855

    缘起

    大四了,快毕业了,所以想准备点LAMP的知识和经验。刚好实验室里有人在搞Hustoj,于是我就搞了个下午。(6个月后)临近毕业了,还有一个多月,之前搞的Hustoj其实没有安装成功,当时也没在意,就没修改,后来看别人安装成功了,就请教并操作了一番,从而将博客补全。

    正文

    1. Hustoj简介

    HustOj是一个开源的的在线评测系统,其官方网站是http://code.google.com/p/hustoj/,更多详细介绍参考项目主页。

    主要开发人员的博客为:http://blog.csdn.net/zhblue/article/details/7259940

    2. Hustoj安装

    系统配置:Ubuntu 12.10 桌面版+HP的PC机(4GB内存,双核处理器)

    安装前必看READMEFAQ,README中的安装介绍的两种方法,一种是下载install安装包自动安装,一种是下载源代码手动配置安装。其实,自动安装比手动多了一个签出代码的过程。

    采用的自动安装,这里觉得REMDME中有点问题,就是自动安装的过程中并不会修改/etc/php5/apache2/php.ini文件,可能是我自己会错意了。

    上次安装的时候,使用官方提供的install安装包。下载包位置为下图中install.rxxx.tar.gz.

    使用ubuntu的归档文件软件解压或者使用命令行解压,当然也可使用命令行解压:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <span style="font-size:18px;">tar zxf install.r2119.tar.gz  
    2. cd install</span>  

    这次再次安装采用的是官方提供的更加简单的方法:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <span style="font-size:18px;">svn checkout http://hustoj.googlecode.com/svn/trunk/install hustoj  
    2. cd hustoj</span>  

    此时,编辑其中的install文件,修改如下两个关于数据库的设置:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <span style="font-size:18px;">DBUSER=root #数据库用户名  
    2. DBPASS=root #数据库密码</span>  

    将涉及yum命令的第18,19行注释调,这里是为了方便RedHat用户使用而设置的命令。

    然后,运行/install.sh 或 ./install-interactive.sh,不要以root权限运行,这样会使签出的hustoj-read-only的用户权限为root,从而不太方便编辑。

    签出的hustoj-read-only的目录如下:

    • android/ 不知有何用处
    • core/ hustoj的核心部分
    • install/ 安装文件目录
    • .svn/ 版本库的文件
    • web/ 该目录和WEBBASE变量中JudgeOnline文件相同,但调整了一下结构。

    安装完成后,可以发现看到系统中多了一个用户judge,然而此时,这个用户是不能够使用的,需要设置起密码,命令:sudo passwd judge。

    此时,如果在浏览器中输入http://localhost/JudgeOnline/,可以看到如下的错误:

    Could not connect: Access denied for user 'root'@'localhost' (using password: NO)

    查看FAQ知道,这是数据库没有设置好。

    cd /var/ww/JudgeOnline/include

    编辑db_info.inc.php文件中,将如下的数据库的账号设置为真实可用的账号。

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <span style="font-size:18px;">static  $DB_USER="root";  
    2. static  $DB_PASS="root";</span>  

    此外,查看并编辑judge用户主目录下的etc文件夹下的judge.conf文件,修改其中的数据库配置:

    [plain] view plaincopy在CODE上查看代码片派生到我的代码片
     
    1. <span style="font-size:18px;">OJ_USER_NAME=root  #数据库用户名   
    2. OJ_PASSWORD=root  #数据库密码</span>  

    注:可以看到Hostoj数据库用户和密码的命名比较混乱,三个文件三个叫法。

    修改上述文件后,可以打开hostoj的网站了:

    创建管理员 

    insert into privilege(user_id,rightstr) values('zhblue','administrator');

    zhblue 为需要加管理员权限的帐号

    这里,使用的phpadmin执行sql语句,非常的方便。

    普通登录后访问http://127.0.0.1/JudgeOnline/admin,界面如下:

    首先,单击FreeProblemSet从而下载一些问题集,其次导入问题集,这里使用一个简单的A+B的问题作为测试。

    在查看问题状态时,看到如下的界面:

    查看了官方的FAQ说是本地编译器安装的问题,要安装glibc-static,自己下载了源码包没有能安装的上,心想,算了,以后再说吧。下面介绍一下Glibc。

    3.Glibc

    3.1包含的程序

    catchsegv, gencat, getconf, getent, glibcbug, iconv, iconvconfig, ldconfig, ldd, lddlibc4, locale, localedef, mtrace, nscd, nscd_nischeck, pcprofiledump, pt_chown, rpcgen, rpcinfo, sln, sprof, tzselect, xtrace, zdump 和 zic

    具体说明

    catchsegv当程序发生segmentation fault的时候, 用来建立一个堆栈跟踪(a stack trace)

    gencat

    建立消息目录

    getconf

    针对文件系统的指定变量显示其系统设置值

    getent

    从系统管理数据库获取一个条目

    glibcbug

    建立一个对glibc的bug报告并且email到bug报告的邮件地址

    iconv

    转化字符设置.

    iconvconfig

    建立对iconv模块的快速读取设置文件

    ldconfig

    设置对动态链接库的实时绑定, 这个命令非常有用,在安装了新的库之后要运行这个命令来在系统中登记这个新库,否则装了也是白装.

    ldd

    列出每个程序或者命令需要的共享库

    lddlibc4

    辅助add操作object目标文件.

    locale

    是一个perl程序, 可以叫编译器对内嵌操作是否开启POSIX locales.

    localedef

    编译locale的设置.

    mtrace

    列印从源到其接收者的多点路径.

    nscd

    提供对通用名称调用的缓存的守护进程

    nscd_nischeck

    检查在对NIS+侦查的时候是否需要安全模式

    pcprofiledump

    打印PC profiling产生的信息

    pt_chown

    根据主虚拟终端给出的文件文件描述符'3'设置对子虚拟终端的所有者,组及存取权限. 帮助grantpt的运行. 不能直接从命令行运行.

    rpcgen

    生成执行RPC协议的C代码

    rpcinfo

    对RPC服务器产生一个RPC呼叫.

    sln

    是从目标文件到源的静态字符联接. 在动态链接不起作用的时候sln可以建立对库的静态联接.

    sprof

    读取并显示共享目标的特征描述数据

    tzselect

    对用户提出关于当前位置的问题,并输出时区信息到标准输出.

    xtrace

    通过打印当前执行的函数跟踪程序执行情况

    zdump

    显示时区.

    zic

    时区编译器.

    3.2 包含的库文件

    ld.so, libBrokenLocale.[a,so], libBrokenLocale_p.a, libSegFault.so, libanl.[a,so], libanl_p.a, libbsd-compat.a, libc.[a,so], libc_nonshared.a, libc_p.a, libcrypt.[a,so], libcrypt_p.a, libdl.[a,so], libdl_p.a, libg.a, libieee.a, libm.[a,so], libm_p.a, libmcheck.a, libmemusage.so, libnsl.a, libnsl_p.a, libnss_compat.so, libnss_dns.so, libnss_files.so, libnss_hesiod.so, libnss_nis.so, libnss_nisplus.so, libpcprofile.so, libpthread.[a,so], libpthread_p.a, libresolv.[a,so], libresolv_p.a, librpcsvc.a, librpcsvc_p.a, librt.[a,so], librt_p.a, libthread_db.so, libutil.[a,so] and libutil_p.a

    具体说明

    ld.so

    帮助动态链接库的执行.

    libBrokenLocale, libBrokenLocale_p

    帮助程序处理破损locale, 如:mozilla

    libSegFault

    处理segmentation fault信号. 会试图找出segmentation fault

    libanl, libanl_p

    异步名称查询库.

    libbsd-compat

    为了执行一些linux程序,libbsd-compat提供了必要的可移植性.

    libc, libc_nonshared, libc_p

    这些C库是一些程序通用的函数集。这样就可以保证程序员不用为了他的每一个单独的任务重复写相同的函数。最常见的情况是象向屏幕输出一个字符串的程序已经可以由程序员随意调用了。

    C 库(事实上几乎每个库)都有两种格式:动态的和静态的。简而言之,当程序调用静态的C库时,C库中的代码会拷贝到执行文件中。当程序使用动态C库时,可执 行文件不会包含C库中的代码。而是在程序运行时动态加载不要的库函数。这就意味着可以明显地减小程序文件的大小。C库中包含的文档描述得更详细些,在这里 只用一两行去明确地解释这些复杂知识是不现实的。

    libcrypt, libcrypt_p

    有关加密编码

    libdl, libdl_p

    动态联接界面.

    libg

    g++运行需要的库.

    libieee

    IEEE动态指针库.

    libm, libm_p

    数学函数库.

    libmcheck

    包括了起动时需要运行的代码.

    libmemusage

    帮助memusage搜集程序内存使用的信息

    libnsl, libnsl_p

    网络服务库.

    libnss_compat, libnss_dns, libnss_files, libnss_hesiod, libnss_nis, libnss_nisplus

    在不同的模块中加入存取数据库的不同的服务,有如下的好处:

    添加新服务而不用改动GNU C库,

    这些模块可以单独升级

    C库会比较小.

    libpcprofile

    帮助内核跟踪在函数, 源码行和命令中CPU使用时间

    libpthread, libpthread_p

    POSIX线程库

    libresolv, libresolv_p

    创建,发送及解释到互联网域名服务器的数据包.

    librpcsvc, librpcsvc_p

    提供RPC的其他服务.

    librt, librt_p

    提供了大部分的POSIX.1b实时扩展的给定界面

    libthread_db

    对建立多线程程序的调试很有用

    libutil, libutil_p

    包含了在很多不同的Unix程序中使用的"标准"函数.

    4. 一些问题

    执行脚本install.sh时,遇到一个问题yum没有安装,yum(全称为Yellow dog Updater, Modified),在百科和wikipedia中都有介绍。yum和rpm的关系与apt 和dpkg的关系类似,都是包管理软件,yum主要由SUSE和RedHat使用,apt主要在Ubuntu和Debian中用的比较多,其功能相似。安装了yum后,发现isntall.sh脚本中依然会出现:No package php available,我想大概是在Ubuntu系统中没有配置Yum的软件源的问题。

    后记

    怕麻烦而没有自己动手去配置Hustoj,不是优点的说。6个月后,再一次看Hustoj的界面丑死了,尤其是那个后台管理,不符合我的美学观点。

    改以前写的博客,感觉以前好菜啊。

    参考资料

    1.Hustoj的官方网站:http://code.google.com/p/hustoj/

    2.http://blog.sina.com.cn/s/blog_4f3b79d0010107o2.html

    3.Glibc:http://docs.huihoo.com/lfs/lfs-4.0/chapter06/glibc.html 

  • 相关阅读:
    你的面向对象技术在哪个级别?
    图解面向对象中的聚合与耦合概念
    系统架构39问
    谈谈对一些软件架构设计箴言的理解
    mysql 常用见的错误处理
    mysql 局域网连接
    mysql版本:'for the right syntax to use near 'identified by 'password' with grant option'
    Ubuntu系统开放指定端口
    spring cloud 项目
    spring cloud 知识总结
  • 原文地址:https://www.cnblogs.com/xuesen1995/p/4338882.html
Copyright © 2011-2022 走看看