Building Ryzom Client On Debian

From Ryzom Forge Wiki

Revision as of 13:41, 17 January 2016 by Glorf (talk | contribs) (Downloading ryzom dependencies)
Jump to: navigation, search
Flag-DE

Übersetzung , bitte.

Flag-ES

Traducción, por favor.

Flag-FR

Traduction, SVP.

Flag-RU

перевод, пожалуйста.



General

This page applies for Debian-based GNU/Linux distributions. It should work on other linux distribution too, but some package name might change. To compile Ryzom client under Mac OS X, please check this page : Building Ryzom Client under Mac OS X

Here i use a chroot because i want to have a clean build environment, but you can perfectly do it in your own system, just skip the #Setting up the chroot part, and command run as user inside the chroot as simple user [in your system], command run as root inside the root as root [in your system] :)

If you build the client for your own system, i recommend building a dynamically linked version ; you can follow Building_Ryzom_Client_On_Debian_(Stripped_Version) to do this. If you want to distribute some binaries (and only if you want to do that), you should build a static version. It's highly recommended to build with an old libc version. The easiest version to do that is using an old distribution ; there is an example using a chroot of squeeze in this guide.

Why should i build my own client ?

There is a couple of valables reasons :

  • You are having problems with sound (usually this happens when you don't use pulseaudio on your system)
  • You want better performance
  • You want to say "i did it !"
  • You love to build your own executable (gentoo users, i'm looking at you)
  • You want better graphics : the official client beeing pretty old, and some big update (including anti-aliasing if possible and anisotropic filter things like that) are available if you take the last code from RyzomCore.

Setting up the chroot

The host system should be a debian or any derivate. Didn't tested but if you chroot a squeeze, your debian version should be at least a squeeze too. I choosed squeeze because the libc version is pretty old, so the static binary compiled should work on (almost) every linux system.

$ command means run as simple user
# command means run as root
#$ command means run as simple user inside chroot
## command means run as root inside chroot

Don't forget to change USER by your username or it won't work :p

# apt-get install debootstrap dchroot
$ mkdir -p /home/USER/chroot/ryzom_squeeze64
$ mkdir -p /home/USER/chroot/ryzom_squeeze32
# debootstrap --arch amd64 squeeze /home/USER/chroot/ryzom_squeeze64 http://ftp.fr.debian.org/debian
# debootstrap --arch i386 squeeze /home/USER/chroot/ryzom_squeeze32 http://ftp.fr.debian.org/debian

!!The instruction are only for the 64 bits chroot, just change the path for the 32 bits one :)

# chroot /home/USER/chroot/ryzom_squeeze64
## apt-get install wget nano locales dialog apt-utils
## dpkg-reconfigure locales
## nano /etc/apt/sources.list

It should look like this :

deb http://ftp.fr.debian.org/debian squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze main contrib non-free

## apt-get update
## exit
# cp /etc/passwd/ /home/USER/chroot/ryzom_squeeze64/etc/
# sed 's/\([^:]*\):[^:]*:/\1:*:/' /etc/shadow | tee /home/USER/chroot/ryzom_squeeze64/etc/shadow
# cp /etc/group /home/USER/chroot/ryzom_squeeze64/etc/
# cp /etc/hosts /home/USER/chroot/ryzom_squeeze64/etc/
# chroot /home/USER/chroot/ryzom_squeeze64
## passwd

I recommend using the same password as the root on your system (i think the root's password is supposed to be copied, not sure why it don't work)

## exit

Now we have to mount some directory for our chroot :

# nano /etc/fstab

Add the following lines :

/proc /home/USER/chroot/ryzom_squeeze64/proc none rbind 0 0
/dev /home/USER/chroot/ryzom_squeeze64/proc none rbind 0 0
/sys /home/USER/chroot/ryzom_squeeze64/proc none rbind 0 0
/tmp /home/USER/chroot/ryzom_squeeze64/proc none rbind 0 0
# mount -a
# chroot /home/USER/chroot/ryzom_squeeze64
## echo ryzomm_squeeze64 >> /etc/debian_chroot
## exit
# nano /etc/schroot/schroot.conf

Add the following lines (make sure to change the "users=" line & directory line)

[ryzom_squeeze64]
description=Squeeze 64bits for ryzom
directory=/home/USER/chroot/ryzom_squeeze64
users=USER
groups=sbuild
root-groups=root

[ryzom_squeeze32]
description=Squeeze 32 bits for ryzom
directory=/home/USER/chroot/ryzom_squeeze32
users=USER
groups=sbuild
root-groups=root
personality=linux32

You can now use your chroot as a normal user, just type :

$ dchroot -c ryzom_squeeze64

You won't have a ~ the first time you log in, just create it

#$ su -
## mkdir /home/USER
## chown USER:USER /home/USER
## exit

Congratulations ! Your chroot are now working perfectly !

Downloading ryzom dependencies

Tools needed to build the client :

## apt-get install mercurial  autoconf automake cmake libtool build-essential bison

Libraries needed :

## apt-get install libluabind-dev libfreetype6-dev libcurl4-openssl-dev libx11-dev \
libgl1-mesa-dev libxxf86vm-dev libxrandr-dev libxrender-dev libopenal-dev \
libogg-dev libvorbis-dev libxml2-dev libpng12-dev libjpeg-dev libxmu-dev

Compiling ryzom dependencies

You can probably download some of this libs but since there is often problems with them, i prefer to compile them myself :) First, download all the code you need :

