Ceci est une ancienne révision du document !
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:
- Debian 8 jessie installation conseiller
- Windows (tuto non fini)
- Sous debian 9, stretch, il reste encore des problèmes d'erreur avec les primitives
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
php5 :
apt install php5 libapache2-mod-php5 php5-mysql php5-gd php5-imagick php5-mcrypt
ou php 7.0
apt install php7.0 libapache2-mod-php7.0 php7.0-mysql php7.0-gd php7.0-imagick php7.0-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
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
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
Debian 9
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
Installer Squish
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/000-default.conf
######################
# Khanat AMS #
######################
<VirtualHost *:80>
ServerName lirria.khaganat.net
ServerAdmin webmaster@localhost
DocumentRoot /home/compil/ryzomweb/public_php/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/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}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
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
Notes de travail :
Une page générale sur tous les web services : https://ryzomcore.atlassian.net/wiki/display/RC/Web+Services+Installer+Design+Doc
Pour installer les web services : https://ryzomcore.atlassian.net/wiki/display/RC/Configure+Linux+Web+Services
—
Pour installer AMS : https://ryzomcore.atlassian.net/wiki/display/RC/Setup+the+AMS
Documentation sur AMS : https://ryzomcore.atlassian.net/wiki/display/RC/Account+Management+System
Détails sur AMS : https://ryzomcore.atlassian.net/wiki/display/RC/AMS+Design+Info
Vidéos et explications de l'auteur de AMS : https://plus.google.com/116363537101759977044
—
Installation de l'API pour avoir des app : https://ryzomcore.atlassian.net/wiki/display/RC/Configuring+Ryzom+API
WIki sur l'API : http://dev.ryzom.com/projects/ryzom-api/wiki
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)
- openIcuConverter
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()
- libcrypto
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]
- libluabind
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)"
- libogg
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





