ACM-ICPC现场赛管理员配置指南---华东理工大学上海邀请赛总结
0. 说点什么呢
其实所有机器其实都很稳定,人品有多差才会让一个机器崩溃呢,不过重要机器备份还是要做,毕竟比赛重大。Ubuntu镜像下载地址http://mirrors.163.com/ubuntu-releases/12.04.5/(服务器下64位server版,其它机器下32位desktop版),下载之后用win32diskimager制作U盘启动盘。(之后可以用大白菜将U盘还原)
1. 服务器搭建
这次比赛我们有一台服务器,一台备用服务器。服务器装的是Ubuntu 14.04LTS server版,服务器的安装是十分简单的,并且不需要给服务器联网安装其他软件。就比赛而言,只需要用U盘导入一个5M多的pc2的压缩包就行了。我们这次用的是pc2-9.2.4 。它的一个安全问题给判题系统带来了一点点小小的麻烦。不过,只要裁判稍加注意就行了。服务器版默认安装了java python等软件,但是没用安装gcc,不过没有关系,要让服务器联网是有一些麻烦的,因为大家在学校一般需要校园网认证,客户端认证时相当麻烦的,如果是网页验证需要学校给一个认证脚本。起初我想离线安装w3m文本浏览器来完成网页认证,不过它的安装是依赖gcc的,我又去离线安装gcc,问题在于它依赖低版本的c编译器。然后我就无语了,后来发现完全没有必要这么折腾。
总之,服务器安装好Ubtuntu 14.04 LTS之后用U盘导入pc2-9.2.4 .tar.gz(压缩包中有)解压出来就可以了。细节:插入U盘之后,可以用mount -t -vfat /dev/sdb1 /mnt 将U盘挂载到/mnt下(如果只插入一个U盘一般在/dev/sdb1中,多个的话可能在/dev/sdc1等目录下,插入U盘前后调用cat /proc/partitions来查看此U盘的路径),特别注意/mnt文件夹下是不允许解压的,即使使用root权限也不行。将/mnt 文件夹下的pc2*.tar.gz复制到别的目录下,例如当前用户的目录下(
cp pc2*.tar.gz ~/ )然后进入~/目录,使用tar -zxvf pc2*.tar.gz 解压文件。十分简单。当然,要增量备份来完成该服务器向备用服务器的数据copy。当服务器崩溃是,马上转换服务器(服务器一般都很稳定的,上辈子做什么孽才可能搞崩服务器呢,另外如果断电了服务器也会比客户端多撑几秒,总之,服务器十分稳定,不过备份工作还是要做的)最后,客户端必须跟服务器在一个局域网内才能连上服务器,一般大家在学校可以连校园网的网线,DHCP分配IP,不过这样服务器关机了后IP可能会变,有一点麻烦。比赛现场搭环境之前肯定需要约定好服务器IP,打印服务器IP,榜单IP。以及所有客户端的IP的设置规则。因为比赛一般是200个队伍,所以C类网络就够用来。子网掩码可以设置成255.255.255.0
2. 客户端搭建(以下内容默认有图形界面)
客户端安装,首先我们不可能每台机器都装一次Ubuntu
一般学校机房都是有装万欣恢复卡的。版本不同操作也不同,如何用万欣恢复卡装系统,以及如何系统备份,如何系统还原,如何发射,这些可以问本校计算中心的老师。在此之前,可以先在自己电脑上装Ubuntu来学习pc2软件。
装ubuntu最好选择LTS版,而且最好装去年或者前年的,我们这次选择的是Ubuntu 14.04 LTS(2015年final也是装的这个版本),客户端当然装的是desktop了,一般学校机房内存4g,所以装64位的。
安装还是很简单的,但是恢复卡安装Ubuntu可能有些不一样,最好在计算中心的指导下安装。安装系统之后就开始设置网络(网上资料都比较齐全),在线安装软件了。以下针对Ubuntu 14.04 LTS来讲:
desktop默认安装了gcc和python
安装其它软件前使用sudo apt-get update更新源
完成后用sudo apt-get upgrade更新依赖库,之后就可以安装软件了。
用sudo apt-get intall g++ 安装g++
openjdk-7-jdk,vim-gtk安装类似。
安装完编译器之后就开始安装编译器了,codeblocks,Eclipse可以直接在ubuntu软件中心中安装,Eclipse版本会很低(不过无所谓,安装时记得勾选cdt就行了,因为部分队伍喜欢用Eclipse写c,c++)。ubuntu软件中心安装的netbeans安装会导致无法使用,可以在官网安装稳定且最新的版本,安装十分简单,但是最好前面加sudo命令安装,这样安装的目录就不是在home文件夹下,而是在/etc等文件夹下。默认安装netbeans是不会在桌面显示图标的。可以到/usr/shar/applications中找到netbeans图标。将其拖到桌面或者启动栏。在pc2官网下载与服务器版本一致的pc2。大体客户端的软件安装就告一段落来。
3.pc2配置(约定pc2为pc2文件夹所在目录)
[服务器]
解压pc2后进入pc2文件夹,你可以看到pc2v9.ini文件,如果是单服务器,该服务器可以不用改这个文件,但是客户端必须改这个文件。另外为了方便,最好将pc2v9.ini文件copy到bin文件夹中。进入bin文件夹,根据服务器内存修改pc2server xms xmx(xms默认是64M,xmx默认是6400M,为了使用更好的服务器性能,可以将xms设置成服务器内存的1/16,xmx设置成1/2) 运行./pc2server --nogui --login site1 --password site1
--contestpassword 123456打开pc2服务器
服务器就开启了,其实./pc2server就可以开启服务器,但是考虑到服务器一般都是没有图形界面的,因此就只能使用上述命令了,其中site1 site1是服务器默认的账号密码,123456是用户设置的密码,主要用于服务器关闭再次进入需要的密码以及,压缩包解压的密码。
至此服务器的配置就完成了。
[客户端]
进入pc2下面的bin文件夹可以看到很多文件,其中pc2admin是管理员端,pc2judge是裁判端,pc2team是服务器端。这三个端全都是客户端,只是功能不一样而已。进入pc2将pc2v9.ini文件修改中localhost改成服务器的IP。将pc2v9.ini文件复制到bin文件夹下,运行./pc2admin 进入登陆界面(请保证服务器开启)。账号密码默认为 root administrator1,比赛前别忘了修改root密码。这时你就可以产生账号了,例如10个judge,200个team,2个scoreboard。此后team和judge就可以登陆了。默认账号密码是一致的,例如team1,team1
judge1,judge1,scoreboard1,scoreboard1。要正式配置比赛,需要配置语言(使用默认的C,C++,java就可以了)。设置语言,等等一系列的操作,作为管理员当然要详细的看完pc2的官方文档,在pc2/doc就能看到文档。这里就说一些比较麻烦的地方:
1.有些题目需要配置special judge(文档有写),一定要按照文档的说法来,错一个字符都无法使得机器自动判题。
2.打印服务,打印服务是有ccpc做的,默认账号admin密码ccpc2015cn。(使用是十分方便的)
3.榜单,在pc2/bin/html下会默认生成一些榜,可以使用summary.html作为队伍们可以看到的榜。在/pc2/bin/html文件下调用python -m SimpleHTTPServer 8000(大于6000就行,随意),其它地方用火狐输入榜单ip:8000/summary.html就可以看到榜了。
4.为了方便队伍端使用,可以用写c编译放在桌面,方便队伍使用pc2以及打印,看榜服务。
说一下IP设置,可以让前20个ip分给服务器和裁判机器。当然裁判机器可以看作与队伍机器等价。这样前10个ip流出来就够了。比如10.0.0.10给管理员(最好把榜单和管理员放在一台机器上,这样做很方便,并且不要让管理员判题,防止崩溃)。9给服务器,8给备用服务器,7给打印机,至少要有两台机器配有打印机程序,用只要用一台就可以了。2-6留用(1是网关,255是广播)。11-254可以分给裁判(如果是手动设置IP11-20就分给裁判比较好)和客户端。
说一下打印机,大家可以买3-5台hp打印机,ubuntu是默认有hp打印程序。将打印机插上,在打印服务器(任何Ubuntu desktop的电脑都行)可以用dpkg- l hplip查看打印程序内核,用hp-setup安装打印机。
安装好之后在设置中点打印机,add中有两个选项,其中一个就是class,设置一下就行了,并将这个class设为默认打印机。利用lp filename看是否可以打印,可以连接几次这个命令看多打印机协同工作是否正常。(这只是完成了离线打印)下面介绍一下网络打印。ccpc提供了该网络打印的程序。见网址:
在打印服务器上安装网络打印的程序。运行相应命令。完成之后,由管理员创建相应账号(账号密码最好跟pc2的队伍账号密码一致,并且加一个测试打印的账号例如team999)其它机器只需输入打印服务器的网址加端口号就可以了。操作十分简单不多说了。
如果约定了打印服务器的ip,榜单ip那么队伍机器的设置就可以完成了,就可以进行机器的发射工作了。至于打印和榜单服务器的配置以及pc2服务器的配置都与队伍机器独立。一般队伍端桌面有三个程序:打印,榜,pc2
这些程序都可以用c来写(见附录)
现在的工作就是管理员如何配置打印服务器,榜单显示,还有气球提示功能了。
讲讲pc2本身用法吧。
pc2服务器开启后,pc2admin就应该设置 账号,语言,题目,题目对应的气球以及气球设置,比赛名设置,裁判可以看到的信息设置,默认回复设置,auto judge设置。设置好之后可以点time中的start ALL button
比赛开始后,基本管理员和裁判前10分钟会比较闲,之后就开始忙碌了,注意每一个autojudge至少要保证一个没崩溃,不然就有些麻烦了,记得1小时前封榜(只关一个榜,管气球的榜不要关了。)。最后的10分钟超级忙碌,不过也不要慌乱,判题有延迟也无所谓的,只要不判错就ok。判完题后可以开启关闭的榜,进行更新榜单。至于滚榜这一点,我们没有做,实际上ccpc也做了这个程序,只是当时木有拿来。(很感谢周专家的帮忙和几位学长的帮忙)。
写的比较乱,区域赛再好好总结吧,http://pan.baidu.com/s/1pJHrp2r 可查看相应文件