1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (3 votos, promedio: 5,00 de 5)
Cargando...

En esta entrada vamos a aprender como instalar un servidor Wow Classic con un emulador mangos en un equipo Debian y sus derivados. En las páginas más conocidas sobre emulación hay muchos manuales para instalar servidores en Windows, incluso hay muchos repacks creados de manera que solo hay que descargar y poner en marcha, pero para Linux hay menos información, y la poca que hay es casi toda para emuladores Trinitycore o derivados.

Ahora que está tanto de moda la versión Classic con la puesta online de esta versión por parte de Blizzard, vamos a ver como podemos ponerla nosotros en nuestros equipos. En este caso utilizaremos el emulador vmangos y la base de datos de brotalnia.

Índice de contenidos

Evidentemente esto es para uso personal. Poner un servidor de estas características a nivel público, puede acarrear problemas legales. Yo explico el procedimiento, de vosotros depende el uso que le podáis dar.

Lo primero que debemos tener en cuenta, es tener nuestro equipo actualizado. En mi caso utilizo un Debian Buster(10), por lo que recomiendo que tengas la última versión para no tener problemas de paquetes o dependencias.

Nunca uséis el usuario root. Siempre con un usuario sin rango y con el comando sudo delante.
Vamos a actualizar el equipo:

$ sudo apt update && sudo apt upgrade

Una vez actualizado el sistema operativo, empezaremos a instalar las dependencias para poder compilar el emulador. Damos por hecho que tienes instalada un servidor de bases de datos como mysql o mariadb, ya que es imprescindible para que funcione nuestro servidor.

En este post, explico como instalar y configurar mariadb correctamente.

Instalar compiladores y entornos de software

Instalamos lo esencial para poder compilar con la ayuda de sudo:

$ sudo apt install build-essential gcc g++ automake git-core git autoconf make patch libtool libssl-dev grep binutils zlibc libc6 libbz2-dev cmake subversion libboost-all-dev wget tmux p7zip-full tmux

Si tenemos el sistema actualizado, no tiene que darnos ningún error. Confirmamos que lo queremos instalar todo y listo.

Descargamos y compilamos ACE

Solamente en este momento debemos entrar con el usuario root, es un momento puntual, y al terminar de instalar ACE debemos volver a nuestro usuario común.
Para loguearnos como root tan solo escribiremos:

S su

Y a continuación escribiremos la contraseña que tiene este usuario. Una vez logueados con root, vamos a su directorio:

$ cd /root

Ya descargamos el archivo de ACE y luego lo descomprimimos:

wget http://download.dre.vanderbilt.edu/previous_versions/ACE-6.5.0.tar.gz && tar -zxvf ACE-6.5.0.tar.gz

Después de descomprimir, habrá una carpeta ACE llamada ACE_wrappers en el directorio /root. Podemos borrar el archivo que hemos descargado anteriormente para ir limpiando:

$ rm ACE-6.5.0.tar.gz

Ahora vamos a establecer las variables, para que cuando necesitemos acceder a ACE lo encuentre:

$ export ACE_ROOT=/root/ACE_wrappers
$ export LD_LIBRARY_PATH=$ACE_ROOT/lib:$LD_LIBRARY_PATH

Editamos el siguiente archivo (si no existe lo creamos):

nano $ACE_ROOT/ace/config.h

Y agregamos la siguiente línea:

$ #include "ace/config-linux.h"

Ahora si que creamos el siguiente archivo y agregamos lo necesario con la siguiente orden:

$ echo -e "include /root/ACE_wrappers/include/makeinclude/platform_linux.GNU \nINSTALL_PREFIX = /usr/local" > '/root/ACE_wrappers/include/makeinclude/platform_macros.GNU'

Finalmente ya podemos compilar ACE:

$ cd /root/ACE_wrappers && make && make install

En unos minutos, dependiendo de tu equipo ya tendrás ACE instalado. Después de tener todas las dependencias y software necesario, vamos a por el emulador.

Antes de que se nos olvide, volvemos al usuario común.

$ su - usuario

Descargamos el emulador y la base de datos

