Hi there. If it's the first time you come here, maybe you want to read a short site presentation. If you're interested in editing, you can check how to create a page and how to edit a page to get started right away! You may also want to make an account, so your name will be linked to your contributions.

If you already have an account, you should log in now.

User:Patheticcockroach/Installation serveur Enemy Territory sous Ubuntu 8.04

From Wiki4Games
Jump to: navigation, search
Cette page est un backup de ma contribution sur http://www.wikiovh.com/index.php/Ubuntu_8.04:Serveur_Enemy_Territory

Introduction

Dans ce tutorial nous allons installer un serveur Enemy Territory 2.60b avec le mod No Quarter 1.2.0 et les bots Omni-bot 0.66. Les prérequis sont:

  • Webmin, qui facilitera la création de l'user et surtout la gestion des fichiers de configuration.
  • Apache: nous ne verrons pas comment le configurer ici, mais nous l'utiliserons pour héberger les fichiers téléhargeables du serveur.
  • ProFTPd: nous ne verrons pas comment le configurer, mais nous l'utiliserons pour uploader certains fichiers.

Il est donc recommandé d'avoir suivi les parties correspondantes du guide Ubuntu 8.04:nue-vers-hebergement.

Installation

Création d'un utilisateur

Dans Webmin: "System" → "Users and Groups". Cliquer sur "Create a new user." Laisser les réglages par défaut sauf:

  • Username: indiquer un nom d'utilisateur. Nous mettrons et.
  • Password: cliquer sur "normal password" puis entrer un mot de passe.
  • Copy template files to home directory?: choisir no.

Cliquer sur "Create" pour valider. Nous obtenons un nouvel utilisateur "et", dont le dossier principal est "/home/et".

Téléchargement d'Enemy Territory 2.60

Il s'est souvent avéré difficile de trouver un miroir, je vous en ai donc choisi un qui semble durer: http://linux.softpedia.com/progDownload/Wolfenstein-Enemy-Territory-Download-3948.html

On se connecte en root, on va dans le dossier de l'user qu'on a créé, et on télécharge le serveur version 2.60.

cd /home/et
wget [url du fichier]

Enfin, on crée un dossier dont on aura besoin plus tard:

mkdir bin

Installation d'Enemy Territory 2.60

chmod 744 et-linux-2.60.x86.run
./et-linux-2.60.x86.run

Comme chemin d'installation, nous mettrons /home/et/wet, pour les liens symboliques nous mettrons /home/et/bin. Nous choisirons d'installer le serveur ET et Punkbuster (valeurs par défaut), et enfin nous refuserons l'ajout d'éléments au menu démarrer... A la fin, nous ne démarrerons pas le jeu, bien évidemment...

Application du patch 2.60b

On commence par changer le propriétaire des dossiers du jeu:

chown et -R *

