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:
# apt-get install mysql
Puis on se connecte sur ce serveur:
# 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:
> 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:
> FLUSH PRIVILEGES;
> quit
Compilation du Core
Tout d’abord, installons les outils dont on aura besoin par la suite:
# 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:
# adduser wowsvr
# su wowsvr
$ cd
Rapatrions les derniers fichiers de Ascent sur notre machine:
$ svn co http://mmoforge.org/svn/ascent/
$ cd ascent/trunk/
On configure:
$ 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++)
$ sh make_precompiled_header.sh
On compile:
$ make -j2
Et on installe:
$ 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)
$ 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! »)
$ 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">
$ vim ascent-realm.conf
036:
038: Name = "DonnezLuiUnNom"
064:
066: Icon = "PVP" (ici: PVP, Normal, RPPVP, RP)
$ 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 !
$ cd ../bin
Maps, vMaps, DBC
On crée les 3 dossiers qui vons contenir les maps, les vmaps et les DBC
$ 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:
$ 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.
$ 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 !
$ 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:
$ 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:
$ perl -pi -e 's/r//g' Waad.sh
Allez, on lance le tout !
$ ./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:
$ cat < launcher.sh
Collez y ça:
#!/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:
$ 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:
$ 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:
# aptitude install apache2 php5
# cd /var/www/
# wget http://www.crashdump.fr/~polux/wow-spora/spora-server-page.rar
# unrar x spora-server-page.rar
# 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 :)
Possibly Related Posts:
- Du load-balancing avec vyatta
- Effacer définitivement les données d’un disque dur sous *nux (dd, zero, random)
- Serveur X distant sur Mac (FreeNX)
- Remplacer le firmware de la fonera avec dd-wrt (sous Mac)
- Redirection de courrier sous Postfix












cinemania says:
Sympa ton tuto, a un détail près… l’accès au SVN de Ascent nécessite un identifiant et mot de passe…
mai 18, 2008, 18:59Adri says:
Merci !
mai 18, 2008, 22:38Ha, oui…. pour le détail:
Login: anonymous
Password: anonymous
Brahamatus says:
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.
mai 18, 2008, 16:32Adri says:
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 ?
mai 18, 2008, 14:46(essaye déjà de lancer les deux binaire cité plus haut indépendamment.. ça évitera bien des galères)
Bowels says:
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
mai 18, 2008, 20:36Adri says:
Merci,
cependant ton erreur est vraiment étrange et je ne l’ai jamais rencontré.. :(
mai 18, 2008, 20:54Pourrais tu m’envoyer tes fichiers configuration a adrien.pujol(arobase)crashdump.fr ? Que je puisse y jeter un oeil ? ;)
Adri says:
Problème réglé, mise a jours du tutoriel ;)
mai 18, 2008, 20:44Guismo says:
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…
mai 18, 2008, 20:01Si 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
Adri says:
(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
mai 18, 2008, 7:07# apt-get install gcc automake g++ autoconf build-essential openssl unrar
urbaniz says:
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.
mai 18, 2008, 14:59Adri says:
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. ;)
mai 18, 2008, 18:29MetalMan says:
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
mai 18, 2008, 17:04