En mi caso, me gusta tener todos los repositorios unificados en una sola carpeta y los emuladores en otra, ya que trasteo con varios para hacer pruebas. Procedo a crear ambas carpetas en el home del usuario.

$ mkdir Repos Servers

Clonamos el repositorio Git de vmangos.

$ git clone https://github.com/vmangos/core.git $HOME/Repos/vmangos

Ahora clonamos la base de datos:

$ git clone https://github.com/brotalnia/database.git $HOME/Repos/brotalnia

Compilación del emulador

Ya tenemos descargado todo lo que necesitamos. Creamos la carpeta build:

$ mkdir $HOME/Repos/vmangos/build 

Antes de compilar, debemos hacer un ajuste para que no nos de errores. Necesitamos desactivar TBB antes de compilar

$ cd $HOME/Repos/vmangos
$ nano CMakeLists.txt

Asegúrese de cambiar el campo TBB a 1 como en la imagen a continuación.
También aprovechamos para activar el anticheat y los extractores.

Muestra de configuración del archivo CMakeLists.txt

Guardamos el archivo y ya podemos entrar a la carpeta build para compilar.

$ cd $HOME/Repos/vmangos/build 
Una vez dentro construimos y preparamos el paquete. En este caso yo uso las siguientes opciones:
- DCMAKE_INSTALL_PREFIX: Ruta donde instalo el emulador.
- DBUILD_EXTRACTORS: Le digo que compile los extractores.
- DPCH: Para compilar con el modo PCH (mucho más rápido después con las actualizaciones).
- DBUILD_PLAYERBOT: Para compilar con playerbots habilitados.
$ cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME/Servers/Classic -DBUILD_EXTRACTORS=ON -DPCH=ON -DBUILD_PLAYERBOT=ON

Nos aseguramos que no nos da ningún error:

Preparación correcta sin errores

Y finalmente ya podemos compilar con el comando:

$ make -j $(nproc) install

Tened paciencia, ya que depende del equipo puede demorar unos minutos. Bien es cierto que nos muestra el % y tenemos una pista de lo que va a tardar.

Al finalizar, debe salir una pantalla, mostrando que ha creado los archivos correctamente y no devuelve errores. Con esto ya hemos compilado el servidor. El siguiente paso son las bases de datos.

Creación de las bases de datos

Conectamos con nuestro servidor de bases de datos, donde:

  • Crearemos las bases de datos que necesitamos.
  • Crearemos un usuario exclusivo para trabajar con el emulador.
  • Daremos los permisos necesarios a ese usuario.
  • Inyectaremos los datos en las bases de datos.
  • Modificaremos unos registros necesarios.

Entramos con el siguiente comando y ponemos la contraseña cuando nos la pida:

$ sudo mysql -u root -p

Una vez dentro, nos muestra el prompt de mysql. Ya podemos crear las bases de datos. Entramos cada una de las líneas, de una en una:

CREATE DATABASE IF NOT EXISTS realmd DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATABASE IF NOT EXISTS characters DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATABASE IF NOT EXISTS mangos DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATABASE IF NOT EXISTS logs DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

Creamos un nuevo usuario y lo autorizamos. En la página del emulador utilizan un usuario llamado mangos, pero es recomendable cambiarlo, ya que si quieren hackear tu servidor, lo primero que probarán será los nombres más comunes. En este caso utilizaremos yogui y de contraseña password. ¡No olvides cambiarla!

Como antes, entramos las líneas de una en una:

create user yogui identified by 'password';
grant all on realmd.* to yogui@'localhost' identified by 'password' with grant option; 
grant all on characters.* to yogui@'localhost' identified by 'password' with grant option; 
grant all on mangos.* to yogui@'localhost' identified by 'password' with grant option; 
grant all on logs.* to yogui@'localhost' identified by 'password' with grant option;
FLUSH PRIVILEGES;

Finalmente salimos del servidor de base de datos con el comando:

exit

Instalación de las bases de datos

Ahora ya vamos a inyectar las bases de datos. Para ello, entramos al directorio donde descargamos el repositorio de brotalnia.

