Table des matières

Voir plutôt : https://khaganat.net/wikhan/fr:shard (Shepeng)

Je suis en train de compiler/config mon serveur en local, et j'aimerai bien refaire le tuto de manière plus générique/adaptable. Et aussi simplifier certaine chose (qui au passage devrai le rendre plus lisible. Ainsi que créer quelque script pour l'automatiser plus facilement.

Je fait donc cette page temporaire afin de pouvoir modifier le tuto sans toucher a l'original qu'il est préférable de continuer a suivre. Mais si je fait ca a la fin de ems expérimentation je risque d'oublier des chose.

Scoui

Installation du shard

Le shard désigne une instance du serveur de jeu basé sur le système Ryzom Core. Ce tutoriel a été établi à partir des notes issues du wiki de RC1).

Il reste à détailler le déploiement d'AMS (Account Management System)

Avant toute chose, assurez-vous d'avoir une base bien configurée : Premières étapes dans la mise en place d'un serveur

L'installation du shard se fait sous Linux, avec un utilisateur dédié, que nous nommerons ici “compil” :

adduser compil
adduser compil sudo
su - compil

Installation des packages et des sources

Des essais ont été faits sur:

Mise à jours des informations et packages pour linux:

sudo apt-get update
sudo apt-get dist-upgrade

À ce point si le kernel est mis à jour , vous devez redémarrer:

 reboot

Vous avez besoin d'installer des outils et libs pour compiler et démarrer le serveur(le MySQL root mot de passe Root MySQL doit être mis et servira plus tard à se connecter à phpmyadmin).

⇒ Installez les paquets de LAMP :

apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql apache2-utils php5-gd php5-imagick

Ubuntu

sudo apt-get install mercurial libcurl4-openssl-dev libluabind-dev libfreetype6-dev libx11-dev libgl1-mesa-dev libxxf86vm-dev libxrandr-dev libxrender-dev libopenal-dev libogg-dev libvorbis-dev libxml2-dev cmake build-essential libpng12-dev libjpeg62-dev rrdtool libmysqlclient18-dev bison libxmu-dev autoconf automake libcpptest-dev libgif-dev cpputest libssl-dev

Debian 7

sudo apt-get install mercurial libcurl4-openssl-dev libluabind-dev libfreetype6-dev libx11-dev libgl1-mesa-dev libxxf86vm-dev libxrandr-dev libxrender-dev libopenal-dev libogg-dev libvorbis-dev libxml2-dev cmake build-essential libpng12-dev libjpeg62-dev rrdtool bison libxmu-dev autoconf automake libmysqlclient-dev libgif-dev libgif-dev cpputest libssl-dev

Debian 8

sudo apt-get install mercurial libcurl4-openssl-dev libluabind-dev libfreetype6-dev libx11-dev libgl1-mesa-dev libxxf86vm-dev libxrandr-dev libxrender-dev libopenal-dev libogg-dev libvorbis-dev libxml2-dev cmake build-essential libpng12-dev libjpeg62-turbo-dev rrdtool bison libxmu-dev autoconf automake libmysqlclient-dev libgif-dev libgif-dev cpputest libssl-dev

Installer Squish

wget -c https://libsquish.googlecode.com/files/squish-1.11.zip
unzip  squish-1.11.zip 
cd squish-1.11

Important: le code source de la librairie « squish » ne compile pas avec les dernières versions de gcc. Il faut apporter une correction mineur avant de lancer cette compilation :
Dans « alpha.cpp » (ligne 24) et « singlecolourfit.cpp » (ligne 26), il faut ajouter :

#include <limits.h>

Puis compiler:

make
sudo make install

Pour Windows :

Installer dans l'ordre DirectX SDK puis Visual c++

Téléchargement ryzom source code et data:

hg clone http://depots.khaganat.net/scm/hg/khaganat
cd khaganat
hg checkout develop

hg clone http://depots.khaganat.net/scm/hg/khaganat-data

Pour windows en plus :
Télécharger

 +-- code
    |   |
    |   +-- nel
    |   |
    |   +-- ryzom
    |   |
    |   +-- ...
    |
    +-- external

Build Ryzom OpenShard serveur

créer un fichier avec les variables pour linux

Pour un script permanent:
(remplacer dans les lignes qui suivent $1 par le nom du serveur par exemple khaganat ou ryzomecore le même nom que le dépôt ou le répertoire ou il sera cloner)

nano /home/compil/.bashrc

Pour un script à lancer à chaque session:
( Cela permet de changer de server si, pour des test par exemple, vous êtes succeptible d'en build plusieurs

nano init.sh

Variable à mettre dans votre script:

export SERVER_NAME=$1
# Modifier ses valeur en fonction de votre configuration.
export BASE_PATH=/compil/build/$SERVER_NAME
export DATA_PATH=$BASE_PATH-data 
export BUILD_PATH=$BASE_PATH/build
# Laisser cette variable vide pour installer dans le rep par défaut ( à la racine / )
export INSTALL_PATH=$BUILD_PATH/install

export CODE_PATH=$BASE_PATH/code
export GAME_PATH=$CODE_PATH/ryzom
export PATH=$PATH:$GAME_PATH/tools/scripts/linux

Lancer le script de cette façon:
( Remplacer serveur_name par le nom du serveur que vous compter configurer, par exemple khaganat ou ryzomcore)

Attention le premier . est nécessaire afin que les variables soient exporter pour le bash en cours et non un bash temporaire qui ne durera que le temps d’exécuter le script.

# Remplacer khaganat par le nom de votre serveur.
. ./init.sh khaganat

Configuration des option pour build seulement nel & server (En static: si CMakeOptions)

mkdir $BUILD_PATH && cd $BUILD_PATH

Ligne CMake :

cmake $CODE_PATH -DCMAKE_INSTALL_PREFIX=$INSTALL_PATH -DWITH_NEL_TESTS=OFF -DWITH_RYZOM_CLIENT=OFF -DWITH_NEL=ON -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_DRIVER_OPENGL=OFF -DWITH_DRIVER_OPENAL=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_SOUND=OFF 

Attention, il faut que le serveur soit compilé avec l'option: -DWITH_SYMBOLS=ON pour avoir les symboles de debug (voir Déboguer le shard)

Options :

Sans les outils : 
-DWITH_RYZOM_TOOLS=OFF ( vous en avez besoin pour le shard, pour faire le visual_slot.tab et le patch)
-DWITH_NEL_TOOLS=OFF

Pour Windows :

Lancer Cmake :
  *Code source : C:/khaganat/code
  *Build les binaires : C:/khaganat/code/build
  *Configurer pour visual c++ 2010
  *Configurer 
  *Changer les options
  *Générer 

Build and install

Pour linux :

make -jX  (X= nombres de coeur +1, si ça plante n'utiliser que "make")
sudo make install 

Pour Windows :

Lancer C:\ryzom\code\build\RyzomCore.sln qui a été généré
en choisissant Visual C++ appuyez sur F7 pour compiler

Liens symboliques pour que le système voit les data

ln -s $DATA_PATH/collisions $GAME_PATH/server/
ln -s $DATA_PATH/leveldesign $GAME_PATH/server/
ln -s $DATA_PATH/primitives $GAME_PATH/server/

# A verifier
ln -s $DATA_PATH/shard $GAME_PATH/server/data_shard
ln -s $DATA_PATH/common $GAME_PATH/server/

Recompiler les données des datasheets

Compiler sheet_id.bin

cd $BUILD_PATH/bin
./make_sheet_id -o$DATA_PATH/leveldesign/game_elem/sheet_id.bin $DATA_PATH/leveldesign/game_elem $DATA_PATH/leveldesign/game_element $DATA_PATH/leveldesign/world $DATA_PATH/leveldesign/ecosystems $DATA_PATH/sound

Compiler visual_slot.tab

Tout d'abord, vérifier que les chemins vers le répertoire contenant les datasheets (leveldesign), les primitives (primitives) et les fichiers communs au serveur et au client (common) sont bons dans le fichier de configuration :

verifier si je ne peux pas utiliser els vzariable exporter.

cd $BUILD_PATH/bin
cp sheets_packer $GAME_PATH/tools/sheets_packer/
cd $GAME_PATH/tools/sheets_packer
nano sheets_packer.cfg

État actuel de notre fichier sheets_packer.cfg :

/////////////////////////////////
/////////////////////////////////
/// SHEETS PACKER CONFIG FILE ///
/////////////////////////////////
/////////////////////////////////
DataPath = { "/home/build/ryzomcore/code/ryzom/common/data_leveldesign", "$GAME_PATH/common/data_common", "$GAME_PATH/client/data", "$DATA_PATH/common", "$DATA_PATH/leveldesign", "$DATA_PATH/primitives" };
WorldSheet = "ryzom.world";
PrimitivesPath = "$DATA_PATH/primitives";
OutputDataPath = "/home/build/ryzomcore/code/ryzom/client/data";
LigoPrimitiveClass = "world_editor_classes.xml";

Puis on peut lancer le sheets_packer, en restant bien dans le répertoire où on a ce fichier .cfg car les chemins sont relatifs :

$BUILD_PATH/bin/sheets_packer

Enfin, copier le visual_slot.tab à sa place

cp visual_slot.tab $GAME_PATH/common/data_common/visual_slot.tab

Ajouter les langages manquants

Ceci est un bidouillage pour ajouter certains fichiers de traduction étrangement demandés par IOS. Il faudrait trouver comment supprimer ces appels

for var in $DATA_PATH/translation/translated/*_en.txt; do  nomfic=${var##*/}; ln -s $nomfic ${var%/*}/${nomfic/_en/_de}; done
for var in $DATA_PATH/translation/translated/*_wk.txt; do  nomfic=${var##*/}; ln -s $nomfic ${var%/*}/${nomfic/_wk/_fr}; done

for var in $DATA_PATH/translation/translated/*_en.txt; do  nomfic=${var##*/}; ln -s $nomfic ${var%/*}/${nomfic/_en/_es}; done
for var in $DATA_PATH/translation/translated/*_wk.txt; do  nomfic=${var##*/}; ln -s $nomfic ${var%/*}/${nomfic/_wk/_ru}; done

Configurer serveur

Éditer différents fichiers pour trouver la configuration du serveur :

nano $GAME_PATH/server/frontend_service.cfg

La ligne à éditer dans frontend_service.cfg est:
FSListenHost = “your.server.ip.adress”;

Pour nous c'est :
FSListenHost = “khanat.khaganat.net”;

nano $GAME_PATH/server/sql.cfg

A éditer selon votre configuration:

DBHost = "localhost";
DBNelName = "nel";
DBRingName = "ring_mini01";
// Nel DB user
DBNelUser = "nel";
// Ring DB user
DBRingUser = "ring";
// SU - password to access to the nel database with DBNelUseruser (default is no password)
DBNelPass = "nel_pwd";
// SU - password to access to the ring database with DBRingUser (default is no password)
DBRingPass = "ring_pwd";

// MySQL wrapper strict mode - controls use of asserts if SQL requests fail
MSWStrictMode=0;

Laisser en local. Créer un utilisateur “nel” qui a les droits sur sa base de donnée, et un utilisateur “ring”, chacun avec son mot de passe. Remplir $RYZOM_PATH/server/sql.cfg avec ces informations.

# Si le service mysql n'est pas démaré, le démarer.
sudo service mysql start

mysql -u root -p
#entrer le mot de passe mysql lorsque demandé.

# A revoir correctement mais je met ne serai-ce que pour avoir les commandes.

CREATE USER 'nel'@'localhost' IDENTIFIED BY 'nel_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'nel'@'localhost' WITH GRANT OPTION;

CREATE USER 'ring'@'localhost' IDENTIFIED BY 'ring_pwd';
GRANT ALL PRIVILEGES ON *.* TO 'ring'@'localhost' WITH GRANT OPTION;

Web-admin

Installer les paquets du server web

apt-get install apache2 php5 php5-mysql php5-gd rrdtool screen mcrypt php5-mcrypt

# Attention utilisez bien le nom d'user qui correspond à votre config si jamais vous n'utiliser pas compil.
adduser compil www-data

Créer un dossier "ryzomweb" et copier dedans:

# Libre à vous de le mettre ailleur
# TODO ajouter la variable WEB_PATH aux export initiax.
cd ~/
cp -r $CODE_PATH/web ryzomweb

sudo chmod -R a+w ryzomweb
sudo chown -R www-data:www-data ryzomweb

Configurer Apache2 Web Server & MySQL Database

nano /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
<Directory "/home/compil/ryzomweb/">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
        DirectoryIndex index.php
        AddType text/html .php .phps
        AddHandler application/x-httpd-php .php
        AddHandler application/x-httpd-php-source .phps
</Directory>
        ServerName khanat.khaganat.net

        ServerAdmin webmaster@localhost
        DocumentRoot /home/compil/ryzomweb/public_php/

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

<VirtualHost *:40916>
<Directory "/home/compil/ryzomweb/">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>
        ServerName khanat.khaganat.net

        ServerAdmin admin@localhost
        DocumentRoot /home/compil/ryzomweb/public_php

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ouvrir le port 40916 (à confirmer que c'est nécessaire et suffisant).

nano /etc/apache2/ports.conf

Ajouter :

LISTEN 40916

Redémarrer le service Apache

service apache2 restart

Installer le web-admin

Allez à : http://VOTRE_ADRESSE_IP/setup

Suivez les instructions.

Si vous voulez gérer votre base MySQL, allez à : http://VOTRE_ADRESSE_IP/phpmyadmin

Pour vous aidez à la remplir :
https://khaganat.net/wikhan/fr:shard_database

L'installation du Serveur de Patchs est expliquée en détail sur une page dédiée : Installation d'un serveur de patchs

Démarrer the Shard

Pour allumer le shard:

Remplacer RYZOM_PATH par GAMEPATH sans les scripts suivant:

nano $HOME/tools/scripts/linux/shard
nano $HOME/tools/scripts/linux/make_all
shard start

Pour naviguer et sortir de screen:

ctrl+a+n ( ou ctrl+a+ le chiffre du service) permets de naviguer entre les services
Ctrl+a+d permet de sortir de screen 

Shard join permets de rejoindre un shard allumé
shard share permets de rejoindre un shard allumé à plusieurs

Pour éteindre le shard:

shard stop

Verifier que tous marche sans clients

http://lirria.khaganat.net:40916/login/r2_login.php?cmd=login&login=sonlogin&password=mdp&clientApplication=Lirria

sonlogin= votre user

mdp= votre mots de passe

Bugs divers et résolutions

À ranger lors de la reprise de ce tuto…

Permettre l'accès à tous au serveur

Dans la base de donnée, dans neltool>neltools_shard, veiller à ce que shard_domain_id corresponde au shard_domain_id noté dans nel>domain.

Je ne sais pas si ça a joué aussi, dans nel>shard, j'ai passé RequiredState en ds_open

Redémarrer le shard pour que ce soit pris en compte.