Créer son serveur World Of Warcraft privé (Avec Ascent/Linux) Rev.2!

mai 18th, 2008
|

Voila, la révision 2 du tutoriel « Créer son serveur World Of Warcraft privé (Avec Ascent/Linux) » est enfin arrivé ! Pour cela j’ai tout repris a zéro, avec l’expérience que j’ai acquise dans le domaine de l’émulation j’espère pouvoir vous proposer un article complet et pas trop foireux, mais avant tout accessible a tous… Allez sans plus attendre, on attaque.

# -> Loggué en tant que root.
$ -> Loggué en tant qu’utilisateur (wowsvr, ici)

  • Mysql

  • Si vous n’avez pas déj� installé Mysql sur votre serveur:

    1
    # apt-get install mysql

    Puis on se connecte sur ce serveur:

    1
    # mysql -uroot -p

    La, on va créer un utilisateur ascent, une base de son nom et les 3 tables puis lui alouer les droits dessus:

    1
    2
    3
    4
    5
    6
    7
    8
    > CREATE USER 'ascent'@'localhost' IDENTIFIED BY 'MotDePasseAscent'; (DeF4Vv%e31E)
    > GRANT USAGE ON *.* TO 'ascent'@'localhost' IDENTIFIED BY 'MotDePasseAscent';
    > create database world;
    > create database logon;
    > create database characters;
    > GRANT ALL PRIVILEGES ON `world` . * TO 'ascent'@'localhost';
    > GRANT ALL PRIVILEGES ON `logon` . * TO 'ascent'@'localhost';
    > GRANT ALL PRIVILEGES ON `characters` . * TO 'ascent'@'localhost';

    On recharge les privilèges et on quitte:

    1
    2
    > FLUSH PRIVILEGES;
    > quit
  • Compilation du Core

  • Tout d’abord, installons les outils dont on aura besoin par la suite:

    1
    # apt-get install subversion libmysql++-dev libssl-dev libtool gcc automake g++ autoconf build-essential openssl libtool libpcre3-dev unrar

    Puis ajoutons l’utilisateur qui fera ‘tourner’ le serveur:

    1
    2
    3
    # adduser wowsvr
    # su wowsvr
    $ cd

    Rapatrions les derniers fichiers de Ascent sur notre machine:

    1
    2
    $ svn co http://mmoforge.org/svn/ascent/
    $ cd ascent/trunk/

    On configure:

    1
    2
    $ autoreconf --install --force
    $ ./configure --prefix=/home/wowsvr/ascent-server

    (j’ai eu des soucis de compilation avec gcc4.2.. par contre nickel avec gcc4.1)
    # aptitude install gcc-4.1 gcc-4.1-base
    # update-alternatives –install /usr/bin/gcc gcc /usr/bin/gcc-4.1 40 –slave /usr/bin/g++ g++ /usr/bin/g++-4.1
    (update-alternatives –config gcc pour changer de version de gcc/g++)

    1
    $ sh make_precompiled_header.sh

    On compile:

    1
    $ make -j2

    Et on installe:

    1
    $ make install
  • Configuration

  • Passons maintenant a la configuration – Attention, ici je vous ais détaillé la configuration minimale pour que le serveur fonctionne, mais je vous invite a lire les fichiers, ils sont très détaillés et compréhensibles)

    1
    2
    3
    4
    $ echo "/home/wowsvr/ascent-server/lib" > /etc/ld.so.conf.d/ascent.conf
    $ mkdir /home/wowsvr/ascent-server/etc
    $ cp src/*.conf /home/wowsvr/ascent-server/etc/
    $ cd /home/wowsvr/ascent-server/etc/

    Editez les lignes suivantes (pour passer en mode édition tapez: « i » et « Echap » pour quitter le mode. Pour sauvegarder tapez: « :wq! »)

    1
    2
    3
    4
    5
    6
    7
    8
    $ vim ascent-logonserver.conf
    032:
    033:                Username = "ascent"
    034:                Password = "MotDePasseAscent"
    035:                Name     = "logon"
    112:
    113:              AllowedIPs = "127.0.0.1/24"
    114:              AllowedModIPs = "127.0.0.1/24">
    1
    2
    3
    4
    5
    $ vim ascent-realm.conf
    036:
    038:              Name = "DonnezLuiUnNom"
    064:
    066:         Icon = "PVP" (ici: PVP, Normal, RPPVP, RP)
    1
    2
    3
    4
    5
    6
    $ vim ascent-world.conf
    031:
    032:
    210: # (commenter: rajouter un # en debut de ligne)
    480:              RemotePassword = "MotDePasseRemoteAscent">
    698: # (commenter: rajouter un # en debut de ligne)

    Bon, la on a déj� fait un grand morceau du chemin! Allez courage !

    1
    $ cd ../bin
  • Maps, vMaps, DBC

  • On crée les 3 dossiers qui vons contenir les maps, les vmaps et les DBC

    1
    $ mkdir maps; mkdir vmaps; mkdir DBC;

    Je met a votre disposition les fichiers que j’ai pu trouver sur le net:
    DBC: http://www.megaupload.com/fr/?d=QF5KGDWH ou http://www.megaupload.com/fr/?d=EY3C7NLV
    maps: http://dl.free.fr/iHWpvBSjy/maps.rar ou http://www.megaupload.com/fr/?d=657UAN8X
    vmaps: http://dl.free.fr/kjaMn7jDb/vmaps.rar ou http://www.megaupload.com/?d=ZPTMQYY3 ou http://www.megaupload.com/?d=BPNLKG40
    a copier dans les 3 dossiers qu’on a créé ci-dessus…

  • Retour sur Mysql

  • Bon maintenant, on va creer la structure des tables:

    1
    2
    3
    $ mysql -uascent -p world < /home/wowsvr/ascent/trunk/sql/2785_world_structure.sql
    $ mysql -uascent -p logon < /home/wowsvr/ascent/trunk/sql/2785_logon_structure.sql
    $ mysql -uascent -p characters < /home/wowsvr/ascent/trunk/sql/2785_character_structure.sql

    Puis on va appliquer les mises a jours – attention, il peut y avoir des erreurs, ignorez les.. rien de grave.

    1
    2
    3
    4
    5
    6
    7
    $ cd world_updates
    $ for LIST in *; do mysql -uascent --password=MotDePasseMysql world < $LIST; done;
    $ cd ../logon_updates
    $ for LIST in *; do mysql -uascent --password=MotDePasseMysql logon < $LIST; done;
    $ cd ../character_updates
    $ for LIST in *; do mysql -uascent --password=MotDePasseMysql characters < $LIST; done;
    $ cd /home/wowsvr/

    Maintenant, on va télécharger une Base de données des PNJ, Mobs, Skills… bref le contenu du jeu !

    1
    $ svn co http://svn2.assembla.com/svn/Wow_Ascent_Arbonne_DB/WAAD/

    Puis a l’aide du script fourni, on va l’injecter ! Pour cela, il va falloir configurer un petit peu la moulinette:

    1
    2
    3
    4
    5
    6
    7
    $ cd WAAD/
    $ vim Waad.sh
    02: user="ascent"
    03: pass="MotDePasseMysql"
    04: wdb="world"
    05: cdb="characters"
    $ chmod +x Waad.sh

    Et convertir les fin de lignes format windows ^M au format Linux:

    1
    $ perl -pi -e 's/r//g' Waad.sh

    Allez, on lance le tout !

    1
    $ ./Waad.sh

    Tapez w
    Tapez x

    A ce niveau la je ne peut que vous conseiller de jeter un œil au fichier Notes de version, il y aura peut être des correctifs (.sql) a appliquer en fonction de la version utilisée..

    Je vous fourni, dans mon extrême gentillesse un script de lancement des binaires:

    1
    $ cat < launcher.sh

    Collez y ça:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #!/bin/bash
    # Logon..
    L_SRV="./ascent-logonserver"
    L_PID="./logonserver.pid"
    # Core..
    C_SRV="./ascent-world"
    C_PID="./ascent.pid"
    echo "$(date) Lancement des aplications de Ascent...";
    # On coupe tout process du logonserver lancé précedement..
    killall logonserver;
    sleep 1;
    rm -f $L_PID;
    sleep 1;
    screen -dmS wowCore nice $L_SRV;
    # On coupe tout process du Core lancé précedement..
    killall ascent;
    sleep 1;
    rm -f $C_PID;
    sleep 1;
    screen -dmS wowLogon nice $C_SRV;
    echo "$(date) Lancé."
    while [ true ]; do
    sleep 15;
    echo "$(date) Test si les processus son démaré...";
    if [ "0" = "$(ps x | grep -e logonserver | grep -v grep | wc -l)" ]; then
    echo "$(date) Erreur: LogonServer serveur a crashé!";
    echo "$(date) mise en attente...";
    sleep 5;
    if [ "0" = "$(ps x | grep -e logonserver | grep -v grep | wc -l)" ]; then
    echo "$(date) Crash! Relancement du serveur LogonServer...";
    # On Relance...
    killall logonserver;
    sleep 1;
    rm -f $L_PID;
    sleep 1;
    screen -dmS wowCore nice $L_SRV;
    # On détruit les eventuelles sessions "mortes"
    screen -wipe;
    echo "$(date) lancé.";
    else
    echo "$(date) Processus déja démaré.";
    fi
    fi
    if [ "0" = "$(ps x | grep -e ascent | grep -v grep  | wc -l)" ]; then
    echo "$(date) Erreur: Ascent serveur a crashé!";
    echo "$(date) mise en attente...";
    sleep 5;
    if [ "0" = "$(ps x | grep -e ascent | grep -v grep | wc -l)" ]; then
    echo "$(date) Crash! Relancement du serveur Ascent...";
    # On relance ...
    killall ascent;
    sleep 1;
    rm -f $C_PID;
    sleep 1;
    screen -dmS wowLogon nice $C_SRV;
    # On détruit les eventuelles sessions "mortes"
    screen -wipe;
    echo "$(date) lancé.";
    else
    echo "$(date) Processus déja démaré.";
    fi
    fi
    echo "$(date) Analise complété.";
    done
    EOF

    On le rend executable:

    1
    $ chmod +x launcher.sh
  • Allez, vite, on lance !

  • A ce stade votre serveur est installé, il ne vous manque plus qu’as ajouter un utilisateur, pour ça,
    la solution la plus simple: phpmyadmin. vous pouvez inserer dans la table ‘logon’ vos joueurs.

    ça y est, le moment tant attendu est arrivé, on lance le schmilblik:

    1
    $ screen -dmS wowsvr ./launcher.sh
  • Page web

  • En option, voila un petit script php qui permetra au joueurs de s’inscrire sur votre serveur !
    Il est tard j’en ai un peu marre, alors je vous lache ça en vrac:

    1
    # aptitude install apache2 php5
    1
    # cd /var/www/
    1
    # wget http://www.crashdump.fr/~polux/wow-spora/spora-server-page.rar
    1
    # unrar x spora-server-page.rar
    1
    # vim index.php

    Configurez.. enregistrez.. ça roule !
    rendez vous sur http://adresse-de-votre-serveur/

    N’hésitez pas a commenter le tutoriel si vous avez eu des galères, des trucs-qui-marchent-pas ou simplement un merci ? ça fait toujours plaisir, pour moi et pour ceux qui aurais le même souci :)

    12 Comments:

    1. Sympa ton tuto, a un détail près… l’accès au SVN de Ascent nécessite un identifiant et mot de passe…

    2. Merci !
      Ha, oui…. pour le détail:
      Login: anonymous
      Password: anonymous

    3. Super tuto
      je suis sur debian etch sur un rps pour test, aucune des 3 commandes de mise à jour n’a fonctionné

      et j’ai aparement un pb au lancement du realmserver accés refusé à un utilisateur ‘moocow’ que je ne trouve dans aucun fichier de configuration et le worldserver bloque à logoncommclient avec le résultat authentification timed out.

      le script que tu à donner n’a pas l’air de fonctionner sur mon serveur mais il ne me retourne aucun message d’erreur.

    4. C’est tout a fait normal en fait, le « realmserver » n’est pas encore utilisé et ne sert donc a rien. (d’après le peu que j’en sais il servira ultérieurement pour créer un cluster).
      les deux seuls binaires a lancer sont: « ascent-logonserver » et « ascent-world ».

      Pour le script, l’as tu bien copié/lancé dans le dossier bin ?
      (essaye déjà de lancer les deux binaire cité plus haut indépendamment.. ça évitera bien des galères)

    5. Très bon tuto merci :)

      Cependant j’obtient un crash au lancement du logonserver:

      Config/Config.cpp:260 ASSERTION FAILED:
      current_variable == «  »
      ascent-logonserver: Config/Config.cpp:260: bool ConfigFile::SetSource(const char*, bool): Assertion `current_variable == «  »‘ failed.

      une idée ? svp merci

    6. Merci,

      cependant ton erreur est vraiment étrange et je ne l’ai jamais rencontré.. :(
      Pourrais tu m’envoyer tes fichiers configuration a adrien.pujol(arobase)crashdump.fr ? Que je puisse y jeter un oeil ? ;)

    7. Problème réglé, mise a jours du tutoriel ;)

    8. J’ai un petit souci lors de l’exécution d’une commande, et je vois pas comment m’en débarrasser…
      Je vous laisse voir :

      Building Precompiled Header…
      make_precompiled_header.sh: 5: g++: not found
      Done. Now you can run make, and experience much faster build times. Remember to re-run this script every time you svn update.
      wowsvr@ubuntu-test:~/ascent/trunk$ make -j2
      make all-recursive
      make[1]: entrant dans le répertoire « /home/wowsvr/ascent/trunk »
      Making all in extras
      make[2]: entrant dans le répertoire « /home/wowsvr/ascent/trunk/extras »
      Making all in collision
      make[3]: entrant dans le répertoire « /home/wowsvr/ascent/trunk/extras/collision »
      Making all in collision_dll
      make[4]: entrant dans le répertoire « /home/wowsvr/ascent/trunk/extras/collision/collision_dll »
      source=’vmap/BaseModel.cpp’ object=’BaseModel.o’ libtool=no
      DEPDIR=.deps depmode=none /bin/bash ../../../depcomp
      g++ -DHAVE_CONFIG_H -I. -I../../.. -I/usr/include -I/usr/local/include -I. -I./g3dlite -I./vmap -I/usr/include -I/usr/local/include -Wall -pthread -I/usr/include/openssl -DHAVE_SSL -I/usr/include/mysql -DBIG_JOINS=1 -fPIC -c -o BaseModel.o `test -f ‘vmap/BaseModel.cpp’ || echo ‘./’`vmap/BaseModel.cpp
      source=’vmap/CoordModelMapping.cpp’ object=’CoordModelMapping.o’ libtool=no
      DEPDIR=.deps depmode=none /bin/bash ../../../depcomp
      g++ -DHAVE_CONFIG_H -I. -I../../.. -I/usr/include -I/usr/local/include -I. -I./g3dlite -I./vmap -I/usr/include -I/usr/local/include -Wall -pthread -I/usr/include/openssl -DHAVE_SSL -I/usr/include/mysql -DBIG_JOINS=1 -fPIC -c -o CoordModelMapping.o `test -f ‘vmap/CoordModelMapping.cpp’ || echo ‘./’`vmap/CoordModelMapping.cpp
      ../../../depcomp: line 571: exec: g++: non trouvé
      make[4]: *** [BaseModel.o] Erreur 127
      make[4]: *** Attente des tâches non terminées….
      ../../../depcomp: line 571: exec: g++: non trouvé
      make[4]: *** [CoordModelMapping.o] Erreur 127
      make[4]: quittant le répertoire « /home/wowsvr/ascent/trunk/extras/collision/collision_dll »
      make[3]: *** [all-recursive] Erreur 1
      make[3]: quittant le répertoire « /home/wowsvr/ascent/trunk/extras/collision »
      make[2]: *** [all-recursive] Erreur 1
      make[2]: quittant le répertoire « /home/wowsvr/ascent/trunk/extras »
      make[1]: *** [all-recursive] Erreur 1
      make[1]: quittant le répertoire « /home/wowsvr/ascent/trunk »
      make: *** [all] Erreur 2

      J’ai vu que le tuto parle de g++ 4.1 au lieu de 4.2…
      Si vous pensez que c’est ca, pouvez vous m’indiquer comment mettre en place le 4.1 au lieu du 4.2… la je sais pas comment faire… :s

    9. (je venais de faire un bon gros post.. mais j’ai tout perdu a cause d’une connexion de merde, alors je vais faire plus court)
      D’après ce que je peux voir tu doit avoir oublié d’installer g++.. essaye donc d’installer toutes les applications requises pour ce tuto:

      # apt-get install subversion libmysql++-dev libssl-dev libtool libtool libpcre3-dev
      # apt-get install gcc automake g++ autoconf build-essential openssl unrar

    10. Bonjour,

      D’abord GG pour ce tuto tres simple et performant. j’ai 2 questions a poser tres simple :
      1°) quelle est la version de ce core ? (2.4.1, 2.4.2, ???)
      2°) est-ce que l’on peut m’expliquer comment créer un compte a partir de la table logon sous phpmyadmin ?

      d’avance merci.

      Urbaniz.

    11. Dans ce tutoriel c’est une version « trunk » en perpétuelle évolution que nous utilisons, donc il faut lire les notes de version pour en savoir plus.. pour le moment ascent supporte les versions 2.4.x. ;)

    12. a corriger:
      ce n'es plus :
      svn co http://mmoforge.org/svn/ascent/
      mais:
      svn co svn://svn.ascentemulator.net/ascent

      sinon gg pour le tuto,je suis entrain d'installes ascent pour le moment :D

    Leave a comment: