Category Archives: ai games

Instalación del servidor AI Challenge 2011 en una instancia de AWS

Seguiremos las instrucciones que el usuario “pixel8r” dejó en el foro oficial de la competición. Hemos podido comprobar que faltan algunas instrucciones que son importantes, sobre todo cuando se producen errores en la instalación (algo muy habitual) y hay que empezar de nuevo. En estos casos, hemos añadido ordenes que eliminan todos los usuarios y borran el directorio de instalación de chroot. Una cuestión importante es que este servidor utiliza virtualización ligera a través de schroot. Podemos encontrar más información sobre schroot en este enlace.

Es importante destacar que en el momento en el que se escribe este post no hemos conseguido que el servidor comienza a jugar partidas. En el hilo “Duplicating the aichallenge website locally” del  foro oficial de la competición se comenta que es necesario modificar dos ficheros (ver paso 18) y disponer de unos 20 usuarios con sus bots compilados y preparados para competir. Cualquier ayuda al respecto será bienvenida!

Ahora comenzaremos con los pasos seguidos para la instalación del servidor.

1. Lanzar una instancia en AWS utilizando las imágenes preconfiguradas de Ubuntu.
https://uec-images.ubuntu.com/releases/natty/release/
Elegir la opción “ebs”

eu-west-1
64-bit
ebs
Launch ami-7914170d
ec2-run-instances ami-7914170d -t t1.micro --region eu-west-1 --key ${EC2_KEYPAIR_EU_WEST_1}

2. Modificar los repositorios para incluir aquellos que permiten instalar paquetes de versiones anteriores de Ubuntu.
editar el fichero /etc/apt/sources.list dejar solo las siguientes lineas

deb http://old-releases.ubuntu.com/ubuntu/ natty main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ natty main restricted
deb http://old-releases.ubuntu.com/ubuntu/ natty-updates main restricted
deb-src http://old-releases.ubuntu.com/ubuntu/ natty-updates main restricted
deb http://old-releases.ubuntu.com/ubuntu/ natty universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu/ natty universe multiverse
deb http://old-releases.ubuntu.com/ubuntu natty-security main restricted
deb-src http://old-releases.ubuntu.com/ubuntu natty-security main restricted

3. Actualizar apt-get

apt-get update

4. Instalar git

apt-get install git

5. Crear usuario contest

sudo useradd -d /home/contest -m -s /bin/bash contest
passwd contest

El password será contest

6. Convertir al usuario contest en administrador
Ejecutar

sudo visudo

y añadir la siguiente linea al final de fichero

contest ALL=(ALL) ALL

7. Editar el fichero /etc/hosts
Añadiremos las siguientes lineas. sustituiremos <ip> por la IP asignada por AWS.

127.0.0.1 ec2-<ip>.eu-west-1.compute.amazonaws.com
127.0.0.1 aichallenge

8. Cambiar el nombre del host a aichallenge

sudo hostname aichallenge

9. Clonar el repositorio git de aichallenge

sudo su - contest
git clone https://github.com/aichallenge/aichallenge.git

9. Añadir módulos y actualizaciones

cd aichallenge
git submodule init
git submodule update

10. Eliminar lenguajes de programación no necesarios

Algunos lenguajes de programación no se instalan correctamente (por ejemplo Ruby) . Si no
necesita los lenguajes de programación adicionales, elimine todos lo que aparece en el fichero setup/retrieve_languages.py en la linea “sources=” y entre “[" y "]“. Deje aquellas lineas que necesite realmente.

editar el fichero setup/retrieve_languages.py
y eliminar todas las lineas que hay dentro de sources = []

11. Configuración el servidor

Ejecutaremos lo siguiente y responderemos a las preguntas como se indica.

su - contest
cd ~/aichallenge
sudo python setup/server_setup.py

Are you sure you want to continue? yes
- Only install system packages? no
- Contest username [contest] – push ENTER to accept default
- Database root password? – Leave blank
- Confirm database root password? – leave blank
- Contest database username [contest] – push ENTER
- Contest database password: contest
- Confirm contest database password: contest
- Name of contest database [aichallenge] – push ENTER
- accept defaults for root dir, source repo, uploads, maps & replays
- hostname is whatever you set above ec2-<ip>.eu-west-1.compute.amazonaws.com
- Make contest site the default website? yes
- Run setup as configured above? yes

12. Probar que el servidor está funcionando

en un navegador escribir el nombre del servidor

http://ec2-<ip>.eu-west-1.compute.amazonaws.com

Si todo funciona debe aparecer la página principal de la competición.

Instalación del WORKER
Los workers (podemos ejecutar más de uno) se encargan de compilar los bots y comprobar que el resultado de la compilación ha sido correcta. Si hubiese algún error en la compilación, este se muestra en el panel del usuario.

13. Editar el fichero de configuración

Editar el fichero setup/worker_setup.py

aquí también debemos eliminar aquellos lenguajes de programación que no necesitemos del método “install_extra_distribution_languages()” y comentar aquellas lineas que no necesitemos del “install_” del método “install_extra_distribution_languages().

En el método “install_extra_distribution_languages():” además, hemos editado la lista pkg_list dejando solo ["perl"]. También eliminaremos las lineas siguientes que provocan un error en la instalación de Ruby.

install_apt_packages(pkg_list)
if not os.path.exists(“/usr/bin/ruby”):
os.symlink(“/usr/bin/ruby1.9.1″, “/usr/bin/ruby”)

En el método “install_basic_languages()” eliminaremos de la lista pkg_list “python3-dev”, quedando de esta forma:
pkg_list = ["gcc", "g++", "openjdk-6-jdk", "python-dev", "python-numpy", "python-scipy"]

Como se indica anteriormente eliminaremos las lineas siguientes:
install_clojure(download_base)
install_dart(download_base)
install_dmd(download_base)
install_golang(download_base)
install_groovy(download_base)
install_nodejs(download_base)
install_coffeescript(download_base) # must come after nodejs
install_pypy(download_base)
install_racket(download_base)
install_scala(download_base)

NOTA: Editar las variables “src_url” y “os_url” sustituyendo sus valores por estos:

“src_url”: “http://old-releases.ubuntu.com/ubuntu/”,
“os_url”: “http://old-releases.ubuntu.com/ubuntu/”,

Esto soluciona uno de los errores comentados en el foro oficial de Ai Challenge Ants 2011.

14. Lanzar el Worker

Para lanzar el worker ejecutaremos:
curl http://ec2-<ip>.eu-west-1.compute.amazonaws.com/api_server_setup.php?|sh

Esta operación tarda varios minutos y es aquí dónde se crea el entorno virtual para la ejecución de los bots. Es posible que se produzca algún fallo en esta fase, principalmente porque elegimos un lenguaje de programación que requiere de algún paquete no disponible. Tenga en cuenta que estamos intentando instalar un sistema operativo del año 2011 y que es muy posible que ciertos paquetes no estén disponibles en la misma ubicaciones. Dependiendo del momento en el que se produzca el error es posible que tengamos que eliminar los usuarios jailuser necesarios para la ejecución protegida de los bots.

deluser jailuser1;deluser jailuser2;deluser jailuser3;deluser jailuser4;deluser jailuser5;deluser jailuser6;deluser jailuser7;deluser jailuser8;deluser jailuser9;deluser jailuser10;deluser jailuser11;deluser jailuser12;deluser jailuser13;deluser jailuser14;deluser jailuser15;deluser jailuser16;deluser jailuser17;deluser jailuser18;deluser jailuser19;deluser jailuser20;deluser jailuser21;deluser jailuser22;deluser jailuser23;deluser jailuser24;deluser jailuser25;deluser jailuser26;deluser jailuser27;deluser jailuser28;deluser jailuser29;deluser jailuser30;deluser jailuser31;deluser jailuser32

También debemos borrar el directorio en el que se crea el espacio virtual

rm -fr /vsr

Después de realizar estas dos operaciones, podemos volver a lanzar el worker.

AJUSTES FINALES

15. Instalar phpMyAdmin
Instalaremos phpMyAdmin versión 3.4.3.2 (la versión del 2011, las más modernas fallan con ubuntu 11.04)

http://sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/3.4.3.2/

16. Editamos el fichero /etc/apache2/

vi /etc/apache2/sites-available/ec2-<ip>.eu-west-1.compute.amazonaws.com

Añadimos las siguientes lineas a partir de la linea 52

Alias /phpmyadmmin /home/contest/phpmyadmin
<Directory /home/contest/phpmyadmin>
Options Indexes FollowSymLinks MultiViews
AddEncoding x-gzip .replaygz
AddType application/json .replay .replaygz
AllowOverride None
Order allow,deny
Allow from all
</Directory>

ejecutamos

/etc/init.d/apache2 restart

y volvemos a ejecutar el worker

sudo -u contest /home/contest/aichallenge/worker/start_worker.sh

Accedemos a phpMyAdmin

http://ec2-<ip>.eu-west-1.compute.amazonaws.com/phpmyadmin

con el usuario contest y el password contest

17. Instalar los mapas

En la dirección http://ants.aichallenge.org/using_the_tools.php copiamos la dirección del enlaces http://ants.aichallenge.org/tools.tar.bz2

y descargamos en el servidor el fichero

wget http://ants.aichallenge.org/tools.tar.bz2

Descomprimimos el fichero

bzip2 -d tools.tar.bz2
tar xvf tools.tar

copiamos el directorio tools a /home/contest y cambiamos los permisos

chown -R contest:contest tools/

Copiamos las carpetas maze, multi_hill_maze, and random_walk folders to ~/maps

cp -r tools/maps/maze/ maps/.
cp -r tools/maps/multi_hill_maze/ maps/.
cp -r tools/maps/random_walk maps/.
cd ~/aichallenge/manager
./add_maps_to_database.py

18. Modificar los ficheros sql/2_generate_matchup.sql
y sql/opponent.sql

NOTA: Los números de lineas que aquí se indican no coinciden con las que aparecen en las instrucciones del foro. Las últimas modificaciones del repositorio de Ai Challenge Ants en Github son de febrero de 2012, sin embargo las instrucciones del foro son de octubre de 2011 por lo que suponemos que posteriores modificaciones en estas líneas provoca esta variación en las numeraciones. Hemos realizado prueba con y sin las modificaciones.

Modificar la linea 169 del fichero 2_generate_matchup.sql y
cambiar la linea select min(g.game_count) por select avg(g.game_count) * 1.1 + 1
guardar y salir.

mysql -u contest -p -D aichallenge < 2_generate_matchup.sql

a continuación modificar la linea 205 del fichero opponent.sql

cambiar la linea select min(g.game_count) por select avg(g.game_count) * 1.1 + 1
guardar y salir

mysql -u contest -p -D aichallenge < opponent.sql

19. Ejecutar update_visualizer

cd ~/aichallenge/setup
sudo ./update_visualizer.sh

http://ec2-<ip>.eu-west-1.compute.amazonaws.com/api_get_task.php?api_key=490c55f4e6002cab90695cdc688f8c64

Si todo funcionó correctamente, debemos poder ver como cada vez que se añade un nuevo código, el worker lo compilará mostrando posibles errores.