$ cd $HOME/Repos/brotalnia

Listamos los archivos que hay en el interior:

$ ls -l
Listado de bases de datos brotalnia

En este caso, la más reciente es la del octubre del 2019. Vamos a descomprimirla:

$ 7z e world_full_05_october_2019.7z

Nos aparece en el mismo directorio un archivo con el mismo nombre, pero con la extensión sql.
En mi caso es: world_full_05_october_2019.sql

Lo importamos con el comando (recuerda cambiar el nombre si aparece uno de más reciente):

$ mysql -u yogui -p classic_mangos < $HOME/Repos/brotalnia/world_full_05_october_2019.sql

Ahora vamos a importar el resto de las bases de datos. Entramos al directorio correspondiente de nuestro emulador descargado:

$ cd $HOME/Repos/vmangos/sql

Importaremos las otras tres bases de datos que nos faltan con los siguientes comandos, uno en cada línea:

$ mysql -u yogui -p realmd < logon.sql
$ mysql -u yogui -p logs < logs.sql
$ mysql -u yogui -p characters < characters.sql

Ya tenemos todas las bases de datos creadas y con datos introducidos. Solamente nos queda introducir todos los updates que haya disponibles hasta la fecha.
Entramos al directorio que están las actualizaciones, damos permisos de ejecución al script que creará los archivos únicos de update para cada base de datos, y por último ejecutamos el script.

$ cd migrations
$ chmod +x merge.sh
$ ./merge.sh

Ahora importaremos las actualizaciones, y ya tendremos las bases de datos al día:

$ mysql -u yogui -p realmd < logon_db_updates.sql
$ mysql -u yogui -p logs < logs_db_updates.sql
$ mysql -u yogui -p characters < characters_db_updates.sql
$ mysql -u yogui -p mangos < world_db_updates.sql

No siempre hay updates disponibles, sobre todo de las bases realmd y logs, por lo que al ejecutar el comando anterior de alguna de ellas, y si no hay updates te dará un mensaje como:

-bash: logs_db_updates.sql: No existe el fichero o el directorio

Para terminar con las bases de datos, solamente nos falta modificar un registro, que es para el servidor de autentificación. También voy a poner unos valores genéricos, que debes modificar a tu gusto:

  • name: Nombre de tu reino.
  • address: Tu dirección IP del equipo. Si te conectas al servidor desde internet, tu IP externa o nombre de dominio.
  • port: Puerto del reino. Si solo tienes un reino, dejar por defecto 8085
use realmd;
DELETE FROM realmlist WHERE id=1;
INSERT INTO realmlist (id, name, address, localAddress, localSubnetMask, port, icon, realmflags, timezone, allowedSecurityLevel) VALUES ('1', 'NombreServidor', 'TuDireccionIP', '127.0.0.1', '255.255.255.0', '8085', '1', '0', '1', '0');
exit;

Extracción de mapas y datos

Si quieres puedes descargarte los maps y dbc de este enlace, aunque lo recomendable es extraerlos tu mismo, ya que puede haber actualizaciones en los extractores y puede extraer contenidos que anteriormente no estaban.

Para extraer los datos, necesitas el cliente del juego. También lo puedes descargar de este enlace.

En mi caso tengo en mi carpeta de descargas mi cliente de Wow 1.12.1 en español. Lo que vamos a hacer, es copiar las herramientas de extracción a la carpeta del juego.

Primero vamos a la carpeta donde se ha creado el emulador:

$ cd $HOME/Servers/Classic/bin

Copiaremos los archivos, la sintaxis es:

cp mapextractor MoveMapGen vmap_assembler vmapextractor /CarpetaDelWow

En mi caso por poner el ejemplo:

$ cp mapextractor MoveMapGen vmap_assembler vmapextractor $HOME/Descargas/WoW_1.12.1_Classic_esES

Ahora ya podemos extraer los datos. Empezaremos con los maps y las dbc:

$ ./mapextractor

