Настройка Counter-strike сервера под debian(ubuntu)


Данная статья является универсальным руководством для любого дистрибутива 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. #1 by olkobg - Октябрь 5th, 2009 at 13:55

    Привет от каих то немцов надо поменять >4; на «>» и & на «&» иначе скрипт не работает

  2. #2 by Evgeniy - Октябрь 20th, 2009 at 03:06

    Привет.
    Думаю он почти работает, НО
    /etc/init.d/start: line 109: /dev/null: Permission denied

    вот такой получаем ответ при старте :(

  3. #3 by dcsk - Октябрь 20th, 2009 at 09:35

    Манипуляции с init скриптами надо делать от рут-пользователя

  4. #4 by Evgeniy - Октябрь 22nd, 2009 at 01:58

    этот скрипт должен отрабатывать ни как не от рута.
    Я его с человеком доправил – тут три строка говнокода. НО в целом правильный

  5. #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. #6 by lexa - Февраль 19th, 2010 at 17:54

    ну так вроде выше написано что нужно подправить

  7. #7 by merkon - Февраль 21st, 2010 at 23:48

    Огромная просьба, кто-нибудь кто запускал cs сервак на centos напишите мне на мыло пожалуйста it.leha@gmail.com есть пару вопросов….

  8. #8 by George - Сентябрь 20th, 2010 at 10:50

    Подправил скрипт т.к. содержит некоторые обшибки из-за копипастинга скорее всего афтором а не от оригинала… Хотя кто знает…
    Запустил на CentOS 5.5. под games’ом
    Полёт нормальный…

  9. #9 by SeagoStakcalt - Январь 4th, 2011 at 18:13

    По моему мнению Вы не правы. Я уверен. Пишите мне в PM, обсудим.

  10. #10 by FoolfProfBiop - Январь 6th, 2011 at 19:05

    Извините за то, что вмешиваюсь… Я здесь недавно. Но мне очень близка эта тема. Могу помочь с ответом.

  11. #11 by BoiteZerOrice - Январь 8th, 2011 at 15:49

    Вы не правы. Я уверен. Могу отстоять свою позицию.

  12. #12 by Serega - Февраль 27th, 2011 at 10:39

    78.30.202.209:27018

  13. #13 by Weepleundense - Апрель 6th, 2011 at 00:58

  14. #14 by Nas - Апрель 10th, 2011 at 17:59

    olkobg :
    Привет от каих то немцов надо поменять >4; на «>» и & на «&» иначе скрипт не работает

    что именно править?? могли бы дать рабочий скрипт??

(will not be published)
  1. No trackbacks yet.