#$ cd ~
#$ mkdir dep_ryzomcore && cd dep_ryzomcore
#$ hg clone http://hg.kervala.net/packaging
#$ hg clone http://hg.kervala.net/cmake
#$ export CMAKE_MODULE_PATH=$(pwd)/cmake/modules


libwww-dev :

#$ cd ~/dep_ryzomcore/packaging/libwww
#$ ./autogen.sh
#$ ./configure --with-ssl=no --with-zlib --with-expat --with-gnu-ld --enable-shared
#$ make
## make install

The following two libs are only required if you want to build specific tools, not for the client itself. libsquish :

#$ cd ~/dep_ryzomcore/
#$ export CMAKE_MODULE_PATH=$(pwd)/cmake/modules
#$ cd packaging/squish
#$ mkdir build && cd build
#$ cmake ..
#$ make
## make install

cpptest :

#$ cd ~/dep_ryzomcore/packaging/cpptest/
#$ sh ./autogen.sh
#$ ./configure
#$ make
## make install

Note : If you have trouble during the autogen.sh / configure part due to glibtoolize, find the following line (should be line 31) :

if glibtoolize --version &>/dev/null ; then

and replace it by :

if hash glibtoolize 2>/dev/null ; then

Compiling ryzom dependencies, static version specific

We need to build libopenal static :

#$ cd ~
#$ mkdir libopenal && cd libopenal
#$ apt-get source libopenal1
#$ nano openal-soft-1.12.854-2/debian/rules

add this line "-DLIBTYPE=STATIC", after line 15, so you'll something like this :

               -DALSOFT_CONFIG=ON \
               -DLIBTYPE=STATIC \


## apt-get build-dep libopenal1
#$ cd openal-soft-1.12.854-2
#$ dpkg-buildpackage -rfakeroot -uc -b

Unfortunately the install isn't going well so we need to copy the static lib by hand :

##cp ~/libopenal/openal-soft-1.12.854-2/build-tree/libopenal.a /usr/lib

And now we need a static curl :

#$ cd ~
#$ mkdir libcurl && cd libcurl

I prefer to have the same curl version as my system (check apt-cache policy libcurl3 to have the info) but it shouldn't change much

#$ wget -c http://curl.haxx.se/download/curl-7.21.0.tar.bz2
#$ tar xjf curl-7.21.0.tar.bz2
#$ cd curl-7.21.0
#$ ./configure --disable-ldap --disable-ldaps --disable-rtsp --disable-dict --disable-ipv6 \
--disable-crypto-auth --disable-sspi --disable-tls-srp --without-gnutls --without-librtmp \
--without-libidn --disable-versioned-symbols --disable-pop3 --without-libssh2
#$ make
## make install

Getting ryzom code

#$ cd ~
#$ hg clone https://bitbucket.org/ryzom/ryzomcore

We just need to switch branch (default to compatibility)

#$ cd ryzomcore
#$ hg update -c compatibility

If you need to update the code later, just type :

