Table des matières

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 Ryzomcore1).

Il reste à détailler le déploiement d'AMS (Account Management System) mais on va le remplacer par webNel , une interface en Python et Django.

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 (Debian Jessie est conseiller), avec un utilisateur dédié, que nous nommerons ici “compil” :

La première partie se fait en root.

adduser compil
adduser compil sudo
adduser compil www-data

Installation des packages et des sources

Des essais ont été faits sur:

Mise à jours des informations et packages pour linux:

apt update
apt dist-upgrade

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

reboot

Serveur web

Vous avez besoin d'installer des outils et libs pour compiler et démarrer le serveur. Choisissez apache2 ou nginx

Apache2

⇒ Installez les paquets de LAMP :

apt install apache2 apache2-utils mariadb-server mariadb-client mcrypt 

php:

apt install php libapache2-mod-php php-mysql php-gd php-imagick 

Pour le code AMS avant 2019-05-11 php<7.2

apt install php-mcrypt

Nginx

⇒ Installez les paquets de LEMP :

apt install nginx mysql-server mysql-client mcrypt 
apt install php5-fpm php5-mysql php5-gd php5-imagick

Phpmyadmin

Ceci est optionnel

apt install phpmyadmin

php doit être ⇐ à la version 7.1 car mcrypt n'est plus disponible en 7.2 ! source

Paquets pour le shard

Ubuntu

apt-get install git 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 unzip p7zip p7zip-full screen wget

Debian 7

apt-get install git 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 unzip p7zip p7zip-full screen wget

Debian 8

apt install git libcurl4-openssl-dev libluabind-dev libfreetype6-dev libxml2-dev cmake build-essential libpng12-dev libjpeg62-turbo-dev rrdtool bison autoconf automake libmysqlclient-dev libgif-dev cpputest libssl-dev liblzma-dev unzip p7zip p7zip-full screen wget

Debian 9 et 10

apt install git 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 libpng-dev libjpeg62-turbo-dev rrdtool bison libxmu-dev autoconf automake default-libmysqlclient-dev libgif-dev cpputest libssl-dev liblzma-dev unzip p7zip p7zip-full screen wget libsquish-dev

Installer Squish pour Jessie

wget https://clients.lirria.khaganat.net/tools/squish-1.11.7z
7z x  squish-1.11.7z
cd squish-1.11

Puis compiler:

make
make install

Pour Windows :

Installer dans l'ordre DirectX SDK puis Visual

Pour visual 2015, pensez à activer le module c++

Téléchargement ryzom source code et data:

A partir d'ici on va dans user compil

su compil
git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-opennel-code.git
 
git clone https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-ressources.git

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 permament:

nano /home/compil/.bashrc

Pour un script à lancer à chaque session:

nano shard.sh

Variable à mettre dans votre script:

shard.sh
#!/bin/bash
export RYHOME=/home/compil/khanat-opennel-code/code
export RYZOM_PATH=/home/compil/khanat-opennel-code/code/ryzom
export PATH=$PATH:/home/compil/khanat-opennel-code/code/ryzom/tools/scripts/linux
export RYDATA=/home/compil/khanat-ressources

Pour lancer le script et exporter les variables dans le shell actuel :

./shard.sh

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

Pour linux :

mkdir $RYHOME/build && cd $RYHOME/build

Pour windows :

Créez un répertoire "build" dans le répertoire "code"

Ligne CMake :

cmake -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 ..

Liste des options de cmake : option

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

Options :

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

Pour Windows :

Lancer Cmake :
  *Code source : C:/khanat-opennel-code/code
  *Build les binaires : C:/khanat-opennel-code/code/build
  *Configurer pour visual c++ 2015
  *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:\khanat-opennel-code\code\build\RyzomCore.sln qui a été généré
en choisissant Visual C++ appuyez sur F7 pour compiler

Configurer serveur

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

nano $RYZOM_PATH/server/frontend_service.cfg

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

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

nano $RYZOM_PATH/server/sql.cfg

A éditer selon votre configuration:

DBHost = "127.0.0.1";
DBRingName = "ring_mini01";

Laisser en localhost. 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.

Web-admin

Copier les sources du serveur web dans le dossier ryzomweb (le dossier sera crée automatiquement) :

cp -r $RYHOME/web ryzomweb
 
chmod -R a+w ryzomweb

Configurer Apache2 Web Serveur

nano /etc/apache2/sites-available/shard.conf
######################
#   Khanat AMS       #
######################

<VirtualHost *:80>
        ServerName lirria.khaganat.net

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

        ErrorLog ${APACHE_LOG_DIR}/ams_error.log
        CustomLog ${APACHE_LOG_DIR}/ams_access.log combined
        
  <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>

