Ballistic Overkill 硝云弹雨服务器搭建

准备工作

系统:Debian8 64位
内存:≥384MB
上行带宽:设置2名观众时,1Mbps带10个玩家,2Mbps带14个玩家,3Mbps带16个玩家
SSH工具:Xshell 5

连接服务器

首先打开Xshell,新建会话




如果中间有断开连接,点击这里重新连接

正常登陆后,会显示类似以下的信息

1
2
3
4
5
6
7
8
9
10
11
12
Connecting to 119.29.29.66:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Feb 4 10:59:35 2017 from 122.238.31.266
[email protected]:~#

修改DNS地址

近期阿里和腾讯的DNS间歇性抽风,改成114比较稳妥

1
vi /etc/resolv.conf

按一下键盘的i键进入插入模式(左下角会出现– INSERT –的字样)
把nameserver后面的DNS地址改成114的,注意空格
1
2
3
nameserver 114.114.114.114
nameserver 114.114.115.115
options timeout:1 rotate

改完之后按一下键盘Esc退出插入模式,然后输入
1
:wq

就完成DNS的修改了
如果你的服务器在海外,建议改成8.8.8.8和8.8.4.4

修改Debian8软件源为163源

国内服务器可以改成163源,速度比较快

1
vi /etc/apt/sources.list

按一下键盘的i键进入插入模式(左下角会出现– INSERT –的字样)
把原来的内容删掉,换成以下内容
1
2
3
4
5
6
7
8
deb http://mirrors.163.com/debian/ jessie main non-free contrib
deb http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ jessie-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ jessie/updates main non-free contrib

改完之后按一下键盘Esc退出插入模式,然后输入
1
:wq

更新一下软件源列表使其生效
1
apt-get update

安装使用screen和vim-gtk

安装screen,这是一个可以让BO服务端在后台运行的多窗口工具,vim-gtk是文本编辑工具

1
apt-get install -y screen vim-gtk

这里说一下screen的常见用法
新建一个名为bo的窗口,注意S是大写
1
screen -S bo

按Ctrl+A,松开手,再按一下D,就能让bo窗口在后台运行
1
2
[detached from 650.bo]
[email protected]:~#

列出当前screen所有窗口
1
2
3
4
[email protected]:~# screen -ls
There is a screen on:
650.bo (02/04/17 11:24:56) (Detached)
1 Socket in /var/run/screen/S-root.

然后回到bo窗口
1
screen -r bo

安装SteamCMD和BO服务端

打开根目录

1
cd /

新建一个名为st的文件夹用来下载SteamCMD
1
mkdir st

打开st文件夹
1
cd /st

下载SteamCMD
1
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz && tar -xf steamcmd_linux.tar.gz && rm -f steamcmd_linux.tar.gz

安装lib32stdc++6
1
apt-get install -y lib32stdc++6

运行SteamCMD
第一次运行steamcmd会自动更新,如果更新非常慢,可以按Ctrl+C结束进程,然后再次运行。更新完后,输入quit并回车,退出steamcmd。
1
./steamcmd.sh

把BO服务端安装在/bo目录
以后BO客户端有更新的话,记得回来用下面这条命令更新服务端,如果更新非常慢,可以按Ctrl+C结束进程,然后再次运行
1
./steamcmd.sh +login anonymous +force_install_dir /bo +app_update 416880 validate +quit

修改BO服务端参数

打开服务端目录

1
cd /bo

修改服务端参数文件
1
vi config.txt

按一下键盘的i键进入插入模式(左下角会出现– INSERT –的字样)
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
# Ballistic Overkill Dedicated Server Configuration File
# After changing any configuration you must restart the server to take effect# Server name as listed in server browser
# 在服务器列表中显示的服务器名称。别填中文,服务器会出错,可以填英文、数字、符号。
ServerName=China Guangzhou Server

# UDP Server port 服务器端口
ServerPort=27015

# Server Query Port 服务器查询端口
QueryPort=27016

# Max players 玩家人数上限
# Valid values are from 2 to 16
# 根据服务器上行带宽来决定玩家人数上限,1Mbps可以带10个玩家,2Mbps带12个玩家,3Mbps带14个玩家
# 这里是1M带宽的机子,所以我填10
MaxPlayers=10

