Monter un serveur Cube
Compte rendu d'expérience de la mise en place du serveur de jeu Cube pour héberger les petits frags amicaux de l'AXUL.
Pourquoi Cube?
Et bien parce que!
En
fait, Cube fonctionne assez bien meme sur des machines pas trop
puisssantes (la ou des jeux comme Nexuiz necessitent une bonne carte
graphique et un CPU un peu rapide).
En mode serveur, il ne prend que quelques mega octets en memoire et peut donc tourner sur une machine pas trop récente.
Le matos
Prevoir, si possible:
- Un serveur
- Un client
Pour le serveur, j'ai pris mon vieux PII-200 MHz, je lui ais ajouté un peu de RAM (en fait tout ce que j'ai trouvé, ~128 MB), et j'ai un peu modifié la liste des services démarrés pour l'alléger au maximum.
Pour
faire cela, sur une base de Debian, il faut savoir que le niveau de
fonctionnement par defaut est le 2. Dans ce mode tout tourne. Donc pour
creer un mode serveur de jeu et pouvoir booter directement dessus, le
plus simple est d'utiliser un autre niveau. Le niveau 3 fera l'affaire.
Dans le répertoire /etc/rc3.d supprimer les fichiers dont le nom
commence par S et qui servent a démarrer des services qui ne servent
pas en temps de frag. Dans mon cas, il s'agissait de CUPS, SAMBA et les
démons d'impression de l'imprimante HP.
Ensuite, il faut
booter dessus. Pour cela, il faut editer le fichier de config Grub et
ajouter une nouvelle entrée. Passer comme dernier parametre le niveau
dans lequel vous souhaiter fonctionner: 3.
Voici l'extrait de mon fichier /boot/grub/menu.lst:
title Game serverEt voila, au prochain boot vous devriez voir une nouvelle entrée, "Game server"...
root (hd1,1)
kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hdb2 ro 3
initrd /boot/initrd.img-2.6.8-2-386
savedefault
boot
Le routeur, le firewall
Ensuite,
il faut ouvrir les bon ports pour permettre aux invités de venir se
faire pulveriser a coup de lance roquettes. Pour cela, il faut ouvrir
les ports 28765 et 28766, en UDP. Je vous laisse a la doc de votre
routeur et aux pages de manuel de Iptable pour savoir comment faire...
Selon
le routeur et la topologie de votre petit reseau, vous ne pourrez pas
forcement tester simplement la connection venant de l'exterieur. Pour
cela, donnez votre IP ou votre nom de domaine a quelqu'un d'autre qui
testera de l'exterieur.
Si vous n'avez pas d'IP fixe, je vous conseille de creer un compte et une adresse sur dynDNS et de mettre en place un client dynDNS sur votre machine. Pour ma part j'utilise ddclient
et il marche tres bien (et le fichier de config est simple). Cela
permet ensuite de simplement donner votre nom de domaine chez dynDNS a
vos partenaires pour qu'ils se connectent.
Le serveur de jeu
Maintenant il vous faut le serveur de jeu. Allez donc le chercher sur sourceforge
Ce
que vous téléchargez est un paquet contenant des binaires et les
sources. Le binaire devrait fonctionner sans probleme. Pour lancer un
serveur, a partir du repertoire "cube", lancez: ./bin_unix/linux_server
Le serveur comprend un certain nombre d'option passées sur la ligne de commande. Les plus importantes sont:
- -m<une-adresse> (pour spécifier le serveur maitre aupres duquel vous allez vous enregistrer).
- -c<un-nombre> (le maximum de clients autorisés a se connecter).
- -n<un-nom> (le nom de votre serveur tel qu'il sera listé dans le navigateurs de serveurs).
- -p<un-mot-de-passe> (pour démarrer un serveur dont la connection necessite un mot de passe).
Par
défaut, si vous ne spécifiez rien concernant le serveur maitre, votre
serveur Cube va se déclarer aupres du serveur maitre Cube (sur
internet) et sera ensuite proposé au monde entier. Si vous souhaitez
garder votre partie pour vous et ne pas en faire a pub, utilisez -mlocalhost. De cette façon votre serveur ne se declarera qu'aupres de lui meme.
Un
petit example est toujours mieux qu'un grand discours. Pour démarrer
mon serveur que je ne souhaite pas ouvert au monde entier, pouvant
accueillir 6 joueurs et nommé AXUL:
./bin_unix/linux_server -mlocalhost -nAXUL -c6
Une fois le serveur démarré, testez le avec un client...
Le client
Maintenant
le test avec un client. Je reviens quelques instants sur ce que j'ai
écrit au début de l'article: il faut une machine pour le serveur et une
pour le client. Ce n'est pas necessaire, mais cela permet d'optimiser
le serveur (en arretant certain service ou en ne démarrant pas X11)
afin de le rendre plus réactif et cela fait que le rendu graphique fait
pour le client n'impacte pas la réactivité du serveur.
Configurez
vous un client avec un nom de joueur et un petit menu permettant de
vous connecter au serveur. Par défaut vous devrez certainement vous
connecter a votre serveur en donnant son adresse local (adresse privée
sur votre réseau local) alors que les autres joueurs devront donner
votre adresse public.
Pour configurer Cube il faut editer
le fichier autoexec.cfg. Voici un example qui permet en utilisant la
touche F1 d'acceder a un menu a partir duquel il est possible de
définir son nom (c'est utile dans une partie de ne pas tous avoir le
meme pseudo par defaut) et de se connecter a un serveur local (en
192.168.1.2) ou au serveur tuxfamily:
crosshairsize 25
newmenu AXUL
menuitem "Connection serveur local" "connect 192.168.1.2"
menuitem "Connection tuxfamily" "connect games.tuxfamily.net"
menuitem "Mon nom" "name MonNom"
bind F1 "showmenu AXUL"
Et voila. Il reste cependant quelques parametres qui ne passent pas par le fichier autoexec.cfg: la taille et la résolution graphique du client. Pour cela, utilisez les parametres -w<largeur> et -h<hauteur>. Pour démarrer le client Cube en 1024x768:
./bin_unix/linux_client -w1024 -h768
Bon frag.