Plusieurs serveurs Armagetron Advanced

Voici comment les serveurs Fast Track sont gérés sur un serveur Linux

== Introduction ==

Si vous aimez expérimenter différents paramètres de jeu, vous aurez certainement un nombre de différents serveurs très intéressant. Il serait bien dommage de ne pas pouvoir les faire tourner tous en même temps. L’objectif de cet article est de vous mettre sur la voie, à l’instar des serveurs Fast Track, Spacezone ou Wild West.

Cet article n’explique pas comment créé un serveur. Je pars du principe que vous savez le faire. Sinon vous ne seriez probablement pas arrivé ici.

Cet exemple est basé sur un serveur Linux Debian Etch 32bits. Bien entendu, attention à votre choix de serveur. Si celui-ci est déjà débordé, surchargé, ou que il est en australie, vous risquez d’avoir trop de latence, et le lag sera de la partie à coup sûr. Vous pouvez vous renseigner sur le [http://wiki.armagetronad.net wiki] de Armagetron Advanced à ce sujet.

Pour attendre notre but, nous allons utiliser l’excellent [http://www.gnu.org/software/screen/ GNU Screen] qui permet de démarrer plusieurs terminaux en mode fenêtré texte. D’usage facile, il nous permettra ensuite de passer d’un serveur à l’autre sans encombre, afin de surveiller ce qui s’y passe, ou d’y entrer des commandes.

== Server installation ==

La première étape consiste a installer Armagetron Advanced Dedicated Server depuis la source. Nous n’utiliserons pas le script d’installation fourni. Nous pourrons ainsi décidé des dossiers dans lesquels nous voulons mettre les différents fichiers et paramètres.

Téléchargez l’archive SOURCE de la [http://www.armagetronad.net/downloads.php dernière version stable] de Armagetron Advanced Dedicated Server. Décompressez la dans un dossier temporaire. Par exemple ~/install/. Rendez-vous ensuite dans le dossier en question.

Par défaut, Armagetron Advanced Dedicated Server est installé dans le dossier /opt/armagetronad. Toutefois, vous pouvez, grace au paramètre –prefix de la commande configure, choisir l’emplacement qui vous convient. Pour ma part, pour des raisons pratiques et personnelles, j’ai choisi /etc/arma. Faites votre propre choix.

Pour installer le serveur dans ce dossier, voici les commandes que j’exécute:

./configure --prefix=/etc/arma --disable-glout --enable-automakedefaults --disable-sysinstall --disable-etc --disable-useradd --disable-initscripts

Ensuite, nous compilons et installons l’application:

make
make install

Le serveur est maintenant installé dans /etc/arma et prêt à être exécuté.

== Préparation des serveurs multiples ==

=== L’arborescence ===

Rendez-vous dans le dossier /etc/arma:

cd /etc/arma

Créez les dossiers suivants:

mkdir servers 		#Ce dossier servira a stocker les différents serveurs
mkdir logs		#Celui-ci contiendra les logs de nos serveurs
mkdir scripts		#Et ce dernier contiendra les scripts de démarrage des serveurs

=== Création des serveurs ===

Nous pouvons maintenant créer des serveurs. Pour ce faire, nous allons dans le dossier servers précédemment créé, et nous créerons un sous dossier pour chaque serveur, et dans celui-ci, un dossier settings pour les paramètres, et var pour les variables (ladder, scores, etc…). Par exemple, pour un serveur appelé “server1”:

cd /etc/arma/servers
mkdir server1
mkdir server1/settings
mkdir server1/var

Ensuite, vous n’avez plus qu’à mettre tous vos fichiers de configuration dans le dossier settings du serveur.

Vous pouvez créer un second serveur, et un troisième etc…

mkdir server2
mkdir server2/settings
mkdir server2/var
mkdir server3
mkdir server3/settings
mkdir server3/var

=== Les fichiers de paramètres ===

Les ports utilisés par Armagetron Advanced Dedicated Server sont les ports 4534 à 4540. Par défaut, lorsque vous démarrez des serveurs, le premier prend le 4534, le suivant le 4535 et ainsi de suite. Si vous redémarrez les serveurs dans un ordre différent, ils utiliseront donc pas le même port que la fois précédence. Afin de ne pas gêner les joueurs qui utilisent les bookmarks, nous fixons les ports grace au fichier “[http://wiki.armagetronad.net/index.php?title=Configuration_Files server_info.cfg]” dans lequel le port peut-être forcé.

Je considère que vous connaissez suffisemment bien l’adminstration d’un serveur Armagetron pour comprendre les explications ci-dessus. Dans le cas contraire, rendez-vous sur le [http://wiki.armagetronad.net wiki] et faites déjà quelques serveurs chez vous pour vous faire la main sur le paramètrage.

== Les scripts ==

Maintenant que nos serveurs ont été créés, les fichiers de paramètres adaptés, nous allons créer les scripts de démarrage.

Commencez par installer GNU Screen. Dans Debian:

sudo apt-get install screen

Nous allons créer deux scripts:

Le premier lancera l’exécution d’un serveur dans une fenêtre GNU Screen après avoir vérifié qu’il n’était pas déjà démarré, et le stoppera si c’est le cas avant de le relancer.

Le second exécutera le premier pour chaque dossier contenu dans /etc/arma/servers, d’où l’intérêt de l’arborescence.

Nous enregistrerons ces scripts dans le dossier /etc/arma/scripts.

=== Le script de démarrage du serveur ===

Dans notre exemple, le premier script s’appelle simplement “srv”

nano /etc/arma/scripts/srv

Cette commande crée un nouveau fichier appeler “srv” dans /etc/arma/scripts. Voici le contenu du script:

#!/bin/bash
 
screen -S $1 -X logtstamp on 					# Imprime l'heure et la date dans le log
screen -S $1 -X logfile /etc/arma/logs/$1_%d%m%Y-%c.log 	# crée un fichier log avec le nom du serveur, et la date du jour dans le dossier /etc/arma/logs
screen -S $1 -X log on 						# active la journalisation du serveur dans le fichier log
while true; do 							# Démarre une boucle qui relancera le serveur en cas de crash
 
# Exécution du serveur Armagetronad. Par défaut, le binaire s'appelle armagetronad-dedicated et se trouve dans le sous-dossier bin du dossier choisi à la compilation. Dans notre cas, il sera donc dans /etc/arma/bin
# $1 reprends la valeur mise après le nom du script lors de l'exécution. Il s'agira ici de l'un des sous répertoires créé dans /etc/arma/servers. Par exemple server1

/etc/arma/bin/armagetronad-dedicated --configdir /etc/arma/servers/$1/settings –vardir /etc/arma/servers/$1/var
 
# Montre un message d'erreur dans la fenêtre screen et attends 5 seconde avant d'essayer de redémarrer le serveur. Ces 5 secondes permettent d'arrêter l'exécution avec CTRL-C

	echo "Server has crashed. It will restart immediately..., press CTRL-C to cancel"
	sleep 5
 
done # fin de la boucle

Pour sauvegarder le script, tapez CTRL-X puis Y(es) pour confirmer. Activez les droits d’exécution sur le script:

chmode +x /etc/arma/scripts/srv

=== Le script de démarrage de tous les serveurs ===

J’appelle ce second script “start”. Simple mais clair 🙂 Celui-ci va donc appeler le premier script pour chaque dossier contenu dans /etc/arma/servers

nano /etc/arma/scripts/srv
#!/bin/bash
 
# Si vous exécutez le script avec un nom de serveur, seul ce serveur démarrera, sinon, tous les serveurs contenu dans /etc/arma/servers seront démarrés
 
# Exécution d'un seul serveur
if [ "$1" != "" ]; then
	screen -S $1 -X quit				# Tue la fenêtre screen de ce serveur si elle existe déjà
	screen -dmS $1 /etc/arma/scripts/srv $1			# Démarre le serveur dans une fenêtre GNU Screen portant le nom du serveur à démarrer

else

# Exécution de tout les serveurs

	for f in $(ls /etc/arma/servers/.)				# Démarre une loupe basée sur l'ensemble des dossiers contenu dans /etc/arma/servers
		do
			screen -S $f -X quit				# Tue la fenêtre screen de ce serveur si elle existe déjà
			screen -dmS $f /etc/arma/scripts/srv $f	# Démarre le serveur dans une fenêtre GNU Screen portant le nom du serveur à démarrer
		done							# Termine la boucle
fi

Sauvegardez le fichier, et changez les droits comme indiqué précédemment.

=== Démarrer les serveurs ===

Pour démarrer les serveurs au boot, éditez le script /etc/rc.local et ajoutez le /etc/arma/scripts/start à la fin.

Si vous souhaitez démarrer les serveurs manuellement, exécutez simplement /etc/arma/scripts/start

=== Démarrer un serveur en particulier ===

Si vous désirez démarrer (ou redémarrer) un serveur en particulier, exécutez:

/etc/arma/scripts/start nom_du_serveur

Par exemple:

/etc/arma/scripts/start server3

== Gestion des serveurs ==

=== GNU screen ===

GNU Screen est un excellent outil. Il permet d’avoir un environnement multifenêtre dans un simple terminal. Pour avoir une idée plus approfondie de son utilisation, tapez:

man screen

=== Voir la liste des serveurs actifs ===

Pour voir la liste des fenêtres Screen existantes, tapez:

screen -ls

=== Accéder à la console d’un serveur ===

Pour attacher le terminal à une fenêtre, utilisez -r (comme resume):

screen -r nom_du_server

Par exemple:

screen -r server2

Vous pouvez dès lors gérer votre serveur, écrire des messages Admin, et tout ce qu’on peut faire dans une console Armagetron Advanced Dedicated Server.

Pour détacher la fenêtre du terminal, tapez CTRL-a d (la touche contrôle + la lettre “A” en minuscule, et ensuite la lettre “D” en minuscule”). C’est la séquence de touche pour “D”étacher la fenêtre. Le serveur reste en exécution.

=== Tuer une serveur ===

Pour tuer un serveur, attachez simplement sa fenêtre au terminal, et tapez CTRL-C pour figer la fenêtre. Tapez ensuite ESC pour sortir de la fenêtre morte de GNU screen. Vous pouvez arriver en même résultat sans vous attachez à la fenêtre. Depuis le terminal, tapez:

screen -S nom_du_serveur -X quit

Cette commande va “quitter” le serveur armagetron, puis terminer la fenêtre protant le nom du serveur.

=== Journaux ===

Chaque fois que le script “srv” est exécuté, un nouveau fichier journal (log) va être créé dans /etc/arma/logs. Gardez un oeil sur ces logs. Ils peuvent grandir assez vite si votre serveur a du succès, et ils pourraient bien remplir votre disque au bout de quelques mois. D’autre part, ils vous permettent de surveiller un joueur suspect par exemple… En utilisant les commandes cat et grep, vous pouvez facilement voir tout ce qui concerne ce joueur et juger s’il a besoin d’être remis en place ou pas 🙂

Voilà. Vos serveurs sont prêts. Amusez-vous bien…

3 thoughts on “Plusieurs serveurs Armagetron Advanced

  1. Salut Kim,

    Je pense que ton tutoriel va m’être très utile !
    J’ai un serveur en France et je souhaite y mettre un serveur armagetron.
    Si je réussis, je te fais signe. (je suis nul en linux)

    Wally – The Wall

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.