MaNGOS : Compiler sous Linux

Il y a quelques années, j'avais installé un serveur WoW privé (Mangos) pour "le fun" et apprendre comment faire. Mon premier essais s'est fait sous Windows; maintenant, je veux faire un serveur sous Linux (Debian).

Pourquoi Linux, car le serveur est bien plus léger que sa version Windows (surtout si on est sur une version CLI), et surtout maintenant, je me sens assez à l'aise dans cet univers (Debian) pour tenter l'expérience.

Pré-requis

Volontairement je ne parle pas de la version "MoP", car il s'agit de la version d'exploitation de WoW et que j'estime que B. doit être rémunérer pour son travail, et ensuite car les patches ne sont pas fixées

Vous avez besoin de:

  • Un client WOW compatible avec la version du serveur choisie (1.12.2 pour la version classique "vanilla", 2.4.3 pour la version "burning crusade", 3.3.5a pour la version Warth of the lich king, 4.3.4 pour la version cataclysm) installé sur votre PC.
  • Un client ssh (putty) et scp (winscp) sur le PC.
  • Un serveur Debian 7.1 sur une VM (connectée au réseaux local en mode "Bridged"), je lui ai fixé une IP compatible avec mon PC et completement mise à jour.

Installation du serveur

Une fois installé, toutes les commandes se feront via un ssh.

Mise a jour et Installation des compilateurs

Sous le compte root:

apt-get update
apt-get upgrade
apt-get install mysql-server
apt-get -y install gcc g++ automake autoconf screen make libmysql++-dev libtool libssl-dev subversion patch zlibc libc6 git git-core pkg-config
apt-get -y install cmake cmake-qt-gui git libace-ssl-dev libace-dev libbz2-dev libmysql++-dev libmysqlclient-dev libssl-dev
apt-get -y install mysql-client mysql-common mysql-server zlib1g-dev vim autoconf libtool screen bash

Optenir les sources et compiler les sources

Préparation de l'environnement

