{"id":181,"date":"2009-03-13T12:54:01","date_gmt":"2009-03-13T11:54:01","guid":{"rendered":"http:\/\/www.superkikim.com\/?p=181"},"modified":"2009-03-13T12:54:38","modified_gmt":"2009-03-13T11:54:38","slug":"plusieurs-serveurs-armagetron-advanced","status":"publish","type":"post","link":"https:\/\/akim.sissaoui.com\/en\/non-classe\/plusieurs-serveurs-armagetron-advanced\/","title":{"rendered":"Plusieurs serveurs Armagetron Advanced"},"content":{"rendered":"<p>Voici comment les serveurs Fast Track sont g\u00e9r\u00e9s sur un serveur Linux<\/p>\n<p>== Introduction ==<\/p>\n<p>Si vous aimez exp\u00e9rimenter diff\u00e9rents param\u00e8tres de jeu, vous aurez certainement un nombre de diff\u00e9rents serveurs tr\u00e8s int\u00e9ressant. Il serait bien dommage de ne pas pouvoir les faire tourner tous en m\u00eame temps. L&#8217;objectif de cet article est de vous mettre sur la voie, \u00e0 l&#8217;instar des serveurs Fast Track, Spacezone ou Wild West.<\/p>\n<p>Cet article n&#8217;explique pas comment cr\u00e9\u00e9 un serveur. Je pars du principe que vous savez le faire. Sinon vous ne seriez probablement pas arriv\u00e9 ici.<\/p>\n<p><!--more--><!--toc--><\/p>\n<p>Cet exemple est bas\u00e9 sur un serveur Linux Debian Etch 32bits. Bien entendu, attention \u00e0 votre choix de serveur. Si celui-ci est d\u00e9j\u00e0 d\u00e9bord\u00e9, surcharg\u00e9, ou que il est en australie, vous risquez d&#8217;avoir trop de latence, et le lag sera de la partie \u00e0 coup s\u00fbr. Vous pouvez vous renseigner sur le [http:\/\/wiki.armagetronad.net wiki] de Armagetron Advanced \u00e0 ce sujet.<\/p>\n<p>Pour attendre notre but, nous allons utiliser l&#8217;excellent [http:\/\/www.gnu.org\/software\/screen\/ GNU Screen] qui permet de d\u00e9marrer plusieurs terminaux en mode fen\u00eatr\u00e9 texte. D&#8217;usage facile, il nous permettra ensuite de passer d&#8217;un serveur \u00e0 l&#8217;autre sans encombre, afin de surveiller ce qui s&#8217;y passe, ou d&#8217;y entrer des commandes.<\/p>\n<p>== Server installation ==<\/p>\n<p>La premi\u00e8re \u00e9tape consiste a installer Armagetron Advanced Dedicated Server depuis la source. Nous n&#8217;utiliserons pas le script d&#8217;installation fourni. Nous pourrons ainsi d\u00e9cid\u00e9 des dossiers dans lesquels nous voulons mettre les diff\u00e9rents fichiers et param\u00e8tres.<\/p>\n<p>T\u00e9l\u00e9chargez l&#8217;archive SOURCE de la [http:\/\/www.armagetronad.net\/downloads.php derni\u00e8re version stable] de Armagetron Advanced Dedicated Server. D\u00e9compressez la dans un dossier temporaire. Par exemple ~\/install\/. Rendez-vous ensuite dans le dossier en question.<\/p>\n<p>Par d\u00e9faut, Armagetron Advanced Dedicated Server est install\u00e9 dans le dossier \/opt\/armagetronad. Toutefois, vous pouvez, grace au param\u00e8tre &#8211;prefix de la commande configure, choisir l&#8217;emplacement qui vous convient. Pour ma part, pour des raisons pratiques et personnelles, j&#8217;ai choisi \/etc\/arma. Faites votre propre choix.<\/p>\n<p>Pour installer le serveur dans ce dossier, voici les commandes que j&#8217;ex\u00e9cute:<\/p>\n<pre lang=\"bash\" line=\"n\">.\/configure --prefix=\/etc\/arma --disable-glout --enable-automakedefaults --disable-sysinstall --disable-etc --disable-useradd --disable-initscripts<\/pre>\n<p>Ensuite, nous compilons et installons l&#8217;application:<\/p>\n<pre lang=\"bash\" line=\"n\">make\r\nmake install<\/pre>\n<p>Le serveur est maintenant install\u00e9 dans \/etc\/arma et pr\u00eat \u00e0 \u00eatre ex\u00e9cut\u00e9.<\/p>\n<p>== Pr\u00e9paration des serveurs multiples ==<\/p>\n<p>=== L&#8217;arborescence ===<\/p>\n<p>Rendez-vous dans le dossier \/etc\/arma:<\/p>\n<pre lang=\"bash\" line=\"n\">cd \/etc\/arma<\/pre>\n<p>Cr\u00e9ez les dossiers suivants:<\/p>\n<pre lang=\"bash\" line=\"n\">mkdir servers \t\t#Ce dossier servira a stocker les diff\u00e9rents serveurs\r\nmkdir logs\t\t#Celui-ci contiendra les logs de nos serveurs\r\nmkdir scripts\t\t#Et ce dernier contiendra les scripts de d\u00e9marrage des serveurs<\/pre>\n<p>=== Cr\u00e9ation des serveurs ===<\/p>\n<p>Nous pouvons maintenant cr\u00e9er des serveurs. Pour ce faire, nous allons dans le dossier servers pr\u00e9c\u00e9demment cr\u00e9\u00e9, et nous cr\u00e9erons un sous dossier pour chaque serveur, et dans celui-ci, un dossier settings pour les param\u00e8tres, et var pour les variables (ladder, scores, etc&#8230;). Par exemple, pour un serveur appel\u00e9 &#8220;server1&#8221;:<\/p>\n<pre lang=\"bash\" line=\"n\">cd \/etc\/arma\/servers\r\nmkdir server1\r\nmkdir server1\/settings\r\nmkdir server1\/var<\/pre>\n<p>Ensuite, vous n&#8217;avez plus qu&#8217;\u00e0 mettre tous vos fichiers de configuration dans le dossier settings du serveur. <\/p>\n<p>Vous pouvez cr\u00e9er un second serveur, et un troisi\u00e8me etc&#8230;<\/p>\n<pre lang=\"bash\" line=\"n\">mkdir server2\r\nmkdir server2\/settings\r\nmkdir server2\/var<\/pre>\n<pre lang=\"bash\" line=\"n\">mkdir server3\r\nmkdir server3\/settings\r\nmkdir server3\/var<\/pre>\n<p>=== Les fichiers de param\u00e8tres ===<\/p>\n<p>Les ports utilis\u00e9s par Armagetron Advanced Dedicated Server sont les ports 4534 \u00e0 4540. Par d\u00e9faut, lorsque vous d\u00e9marrez des serveurs, le premier prend le 4534, le suivant le 4535 et ainsi de suite. Si vous red\u00e9marrez les serveurs dans un ordre diff\u00e9rent, ils utiliseront donc pas le m\u00eame port que la fois pr\u00e9c\u00e9dence. Afin de ne pas g\u00eaner les joueurs qui utilisent les bookmarks, nous fixons les ports grace au fichier &#8220;[http:\/\/wiki.armagetronad.net\/index.php?title=Configuration_Files server_info.cfg]&#8221; dans lequel le port peut-\u00eatre forc\u00e9.<\/p>\n<p>Je consid\u00e8re que vous connaissez suffisemment bien l&#8217;adminstration d&#8217;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\u00e9j\u00e0 quelques serveurs chez vous pour vous faire la main sur le param\u00e8trage.  <\/p>\n<p>== Les scripts ==<\/p>\n<p>Maintenant que nos serveurs ont \u00e9t\u00e9 cr\u00e9\u00e9s, les fichiers de param\u00e8tres adapt\u00e9s, nous allons cr\u00e9er les scripts de d\u00e9marrage. <\/p>\n<p>Commencez par installer GNU Screen. Dans Debian:<\/p>\n<pre lang=\"bash\" line=\"n\">sudo apt-get install screen<\/pre>\n<p>Nous allons cr\u00e9er deux scripts:<\/p>\n<p>Le premier lancera l&#8217;ex\u00e9cution d&#8217;un serveur dans une fen\u00eatre GNU Screen apr\u00e8s avoir v\u00e9rifi\u00e9 qu&#8217;il n&#8217;\u00e9tait pas d\u00e9j\u00e0 d\u00e9marr\u00e9, et le stoppera si c&#8217;est le cas avant de le relancer. <\/p>\n<p>Le second ex\u00e9cutera le premier pour chaque dossier contenu dans \/etc\/arma\/servers, d&#8217;o\u00f9 l&#8217;int\u00e9r\u00eat de l&#8217;arborescence.<\/p>\n<p>Nous enregistrerons ces scripts dans le dossier \/etc\/arma\/scripts.<\/p>\n<p>=== Le script de d\u00e9marrage du serveur ===<\/p>\n<p>Dans notre exemple, le premier script s&#8217;appelle simplement &#8220;srv&#8221;<\/p>\n<pre lang=\"bash\" line=\"n\">nano \/etc\/arma\/scripts\/srv<\/pre>\n<p>Cette commande cr\u00e9e un nouveau fichier appeler &#8220;srv&#8221; dans \/etc\/arma\/scripts. Voici le contenu du script:<\/p>\n<pre lang=\"bash\" line=\"n\">#!\/bin\/bash\r\n \r\nscreen -S $1 -X logtstamp on \t\t\t\t\t# Imprime l'heure et la date dans le log\r\nscreen -S $1 -X logfile \/etc\/arma\/logs\/$1_%d%m%Y-%c.log \t# cr\u00e9e un fichier log avec le nom du serveur, et la date du jour dans le dossier \/etc\/arma\/logs\r\nscreen -S $1 -X log on \t\t\t\t\t\t# active la journalisation du serveur dans le fichier log\r\nwhile true; do \t\t\t\t\t\t\t# D\u00e9marre une boucle qui relancera le serveur en cas de crash\r\n \r\n# Ex\u00e9cution du serveur Armagetronad. Par d\u00e9faut, le binaire s'appelle armagetronad-dedicated et se trouve dans le sous-dossier bin du dossier choisi \u00e0 la compilation. Dans notre cas, il sera donc dans \/etc\/arma\/bin\r\n# $1 reprends la valeur mise apr\u00e8s le nom du script lors de l'ex\u00e9cution. Il s'agira ici de l'un des sous r\u00e9pertoires cr\u00e9\u00e9 dans \/etc\/arma\/servers. Par exemple server1\r\n\r\n\/etc\/arma\/bin\/armagetronad-dedicated --configdir \/etc\/arma\/servers\/$1\/settings \u2013vardir \/etc\/arma\/servers\/$1\/var\r\n \r\n# Montre un message d'erreur dans la fen\u00eatre screen et attends 5 seconde avant d'essayer de red\u00e9marrer le serveur. Ces 5 secondes permettent d'arr\u00eater l'ex\u00e9cution avec CTRL-C\r\n\r\n\techo \"Server has crashed. It will restart immediately..., press CTRL-C to cancel\"\r\n\tsleep 5\r\n \r\ndone # fin de la boucle<\/pre>\n<p>Pour sauvegarder le script, tapez CTRL-X puis Y(es) pour confirmer. Activez les droits d&#8217;ex\u00e9cution sur le script:<\/p>\n<pre lang=\"bash\" line=\"n\">chmode +x \/etc\/arma\/scripts\/srv<\/pre>\n<p>=== Le script de d\u00e9marrage de tous les serveurs ===<\/p>\n<p>J&#8217;appelle ce second script &#8220;start&#8221;. Simple mais clair \ud83d\ude42 Celui-ci va donc appeler le premier script pour chaque dossier contenu dans \/etc\/arma\/servers<\/p>\n<pre lang=\"bash\" line=\"n\">nano \/etc\/arma\/scripts\/srv<\/pre>\n<pre lang=\"bash\" line=\"n\">#!\/bin\/bash\r\n \r\n# Si vous ex\u00e9cutez le script avec un nom de serveur, seul ce serveur d\u00e9marrera, sinon, tous les serveurs contenu dans \/etc\/arma\/servers seront d\u00e9marr\u00e9s\r\n \r\n# Ex\u00e9cution d'un seul serveur\r\nif [ \"$1\" != \"\" ]; then\r\n\tscreen -S $1 -X quit\t\t\t\t# Tue la fen\u00eatre screen de ce serveur si elle existe d\u00e9j\u00e0\r\n\tscreen -dmS $1 \/etc\/arma\/scripts\/srv $1\t\t\t# D\u00e9marre le serveur dans une fen\u00eatre GNU Screen portant le nom du serveur \u00e0 d\u00e9marrer\r\n\r\nelse\r\n\r\n# Ex\u00e9cution de tout les serveurs\r\n\r\n\tfor f in $(ls \/etc\/arma\/servers\/.)\t\t\t\t# D\u00e9marre une loupe bas\u00e9e sur l'ensemble des dossiers contenu dans \/etc\/arma\/servers\r\n\t\tdo\r\n\t\t\tscreen -S $f -X quit\t\t\t\t# Tue la fen\u00eatre screen de ce serveur si elle existe d\u00e9j\u00e0\r\n\t\t\tscreen -dmS $f \/etc\/arma\/scripts\/srv $f\t# D\u00e9marre le serveur dans une fen\u00eatre GNU Screen portant le nom du serveur \u00e0 d\u00e9marrer\r\n\t\tdone\t\t\t\t\t\t\t# Termine la boucle\r\nfi<\/pre>\n<p>Sauvegardez le fichier, et changez les droits comme indiqu\u00e9 pr\u00e9c\u00e9demment.<\/p>\n<p>=== D\u00e9marrer les serveurs ===<\/p>\n<p>Pour d\u00e9marrer les serveurs au boot, \u00e9ditez le script \/etc\/rc.local et ajoutez le \/etc\/arma\/scripts\/start \u00e0 la fin.<\/p>\n<p>Si vous souhaitez d\u00e9marrer les serveurs manuellement, ex\u00e9cutez simplement \/etc\/arma\/scripts\/start<\/p>\n<p>=== D\u00e9marrer un serveur en particulier ===<\/p>\n<p>Si vous d\u00e9sirez d\u00e9marrer (ou red\u00e9marrer) un serveur en particulier, ex\u00e9cutez:<\/p>\n<pre lang=\"bash\" line=\"n\">\/etc\/arma\/scripts\/start nom_du_serveur<\/pre>\n<p>Par exemple:<\/p>\n<pre lang=\"bash\" line=\"n\">\/etc\/arma\/scripts\/start server3<\/pre>\n<p>== Gestion des serveurs ==<\/p>\n<p>=== GNU screen ===<\/p>\n<p>GNU Screen est un excellent outil. Il permet d&#8217;avoir un environnement multifen\u00eatre dans un simple terminal. Pour avoir une id\u00e9e plus approfondie de son utilisation, tapez:<\/p>\n<pre lang=\"bash\" line=\"n\">man screen<\/pre>\n<p>=== Voir la liste des serveurs actifs ===<\/p>\n<p>Pour voir la liste des fen\u00eatres Screen existantes, tapez:<\/p>\n<pre lang=\"bash\" line=\"n\">screen -ls<\/pre>\n<p>=== Acc\u00e9der \u00e0 la console d&#8217;un serveur ===<\/p>\n<p>Pour attacher le terminal \u00e0 une fen\u00eatre, utilisez -r (comme resume):<\/p>\n<pre lang=\"bash\" line=\"n\">screen -r nom_du_server<\/pre>\n<p>Par exemple:<\/p>\n<pre lang=\"bash\" line=\"n\">screen -r server2<\/pre>\n<p>Vous pouvez d\u00e8s lors g\u00e9rer votre serveur, \u00e9crire des messages Admin, et tout ce qu&#8217;on peut faire dans une console Armagetron Advanced Dedicated Server.<\/p>\n<p>Pour d\u00e9tacher la fen\u00eatre du terminal, tapez CTRL-a d (la touche contr\u00f4le + la lettre &#8220;A&#8221; en minuscule, et ensuite la lettre &#8220;D&#8221; en minuscule&#8221;). C&#8217;est la s\u00e9quence de touche pour &#8220;D&#8221;\u00e9tacher la fen\u00eatre. Le serveur reste en ex\u00e9cution.<\/p>\n<p>=== Tuer une serveur ===<\/p>\n<p>Pour tuer un serveur, attachez simplement sa fen\u00eatre au terminal, et tapez CTRL-C pour figer la fen\u00eatre. Tapez ensuite ESC pour sortir de la fen\u00eatre morte de GNU screen. Vous pouvez arriver en m\u00eame r\u00e9sultat sans vous attachez \u00e0 la fen\u00eatre. Depuis le terminal, tapez:<\/p>\n<pre lang=\"bash\" line=\"n\">screen -S nom_du_serveur -X quit<\/pre>\n<p>Cette commande va &#8220;quitter&#8221; le serveur armagetron, puis terminer la fen\u00eatre protant le nom du serveur.<\/p>\n<p>=== Journaux ===<\/p>\n<p>Chaque fois que le script &#8220;srv&#8221; est ex\u00e9cut\u00e9, un nouveau fichier journal (log) va \u00eatre cr\u00e9\u00e9 dans \/etc\/arma\/logs. Gardez un oeil sur ces logs. Ils peuvent grandir assez vite si votre serveur a du succ\u00e8s, et ils pourraient bien remplir votre disque au bout de quelques mois. D&#8217;autre part, ils vous permettent de surveiller un joueur suspect par exemple&#8230; En utilisant les commandes cat et grep, vous pouvez facilement voir tout ce qui concerne ce joueur et juger s&#8217;il a besoin d&#8217;\u00eatre remis en place ou pas \ud83d\ude42<\/p>\n<p>Voil\u00e0. Vos serveurs sont pr\u00eats. Amusez-vous bien&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voici comment les serveurs Fast Track sont g\u00e9r\u00e9s sur un serveur Linux == Introduction == Si vous aimez exp\u00e9rimenter diff\u00e9rents param\u00e8tres de jeu, vous aurez certainement un nombre de diff\u00e9rents serveurs tr\u00e8s int\u00e9ressant. Il serait bien dommage de ne pas pouvoir les faire tourner tous en m\u00eame temps. L&#8217;objectif de cet article est de vous [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[],"tags":[14,17,13,56],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/181"}],"collection":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/comments?post=181"}],"version-history":[{"count":7,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/181\/revisions"}],"predecessor-version":[{"id":188,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/posts\/181\/revisions\/188"}],"wp:attachment":[{"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/media?parent=181"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/categories?post=181"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/akim.sissaoui.com\/en\/wp-json\/wp\/v2\/tags?post=181"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}