Данная статья является универсальным руководством для любого дистрибутива linux, но писался для debian, потому могут быть разного рода особенности.
Итак, установка и настройка Counter-Strike сервера на linux на примере debian/ubuntu.
Установим необходимые в дальнейшем пакеты:
#apt-get install gdb gawk screen
Скачивание сервера Counter-strike с steam
Первым делом создадим пользователя и авторизуемся как он:
1 2 3 | $sudo adduser cs #sudo su cs $cd ~ |
Скачаем и запустим hldsupdatetool:
1 2 | $wget http://storefront.steampowered.com/download/hldsupdatetool.bin $chmod +x hldsupdatetool.bin |
Вводим yes, что соглашаемся с правилами и обовляем саму утилиту скачивания:
1 2 3 4 5 6 7 | Enter 'yes' to accept this agreement, 'no' to decline: yes extracting steam.tar.Z...done $ ./steam Checking bootstrapper version ... Getting version 34 of Steam HLDS Update Tool Downloading. . . . . . . . . . . Steam Linux Client updated, please retry the command |
Итак, теперь можно узнать опции запуска:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | $./steam Checking bootstrapper version ... Use: steam -command <command> [parameters] [flags] Commands: update: Install or update HLDS parameters: -game <game> - Game name: use 'list' to see available games -dir <installdir> - HLDS Install dir (if dir not specified, will use value from last run of tool) flags: -verify_all - Verify all HLDS files are up to date -retry - Automatically retry every 30 seconds if the Steam Network is busy -remember_password - Remember password (if a username is supplied) For example: steam -command update -game cstrike -dir /hlds version: View installed versions list: View available games Optional parameters for all commands: -username <username> - Steam account username (only needed to access limited content) -password <password> - Steam account password (only needed to access limited content) |
Так как нужен cs сервер в папке hlds_cs, то мы ее создадим и запустим загрузку:
1 2 | $mkdir hlds_cs $./steam -command update -game cstrike -dir ./hlds_cs |
Создание скриптов запуска и автоматизация запуска
Для создания скрипта запуска надо открыть своим любимым редактором файл /etc/init.d/cs (либо с любым другим названием) с правами суперпользователя и вставить туда такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 | #! /bin/bash # # Start the Counter-Strike dedicated server. # # AUTHORS : # # Julien Escario ( pandemik@azilog.net ) # & # Cedric Rochat ( crochat@younics.org ) # & # Cmdr._Firewalker ( cmdr._firewalker@web.de ) # # =========================================== # # What you need: # # Linux :) # awk # screen # the hlds_l & cstrike files (obtainable via steam) # # How to use: # # Edit the CS_USER-Var to the user running your cs-servers # Edit the DIR-Var to fit your system (just contains the path to the dir that contains hlds_run) # Edit the PARAMS-Var to fit your needs # - standard is startup as internet server # if you use multiple scripts on one system you should change the NAME-var (otherwise # all will be stopped if you run the script with "stop", and status will be useless) # # When this is done, copy the file to /etc/rc.d/init.d (or whereever your system stores the # scripts for starting the services) and set the execute permission. # Now you can link the script to your runlevel-dir, here's an example for runlevel 3: # ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/S90hlds # ln -s /etc/rc.d/init.d/hlds /etc/rc.d/rc3.d/K50hlds # or use update-rc.d if you got a system using that tool (like Debian, see manpage) # # Or use it manually like: # ./hlds start # ./hlds stop # # To see the server-console start the script with the parameter "watch". # # DOC by jwm (jwm@counter-strike.de) # !!!!!!!!!!!!!! CHANGE THIS TO THE USER YOU USE FOR YOUR SERVER !!!!!!!!!!!!!!! CS_USER=csserveruser PATH=/bin:/usr/bin:/sbin:/usr/sbin # # DON'T FORGET TO CHANGE THE PATH TO YOUR NEEDS! DIR=/hlds DAEMON=hlds_run # LAN server: # PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust" # Internet server: PARAMS="-game cstrike +map de_dust +maxplayers 12 -port 27015" NAME=csserver DESC="CS dedicated server" # No edits (should be) necessary beyond this line if [ ! -x `which awk` ]; then echo "You need awk for this script"; exit 1; fi if [ ! -x `which screen` ]; then echo "You need screen (the program, moron!) for this script"; exit 1; fi if [ `whoami` = root ] then usagetype=root else usagetype=nonroot fi start() { if [ ! -d $DIR ]; then echo " ... No such directory: $DIR!"; exit 1; fi if [ ! -x $DIR/$DAEMON ]; then echo "$DIR/$DAEMON does not exist or is not executable!"; exit 1; fi if status; then echo " ... $DESC: $NAME is already running!"; exit 1; fi case "$usagetype" in root) su - $CS_USER -c "cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS" ;; nonroot) cd $DIR ; screen -AmdS $NAME ./$DAEMON $PARAMS ;; esac } stop () { if ! status; then echo " ... $DESC $NAME could not be found. Probably not running."; exit 1; fi case "$usagetype" in root) tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') su - $CS_USER -c "screen -r $tmp -X quit" ;; nonroot) screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') -X quit ;; esac } status () { case "$usagetype" in root) su - $CS_USER -c "screen -ls" | grep [.]$NAME[[:space:]] > /dev/null ;; nonroot) screen -ls | grep [.]$NAME[[:space:]] > /dev/null ;; esac } watch () { if ! status; then echo "$DESC $NAME could not be found. Probably not running."; exit 1; fi case "$usagetype" in root) tmp=$(su - $CS_USER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') su - $CS_USER -c "screen -r $tmp" ;; nonroot) screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') ;; esac } case "$1" in start) echo "Starting $DESC: $NAME" start echo " ... done." ;; stop) echo "Stopping $DESC: $NAME" stop echo " ... done." ;; restart) echo "Restarting $DESC: $NAME" status && stop start echo " ... done." ;; status) if status then echo "$DESC: $NAME is UP" else echo "$DESC: $NAME is DOWN" fi ;; watch) watch ;; *) echo "Usage: $0 {start|stop|status|restart|watch}\nWhile watching press ctrl-a, ctrl-d to stop watching without stopping the server." exit 1 ;; esac exit 0 |
Данный скрипт найден на каком-то немецком форуме, за что честь им и хвала.
А теперь разбор изменяемых параметров:
1 | CS_USER=csserveruser |
Изменение пользователя, под которым будет запускатся наш сервер.
1 2 3 | DIR=/hlds DAEMON=hlds_run |
Настройка папки, где находится наш сервер и название скрипта hlds_run соответственно.
1 2 3 4 | # LAN server: # PARAMS="-game cstrike -nomaster -insecure +sv_lan 1 +maxplayers 16 +map de_dust" # Internet server: PARAMS="-game cstrike +map de_dust +maxplayers 12 -port 27015" |
Параметры запуска сервера.
1 2 | NAME=csserver DESC="CS dedicated server" |
Настройки для screen, если один сервер – их изменять не надо.
Итак, теперь у нас есть steam сервер counter-strike последней на данный момент версии. В следующей статье я опишу как установить и настроить amxmodx мод и настроить сервер..
#1 by olkobg - Октябрь 5th, 2009 at 13:55
Привет от каих то немцов надо поменять >4; на «>» и & на «&» иначе скрипт не работает
#2 by Evgeniy - Октябрь 20th, 2009 at 03:06
Привет.
Думаю он почти работает, НО
/etc/init.d/start: line 109: /dev/null: Permission denied
вот такой получаем ответ при старте
#3 by dcsk - Октябрь 20th, 2009 at 09:35
Манипуляции с init скриптами надо делать от рут-пользователя
#4 by Evgeniy - Октябрь 22nd, 2009 at 01:58
этот скрипт должен отрабатывать ни как не от рута.
Я его с человеком доправил – тут три строка говнокода. НО в целом правильный
#5 by viktor6 - Январь 27th, 2010 at 17:15
у меня нехочет
root@debian:~/KS_servera/hlds# ./cs.sh status
./cs.sh: line 146: syntax error near unexpected token `&’
./cs.sh: line 146: `status && stop’
root@debian:~/KS_servera/hlds#
#6 by lexa - Февраль 19th, 2010 at 17:54
ну так вроде выше написано что нужно подправить
#7 by merkon - Февраль 21st, 2010 at 23:48
Огромная просьба, кто-нибудь кто запускал cs сервак на centos напишите мне на мыло пожалуйста it.leha@gmail.com есть пару вопросов….
#8 by George - Сентябрь 20th, 2010 at 10:50
Подправил скрипт т.к. содержит некоторые обшибки из-за копипастинга скорее всего афтором а не от оригинала… Хотя кто знает…
Запустил на CentOS 5.5. под games’ом
Полёт нормальный…
#9 by SeagoStakcalt - Январь 4th, 2011 at 18:13
По моему мнению Вы не правы. Я уверен. Пишите мне в PM, обсудим.
#10 by FoolfProfBiop - Январь 6th, 2011 at 19:05
Извините за то, что вмешиваюсь… Я здесь недавно. Но мне очень близка эта тема. Могу помочь с ответом.
#11 by BoiteZerOrice - Январь 8th, 2011 at 15:49
Вы не правы. Я уверен. Могу отстоять свою позицию.
#12 by Serega - Февраль 27th, 2011 at 10:39
78.30.202.209:27018
#13 by Weepleundense - Апрель 6th, 2011 at 00:58
Голые знаеменитости
#14 by Nas - Апрель 10th, 2011 at 17:59
что именно править?? могли бы дать рабочий скрипт??
#15 by Jaduabiexia - Апрель 11th, 2011 at 17:50
год постройки спас на крови