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

  1. <span style="font-size:18px;">tar zxf install.r2119.tar.gz
  2. cd install</span>

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

[plain] view plaincopy

  1. <span style="font-size:18px;">svn checkout http://hustoj.googlecode.com/svn/trunk/install hustoj
  2. cd hustoj</span>

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

[plain] view plaincopy

  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

  1. <span style="font-size:18px;">static  $DB_USER="root";
  2. static  $DB_PASS="root";</span>

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

[plain] view plaincopy

  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

时间: 2024-11-13 10:12:36

HUSTOJ(转发)的相关文章

windows下使用密钥登录Linux及xshell代理转发

1.密钥登录原理 一般我们使用xshell访问远程主机(Linux主机)时,都是先请管理员给我们开一个账户,即为我们设置一个一个用户名和对应的密码,然后我们就可以使用下面的方式登录到远程主机了: 在这种情况下,我们使用的是上面密码登录,也就是说只要知道你这个账号及密码的人都可以在任何地方登录到远程主机,因此安全性较低. 使用密钥登录则不同,他使用的是上图中的public key方式登录,这种方式涉及到一个加密算法RSA,这个算法先生成一个密钥对(公钥和私钥), 我们提供自己的公钥给远程主机,在登

分组转发算法

1)从数据报的首部提取目的主机的IP地址D,得出目的网络地址N(子网掩码和IP地址做与运算可得出网络地址). 2)若N就是于此路由器直接相连的某个网络地址,则进行直接交付,不需要在经过其他路由器,直接把数据报交付给目的主机(这里包括把目的IP地址D转换为具体的MAC地址(ARP协议),把数据报封装成MAC帧,在发送此帧):否则就是间接交付. 3)若路由表中有目的地址为D的特定主机路由,则把数据报传送给路由表中所指明的下一跳路由器. 4)若路由表中有达到网络N的路由,则把数据报传送给路由表中所指明

iptables端口转发

1. 确定forward开启 # cat /proc/sys/net/ipv4/ip_forward1 2. 转发进来的包 iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp -m tcp --dport 16922 -j DNAT --to-destination 192.168.0.169:22 这表示将目的地为111.111.111.111:16922的包发往 192.168.0.169:22 3. 设置回路 iptables -

重定向和转发

转发:request.getRequestDispatcher("success.jsp").forward(request,response); 在服务器组件收到用户请求后.经过它的处理后有传递给了另一个组件.不修改用户的请求码.各组件处理完之后在返回给用户,例如主页面的框架. 用户请求----->服务器------->组件1------->组件2------->服务器------->用户 (请求不变) <a">重定向:respon

划分子网 子网分组转发算法

1.从两级IP地址到三级IP地址现在随着因特网的普及和技术的发展,早期ARPANET的设计之缺陷显露无疑:(1)IP地址空间的利用率有时会很低:一个A类IP地址网络可连接超过1000万台主机,而每个B类IP地址网络可连接超过6万台.可是有些网络对连接在网络上的主机数有限制,甚至远小于这样的数量.(2)给每个物理网络分配一个网络号会使路由表变得庞大臃肿,降低网络性能.(3)两级IP地址不够灵活:只能在申请完IP地址后才能进行下一步工作,而无法按自己的需求变更.为了解决这个问题,从1985年起,在I

JAVAWEB开发之Session的追踪创建和销毁、JSP详解(指令,标签,内置对象,动作即转发和包含)、JavaBean及内省技术以及EL表达式获取内容的使用

Session的追踪技术 已知Session是利用cookie机制的服务器端技术,当客户端第一次访问资源时 如果调用request.getSession() 就会在服务器端创建一个由浏览器独享的session空间,并分配一个唯一且名称为JSESSIONID的cookie发送到浏览器端,如果浏览器没有禁用cookie的话,当浏览器再次访问项目中的Servlet程序时会将JSESSIONID带着,这时JSESSIONID就像唯一的一把钥匙  开启服务器端对应的session空间,进而获取到sessi

新浪微博客户端(25)-添加转发微博

DJStatusCell.m /* 转发微博部分 */ /** 转发微博整体 */ @property (nonatomic,weak) UIView *retweetView; /** 转发微博内容 */ @property (nonatomic,weak) UILabel *retweetContentLabel; /** 转发微博图片 */ @property (nonatomic,weak) UIImageView *retweetPhotoView; #pragma mark - 转发

Web---HTTP请求、重定向、转发和数据压缩

HTTP常用的请求方式包括: GET-最为常见,但发送的数据量很小,发送的数据直接包含到url的后面. POST-可以包含大量数据,数据在请求正文中通过表单进行提交. HEAD,PUT,DELETE. 后面三种Tomcat服务器默认都不支持.常用的只有前两种. GET: 发送到服务器的数据出现在URL的后面.最多不能超过1K.如: http://localhost:8080/index.jsp?name=itcast&sex=man&.. POST: 发送到服务器的数据会出现有请求的正文部

lcx转发 【解决内网没法链接3389 的问题】

要求我自己在外网 然后监听1111端口,将1111端口数据流量转发至2222端口 被入侵主机上 将本地的2222端[愿3389 主机修改了远程连接的端口]口流量转发至外网ip的1111端口 2222为以前的3389 成功之后要求 mstsc    127.0.0.1:2222 [实际情况定] 会有点缓冲