En unos pocos segundos terminará la extracción. Veremos que se han creado dos carpetas nuevas llamadas maps y dbc, estas junto a otras que ahora crearemos son las que necesitamos copiar en el emulador.

Vamos a extraer y crear los vmaps. Para estos debemos ejecutar varios comandos, uno tras otro a medida que termine:

$ ./vmapextractor
$ mkdir vmaps
$ ./vmap_assembler Buildings vmaps

Y por útltimo nos faltan los mmaps, que estos si van a demorar bastante tiempo. En equipos lentos puede tardar hasta 5 horas. Si tienes prisa por poner tu servidor en marcha, puedes usar los que enlazo al principio de este apartado aunque no te lo recomiendo.

$ mkdir mmaps
$ ./MoveMapGen

Una vez terminado, crearemos un par de carpetas que necesitaremos y luego moveremos las carpetas de datos en el lugar que deben estar.

$ mkdir $HOME/Servers/Classic/{data,logs}
$ mv maps vmaps mmaps dbc $HOME/Servers/Classic/data

Configuración de archivos

Hay dos archivos que debemos configurar para que funcione nuestro servidor. Recordad que debemos poner los datos que hemos ido introduciendo a medida que hemos avanzado. Los archivos son mangosd.conf y realmd.conf

Primero debemos crearlos, ya que están con otra extensión, para ello ejecutaremos:

$ cd $HOME/Servers/Classic/etc
$ cp mangosd.conf.dist mangosd.conf
$ cp realmd.conf.dist realmd.conf

Editamos el primer archivo, el de conexión de login al servidor. Empezaremos con realmd.conf:

$ nano realmd.conf

Donde cambiaremos las siguientes líneas introduciendo lo siguiente:

LoginDatabaseInfo = "127.0.0.1;3306;yogui;password;realmd"
LogsDir = "../logs"

Con este hemos terminado rápido, hay poca cosa a configurar. El siguiente archivo es muy extenso, deberías leer detenidamente todas las opciones e ir probando y configurando a tu gusto. Yo voy a poner los campos más comunes y necesarios para poder arrancar el servidor. Vamos a ejecutar:

$ nano mangosd.conf

Estos son algunos de los campos:

DataDir = "../data"
LogsDir = "../logs"
LoginDatabase.Info              = "127.0.0.1;3306;yogui;password;realmd"
WorldDatabase.Info              = "127.0.0.1;3306;yogui;password;mangos"
CharacterDatabase.Info          = "127.0.0.1;3306;yogui;password;characters"
LogsDatabase.Info               = "127.0.0.1;3306;yogui;password;logs"
WorldServerPort = 8085          # EN CASO DE HABER CANVIADO EL PUERTO EN LA BASE DE DATOS
MaxCoreStuckTime = 20
Motd = "Bievenidos a World of Warcraft."

Modificando estos capos ya puedes poner en marcha tu servidor.

Puesta en marcha del servidor

Para que podamos conectarnos a nuestro servidor debemos editar un archivo de cliente del juego.
Vamos a la carpeta principal del juego y buscamos el archivo realmlist.wtf, lo abrimos y borramos si hay algo escrito.

Hay que tener en cuenta como nos conectamos a nuestro servidor. Hay tres posiblilidades:

  1. El mismo equipo que aloja el servidor lo usaremos para jugar.
  2. El servidor está en la misma red interna.
  3. El servidor está alojado en un equipo externo a nuestra red.

En el caso 1º, pondremos en el realmlist.wtf:

set realmlist 127.0.0.1

En el caso 2º, debemos poner la dirección IP que tenga tu servidor. Lo mismo que pusiste en la configuración de la base de datos, en este apartado. Pongo una de ejemplo:

set realmlist 192.168.1.99

En el caso 3º, es pos si nos conectamos del exterior, en este caso debemos poner si tenemos un dominio como es mi caso, o la Ip externa del router. En este caso, también debes configurar el router para que te redireccione el trafico a tu servidor. Esto ya lo explicaremos en otra guía si es tu caso.

set realmlist logon.wowisland.es

Ahora ya lo tenemos todo. Procedemos a poner en marcha nuestro servidor.