#$ hg pull && hg update

Building Ryzom (static version)

#$ cd ~
#$ mkdir build_static && cd build_static

use the following cmake options :


#$ cmake -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_CLIENT=ON \
-DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_NEL=ON -DWITH_SOUND=ON -DWITH_DRIVER_OPENGL=ON \
-DWITH_DRIVER_OPENAL=ON -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_NEL_TESTS=OFF \
-DWITH_LIBWWW_STATIC=ON -DOPENAL_LIBRARY=/usr/lib/libopenal.a -DOPENGL_gl_LIBRARY=/usr/lib/libGL.so \
-DWITH_STATIC_EXTERNAL=ON -DWITH_STLPORT=OFF -DCURL_LIBRARY=/usr/local/lib/libcurl.a ../ryzomcore/code

The directory of libGL.so might change, depending on the strange things happenin in /usr/lib with the i386/ amd64 directory, check it before building.

Here, n is the number of core in your CPU :

#$ make -jn

Building Ryzom (dynamically linked)

#$ cd ~
#$ mkdir build && cd build

For differents cmake options, see #CMake options. Here's the one i'm using :

#$ cmake -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF \
-DWITH_RYZOM_TOOLS=OFF -DWITH_QT=OFF -DWITH_RYZOM_CLIENT=ON ../ryzomcore/code

If you are having trouble with cmake who can't find LIBWWW_INCLUDE_DIR, it's probably because the make install of libwww put everything in a subfolder of /usr/local/include and cmake doesn't seems to find it. Easiest way to solve it is : (the path may change a little on your computer)

## cd /usr/local/include/-package/
## mv * ..

Then run cmake again Here, n is the number of core in your CPU :

#$ make -jn

The binary is now in bin/ryzom_client. You can't really use this one like that, because you need all the libs (libnel* + libryzom* that you just compiled, libwwwthat you compiled earlier). If you want to use this one, copy all the file in lib/ and all the file in /usr/local/lib in your system (/usr/local/lib for example). Easy (and clean) way to do that is to run the following command :

## make install

Will put all the needed file where they belong :) (ryzom_client will go to /usr/local/games)

How do i use my client ?

