This page applies for Debian-based GNU/Linux distributions. To compile Ryzom client under Mac OS X, please check this page : Building Ryzom Client under Mac OS X
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
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] :)
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 !
## apt-get install mercurial 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 cmake build-essential \ libpng12-dev libjpeg62-dev rrdtool libmysqlclient15-dev bison libxmu-dev autoconf automake libtool
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
Luabind :
#$ cd packaging/luabind #$ mkdir build && cd build #$ cmake -DWITH_STATIC=ON .. #$ make ## make install
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
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
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
#$ 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
#$ 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
#$ 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, libwww+libsquish+libcpptest+libluabind that 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). Also see building a package later, this building method is the best to do that :)
TODO : pbuilder tutorial
TODO
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 ..
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]
For the chroot / static compilation, an excellent tutorial by shevek : [3]
For the client building & dependencies, the RyzomCore wiki page : [4]