Vamos a la carpeta bin de nuestro emulador con el comando:

$ cd $HOME/Servers/Classic/bin

Usaremos tmux para correr el servidor, así podemos tener los dos procesos que necesitamos en un solo terminal y podemos controlarlos en la misma ventana. A continuación una pequeña explicación de tmux:

tmux es un multiplexor de terminal para sistemas tipo unix, similar a GNU Screen o Byobu que permite dividir una consola en múltiples secciones o generar sesiones independientes en la misma terminal.​

Ejecutamos tmux:

$ tmux

Veremos que nos cambia un poco la apariencia de la terminal, primero pulsamos ctrl + b y luego pulsamos shift + 5

Si lo hemos hecho bien, la terminal se partirá en dos espacios de trabajo, como muestro a continuación:

Terminal dividido con tmux

Para cambiar de un espacio al otro, debemos pulsar ctrl + b y luego la letra o

Una vez preparados los dos espacios, procedemos a arrancar los dos procesos necesarios. Ejecutaremos una línea en cada espacio:

Ejecución del emulador

$ ./realmd
$ ./mangosd

Si quieres puedes prescindir de tmux y abrir 2 ventanas separadas de terminal, ejecutando cada comando en una ventana.
Debes comprobar después de unos segundos, que han arrancado los dos servidores sin ningún problema.

Solo nos queda crear un usuario y entrar a probar nuestro servidor.

Para crear usuarios y modificarlos, debemos ir al terminal que arrancamos el proceso mandosd. A continuación tienes los comandos necesarios:

account create [username] [password]  // Crear un usuario
account set gmlevel [username] [0 to 3] // Nivel usuario 0=jugador - 2=GM - 3=admin

Y aquí el resultado final!

Juego conectado a nuestro emulador

Actualización del servidor

Para terminar, vamos a ver como actualizamos el servidor. Como ya debes saber, es conveniente actualizarlo, ya que casi a diario aparecen actualizaciones por parte de los desarrolladores. Yo recomiendo actualizar por lo menos una vez al mes.

Lo primero que debemos hacer, es ir a la carpeta donde descargamos el repositorio del core:

$ cd $HOME/Repos/vmangos

Ejecutamos un comando para recuperar las novedades que se han incluido al código:

$ git pull origin development

Si nos aparece el siguiente mensaje, es que no hay nuevas actualizaciones, por lo que no es necesario hacer nada:

Desde https://github.com/vmangos/core
 * branch              development -> FETCH_HEAD
Ya está actualizado.

Si en cambio vemos cambios es que podemos compilar de nuevo:

$ cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME/Servers/Classic -DBUILD_EXTRACTORS=ON -DPCH=ON -DBUILD_PLAYERBOT=ON
$ make -j $(nproc) install

Ahora solamente queda hacer el proceso de los updates de la base de datos. Es pácticamente lo mismo que cuando las aplicamos en la nueva instalación:

$ cd $HOME/Repos/vmangos/sql/migrations
$ ./merge.sh
$ mysql -u yogui -p realmd < logon_db_updates.sql
$ mysql -u yogui -p logs < logs_db_updates.sql
$ mysql -u yogui -p characters < characters_db_updates.sql
$ mysql -u yogui -p mangos < world_db_updates.sql

Reiniciamos el servidor, y listo para funcionar de nuevo.

AutoRestarter

Una buena opción, es sustituir el multi-terminal tmux por este AutoRestarter que funciona con screen. Nos da la ventaja de poder conectar a la consola del servidor desde cualquier lugar y si por algún motivo cae el servidor, se encargará de reiniciarlo.

Dejo el enlace del manual de instalación y funcionamiento:


Enlaces relacionados:

Servidor WotLK en Linux

Descargas que incluyo en esta guía:

Cliente del juego versión 1.12.1 español

Datos maps, dbc, etc…

Fuentes:

https://github.com/brotalnia/database

https://github.com/vmangos/core

https://trinitycore.atlassian.net/wiki/spaces/tc/pages/10977340/Linux+Server+Setup

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *