Configuración de PC² en Linux
Mas de una vez me han abordado pidiéndome que explique cual es el procedimiento para configurar Linux para que pc² (el software que se usa para los concursos de programación de la ACM) funcione. Hoy he decidido darles gusto a todos escribiendo esta guia.
¿Que incluye esta guía?
Esta guia explica como configurar el sistema operativo para que PC² funcione correctamente, la configuración básica para correr un concurso local (mas adelante la expandiré para incluir un concurso en varios sitios) y nociones básicas de como llevar a cabo un concurso.
No incluiré información sobre la instalación de Linux o java. En internet pueden encontrar fácilmente mucha información al respecto.
¿Que necesito?
Al menos dos equipos con Linux instalado (podría ser uno solo, pero 2 es lo recomendable para ver su correcto funcionamiento) con la máquina virtual de java de Sun (procuren que no sea la versión de gnu que solo soporta hasta java 1.4.2) y el PC² que pueden descargar aquí.
Configurando Linux
Configurar Linux para que PC² corra no es complicado, si sabes que hacer. De lo contrario puedes pasar un buen rato intentando descubrir que está pasando (y hablo por experiencia).
Solo debemos configurar dos cositas: el hostname (nombre del equipo) y el firewall.
Configurar el hostname no tiene mucha ciencia. En red hat o derivados (fedora, centos, etc) debemos modificar el archivo /etc/sysconfig/network. Ahí verán una linea que probablemente diga HOSTNAME=localhost o algo similar. Lo único que debemos hacer es cambiar el valor por la IP de nuestro equipo para obtener algo como:
HOSTNAME=10.50.51.52
Si no sabes la IP del equipo usa el comando /sbin/ifconfig. La ip aparece en el segundo renglón del dispositivo (casi siempre eth0) como:
inet addr:10.50.51.52
La configuración del firewall es todavía mas sencilla. Descactívalo. No me preguntes porqué PC² requiere estar en una DMZ para funcionar, sé que no es una gran idea pero así es.
Desactivar el firewall en Red Hat es sencillo. Haces clic en el menú Sistema/Administración/Firewall. Verás un botón rojo de gran tamaño que dice “desactivar”. También puedes hacerlo durante la instalación en el momento de preguntarte su configuración.
Ahora todo debería estar listo para recibir al huesped de honor.
Instalando y configurando PC²
Lo primero que vamos a hacer es asegurarnos de que tengamos java debidamente funcionando. Solo debemos invocar en una consola java -version. El resultado debería ser algo como:
java version “1.6.0_03″
Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)
Si el resultado en cambio es mas similar al siguiente la máquina virtual de Sun no está debidamente instalada:
java version “1.4.2″
gij (GNU libgcj) version 4.1.0
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Lo siguiente es descomprimir el PC², esto lo hacemos moviéndonos al directorio donde descargamos el PC² desde la consola y ejecutando:
tar -zxvf pc2v87.20071117.tar.gz
Ahora deberían tener un directorio llamado pc2. Ese directorio contiene todo lo necesario para correr PC² como cliente (equipos, jueces y scoreboards) y servidor.
Si descomprimieron el pc2 en algún lugar que no sea el directorio del usuario que usará el pc2 deberán cuidar los permisos. Pc2 necesita escribir en su directorio, así que si otro usuario va a usarlo, o lo instalaron en alguna ruta como /usr/local o similar deberán darle permisos de escritura a los usuarios que usarán Pc2. Yo recomiendo cambiar el grupo del directorio (y su contenido) a un grupo al que pertenezcan todos sus usuarios:
chgrp -R users /usr/local/pc2 (o la ruta que eligieron)
También deben asegurarse de que el usuario ejecute pc2team desde el directorio donde está. Si intentan ejecutarlo desde otro (como /usr/local/pc2/pc2team) fallará. Lo correcto sería hacer:
cd /usr/local/pc2
./pc2team
El archivo sitelist.ini es el primero que debemos verificar. Por defecto contiene 4 lineas. Debe haber una linea para cada lugar que este participando en un concurso (sites). Como de momento solo tenemos uno, solo es necesario una linea (aunque dejar las 4 no causa ningún problema).
Puedes dejar los sites que vienen por defecto o puedes nombrarlos como prefieras. Yo no me complicaré la vida y dejaré nuestro site con el nombre ‘Site 1′.
Una vez que hayamos puesto a nuestro site el nombre que queramos editaremos el archivo pc2v8.ini. Este archivo se usa para configurar tanto el cliente como el servidor. Cada sección puede diferenciarse fácilmente.
Cliente
La sección de cliente ([client]) no contiene mucha información. Probablemente se vea así:
[client]
debuglevel=13
consolelevel=5site=Site 1
server=localhost:50002
Las dos primeras opciones las dejaremos como están, son las otras dos las que nos importan. La primera, site, le dice al cliente en que site se encuentra. Cambia ‘Site 1′ por el nombre que hayas escogido para el site (recuerda, debe estar presente en el archivo sitelist.ini) a menos que este nombre sea ‘aqui’, en cuyo caso deberás escoger un mejor nombre (no es una restricción técnica, es solo que me caen mal la obviedades).
La segunda opción indica en donde encontrar al servidor. Cambia el valor por la IP del servidor.
Servidor
La segunda sección indica la configuración del servidor. Por defecto se ve así:
[server]
debuglevel=13
consolelevel=5site=Site 1
# remoteServer=remote_host_IP:50002
Como ya habrás adivinado, site indica al servidor PC² el site que está sirviendo. Este valor debe ser igual al que tiene configurado el cliente (Genio!). La opción remoteServer (comentada aquí) se usa en concursos con varios sites. Indica en donde encontrar al servidor maestro al cual se conectarán el resto de los servidores locales.
Una vez que hayas editado este archivo PC² está listo para ser usado.
Configurando un concurso
Lo primero que debemos hacer es encender el servidor. Para hacer esto en una consola nos colocamos en el directorio pc2 y ejecutamos ./pc2server. Nos preguntará si hay otro servidor encendido, a esto respondemos no ya que estamos configurando un concurso local. Si no hay ningún mensaje de error dejaremos esa consola corriendo.
Ahora ejecutaremos ./pc2admin, el usuario por defecto es root y la contraseña root. Una vez que inicies sesión verás algo como esto:
A continuación una pequeña descripción de para que sirve cada cosa:
Accounts- Manejo de cuentas. Aquí creas y modificas todas las cuentas de equipos, jueces y scoreboards.
Problems- Aquí se definen los problemas que se resolverán en el concurso.
Languages- Aquí defines los lenguajes que podrán usarse en el concurso (el servidor debe tener instalados los compiladores, claro).
Options- Opciones del concurso. No es necesario cambiar nada.
Sites- Aquí vemos que sites están participando y con que IP.
Time/Reset- Configuración de la duración del concurso. También arranca y detiene el mismo.
Team Status- Muestra la actividad que han tenido los equipos en el concurso.
Runs- Muestra todos los envíos de código hechos por los equipos. También permite ‘dar’ un run a un juez para que sea calificado de nuevo. (no aumenta el número de envios)
Clars- Muestra todas las preguntas enviadas por los equipos a los jueces.
Reports- Crea reportes del concurso.
Remote- Exporta información del concurso a otro servidor
Judgements- Muestra los posibles resultados que pueden darse a un run.
No mostraré como agregar cuentas o lenguajes. El procedimiento es bastante sencillo.
Definir los problemas en un poco mas complicado, pero no demasiado. Cuando damos clic en agregar problema obtenemos una ventana con dos pestañas: General y Validator.
En general ponemos la información general del problema. Normalmente los jueces proveerán archivos de entrada y salida para que PC² pruebe el código de los equipos. Selecciona el archivo indicado para cada parte y dale un nombre al problema. Si el problema lo amerita se puede restringir el tiempo máximo en que el programa debe ejecutarse.
La pestaña validator es bastante interesante. Permite comparar el resultado del programa enviado con el archivo entregado por los jueces y dar un judgement de forma automática. Sin embargo normalmente los jueces no usan esta opción.
Una vez que hayas configurado cuentas, lenguajes, tiempo y problemas estás listo para comenzar el concurso.
El cliente para equipos
Para arrancar el cliente para los equipos debes ejecutar ./pc2team desde el directorio de pc2.Cuando un equipo inicie sesión verá una pantalla así:
La interfaz es bastante sencilla. En la parte superior vemos cuando tiempo queda en el concurso. En submit podemos enviar runs a los jueces, en clarifications se envían preguntas, en runs vemos los runs que hemos enviado y settings nos permite cambiar el password.
Para enviar un run solo debemos escoger el problema y el lenguaje que se usó para programar. Después en ‘Main File’ se selecciona el archivo que enviaremos. Después podemos presionar test para probar nuestro programa o submit para enviarlo. Al enviarse los jueces los calificarán y el resultado aparecerá en runs.
Cliente para jueces
El cliente para jueces se ejecuta con ./pc2judge. Y la pantalla se ve así:
De nuevo las pestañas son bastante simples de entender y solo voy a describir brevemente que hace cada una.
Unjudged Runs- Runs nuevos que no han sido juzgados.
My judgmentes- Runs juzgados por el juez.
New Clars- Preguntas nuevas que no han sido respondidas
Answered Clars- Preguntas contestadas.
Settings- Cambiar password o activar calificaciones automáticas.
I’m Bored- Para entretener al juez un rato.
Tips
Hay muchos tips y consejos que quiero dar pero no quería complicar la guía, así que los pongo aquí:
- Elimina los archivos ./pc2server, ./pc2judge, ./pc2admin y ./pc2board de las computadoras de los equipos. No hay ninguna necesidad para que los tengan.
- Revisa que los archivos ejecutables tengan permisos de ejecución. Si no los tienen lo pones con chmod +x archivo.
- Recuerda cambiar la contraseña del administrador.
- Pide a los equipos y jueces que cambien su contraseña en cuanto inicien sesión.
- Si haces una prueba antes del concurso da clic en “Reset Site” en la pestaña de tiempo en la pantalla del administrador.
- Ejecuta en una computadora que esté en el mismo segmento de red que la LAN del concurso un analizador de protocolos (wireshark) para descubrir cualquier intento de fraude.
Espero que con esta guía y tips puedan llevar a cabo un concurso exitoso.
Happy coding!