Very simple ! Just copy your ryzom_client executable (from your bin/ folder if it's static, or /usr/local/games if you built it dynamic way) to your ryzom folder. I recommend keeping the official ryzom_client and renaming yours, so you have a backup client in case of trouble !

Creating a package for ryzom

TODO : pbuilder tutorial

CMake options

Option specific to RyzomCore

  • BUILD_DASHBOARD
  • BOOST_DIR
  • CMAKE_BUILD_TYPE
  • CMAKE_CONFIGURATION_TYPES
  • CMAKE_INSTALL_PREFIX
  • CPPTEST_INCLUDE_DIR
  • FINAL_VERSION - TRUE
  • FREETYPE_ADDITIONAL_INCLUDE_DIR
  • FREETYPE_INCLUDE_DIRS
  • FREETYPE_LIBRARY
  • JPEG_INCLUDE_DIR
  • JPEG_LIBRARY
  • LIBWWW_ADDITIONAL_INCLUDE_DIR
  • LIBWWW_INCLUDE_DIR
  • LUABIND_INCLUDE_DIR
  • NL_BIN_PREFIX
  • NL_DRIVER_PREFIX
  • NL_ETC_PREFIX
  • NL_LIB_PREFIX
  • NL_SBIN_PREFIX
  • NL_SHARE_PREFIX
  • OGG_INCLUDE_DIR
  • OGG_LIBRARY
  • RYZOM_BIN_PREFIX
  • RYZOM_ETC_PREFIX
  • RYZOM_ETC_PREFIX
  • RYZOM_GAMES_PREFIX
  • RYZOM_LIB_PREFIX
  • RYZOM_SBIN_PREFIX
  • RYZOM_SHARE_PREFIX
  • SQUISH_INCLUDE_DIR
  • VORBISFILE_LIBRARY
  • VORBIS_INCLUDE_DIR
  • VORBIS_LIBRARY
  • WITH_3D - TRUE
  • WITH_COVERAGE
  • WITH_DRIVER_DIRECT3D
  • WITH_DRIVER_DSOUND
  • WITH_DRIVER_FMOD
  • WITH_DRIVER_OPENAL - TRUE
  • WITH_DRIVER_OPENGL - TRUE
  • WITH_DRIVER_OPENGLES
  • WITH_DRIVER_XAUDIO2
  • WITH_EXTERNAL
  • WITH_GEORGES - TRUE
  • WITH_GTK
  • WITH_GUI - TRUE
  • WITH_INSTALL_LIBRARIES - TRUE
  • WITH_LIBWWW_STATIC
  • WITH_LIGO - TRUE
  • WITH_LOGGING - TRUE
  • WITH_LOGIC - TRUE
  • WITH_LUA51 - TRUE
  • WITH_MFC
  • WITH_NEL - TRUE
  • WITH_NELNS
  • WITH_NELNS_LOGIN_SYSTEM - TRUE
  • WITH_NELNL_SERVER - TRUE
  • WITH_NEL_CEGUI
  • WITH_NEL_MAXPLUGIN
  • WITH_NEL_SAMPLES - TRUE
  • WITH_NEL_TESTS - TRUE
  • WITH_NEL_TOOLS - TRUE
  • WITH_NET - TRUE
  • WITH_PACS - TRUE
  • WITH_PCH - TRUE
  • WITH_QT
  • WITH_RYZOM - TRUE
  • WITH_RYZOM_CLIENT - TRUE
  • WITH_RYZOM_SERVER
  • WITH_RYZOM_SOUND - TRUE
  • WITH_RYZOM_TOOLS - TRUE
  • WITH_SNOWBALLS
  • WITH_SNOWBALLS_CLIENT - TRUE
  • WITH_SNOWBALLS_SERVER - TRUE
  • WITH_SOUND - TRUE
  • WITH_STATIC
  • WITH_STATIC_DRIVERS
  • WITH_STATIC_EXTERNAL
  • WITH_STLPORT
  • WITH_SYMBOLS
  • XF86VidMode_INCLUDE_DIR
  • XF86_VidMode_LIBRARY

Generic option who might be useful

TODO

Common option set to build a client

Standard client compilation :

#$ cmake -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_SERVER=OFF \
-DWITH_RYZOM_TOOLS=OFF -DWITH_QT=OFF -DWITH_RYZOM_CLIENT=ON ..

Static client compilation :

#$ cmake -DWITH_NEL_TESTS=OFF -DWITH_NEL_SAMPLES=OFF -DWITH_NEL_TOOLS=OFF -DWITH_RYZOM_CLIENT=ON \
-DWITH_RYZOM_SERVER=OFF -DWITH_RYZOM_TOOLS=OFF -DWITH_NEL=ON -DWITH_SOUND=ON -DWITH_DRIVER_OPENGL=ON \
-DWITH_DRIVER_OPENAL=ON -DWITH_STATIC=ON -DWITH_STATIC_DRIVERS=ON -DWITH_STLPORT=OFF -DWITH_NEL_TESTS=OFF \
-DWITH_LIBWWW_STATIC=ON -DOPENAL_LIBRARY=/usr/lib/libopenal.a -DOPENGL_gl_LIBRARY=/usr/lib/libGL.so \
-DWITH_STATIC_EXTERNAL=ON -DCURL_LIBRARY=/usr/local/lib/libcurl.a ..

Adding debugging symbols (useful if you want to run gdb) :

#$ cmake -DWITH_SYMBOLS=ON ALLOTHEROPTIONS ..

Debug mode (useful only if you are a dev ; it's a bad idea to use it if you aren't cause there is more crash + it's slower) :

#$ cmake -DFINAL_VERSION=OFF -DCMAKE_BUILD_TYPE=Debug ALLOTHEROPTIONS ..

Auto-build script

A simple script to build different (static) version of the client : [1]

Another script to manage the built ryzom_client : launch a new build (both 64 & 32 bits) using my chroot, then saving everything and uploading it to my server : [2]

Sources

For the chroot / static compilation, an excellent tutorial by shevek : [3]

For the client building & dependencies, the RyzomCore wiki page : [4]

For the chroot & client building : [5]


5 pages in Linux

Ryzom Wiki: Ryzom Commons | DE • EN • ESFRRU | Ryzom Forge