# Max Spectators 观众人数上限,观众也是会吃带宽的,建议设置为2
MaxSpectators=2

# Max ping (in miliseconds)
# When the clients ping is greater than MaxPing he will be kicked from the server
# Use 0 (zero) to turn it off.
# 如果Ping延迟超过这个值,服务器就会踢人,默认为0,即关闭高延迟踢人功能
MaxPing=0

# Start game map 首次运行的地图,随便填,反正下一局又会重新投票
# Valid values are:
# 1: Corporate Park
# 2: Hollow
# 3: Sunnsquare Mall
# 4: Nox Museum
# 5: Wonderdome
# 7: Citadel
# 8: Overhead
# 9: Blackfield
# 10: Hakim
GameMap=3

# Game mode 首次运行的游戏模式,随便填,反正下一局又会重新投票
# Valid values are:
# 1: Team Deatchmatch
# 2: Conquest
# 3: King of the Hill
# 5: Free for all
GameMode=1

# MatchTime 每局时长,默认为10分钟
# value in minutes
MatchTime=10

# Password 服务器密码,私人比赛时可以加密码。默认留空,无密码。
# Set an Password to only selected players be able to enter in your match
Password=

#DedicatedBroadcast <strong>服务器类型,默认0,但是一定要改为1</strong>
# 0: P2P Broadcast (Hybrid) 混合服务器
# 1: Server Broadcast (ServerOnly) 专用服务器
DedicatedBroadcast=1

# Banner shown when the client is logging into the server 服务器横幅图像,默认留空
# Valid types are JPG and PNG
# Image size is 328x82 pixels
# Sample Url: http://i.imgur.com/TZyeCgt.png
BannerURL=
# URL to open when the user clicks over the banner 点击服务器横幅图像后跳转的网址,默认留空
# Sample Url: http://google.com
ClickURL=

改完之后按一下键盘Esc退出插入模式,然后输入

1
:wq

即可保存config.txt文件并关闭vim
如果你不想修改,或者改错了,可以输入
1
:q!

强制退出而不保存

运行服务端

1
./BODS.sh

最后按Ctrl+A,松开手,再按一下D,就能让bo窗口在后台运行了

手动更新服务端

当游戏客户端更新时,服务端一般也要更新,否则玩家更新后进不了服务器
先回到bo窗口

1
screen -r bo

按Ctrl+C结束进程
然后更新客户端
1
cd /st

1
./steamcmd.sh +login anonymous +force_install_dir /bo +app_update 416880 validate +quit

1
cd /bo

更新后config.txt文件可能会被覆盖,你需要重新修改并保存
1
vi config.txt

最后重新运行服务端
1
./BODS.sh

自动更新服务端

是不是觉得手动更新比较麻烦?
那么我们直接用自动脚本来帮我们定时升级
新建一个auto.sh在/st目录下

1
vi /st/auto.sh

按i进入插入模式,复制下面这段文字进去,然后按Esc,输入:wq保存并退出
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/env bash
killall screen
mv -f /bo/config.txt /st/config.bak
cd /st
./steamcmd.sh +login anonymous +force_install_dir /bo +app_update 416880 validate +quit
mv -f /st/config.bak /bo/config.txt
session_name=$"bo"
screen -dmS $session_name
cmd=$"/bo/BODS.x86 -batchmode -nographics -logfile /bo/output.txt"
screen -x -S $session_name -p 0 -X stuff "$cmd"
screen -x -S $session_name -p 0 -X stuff $'\n'

给auto.sh添加可执行权限
1
chmod u+x /st/auto.sh

安装crontab计划任务
1
apt-get install -y cron

编辑计划任务
1
crontab -e

它会提示你选一个编辑器来编辑,我们选择使用vim-gtk
1
2
3
4
5
6
Select an editor. To change later, run 'select-editor'.
1. /bin/nano
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
4. /usr/bin/vim.gtk
Choose 1-4 [1]: 4

按i进入插入模式,把这句复制到最下面(意思是每天早上6点定时执行更新脚本),然后按Esc,输入:wq保存并退出
1
0 6 * * * /st/auto.sh

