Outils pour utilisateurs

Outils du site


Panneau latéral

Forum

doc:admin:serveur_dedie2

Créer un serveur dédié (une autre approche)

Le but de cette page est de vous expliquer comment lancer et configurer un serveur dédié.

Un serveur dédié …

  • Ne démarre pas le moteur graphique du jeu.
  • Permet une configuration aux petits oignons des paramètres de jeu.
  • Permet d'héberger une partie internet ou LAN.

Prérequis

  • Une machine que vous pouvez laisser allumée, de préférence en permanence (un serveur quoi)
  • Une connexion internet ayant un bon taux d'upload (1MBits/sec n'est pas un luxe)
  • De préférence, un système d'exploitation de la famille Unix (GNU/Linux, Mac OS X…), mais ça marche aussi sous Windows.
  • Le jeu installé sur votre machine, en vérifiant que vous disposez des éxécutables pour le serveur dédié.

Etapes à suivre

  1. installation du jeu
  2. redirection des ports UDP
  3. prévoir un compte utilisateur pour lancer le serveur (facultatif si windows)
  4. préparer les fichiers de configuration
  5. préparer le roulement des maps
  6. scripts de démarrage et arrêt (actuellement, il n'y a que des scripts pour Linux)
  7. administration par rcon

Installation du jeu

Référez-vous à la méthode standard d'installation du jeu.

Redirection des ports UDP

Assurez-vous que le port que vous allez utilisé soit joignable. Pour cela, configurez votre routeur ainsi que votre pare-feu si vous en possédez. Le port par défaut est le 29760 en UDP. Si vous souhaitez lancer plusieurs serveurs sur votre machine, n'utilisez pas plusieurs fois le même port ;-)

Récapitulatif:

  • Port entrant UDP 27960 (celui utilisé par défaut pour les serveurs)
  • Port sortant UDP 27950 (pour permettre à votre serveur de contacter dpmaster et d'être listé)

Compte utilisateur (linux)

Pour des raisons de sécurité, ne lancez pas le serveur depuis votre compte root, mais créez un compte utilisateur dédié à cette tâche.

Créer le compte

En étant root :

adduser oa

Complétez les informations demandées.

Vérifier les permissions

L'utilisateur oa doit pouvoir accéder aux fichiers d'OpenArena. Les binaires du jeu doivent notamment être éxécutables. Vérifiez cela :

ls -l /INSTALL_OA/ # càd ''/usr/local/games/openarena-x-x-x'' si vous avez suivi nos recommandations d'installation

Vous pouvez généralement régler le problème des permissions en rendant le compte oa possesseur des fichiers, en étant root :

chown oa -R /INSTALL_OA/

Utiliser le compte

Dorénavant, utilisez le compte nouvellement créé pour administrer votre serveur openarena.

su oa

Fichiers de configuration

<note tip>Je mets à disposition les fichiers de config tout chauds (29 nov. 2011) d'un serveur ROFL, vous pouvez les repomper ou vous en inspirer. Je me suis amusé à la rendre “modulaire”. A noter que g_motdfile n'est pas encore valable avec OA 0.8.5, et que vous devrez faire un lien symbolique vers le répertoire “commons” pour que ceci fonctionne.

Ci-dessous, vous trouverez l'ancienne config.</note>

Configuration générale

Pour chaque serveur, nous vous recommandons d'utiliser 2 fichiers de configuration séparés. L'un d'eux sera relativement fixe et contiendra le plus gros de la configuration du serveur, tandis que l'autre fixera les paramètres variables du jeu que vous pourriez avoir envie de changer au cours du temps, telle que la rotation des cartes, le mode de jeu…

Vous devrez bien sûr adapter ces fichiers selon vos désirs, les descriptions de cette section sont sommaires. Il existe aussi d'autres variables non mentionnées dans ces fichiers proposés, et vous pouvez sans doute commenter certaines de ces lignes (avec un double-slash en début de ligne) pour laisser les valeurs par défaut.

Vous pouvez aussi vous inspirer des configurations de nos serveurs.

Dans ~/.openarena/baseoa, créez un fichier server1.cfg contenant :

// --- infos ---
sets ".Admin" "Robert"				// Remplacez par votre nom
sets ".email" "Roger@Pluton.zob"		// Placez-y votre email si vous le désirez
sets ".www" "http://openarena.tuxfamily.org"	// Mettez votre site web

set net_ip "xxx.xxx.xxx.xxx"			// Remplacez par l'adresse IP de votre interface locale (ex: 192.168.1.100)
set net_port "xxxx"				// Remplacez par le numéro de port que votre serveur utilise (par défaut: 27960)

set sv_hostname ""				// Le nom qui apparaitra dans la liste de serveurs
set g_motd ""					// Le message qui apparaitra aux joueurs lors de la connexion au serveur

// --- passwords ---
set rconpassword ""				// Un mot de passe qui permettra d'administrer ce serveur à distance
set g_password none				// Pour que votre serveur soit joignable par tout le monde
set g_needpass none				// Idem
set sv_privatePassword ""			// Si vous désirez des slots privés, entrez le mot de passe que les joueurs privilégiés devront connaitre

// --- main configuration ---
set sv_master1 "dpmaster.deathmask.net"
set sv_pure 1 					// Pour un serveur pure (1) ou unpure (0)
set g_allowvote "1" 				// Permettre aux joueurs de proposer des votes
set sv_floodProtect "0"				// Pour que le tchat soit fluide
set g_filterBan "1"				// Si vous prévoyez de bannir des gens (han, pas bien)

set g_logfile "server1.log"			//Conserver les logs dans ce fichier, variable ioq3
set g_logfileSync "1"
set g_log "server1.log"				//Conserver les logs dans ce fichier, variable q3
set g_logSync "1"

set sv_maxClients "12"				// Nombre de joueurs connectés au maximum, dont les slots privés
set sv_privateClients "2"			// Nombre de slots réservés aux joueurs connaissant sv_PrivatePassword

// --- download ---
set sv_allowdownload "1"			// Permet le téléchargement des fichiers pk3 présents sur le serveur dont le client ne dispose pas
set sv_wwwDownload "0"				// Activez (1) si vous désirez utiliser un serveur HTTP pour héberger vos fichiers pk3
set cl_wwwDownload "0"				// Idem
set sv_dlURL ""					// Addresse HTTP du répertoire contenant ces fichiers pk3

// --- network ---
set sv_maxping "300"				// Un joueur qui aura un ping superieur sera refoulé à la connexion
set sv_minping 0
set sv_maxRate "25000"				// Quantité de données transmises pour chaque client
set sv_snaps 40					// Snapshots ...

set g_delaghitscan "1"				// Activer (1) la compensation du lag

// --- weapons ---
//set g_quadfactor "3"				// quotient multiplicateur de dommages du quad damage, par défaut = 3
//set g_weaponrespawn "5" 			// Temps de réapparition des armes, par défaut = 5
set g_friendlyfire "0"				// tirs alliés désactivés (0)
set g_teamAutoJoin "0"				// A activer pour qu'un joueur rejoigne automatiquement une équipe dès qu'il est connecté.
set g_teamForceBalance "0"			// A activer pour imposer le choix de l'équipe aux joueurs
set g_forcerespawn "0"				// Temps à partir duquel les joueurs réapparaissent automatiquement après leur mort, 0 = jamais

// --- bots ---
set bot_enable "1"				// Autoriser (1) les bots sur le serveur
set bot_minplayers "0" 				// Nombre minimal de joueurs, comblé par des bots si non atteint
set bot_nochat "1"				// Pour interdire (1) les bots de parler

// --- map rotation ---
exec maprotation1.cfg				// éxécution du fichier contenant la rotation des cartes

Roulement des cartes

Maintenant, vous devez décider de l'enchainement des cartes qui s'effectuera sur votre serveur. Habituellement, vous consacrerez votre serveur à un mode de jeu particulier (DM, ou CTF…) et effectuerez un roulement entre plusieurs cartes prévues pour fonctionner avec ce mode.

Voyons un exemple avec un serveur CTF et 5 cartes de jeu.

Dans ~/.openarena/baseoa, créez un second fichier maprotation1.cfg contenant :

// --- configuration type de jeu ---
set g_gametype 4				// type du jeu (deathmatch, 1vs1, TDM, CTF...) ; voir doc:oa:admin:gametype
set timelimit 20				// limite de temps pour chaque match
set capturelimit 8				// nombre de captures de drapeaux à effectuer (pour les modes CTF et similaires)
set fraglimit 5					// nombre de frags à effectuer pour remporter le match (pour les modes DM, TDM & similaires)

set disable_weapon_bfg "0"			// Désactiver le bfg ? (1 = Oui)

// --- map rotation ---
set m1 "map oa_ctf4ish ; set nextmap vstr m2"
set m2 "map oasago2 ; set nextmap vstr m3
set m3 "map ctf_gate1 ; set nextmap vstr m4"
set m4 "map ps37ctf ; set nextmap vstr m5"
set m5 "map pul1ctf ; set nextmap vstr m1"

vstr m1						// NE PAS OUBLIER, sinon votre serveur ne démarrera aucune carte et ne sera pas joignable

MOTD (Message du jour)

Pour afficher un message à la connexion des joueurs (après le chargement de la map), il suffit de créer un fichier motd.cfg dans le dossier baseoa contenant le texte souhaité. L'avantage est qu'il apparait plus longtemps et qu'il peut comporter plusieurs lignes (attention toutefois à ne pas dépasser environ 40 caractères par ligne).

Scripts de lancement et d'arrêt

Script de démarrage du serveur (linux)

Enregistrez ce fichier sous start-server1.sh dans votre répertoire utilisateur :

#!/bin/sh
name="server1"

installdir="/usr/local/games/openarena-x.x.x/"

# Quel mod on va utiliser ? Décommentez la bonne, laissez baseoa si vous n'utilisez aucun mod particulier
mod_name="baseoa"
#mod_name="missionpack"
#mod_name="freeze"
#mod_name="q3pong"
#mod_name="bfpq3"
#mod_name="westernq3"
#mod_name="gridiron +set vm_game 1 +set vm_cgame 1 +set vm_ui 1 +bot_enable 0"

# On ajoute le mod choisi en paramètre ...
mod_parameter=""
if [ $mod_name != "baseoa" ]
  then mod_parameter="+set fs_game $mod_name"
fi

# Autres paramètres facultatifs
#other_params="+set com_hunkMegs 96"

# On lance !
echo Lancement du serveur: $name.

screen -A -m -d -S $name $installdir/oa_ded.i386 +set fs_basepath $installdir +set dedicated 2 +exec server1.cfg $mod_parameter $other_params

Rendez éxécutable ce script :

chmod +x start_server1.sh

Puis lancez-le pour démarrer le serveur :

./start_server1.sh

Le serveur sera lancé dans une session screen qui est détachée de votre terminal actuel. Vous pouvez alors vous délogger si vous le souhaitez, le serveur continuera de tourner.

Script d'arrêt du serveur (linux)

Voici un script qui recensera vos serveurs et vous demandera pour chacun si vous désirez l'arrêter ou non.

Enregistrez ceci sous stop-server.sh.

#!/bin/sh

tmpfile=`mktemp`

ps x | grep SCREEN | grep oa |grep -v "grep" |
while read pid tty stat time command
do
  server_name=`echo $command | cut -d " " -f 6`
  echo $server_name:$pid >> $tmpfile
done

for i in `cat $tmpfile`
do
  server_name=`echo $i | cut -d ":" -f 1`
  pid=`echo $i | cut -d ":" -f 2` 
  read -p "Fermer le serveur \"$server_name\" ? (PID: $pid) ['o' or 'y' pour oui] " answer

  case $answer in
  o|O|y|Y  ) kill $pid && echo "$server_name tué !" ;;
  *)
  esac

done

Rendez le éxécutable :

chmod +x ./stop-server.sh

Vous pourrez alors l'invoquer avec ./stop-server.sh

Exemple de sortie produite:

~$ ./stop-server.sh 
Fermer le serveur "cacatoes1" ? (PID: 23273) ['o' or 'y' pour oui] n
Fermer le serveur "cacatoes2" ? (PID: 23277) ['o' or 'y' pour oui] y
cacatoes2 tué !
doc/admin/serveur_dedie2.txt · Dernière modification: 2017/02/20 09:21 (modification externe)