miércoles, 4 de junio de 2014

Instalar Domjudge en Debian


DOMJUDGE


En primero lugar necesitamos al menos dos equipos, uno sera el DOMSERVER, y otro el JUDGEHOST. En primer lugar configuraremos el DOMSERVER.

Instalamos paquetes necesarios.

apt-get install gcc g++ make libcurl4-gnutls-dev mysql-server apache2 php5 php5-cli libapache2-mod-php5 php5-mysql php-geshi ntp sudo procps sharutils phpmyadmin xsltproc libboost-regex-dev libgmp3-dev linuxdoc-tools transfig texlive-latex-extra textlive-fonts-recommended gcj-doc openjdk-6-jre-headless openjdk-6-jdk ghc fp-compiler

##En la instalacion nos pedira contraseñas para mysql y phpmyadmin.

Cambiamos el hostname de nuestra maquina para diferenciarlas
nano /etc/hostname
DOMSERVER

Creamos un usuario DOMJUDGE

Descargamos paquete domjudge de su pagina oficial
Una vez descargado nos situamos en el directorio de descarga y descomprimimos.
tar -xczf domjudge.tar.gz

Entramos en el directorio que se descomprime
cd domjudge

Instalamos el DOMSERVER en el directorio que queramos, yo lo instalare en /usr/local/domjudge
./configure -prefix = /usr/local/domjudge
make domserver
make install-domserver

Entramos en el directorio donde instalamos el DOMSERVER.
cd /usr/local/domjudge
./dj-setup-database -u root -r install
(introducir contraseña de root en mysql)

Una vez hecho esto podemos entrar.
mysql -u root -p
exit;

Editamos el fichero de mysql, cambiamos las siguientes lineas
nano /etc/mysql/my.cfg
bind-address 192.168.1.1 (Direccion IP DOMSERVER)
max_connections = 1000
max_allow_packet = 128M


Reiniciams servicio mysql
service mysql restart


Vemos si mysql escucha por todos los puertos (*)
netstat -tlpn

Volvemos a entrar en mysql, y ejecutamos las siguientes sentencias
mysql -u root -p

grant all privileges on *.* to 'domjudge'@'192.168.1.1' IDENTIFIED BY “domjudge”
grant all privileges on *.* to 'domjudge'@'192.168.1.2' IDENTIFIED BY “domjudge”
grant all privileges on *.* to 'root'@'192.168.1.1' IDENTIFIED BY “toor01”
grant all privileges on *.* to 'root'@'192.168.1.2' IDENTIFIED BY “toor01”


Salimos y establecemos la siguiente ruta
iptables -A INPUT -i interfaz salida -s 'IPjudgehost' -ptcp - -destination-port 3306 -j ACCEPT
iptables -A INPUT -i eth1 -s '192.168.1.2' -ptcp - -destination-port 3306 -j ACCEPT

Reiniciamos mysql
Service mysql restart

En este paso, debemos tener el segundo equipo preparado en la misma red que el DOMSERVER, unicamente, debemos tener instalados los mismos paquetes que en DOMSERVER.
Desde JUDGEHOST probaremos el acceso remoto a mysql. Una vez hecho volveremos al DOMSERVER
mysql -u root -h 192.168.1.1 -p



En el directorio donde instalamos de DOMSERVER hay un archivo de configuracion de apache que sustituiremos por el que esta usando.
cp /usr/local/domjudge/domserver/etc/apache.conf /etc/apache2/sites-available/domjudge.conf

Lo editamos y añadimos
NameVirtualHost domjudge.com (sera la direccion por la que accederemos atraves del navegador)
<Virtual Host *>
Server Name domjudge.com
DocumentRoot /usr/local/domjudge/domserver/www
</Virtual Host>

Activamos sitio
a2ensite domjudge.conf

Reiniciamos servidor apache
service apache2 restart

Haremos una prueba en Local, y remota del entorno grafico
-Local (desde DOMSERVER)
Prueba a poner en la barra del navegador...
domjudge.com/public
domjudge.com/team
domjudge.com/jury


-Remota (desde JUDGEHOST)
Prueba a poner en la barra del navegador...
http://192.168.1.1/domjudge.com/public

**Si nos da algun fallo haciendo esta operación, podemos solucionar el problema editando el fichero dbpassword.secret y cambiamos el usuario domjudge por root y su contraseña, hecho esto podremos acceder**


Creacion de Jueces

Nos situamos en el siguiente directorio
cd /usr/local/domjudge/domserver/etc

Cambiamos la contraseña del adminitrador total domjudge_ jury
htpasswd htpasswd-jury domjudge_jury

Creamos un juez normal
htpasswd thpasswd-jury (nombre que queramos)


JUDGEHOST

Nos situamos en el segundo equipo, el JUDGEHOST. Este equipo tendra instalados los mismo paquetes que el DOMSERVER. creamos un usuario JUEZ, que ejecutara el demonio. Con el paquete del domjudge descargado, lo descomprimimos e instalamos
./configure prefix = /usr/local/domjudge
make judgehost
make install-judgehost

Cambiamos el hostname de nuestra maquina para diferenciarlas
nano /etc/hostname
DOMJUDGE

Como root...
useradd -d /noexistent -g group -s /bin/false domjudge-run
dj-make-chroot /usr/local/var/lib/domjudge/chroot i386

esperar....


Editamos el siguiente fichero, y modificamos las lineas.
nano /usr/local/domjudge/judgehost/etc/judgehost-config.php

('CHROOT_SCRIPT', '') por ('CHROOT_SCRIPT', 'chroot-startstop.sh')

Editamos el siguiente fichero y cambiamos las lineas
/usr/local/domjudge/judgehost/etc/chroot-startstop.sh
CHROOTORIGINAL=”/usr/local/domjudge/judgehost/chroot”



visudo
añadimos
juez ALL= (root) NOPASSWD: /bin/mount -n -t proc - -bind /proc proc
juez ALL= (root) NOPASSWD: /bin/umount /*/proc
juez ALL= (root) NOPASSWD: /bin/mount - -bind /usr/local/var/lib/domjudge/chroot/*
juez ALL= (root) NOPASSWD: /bin/umount /usr/local/var/lib/domjudge/judgings/*

Editamos /etc/mysql/my.cfg
buscamos max_allowed_packet y ponemos 128M


Instalamos el servicio ssh en ambas maquinas y copiamos las contraseñas de un equipo a otro
scp domjudge@192.168.1.1: /usr/local/etc/domjudge/dbpasswords.secret /usr/local/etc/domjudge

El demonio que ejecutaremos se llama JUDGEDAEMON, cambiaremos su propietario
chwon juez /usr/local/bin/judgedaemon
chwon 600 /usr/local/etc/domjudge/dbpassword.secret
chwon juez /usr/local/etc/domjudge/dbpassword.secret

Probamos a entrar con el usuario juez
su juez

Editamos el fichero y cambiamos la IP por la de DOMSERVER
nano dbpasword.secret

Ejecutamos el demonio
judgedaemon

En el DOMSERVER, entramos como juez, y veremos como en el menu judgehost, se unio un nuevo judgehost.

Servidor PXE en Ubuntu 16.04

Escenario. Es un entorno para arrancar e instalar el SO a través de la red.  PXE, (Preboot eXecution Enviroment) La idea es que las máqui...