进阶:同时运行多个服务端

如果服务器带宽充足,CPU双线程以上,可以考虑运行多个服务端,具体服务器人数上限请根据前面的说明自己估算。
个人建议:
4Mbps=12人+12人
5Mbps=14人+14人
6Mbps=16人+12人=12人×3
7Mbps=16人+14人
8Mbps=16人+16人=12人×4

下面以运行3个服务端为例,你必须修改/b2/config.txt里面的ServerName,ServerPort,QueryPort这三个参数,不能与/bo/config.txt的参数相同,否则会冲突,/b3/config.txt同理。

1
vi /st/auto.sh

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
#!/usr/bin/env bash
killall screen
mv -f /bo/config.txt /st/config.bak
mv -f /b2/config.txt /st/config.bak2
mv -f /b3/config.txt /st/config.bak3
rm -rf /b2
rm -rf /b3
cd /st
./steamcmd.sh +login anonymous +force_install_dir /bo +app_update 416880 validate +quit
cp -f -R /bo /b2
cp -f -R /bo /b3
mv -f /st/config.bak /bo/config.txt
mv -f /st/config.bak2 /b2/config.txt
mv -f /st/config.bak3 /b3/config.txt
session1=$"bo"
session2=$"b2"
session3=$"b3"
screen -dmS $session1
screen -dmS $session2
screen -dmS $session3
cmd1=$"/bo/BODS.x86 -batchmode -nographics -logfile /bo/output.txt"
cmd2=$"/b2/BODS.x86 -batchmode -nographics -logfile /b2/output.txt"
cmd3=$"/b3/BODS.x86 -batchmode -nographics -logfile /b3/output.txt"
screen -x -S $session1 -p 0 -X stuff "$cmd1"
screen -x -S $session1 -p 0 -X stuff $'\n'
screen -x -S $session2 -p 0 -X stuff "$cmd2"
screen -x -S $session2 -p 0 -X stuff $'\n'
screen -x -S $session3 -p 0 -X stuff "$cmd3"
screen -x -S $session3 -p 0 -X stuff $'\n'

如果是运行4个服务端,同理。注意,4个服务端非常消耗CPU性能。

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
#!/usr/bin/env bash
killall screen
mv -f /bo/config.txt /st/config.bak
mv -f /b2/config.txt /st/config.bak2
mv -f /b3/config.txt /st/config.bak3
mv -f /b4/config.txt /st/config.bak4
rm -rf /b2
rm -rf /b3
rm -rf /b4
cd /st
./steamcmd.sh +login anonymous +force_install_dir /bo +app_update 416880 validate +quit
cp -f -R /bo /b2
cp -f -R /bo /b3
cp -f -R /bo /b4
mv -f /st/config.bak /bo/config.txt
mv -f /st/config.bak2 /b2/config.txt
mv -f /st/config.bak3 /b3/config.txt
mv -f /st/config.bak4 /b4/config.txt
session1=$"bo"
session2=$"b2"
session3=$"b3"
session4=$"b4"
screen -dmS $session1
screen -dmS $session2
screen -dmS $session3
screen -dmS $session4
cmd1=$"/bo/BODS.x86 -batchmode -nographics -logfile /bo/output.txt"
cmd2=$"/b2/BODS.x86 -batchmode -nographics -logfile /b2/output.txt"
cmd3=$"/b3/BODS.x86 -batchmode -nographics -logfile /b3/output.txt"
cmd4=$"/b4/BODS.x86 -batchmode -nographics -logfile /b4/output.txt"
screen -x -S $session1 -p 0 -X stuff "$cmd1"
screen -x -S $session1 -p 0 -X stuff $'\n'
screen -x -S $session2 -p 0 -X stuff "$cmd2"
screen -x -S $session2 -p 0 -X stuff $'\n'
screen -x -S $session3 -p 0 -X stuff "$cmd3"
screen -x -S $session3 -p 0 -X stuff $'\n'
screen -x -S $session4 -p 0 -X stuff "$cmd4"
screen -x -S $session4 -p 0 -X stuff $'\n'

参考文章

[TUTORIAL] Dedicated Server ( Windows | Linux )