On télécharge le patch sur notre PC, on extrait etded.x86 et et.x86 (qui sont dans le sous-dossier linux), puis on les envoie sur le serveur (par FTP par exemple: pour cela on pourra se connecter en tant qu', en remplacement de /home/et/wet/etded.x86 et /home/et/wet/et.x86.

Configuration

Nous allons d'abord préparer les fichiers suivants (qui ne sont que des suggestions formant un ensemble cohérent capable de faire tourner un serveur avec un minimum de modifications si on suit tout le guide à la lettre) en local:

  • etmain/server_27960_run.cfg: le fichier de configuration maître.
// load all config but not a map
exec server_27960.cfg
// PunkBuster
exec pb_set.cfg
// watchdog
set com_watchdog_cmd "exec server_27960_run.cfg"
// load first map
vstr d1
  • etmain/pb_set.cfg: les paramètres de PunkBuster.
// examples
// http://q3ut.sta-league.org/files/stapb.cfg
// http://gotfrags.net/pbsv.cfg
// doc : http://www.evenbalance.com/publications/cod-ad/index.htm
// voir PB_SV_NameLock

// clear stuff
PB_SV_BadNameEmpty
PB_SV_TaskEmpty
PB_SV_CvarEmpty
PB_SV_NameLockEmpty

pb_sv_KickLen 0 //Time in minutes to kick someone for any violation
pb_sv_emptyname 1 //Allow people with blank names
pb_sv_minName 0 //minimum characters a name must be
PB_SV_MsgPrefix "^3PB server"
PB_SV_DupNameGrace 60

pb_sv_ChangePeriod 30
pb_sv_ChangeMax 5
pb_sv_badname 90 kick

pb_sv_PowerDef 0

//CVAR checks. 2 done per minute and their values
pb_sv_CvarFreq 2

pb_sv_cvar rate IN 15000 50000
pb_sv_cvar r_rmse IN 0 75
pb_sv_cvar cl_freelook IN 1
pb_sv_cvar snaps IN 20 40
pb_sv_cvar cl_maxpackets IN 15 100
pb_sv_cvar m_pitch OUT -0.015 0.015
pb_sv_cvar m_yaw IN -0.022 0.022
pb_sv_cvar cg_fov in 90 125
pb_sv_cvar cg_bobup IN 0 0.005
pb_sv_cvar cg_shadows IN 0 1
pb_sv_cvar r_flares IN 0 1
pb_sv_cvar r_primitives IN 0 2
pb_sv_cvar r_clamptoedge IN 1
pb_sv_cvar r_drawworld IN 1
pb_sv_cvar r_drawfoliage IN 1
pb_sv_cvar r_znear IN 3
pb_sv_cvar r_showtris IN 0
pb_sv_cvar r_drawentities IN 1
pb_sv_cvar r_showmodelbounds IN 0
pb_sv_cvar r_lightmap IN 0
pb_sv_cvar cg_tracerlength IN 160
pb_sv_cvar cg_tracerSpeed IN 4500
pb_sV_cvar cg_tracerwidth IN 0.8
pb_sv_cvar cg_tracerchance IN 0.4
pb_sv_cvar r_picmip IN 0 3
pb_sv_cvar r_ext_ATI_pntriangles IN 0
pb_sv_cvar r_zfar IN 0


//voir :
//r_wolffog
//cg_atmosphericeffects
//http://www.etpub.org/e107_plugins/forum/forum_viewtopic.php?21783

//for nice screenshots
PB_SV_SSWIDTH 640
PB_SV_SSHEIGHT 480
PB_SV_AUTOSS 0
PB_SV_AUTOSSFROM 60
PB_SV_AUTOSSTO 1200

//for fixing PB's shit
PB_SV_AutoUpdBan 0
  • etmain/server_27960.cfg: le fichier contenant les paramètres pour etmain (ie le jeu non-moddé). Ce fichier doit être édité au minimum sur les points suivants: les mots de passe (ici remplacés par ********), l'IP (ici 91.121.96.210) et le port (ici 27960, ne doit pas être modifié si on installe un seul serveur) du serveur, l'URL de téléchargement (ici etfiles.zengamers.com).
set dedicated "2"
set net_ip "91.121.96.210"
set net_port "27960"

set sv_maxclients "32"
set g_password ""
set sv_privateclients "2"
set sv_privatepassword "********"
set rconpassword "********"
set refereePassword "********"

set sv_allowDownload "0"
set sv_maxRate "25000"
set sv_lanforcerate "1"
set sv_dl_maxRate "25000"
set sv_wwwDownload "1"
set sv_wwwBaseURL "http://etfiles.zengamers.com"
set sv_wwwDlDisconnected "1"
set sv_wwwFallbackURL "http://bbs.zengamers.com"

set sv_hostname "^8ZenGamers ^7XP ^14eva ^7#1"
set server_motd0 "You can also connect"
set server_motd1 "using ^8/connect"
set server_motd2 "^8et.zengamers.com"
set server_motd3 "SK allowed, 6s spawn"
set server_motd4 "shield (volatile)"
set server_motd5 "XPSave ONE YEAR"

//set g_heavyWeaponRestriction "100"
set g_antilag "1"
set g_altStopwatchMode "0"
set g_autofireteams "1"
set g_complaintlimit "4"
set g_ipcomplaintlimit "3"
set g_disableComplaint "1"
//(1:mines, 2:arti, 4:mortar)
set g_fastres "0"
set g_friendlyFire "1"
//set g_gametype "4"
set g_minGameClients "8"
set g_maxlives "0"
set g_alliedmaxlives "0"
set g_axismaxlives "0"
set g_teamforcebalance "1"
set g_noTeamSwitching "0"
set g_voiceChatsAllowed "4"
set g_doWarmup "0"
set g_warmup "60"
set g_spectatorInactivity "0"
set sv_floodProtect "1"
set sv_allowDownload "1"
set sv_pure "1"
set sv_minping "0"
set sv_maxping "0"
set match_latejoin "1"
set match_minplayers "4"
set match_mutespecs "0"
set match_readypercent "100"
set match_timeoutcount "0"
set match_warmupDamage "1"
set team_maxplayers "0"
set team_nocontrols "1"
set pmove_fixed "0"
set pmove_msec "8"

set g_lms_teamForceBalance "1"
set g_lms_roundlimit "3"
set g_lms_matchlimit "2"
set g_lms_currentMatch "0"
set g_lms_lockTeams "0"
set g_lms_followTeamOnly "1"

set g_allowVote "1"
set vote_limit "5"
set vote_percent "61"
set vote_allow_comp "0"
set vote_allow_gametype "0"
set vote_allow_kick "0"
set vote_allow_map "0"
set vote_allow_matchreset "1"
set vote_allow_mutespecs "0"
set vote_allow_nextmap "1"
set vote_allow_pub "0"
set vote_allow_referee "0"
set vote_allow_shuffleteams "1"
set vote_allow_swapteams "0"
set vote_allow_friendlyfire "0"
set vote_allow_timelimit "1"
set vote_allow_warmupdamage "1"
set vote_allow_antilag "0"
set vote_allow_balancedteams "0"
set vote_allow_muting "1"

// sv_punkbuster is a readonly variable. Use +set sv_punkbuster on command line or use the command pb_sv_enable in the console
// pb_sv_enable
// pb_sv_cvar rate IN 2500 50000

set g_log "etserver.log"
set g_logsync 0
set logfile 0

//exec campaigncycle.cfg
//exec objectivecycle.cfg
//exec lmscycle.cfg
exec server_rotation.cfg

// in case the game dies with an ERR_DROP
// or any situation leading to server running with no map
//set com_watchdog 10                           // defaults 60
//set com_watchdog_cmd "exec campaigncycle.cfg" // defaults to quit
//set com_watchdog_cmd "exec pcr_obj.cfg"

// added
//Server Authentication
set sv_master1 "etmaster.idsoftware.com"
set sv_master2 "master0.gamespy.com"
set sv_master3 "wolfmaster.idsoftware.com"
set sv_master4 "clanservers.net"
set sv_master5 "master3.idsoftware.com"
set sv_master6 "master.gamespy.com:27900"

//Pure server
set sv_pure "1"

//No quarter
exec noquarter.cfg

//Server full?
//set sv_fullmsg "ET://91.121.96.210:27961"
  • etmain/server_rotation.cfg: la rotation de maps. Dans cet exemple nous avons raccourci la liste à 3 maps standards (ie présentes dans l'installation de base, qui en compte 6).
set d1 "set g_gametype 2 ; map oasis ; set nextmap vstr d2"
set d2 "set g_gametype 2 ; map radar ; set nextmap vstr d3"
set d3 "set g_gametype 2 ; map railgun ; set nextmap vstr d1"
  • noquarter/noquarter.cfg: la configuration de No Quarter.
// No Quarter b1.1.1 sample config by S.S.Meyerinchains - 3/20/2007
// Visit www.shitstorm.org/noquarter for more documentation

//////////////////
//* Omni-Bots * //
//////////////////

set Omnibot_Enable 1
set Omnibot_Path "/home/et/OB66"

///////////////////////////////////
//* Exclusive No Quarter CVARS * //
///////////////////////////////////

set ip_max_clients 3
set g_SBcheats 1
set g_XPSaveDirectory "/home/et/wet/noquarter/xpsave"
set g_adrenaline 44
set g_noAttacklInvul 1
set g_defaultMute 90
set g_weaponItems 7
set g_missileHealth 5
set g_missileSpeed 0
set g_bulletReflect 1
set g_falloff 1
set g_missileGravity 2
set g_fastBackStab 0
set g_realism 3
set g_announcer 7
set g_flushItems 1
set g_painAnims 0
set g_painChance 25
set g_smokeColor_Allies "0.1 0.1 0.6 0.0"
set g_smokeMod_Allies "0.0 0.0 0.1 0.5"
set g_smokeColor_Axis "0.6 0.1 0.1 0.0"
set g_smokeMod_Axis "0.1 0.0 0.0 0.5"

set g_maxLevelBattleSense 10
set g_maxLevelLightWeapons 10
set g_maxLevelSoldier 10
set g_maxLevelMedic 10
set g_maxLevelEngineer 10
set g_maxLevelFieldOp 10
set g_maxLevelCovertOp 10

set g_multikillTime 2500
set g_mortarBBox 0
set g_shotgunPellets 12
set g_weaponScriptsDir ""
set g_spectator 6

set jp_insanity 4

////////////////////
//* Other CVARS * //
////////////////////

set g_throwDistance 75
set g_dragCorpse 1
set g_dropObj 1
set g_slashkill 0
set g_spawnInvul 6
set g_dropAmmo 1
set g_dropHealth 1
set g_shortcuts 1
set g_shrubbot "shrubbot.cfg"
set g_skills 18
set g_msgs 10
set g_msgPos 0
seta g_msg1 "^?-^3The rules made short: be a good teammate!^?-^7"
seta g_msg2 "^7Need help? Suggestions? Post on http://bbs.zengamers.com"
seta g_msg3 "^?|^3Server IP: et.zengamers.com^?|^7"
seta g_msg4 "^?|^3All rules: http://et.zengamers.com^?|^7"
seta g_msg5 "^?|^3Our forums: http://bbs.zengamers.com^?|^7"
seta g_msg6 "^8Report ^1rule-breakers ^8on http://bbs.zengamers.com ^7(with a demo...)"
seta g_msg7 "^?|^3Want levels? Get XP! Level 2 given to any player with 50k XP^?|^7"
//seta g_msg1 "^1Kicked by PunkBuster? UPDATE IT MANUALLY from evenbalance.com"
//seta g_msg3 "^1Kicked by PunkBuster? UPDATE IT MANUALLY from evenbalance.com"
//seta g_msg4 "^1Kicked by PunkBuster? UPDATE IT MANUALLY from evenbalance.com"
//seta g_msg6 "^1Kicked by PunkBuster? UPDATE IT MANUALLY from evenbalance.com"
//seta g_msg6 "^d.Z3n+ ^7is our guest clan, their website is @ www.to-zen.keuf.net"
//seta g_msg7 "^8>>^1SPECIAL^8<< ^6No^3PF/Fl/MG-^6Yes^3Venom-HW^69 ^3today!"
//seta g_msg7 "^8>>^1SPECIAL^8<< ^3Venom ^6ENABLED ^3today!"
seta g_msg8 "^8>>^1SPECIAL^8<< ^3Venom and goomba ^6ENABLED ^3today!"
//seta g_msg7 ""
set g_censor "fag,gay,shit,fuck,bitch,asshole,homo,noob,naab,nuub,nub,nab,nob"
set g_censorMuteTime "10"
set g_censorNames ""
set g_censorPenalty 40
set g_intermissionTime 20
set g_intermissionReadyPercent 51
set g_mapScriptDirectory ""
set g_canisterKick 90
set g_canisterKickOwner 0
set g_classChange 0
set g_constructibleXPsharing 1
set g_doubleJump 0
set g_doubleJumpHeight 1.4
set g_shove 80
set g_shoveNoZ 0
set g_asblock 0
set g_fear 2000
set g_goomba 0

set g_goombaFlags 25
set g_headshot 0
set g_playdead 1
set g_medics 89
set g_realHead 1

set team_maxPanzers 2
set team_maxMortars -1
set team_maxRifleGrenades -1
set team_maxMG42s -1
set team_maxFlamers 2
set team_maxShotguns -1
set team_maxVenoms -1
set team_maxLandmines 14
set team_artyTime 16
set team_airstrikeTime  16

set g_XPSave "15"
set g_XPSaveMaxAge 31536000
set g_XPDecay 0
set g_XPDecayFloor 540
set g_XPDecayRate 0
set g_maxXP -1
seta skill_lightWeapons "20 50 90 140 200 270 350 440 540"
seta skill_battleSense "20 50 90 140 200 270 350 440 540"
seta skill_soldier "20 50 90 140 200 270 350 440 540"
seta skill_medic "20 50 90 140 200 270 350 440 540"
seta skill_engineer "20 50 90 140 200 270 350 440 540"
seta skill_fieldops "20 50 90 140 200 270 350 440 540"
seta skill_covertops "20 50 90 140 200 270 350 440 540"

seta skill_lightWeapons "30 70 150 250 400 550 800 1000 1250"
seta skill_battleSense "30 70 150 250 400 550 800 1000 1250"
seta skill_soldier "30 70 120 200 300 450 600 750 1000"
seta skill_medic "30 70 120 200 300 450 600 750 1000"
seta skill_engineer "30 70 120 200 300 450 600 750 1000"
seta skill_fieldops "30 70 120 200 300 450 600 750 1000"
seta skill_covertops "30 70 120 200 300 450 600 750 1000"

set g_friendlyfire 25
set g_noAttackInvul 1
set g_fastres 1

set g_hitsounds 0
set g_weapons 16

set jp_insanity 260
set g_goomba 30
  • noquarter/shrubbot.cfg: le fichier listant les niveaux des modérateurs, les bans, les mute, les commandes supplémentaires.
[level]
level   = 0
name    = Standard user
flags   = ahBMIi

[level]
level   = 20
name    = ^8ZenGamers ^7Sysop
flags   = @*!

Installation de No Quarter 1.2.0

La page de téléchargement de No Quarter est ici: http://shitstorm.org/noquarter/wiki/index.php?title=No_Quarter_Mod

Pour installer No Quarter 1.2.0, il faut télécharger la version 1.1.0 ainsi que les mises à jour 1.1.1 et 1.2.0, ainsi que le fix de la version 1.2.0 (téléchargement - post sur le forum officiel au sujet de ce fix). Décompressons tout cela pour ne garder que les fichiers suivants, que nous mettrons dans le sous-dossier noquarter (avec noquarter.cfg et shrubbot.cfg, vus plus haut):

  • noquarter_b1.1.0.pk3
  • noquarter_b1.1.1.pk3
  • noquarter_b1.2.0.pk3
  • noquarter_b1.2.0_fix.pk3
  • nq_bin_b1.2.0.pk3
  • qagame.mp.i386.so

Afin de mettre en place l'XP save, nous créons également un sous dossier xpsave dans le dossier noquarter.

Premier test

Uploadons tous ces fichiers sur le serveur. Les fichiers *.pk3 doivent aussi être uploadé sur un serveur HTTP ou FTP précisé plus haut par le paramètre sv_wwwBaseURL. L'ensemble de tous les fichiers et dossiers contenus dans le dossier /home/et/wet doit appartenir à l'utilisateur "et". Connectons-nous en console avec l'utilisateur et. Puis lançons le serveur:

cd /home/et/wet
./etded +set com_hunkmegs 128 +set com_zoneMegs 64 +set vm_game 0 +set sv_pure 1 +set dedicated 2 +net_port 27960 +set fs_homepath 27960 +set fs_game noquarter +set sv_punkbuster 1 +exec server_27960_run.cfg

Connectons-nous au serveur pour vérifier que tout marche (ouvrir Enemy Territory et tapper /connect [IP du serveur] dans la console). Ignorons les erreurs liées aux omni-bots (nous les avons activés sans les installer... normal que ça râle...). On finit par se faire kicker à cause d'un PunkBuster pas à jour sur le serveur... nous allons donc remédier à cela. Dans la console du serveur Enemy Territory:

pb_sv_update

et patientons... jusqu'à obtenir un message "Preparing to Restart PB Server...", qui indique que la fin approche. Reconnectons-nous au serveur. Si nous voyons toujours des messages indiquant que PunkBuster n'est pas à jour sur le serveur (ce qui est assez probable, PunkBuster à beaucoup de mal à se mettre à jour à partir d'une installation fraîche d'Enemy Territory), nous allons le mettre à jour à la main...

Mise à jour manuelle de PunkBuster

Fermons le serveur Enemy Territory. Connectons nous en SSH avec l'utilisateur "et". Puis suivons le guide:

  • Dans le dossier /home/et/wet/pb, téléchargeons pbsecsv.htm:
wget http://www.evenbalance.com/downloads/et/pbsecsv.htm
  • Dans le dossier /home/et/wet/pb/htm, téléchargeons tous les 6 fichiers clients (attention, les liens sont susceptibles d'évoluer, donc copier les derniers liens disponibles sur le site d'Evenbalance):
wget http://www.evenbalance.com/downloads/et/wc002083.htm http://www.evenbalance.com/downloads/et/wa001382.htm http://www.evenbalance.com/downloads/et/lc002083.htm http://www.evenbalance.com/downloads/et/la001382.htm http://www.evenbalance.com/downloads/et/mc002083.htm http://www.evenbalance.com/downloads/et/ma001382.htm

Enfin, supprimons intégralement le dossier indiqué dans "fs_homepath" (car le Punkbuster non à jour s'est copié dedans!):

rm /home/et/wet/27960 -R

Relancer le serveur Enemy Territory (même commande que précédemment) afin de recréer le dossier /home/et/wet/27960, puis le refermer.

Allons (en SSH) dans le dossier wet/27960/pb et téléchageons pbsvnew.so:

wget http://www.evenbalance.com/downloads/et/pbsvnew.so

Copier le contenu de /home/et/wet/pb/htm dans /home/et/wet/27960/pb/htm

cd /home/et/wet/pb/htm
cp * /home/et/wet/27960/pb/htm

Relancer le serveur. Punkbuster devrait être à jour...

Installation d'Omni-bot 0.66

Installation des dépendances

Omni-bot a besoin de libstdc++5 pour fonctionner:

apt-get install libstdc++5

Installation d'Omni-bot

Télécharger la dernière version sur le site officiel. Attention: à une version de No Quarter correspond une version d'Omni-bot. Dans ce guide nous avons installé No Quarter version 1.2.0, nous devons donc installer Omni-bot version 0.66 ("Omni-Bot 0.66 ET STABLE Linux"). Nous décompresserons l'archive pour ne garder que le contenu du dossier "omni-bot" (avec un tiret), l'autre dossier n'est utile que pour les serveurs non moddés. Supprimons de plus le sous-dossier "docs" (pas besoin d'envoyer la documentation sur le serveur...), et renommons, pour les besoins du guide, "omni-bot" en "OB66".

Editons le fichier OB66/et/scripts/et_autoexec.gm: remplacer

//MinBots(30);
//MaxBots(12);

par:

MinBots(0);
MaxBots(8);

Cela signifie: 8 bots si le serveur est vide, et on enlève un bot pour chaque jour connecté, sans limite inférieure au nombre de bots (nombre minimal de bots = 0).

Envoyons (par FTP) le dossier "OB66" dans /home/et. Vérifier que l'ensemble des dossiers et fichiers contenus dans /home/et ont bien pour propriétaire "et", puis relancer le serveur Enemy Territory (toujours la même commande). Si tout a bien marché, il doit y avoir 8 bots sur le serveur.

Script de redémarrage et de relance en cas de crash

Enemy Territory est tristement connu pour présenter une certaine instabilité, en particulier lorsqu'on y associe les bots. ET 2.60b + NQ 1.2.0 + Omni-bot 0.66 crashent rarement (et uniquement sur certaines maps), mais présentent toutefois une fuite de mémoire. Il faut donc créer un script:

  1. capable de redémarrer le serveur en cas de panne
  2. capable de redémarrer le serveur quotidiennement

Les scripts

Voici donc un ensemble de scripts, fortement inspirés de http://tjw.org/etded/ (site du créateur du mod ETPub).

  • /home/et/etlauncher.sh doit être chmod 744 et contenir:
#!/bin/sh

SERVER_BIN=/home/et/wet/etded.x86
SERVER_PIDFILE=/var/run/etded.pid
SCRIPT_PIDFILE=/var/run/etded.sh.pid
SCRIPT_PATH=/home/et/etded.sh

etded_start() {
  $SCRIPT_PATH &
}

etded_stop() {
  if [ -r $SCRIPT_PIDFILE ]; then
        kill `cat $SCRIPT_PIDFILE`
        rm $SCRIPT_PIDFILE 
  fi 
  if [ -r $SERVER_PIDFILE ]; then
        kill `cat $SERVER_PIDFILE`
        rm $SERVER_PIDFILE
  else
        killall $SERVER_BIN
  fi
}

etded_restart() {
  etded_stop
  sleep 2
  etded_stop
  sleep 1
  etded_stop
  sleep 1
  etded_start
}

case "$1" in
'start')
  etded_start
  ;;
'stop')
  etded_stop
  ;;
'restart')
  etded_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac
  • /home/et/etded.sh doit être chmod 744 et contenir:
#!/bin/sh

# the chroot 'root' directory where your game server is installed
SERVER_ROOT=/home/et/wet
SERVER_FIXED=/home/et/wet/etded

# additional options that should be passed to the game server command line
# for example, "+exec server.cfg +set net_ip 127.0.0.1"
SERVER_OPTIONS="+set com_hunkmegs 128 +set com_zoneMegs 64 +set vm_game 0 +set sv_pure 1 +set dedicated 2 +net_port 27960 +set fs_homepath 27960 +set fs_game noquarter +set sv_punkbuster 1 +exec server_27960_run.cfg"

# the location of a file that the PID of the running server should be written
# to by this script 
SERVER_PIDFILE=/var/run/etded.pid

# the FULL PATH to the server binary.  this is used by /sbin/pidof in 
# determining if the server is running.
SERVER_BIN=/home/et/wet/etded.x86

# the username for the account that the server should be run as
SERVER_USER=et

# the location of a file that the PID of this script should be stored in
PIDFILE=/var/run/etded.sh.pid;


echo $$ > $PIDFILE;
while [ 1 ]; do
        if [ ! $(pidof $SERVER_BIN) ]; then 
                screen -d -m su - \
                        $SERVER_USER $SERVER_FIXED $SERVER_OPTIONS 
                sleep 1
                if [ ! $(pidof $SERVER_BIN) ]; then
                        echo "\
Could not find a PID for ${SERVER_BIN}! 
If etded.x86 is actually running, update ${0} 
so that it can properly detect the PID of ${SERVER_BIN}."
                        rm $PIDFILE 
                        exit;
                fi
                echo `pidof $SERVER_BIN` > $SERVER_PIDFILE
        fi
        sleep 30;
done;

En résumé:

  • etded.sh contient la commande de lancement du serveur ET. Tant que etded.sh tourne, si le serveur ET s'arrête, etded.sh le relancera au bout de moins de 30 secondes (cf la boucle infinie avec un sleep 30 à la fin).
  • etlauncher.sh permet de lancer ou arrêter etded.sh. Il doit être lancé en root, il lancera etded.sh en root, qui lui-même lancera Enemy Territory avec l'utilisateur spécifié par SERVER_USER. Il doit être suivi d'un paramètre (start, stop ou restart).

Ajouter les scripts en tâche Cron

Dans Webmin: SystemScheduled Cron JobsCreate a new scheduled cron job. Choisir:

  • Execute cron job as: root
  • Active: Yes (normalement c'est la valeur par défaut)
  • Command: /home/et/etlauncher.sh restart
  • When to execute: cocher Times and dates selected below .., puis:
    • Minutes: cocher selected puis choisir une valeur (une seule!)
    • Minutes: cocher selected puis choisir une valeur (une seule, de préférence à une heure ou le serveur est vide (la nuit))
    • Days, Months et Weekdays: laisser les valeurs par défaut (all)
  • Date range to execute: laisser la valeur par défaut (Run on any date)

Cliquer sur "Create".

Voilà, le serveur est maintenant prêt à tourner 24h/24. Il redémarrera une fois par jour à une heure creuse, et se relancera en cas de crash. Par contre, il ne se relancera pas en cas de reboot de la machine (section à ajouter?).

Il ne reste plus qu'à personnaliser la configuration du serveur (cf les documentations d'Enemy Territory, No Quarter et Omni-bot). On pourra se faciliter la tâche en ajoutant les fichiers de configuration dans l'éditeur de fichier de Webmin: OthersCustom CommandsCreate a new file editor. Il serait ainsi pertinent d'ajouter:

  • /home/et/wet/noquarter/noquarter.cfg
  • /home/et/OB66/et/scripts/et_autoexec.gm
  • /home/et/wet/etmain/server_27960.cfg
  • /home/et/wet/etmain/server_27960_run.cfg
  • /home/et/wet/etmain/pb_set.cfg
  • /home/et/wet/27960/noquarter/shrubbot.cfg
  • /home/et/wet/etmain/server_rotation.cfg

A propos de shrubbot: lors de sa première copie par le jeu (par exemple en cas de !setlevel, ban ou mute), le shrubbot original est copié dans le répertoire de travail (par exemple si l'original était /home/et/wet/noquarter/shrubbot.cfg et si fs_homepath=27960, il sera copié dans /home/et/wet/27960/noquarter/shrubbot.cfg. Tous les futurs chargements de shrubbot.cfg se feront à partir de la copie, sauf si celle-ci est supprimée (dans ce cas, à la première occasion Enemy Territory refera une copie à partir de l'original).

Faire tourner plusieurs serveurs

Pour faire tourner plusieurs serveurs, 2 solutions:

  • si on souhaite utiliser des skins différents d'un serveur à l'autre, il faut faire autant d'installations que de serveurs.
  • sinon, il est possible de cumuler les serveurs sur une même installation.

Dans les 2 cas, en raison des scripts que nous avons créés pour gérer les crashes et redémarrages, il est nécessaire de renommer les exécutables mentionné dans les scripts (ou d'en faire des copies de noms différents si on regroupe tout dans la même installation) de façon à ce que chaque serveur ET ait un exécutable de nom unique. Il faudra également faire des copies des scripts. Au final, pour une installation groupée de 3 serveurs (par exemple), on doit avoir:

  • un seul /home/et/wet/et /home/et/wet/et.x86
  • pour le serveur 1: /home/et/wet/etded, /home/et/wet/etded.x86, /home/et/etded.sh et /home/et/etlauncher.sh.
  • pour le serveur 2: /home/et/wet/etded2, /home/et/wet/etded2.x86, /home/et/etded2.sh et /home/et/etlauncher2.sh.
  • pour le serveur 3: /home/et/wet/etded3, /home/et/wet/etded3.x86, /home/et/etded3.sh et /home/et/etlauncher3.sh.

La plupart de ces fichiers doivent être modifiés pour pointer les uns vers les autres. Par exemple voici l'ensemble des fichiers en détail pour le serveur 2 (pour le 3, on remplacera les 2 par des 3, etc, sans oublier de changer également le port, le fs_homepath et le fichier de configuration exécuté au lancement):

  • /home/et/wet/etded2:
#!/bin/sh
# Needed to make symlinks/shortcuts work.
# the binaries must run with correct working directory
cd "/home/et/wet/"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
exec ./etded2.x86 "[email protected]"
  • /home/et/wet/etded2.x86: non modifié
  • /home/et/etded2.sh:
#!/bin/sh

# the chroot 'root' directory where your game server is installed
SERVER_ROOT=/home/et/wet
SERVER_FIXED=/home/et/wet/etded2

# additional options that should be passed to the game server command line
# for example, "+exec server.cfg +set net_ip 127.0.0.1"
SERVER_OPTIONS="+set com_hunkmegs 128 +set com_zoneMegs 64 +set vm_game 0 +set sv_pure 1 +set dedicated 2 +net_port 27961 +set fs_homepath 27961 +set fs_game noquarter +set sv_punkbuster 1 +exec server_27961_run.cfg"

# the location of a file that the PID of the running server should be written
# to by this script 
SERVER_PIDFILE=/var/run/etded2.pid

# the FULL PATH to the server binary.  this is used by /sbin/pidof in 
# determining if the server is running.
SERVER_BIN=/home/et/wet/etded2.x86

# the username for the account that the server should be run as
SERVER_USER=et

# the location of a file that the PID of this script should be stored in
PIDFILE=/var/run/etded2.sh.pid;


echo $$ > $PIDFILE;
while [ 1 ]; do
        if [ ! $(pidof $SERVER_BIN) ]; then 
                screen -d -m su - \
                        $SERVER_USER $SERVER_FIXED $SERVER_OPTIONS 
                sleep 1
                if [ ! $(pidof $SERVER_BIN) ]; then
                        echo "\
Could not find a PID for ${SERVER_BIN}! 
If etded.x86 is actually running, update ${0} 
so that it can properly detect the PID of ${SERVER_BIN}."
                        rm $PIDFILE 
                        exit;
                fi
                echo `pidof $SERVER_BIN` > $SERVER_PIDFILE
        fi
        sleep 30;
done;
  • /home/et/etlauncher2.sh (que l'on ajoutera également en tâche cron):
#!/bin/sh

SERVER_BIN=/home/et/wet/etded2.x86
SERVER_PIDFILE=/var/run/etded2.pid
SCRIPT_PIDFILE=/var/run/etded2.sh.pid
SCRIPT_PATH=/home/et/etded2.sh

etded_start() {
  $SCRIPT_PATH &
}

etded_stop() {
  if [ -r $SCRIPT_PIDFILE ]; then
        kill `cat $SCRIPT_PIDFILE`
        rm $SCRIPT_PIDFILE 
  fi 
  if [ -r $SERVER_PIDFILE ]; then
        kill `cat $SERVER_PIDFILE`
        rm $SERVER_PIDFILE
  else
        killall $SERVER_BIN
  fi
}

etded_restart() {
  etded_stop
  sleep 2
  etded_stop
  sleep 1
  etded_stop
  sleep 1
  etded_start
}

case "$1" in
'start')
  etded_start
  ;;
'stop')
  etded_stop
  ;;
'restart')
  etded_restart
  ;;
*)
  echo "usage $0 start|stop|restart"
esac