</VirtualHost>
##########################
# Khanat serveur de jeu  #
##########################
<VirtualHost *:40916>
  <Directory "/home/compil/ryzomweb/">
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
  </Directory>
        ServerName lirria.khaganat.net

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

        ErrorLog ${APACHE_LOG_DIR}/shard_error.log
        CustomLog ${APACHE_LOG_DIR}/shard_access.log combined
</VirtualHost>

Activer shard.conf

a2ensite shard

Ouvrir le port 40916

nano /etc/apache2/ports.conf

Ajouter :

Listen 40916

Redémarrer le service Apache :

service apache2 restart

Configurer Nginx Web Server

######################
#   Khanat AMS       #
######################
 
server {
    listen  80;
    listen  [::]:80;
    server_name     lirria.khaganat.net;
 
    #Création des accès et des erreurs du logs dans /var/log/nginx
    access_log      /var/log/nginx/lirria.ams_access.log;
    error_log       /var/log/nginx/lirria.ams_error.log info;
 
    #Dossier de ryzomweb
    root /var/www/ryzomweb/web/public_php;
    index index.php index.html ;
 
 
    location / { 
    try_files $uri $uri/ =404;
    }
 
    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }
 
    location ~ /\.ht {
    deny all;
    }
 
    location ~* .(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}
##########################
# Khanat serveur de jeu  #
##########################

server {
    listen  40916;
    listen  [::]:40916;
    server_name     lirria.khaganat.net;

    #Création des accès et des erreurs du logs dans /var/log/nginx
    access_log      /var/log/nginx/lirria.shard_access.log;
    error_log       /var/log/nginx/lirria.shard_error.log info;

    #Dossier de ryzomweb
    root /var/www/ryzomweb/web/public_php;
    index index.php index.html ;

    
    location / { 
    try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
    deny all;
    }
}

Installer le web-admin

Allez à : http://VOTRE_ADRESSE_IP/setup

MySQL Database

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

Liens symboliques, binaire et scripts

Cette partie vous explique comment lancer votre shard avec la nouvelle organisation des data.

Liens symboliques pour que le système voit les data

ln -s $RYDATA/collisions $RYZOM_PATH/server/
ln -s $RYDATA/leveldesign $RYZOM_PATH/server/
ln -s $RYDATA/primitives $RYZOM_PATH/server/
ln -s $RYDATA/translation $RYZOM_PATH/server/
ln -s $RYDATA/continents $RYZOM_PATH/server/
ln -s $RYDATA/common $RYZOM_PATH/server/
ln -s $RYDATA/shard/su/dev_gm_names.xml $RYZOM_PATH/server/data_shard
ln -s $RYDATA/shard/su/invalid_entity_names.txt $RYZOM_PATH/server/data_shard
ln -s $RYDATA/shard/su/reserved_names.xml $RYZOM_PATH/server/data_shard
ln -s $RYDATA/shard/egs/game_event.txt $RYZOM_PATH/server/data_shard
ln -s $RYDATA/shard/egs/mission_queues.txt $RYZOM_PATH/server/data_shard
ln -s $RYDATA/shard/egs/named_items.txt $RYZOM_PATH/server/data_shard

Recompiler les données des datasheets

Vous pouvez aussi copié le script qui fabrique automatiquement le sheet_id.bin et visual_tab.bin et il place au bon endroit tous les fichiers dont à le client . c'est un script quand le shard et le client est au même endroit.

Compiler sheet_id.bin

cd $RYHOME/build/bin
./make_sheet_id -o$RYDATA/leveldesign/game_elem/sheet_id.bin $RYDATA/leveldesign/game_elem $RYDATA/leveldesign/game_element $RYDATA/leveldesign/world $RYDATA/leveldesign/ecosystems $RYDATA/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 :

cd $RYHOME/build/bin
cp sheets_packer $RYZOM_PATH/tools/sheets_packer/
cd $RYZOM_PATH/tools/sheets_packer