Je vous conseille de créer un dossier dans votre session (ou mieux dans la session de l'utilisateur qui fera tourner vos services), dans cet exemple j'utiliserais toujours l'utilisateur mangos.

Suivant la version que vous désirez émuler, je vous conseille de créer le dossier "source" en suivant cette logique, j'ajouterais aussi le dossier "cible" où les scripts installeront le serveur:

  • mangoszero: Wow "Classic" client version 1.12.2
  • mangosone: wow "Burning Crusage" client version 2.4.3
  • mangostwo: wow "Warth of The Lich King" client version 3.3.5a
  • mangostree: wow "Cataclysm" client version 4.3.4
mkdir servers
chdir servers
mkdir mangosxxxx
chdir ..
mkdir sources
chdir sources
mkdir mangosxxxx
chdir mangosxxxx

Cela devrait donner quelque chose comme ceci

/home/mangos/sources/mangostwo
/home/mangos/servers/mangostwo

Récupération des sources

Nous allons récuperer les sources, database et surtout les scripts depuis le github:

git clone https://github.com/mangosxxxx/server server
git clone https://github.com/mangosxxxx/database database
chdir server/src/bindings/
git clone https://github.com/mangosxxxx/scripts scripts

Editez bien le fichier CMakeLists pour retirer le commentaire de la ligne suivante(afin d'ajouter le dossier lors de la compilation).

Ce fichier sera explorer durant notre compilation initiale pour définir quelles dossiers doivent être compilés.

# add_subdirectory(scripts)

Dans le dossier "sources/server", creez un dossier build (qui va recevoir les fichiers intercompilés)

mkdir build
chdir build

Cela devrait donner quelque chose comme ceci:

/home/mangos/sources/mangostwo
/home/mangos/sources/mangostwo/server
/home/mangos/sources/mangostwo/server/build
/home/mangos/sources/mangostwo/server/src/bindings/scripts
/home/mangos/sources/mangostwo/databases
/home/mangos/servers/mangostwo

Si vous deviez mettre a jour l'une de vos copies:

Allez dans le dossier a mettre a jour, et tapez simplement:

git pull
Je conseil d'ajouter quelques dépendances:
git pull --recurse-submodules
git submodule init
git submodule update

Je vous conseille aussi de bien réfléchir où vous désirez installer votre serveur, personnellement le dossier sera /home/mangos/servers/mangostwo.

Compilation

La compliation est extremement simple, mais longue... vérifiez bien que vous êtes dans le dossier "build".

cmake .. -DCMAKE_INSTALL_PREFIX=/home/mangos/servers/mangostwo
make
make install

Si vous avez plusieurs core, vous pouvez le préciser dans la/les commande(s) make : make -j # ainsi si vous avez 4 coeurs:

make -j 4

Ces opérations VONT prendre beaucoup de temps (suivant votre puissance de PC) donc nous allons préparer la suite.

Préparation des cartes

Je vais copier les cartes de Wow sur le serveur, afin de pouvoir les intégrer, à terme, au serveur.

je copie le répertoire data de mon installation wow dans le dossier source de la version qui m'intéresse;

/home/mangos/sources/mangostwo/data

Là aussi suivant votre PC, cela prendra du temps, je vous sugère de vous faire un bon café...

Extraction des données du jeu

j'aurais besoin de quatres logiciels pour extraires les données du client:

  • ad sert a extraire les fichiers DBC et les cartes du jeu.
  • vmap_extractor sert a extraire les données modèles des fichiers clients.
  • vmap_assembler crée des fichiers "vmap" adapté aux besoins de MaNGOS.
  • MoveMapGen crée une carte de movement des monstres pour qu'ils ne traversent pas les murs, objets etc... ce n'est pas une étape obligatoire, mais c'est toujours mieux (cela devrait aussi empecher le glissement des cadavres sur le sol).

ACE

Afin d'éviter une erreur lors de la compilation de certaines parties, il faut dire au Warppers ACE que vous fonctionnez sous Linux.

Si vous ommettez cette étape vous aurez un message d'erreur lors de la compilation de vmap_assembler:

In file included from /../../dep/ACE_wrappers/ace/config-lite.h:24:0,
                 from /../../dep/ACE_wrappers/ace/Basic_Types.h:46,
                 from /../../src/framework/Platform/Define.h:24,
                 from /server/src/game/vmap/BIH.h:26,
                 from /server/src/game/vmap/BIH.cpp:19:
/../../dep/ACE_wrappers/ace/config-macros.h:28:26: fatal error: ace/config.h: No such file or directory
compilation terminated.
make[2]: *** [CMakeFiles/vmap.dir/home/mangos/mangos1/server/src/game/vmap/BIH.cpp.o] Error 1
make[1]: *** [CMakeFiles/vmap.dir/all] Error 2
make: *** [all] Error 2

Pour éviter ce problème, c'est très simple, vous devez créer un fichier "config.h" dans le dossier ad-doc:

server/dep/ACE_wrappers/ace/

Simplement collez-y ceci:

#include "config-linux.h"

libmpq

là aussi je vais compiler tout ce que j'ai besoin, mais avant tout, je vais compiler ma librairie libmpq (je pense que vous pouvez ignorez cette épate pour "cataclysm")

cd /home/mangos/sources/mangostwo/server/dep/libmpq
./autogen.sh
./configure
make

ad

je vais compiler ce logiciel, puis le copier dans le dossier mangostwo

cd /home/mangos/sources/mangostwo/server/contrib/extractor
cmake .
make
cp ad /home/mangos/sources/mangostwo/

vmapextractor

je vais compiler ce logiciel, puis le copier dans le dossier mangostwo

cd /home/mangos/sources/mangostwo/server/contrib/vmap_extractor
cmake .
make
cp vmapextract/vmapextractor /home/mangos/sources/mangostwo/

vmap_assembler

je vais compiler ce logiciel, puis le copier dans le dossier mangostwo

cd /home/mangos/sources/mangostwo/server/contrib/vmap_assembler
cmake .
make
cp vmap_assembler /home/mangos/sources/mangostwo/

MoveMapGen

Ce programme permet de créer les vmap (en gros cela permet [en théorie] aux PNJs de ne pas passer au travers des murs, ou dans le sol) a condition d'activer le paramêtre dans le fichier ini.

je vais compiler ce logiciel, puis le copier dans le dossier mangostwo

cd /home/mangos/sources/mangostwo/server/contrib/mmap/
cmake .
make
cp MoveMapGen /home/mangos/sources/mangostwo/
cp /home/mangos/sources/mangostwo/server/contrib/extractor_binary/MoveMapGen.sh /home/mangos/sources/mangostwo/
cp /home/mangos/sources/mangostwo/server/contrib/extractor_binary/offmesh.txt /home/mangos/sources/mangostwo/

Executer l'extraction des cartes

Là aussi il n'y a rien d'extraordinaire a faire...

cd /home/mangos/sources/mangostwo/

Sur mon labo, je n'ai pas du ajouter l'attribut execute, mais si besoin, voici la marche a suivre:

chmod +x ad
chmod +x vmapextractor
chmod +x vmap_assembler
chmod +x MoveMapGen

si tout est près:

./ad
./vmapextractor
mkdir vmaps
./vmap_assembler Buildings vmaps

Si l'on désire utiliser les cartes de mouvements, il faudra aussi executer le script suivant et allez faire un (long) tour:

sh ./MoveMapGen.sh 1

Importation dans le serveur

Il ne reste plus qu'a copier le résultat de toutes ces extractions dans le dossier serveur:

mkdir /home/mangos/sources/mangostwo/server/data
cp dbc -R /home/mangos/sources/mangostwo/server/data
cp maps -R /home/mangos/sources/mangostwo/server/data
cp vmaps -R /home/mangos/sources/mangostwo/server/data