(Changez sheets_packer.cfg n'est plus utile pour la branche Lirria que vous avez pullé)

nano sheets_packer.cfg

État actuel de notre fichier sheets_packer.cfg :

/////////////////////////////////
/////////////////////////////////
/// SHEETS PACKER CONFIG FILE ///
/////////////////////////////////
/////////////////////////////////
DataPath = { "../../common/data_leveldesign", "../../common/data_common", "../../client/data", "../../../../../khanat-ressources/common", "../../../../../khanat-ressources/leveldesign", "../../../../../khanat-ressources/primitives" };
WorldSheet = "ryzom.world";
PrimitivesPath = "../../../../../khanat-ressources/primitives";
OutputDataPath = "../../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 :

$ $RYZOM_PATH/tools/sheets_packer/sheets_packer

Enfin, copier le visual_slot.tab à sa place

cp visual_slot.tab $RYZOM_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 qui sont hardcodés dans : code/ryzom/server/src/input_output_service/string_manager.h lignes 54 à 67:

class CStringManager
{
public:
	/// This is a list of available language.
	enum TLanguages
	{
		work,
		english,
		german,
		french,
		russian,
		spanish,
		NB_LANGUAGES
	};
for var in $RYDATA/translation/translated/*_en.txt; do  nomfic=${var##*/}; ln -s $nomfic ${var%/*}/${nomfic/_en/_de}; done
for var in $RYDATA/translation/translated/*_en.txt; do  nomfic=${var##*/}; ln -s $nomfic ${var%/*}/${nomfic/_en/_es}; done
for var in $RYDATA/translation/translated/*_wk.txt; do  nomfic=${var##*/}; ln -s $nomfic ${var%/*}/${nomfic/_wk/_ru}; done

Si jamais vous n'avez pas non plus les traductions en français, il faut ajouter :

(Changez le français n'est plus utile pour la branche Lirria que vous avez pullé)

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

Démarrer the Shard

Pour allumer le shard:

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 permets de sortir de screen 
Ctrl+a+echap  permets de remonter le log

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

Pour éteindre le shard:

shard stop

Installer le patch (optionnelle)

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

Verifier que tous marche sans clients

http://votre.ip:40916/login/r2_login.php?cmd=login&login=sonlogin&password=mdp&clientApplication=Lirria

sonlogin= votre user

mdp= votre mots de passe

ANNEXE

Problème de compilation

undefined reference

Des librairies ne sont pas présente dans l'édition de lien (création du binaire avec toutes le dépendances)

Erreur : /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/libxml2.a(encoding.o): In function `openIcuConverter': (.text+0xff7): undefined reference to `ucnv_open_57'

patch :

diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt
index 4e5d4bfb5..7f773d4ab 100644
--- a/code/CMakeLists.txt
+++ b/code/CMakeLists.txt
@@ -152,6 +152,20 @@ IF(WITH_STATIC)
     IF(LIBLZMA_LIBRARIES)
       SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBLZMA_LIBRARIES})
     ENDIF()
+    # under Linux, recent libxml2 versions are linked against libicuuc & libicudata
+    IF(WITH_STATIC_EXTERNAL)
+      find_library (LIBICUUC_LIBRARY NAMES icuuc)
+      IF(LIBICUUC_LIBRARY)
+        SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBICUUC_LIBRARY})
+      ENDIF()
+      find_library (LIBICUDATA_LIBRARY NAMES icudata)
+      IF(LIBICUDATA_LIBRARY)
+        SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARIES} ${LIBICUDATA_LIBRARY})
+      ENDIF()
+    ENDIF()
   ENDIF()
 ENDIF()

Erreur: /usr/local/lib/libcurl.a(md5.c.o):(.data.rel.ro+0x0): undefined reference to `MD5_Init' patch :

--- CMakeLists.txt-ref	2018-03-11 15:14:14.921459798 +0100
+++ CMakeLists.txt	2018-03-14 22:52:57.604317241 +0100
@@ -440,6 +451,14 @@
           SET(CURL_LIBRARIES ${CURL_LIBRARIES} ${IDN_LIBRARY})
         ENDIF()
 
+        # libcrypto
+        FIND_LIBRARY(LIBCRYPTO_LIBRARY NAMES libcryto crypto PATHS /usr/lib/x86_64-linux-gnu)
+        IF(LIBCRYPTO_LIBRARY)
+          MESSAGE("-- Found crypto: ${LIBCRYPTO_LIBRARY}")
+
+          SET(CURL_LIBRARIES ${CURL_LIBRARIES} ${LIBCRYPTO_LIBRARY})
+        ENDIF()
+
         # CURL Macports version depends on libidn, libintl and libiconv too
         IF(APPLE)
           FIND_LIBRARY(INTL_LIBRARY intl)
@@ -457,6 +476,14 @@
   ADD_SUBDIRECTORY(nel)
 ENDIF()
 
+# libcrypto
+FIND_LIBRARY(LIBCRYPTO_LIBRARY NAMES libcryto crypto PATHS /usr/lib/x86_64-linux-gnu)
+IF(LIBCRYPTO_LIBRARY)
+  MESSAGE("-- Found crypto: ${LIBCRYPTO_LIBRARY}")
+  SET(CURL_LIBRARIES ${CURL_LIBRARIES} ${LIBCRYPTO_LIBRARY})
+ENDIF()
+
 IF(WITH_RYZOM)
   ADD_SUBDIRECTORY(ryzom)
 ENDIF()

can not be used when making a shared object; recompile with -fPIC

Certaine librairie on était compilé sans l'option '-fPIC', cela implique que ces librairie ne peuvent pas être intégré en static dans les binaires opennel. [Static a intérêt pour le client, qui évite de forte contrainte sur l'installation sur différent Linux]

Erreur : /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/6/../../../../lib/libluabind.a(class.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC

Il faut compiler libluabind (et ne pas installer le package debian)

mkdir -p /opt/src/luabind
wget -q http://http.debian.net/debian/pool/main/l/luabind/luabind_0.9.1+dfsg.orig.tar.gz  -O /opt/src/RUN luabind.tar.gz
wget -q http://http.debian.net/debian/pool/main/l/luabind/luabind_0.9.1+dfsg-11.debian.tar.xz -O /opt/src/luabind-debian.tar.xz
tar xvf /opt/src/luabind.tar.gz -C /opt/src/luabind --strip 1 || exit 2
tar xvf /opt/src/luabind-debian.tar.xz -C /opt/src/luabind || exit 2
cd /opt/src/luabind; for file in $(cat debian/patches/series); do patch -p1 < debian/patches/$file; done
cd /opt/src/luabind;export -p DEB_HOST_MULTIARCH=$(dpkg-architecture -qDEB_HOST_MULTIARCH); bjam -d2 release debug install cflags="-fPIC $(dpkg-buildflags --get CFLAGS)" cxxflags="-fPIC $(dpkg-buildflags --get CXXFLAGS)" linkflags=" $(dpkg-buildflags --get LDFLAGS)"
cd /opt/src/luabind;export -p DEB_HOST_MULTIARCH=$(dpkg-architecture -qDEB_HOST_MULTIARCH); bjam -d2 release debug install link=static cflags="-fPIC $(dpkg-buildflags --get CFLAGS)" cxxflags="-fPIC $(dpkg-buildflags --get CXXFLAGS)" linkflags=" $(dpkg-buildflags --get LDFLAGS)"

Erreur : /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/6/../../../x86_64-linux-gnu/libogg.a(framing.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC

Il faut compiler libogg & libvorbis(et ne pas installer le package debian)

# Build libogg
mkdir -p /opt/src/libogg
wget -q http://http.debian.net/debian/pool/main/libo/libogg/libogg_1.3.2.orig.tar.gz  -O /opt/src/libogg.tar.gz
wget -q http://http.debian.net/debian/pool/main/libo/libogg/libogg_1.3.2-1.diff.gz -O /opt/src/libogg.diff.gz
tar xvf /opt/src/libogg.tar.gz -C /opt/src/libogg --strip 1 || exit 2
gunzip /opt/src/libogg.diff.gz
cd /opt/src/libogg ; patch -p1 < /opt/src/libogg.diff
mkdir -p /opt/src/libogg/build
cd /opt/src/libogg/build && ../configure --disable-maintainer-mode          \
                                     --host=$(dpkg-architecture -qDEB_HOST_GNU_TYPE)        \
                                     --build=$(dpkg-architecture -qDEB_BUILD_GNU_TYPE)      \
                                     --libdir=/usr/lib/$(dpkg-architecture -qDEB_HOST_MULTIARCH) \
                                     --enable-static                    \
                                     --prefix=/usr                      \
                                     CPPFLAGS="-D_FORTIFY_SOURCE=2"     \
                                     CFLAGS="-Wformat=2 -g -fPIC"       \
                                     CXXFLAGS="-Wformat=2 -g -fPIC"     \
                                     LDFLAGS="-Wl,-z,now"
cd /opt/src/libogg/build && make
cd /opt/src/libogg/build && make install
 
# Build libvorbis
mkdir -p /opt/src/libvorbis
wget -q http://security.debian.org/debian-security/pool/updates/main/libv/libvorbis/libvorbis_1.3.5.orig.tar.gz  -O /opt/src/libvorbis.tar.gz
tar xvf /opt/src/libvorbis.tar.gz -C /opt/src/libvorbis --strip 1 || exit 2
wget -q http://security.debian.org/debian-security/pool/updates/main/libv/libvorbis/libvorbis_1.3.5-4+deb9u1.debian.tar.xz -O /opt/src/libvorbis.debian.tar.xz
tar xvf /opt/src/libvorbis.debian.tar.xz -C /opt/src/libvorbis || exit 2
cd /opt/src/libvorbis; for file in $(cat debian/patches/series); do patch -p1 < debian/patches/$file; done
cd /opt/src/libvorbis; ./configure --enable-static --with-pic
cd /opt/src/libvorbis; make
cd /opt/src/libvorbis; make install