0%

饥荒服务器搭建与后期维护

image-20220117013220668

一、服务器搭建

基本上逐条复制,不报错就是成功。

1.安装服务器的基本条件

1
2
3
sudo yum update

sudo yum -y install glibc.i686 libstdc++.i686 libcurl4-gnutls-dev.i686 libcurl.i686 screen

2.安装 SteamCMD 与 饥荒本体包

1
2
3
4
5
6
7
mkdir -p /home/steam && cd /home/steam

mkdir steamCMD && cd steamCMD

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

tar -xvzf steamcmd_linux.tar.gz

在 home 路径下创建 steam 文件夹,用于存放这些软件以及游戏等,解压缩下载的 steamCMD 后如下内容

然后运行 ./steamcmd.sh

开始自动下载安装,直到进入如下界面,输入 quit 退出

每次都是通过 ./steamcmd.sh 进入软件界面

接下来进入 steamCMD 进行游戏的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#设置安装路径

force_install_dir /home/steam/game/dontstarvetogether


#登录匿名用户用于下载服务端

login anonymous


#下载程序,数字是饥荒的steam代号

app_update 343050 validate

安装完后显示如下界面,之后 quit 退出

image-20220114192116116

首先解决最重要的问题,linux下饥荒的服务器似乎需要的组件跟现在的组件产生了名字上的差错,导致启动服务器会显示缺少关键的组件 libcurl-gnutls.so.4 ,因此需要执行下面的命令来解决:

1
ln -s /usr/lib/libcurl.so.4 /home/steam/game/dontstarvetogether/bin/lib32/libcurl-gnutls.so.4

然后接着执行:

1
2
3
4
5
6
7
8
9
10
cd /home/steam/game/dontstarvetogether/bin

# 创建存档文件夹
mkdir /home/steam/game/save

echo "/home/steam/game/dontstarvetogether/bin/dontstarve_dedicated_server_nullrenderer -console -persistent_storage_root /home/steam/game/save/dstsave -conf_dir dst -cluster World1 -shard Master" > master_start.sh

echo "/home/steam/game/dontstarvetogether/bin/dontstarve_dedicated_server_nullrenderer -console -persistent_storage_root /home/steam/game/save/dstsave -conf_dir dst -cluster World1 -shard Caves" > cave_start.sh

chmod +x master_start.sh cave_start.sh

输入./master_start.sh启动主世界服务器。

image-20220114193502245

当看到上图,表名服务器启动但还未配置所以显示未正常启动。

但这是成功的标志,之后按下 Ctrl + C 正常关闭服务器。

同样的输入 ./cave_start.sh 启动洞穴服务器并正常关闭。

经过上述服务器初次启动,在 /home/steam/game/save/dstsave/dst/World1/ 文件夹下就会自动生成默认的配置文件

image-20220114194553172

这个配置文件就是我们饥荒服务器的配置文件了,记住这个地址,接下来有两种方式,一种是自己修改配置,这种要求比较高,另一种就是现在自己电脑上创建一个服务器,然后将配置文件复制到Linux服务器上,推荐使用第二种,简单,准确,这里也只描述第二种。

3.创建服务器并启动

本地创建房间,并复制到 Linux 服务器

在自己电脑上先创建一个新的服务器,并设置好你的房间名、密码、地洞、配置好服务器mod,然后点击创建,等房间创建好到选人界面,就可以退出了,比如下图的房间。

image-20220114194641802

然后按照上图的位置打开世界的存放位置

image-20220114194824120

将上图的三个文件全部复制到linux服务器上,直接替换World1 中的内容。

上传完成后,新建一个 cluster_token.txt 存放服务器token信息

1
vi cluster_token.txt

注:不会用vi的用户可以在自己的电脑上右键新建txt文档,然后上传上去,也可以等下面获取token并填入后,一并上传

World1 文件夹下的内容

image-20220114195336086

获取官方服务器 token 并粘贴到Linux 服务器上

1.打开个人账户网页

image-20220116231419715

2.先进入游戏总列表,找到饥荒,在点击下面的游戏服务器界面

image-20220116232005134

3.进入后,会出现这个界面,给集群名起一个名字,这个名字与搜索页面的房间名是不同的,这个仅作为在此页面的区分标记,毕竟可能一个人有许多服务器,自己能记得清即可。

点击 添加新服务器,变成一串代码——token,将这个字符串复制到 cluster_token.txt 中

image-20220116232219301

启动服务器

为了让饥荒的服务运行在后台,所以采用了 screen 作为跳板,下面仅附带必须的语句,具体常用的语句,在文章最后稍加介绍

先启动主地图服务器

1
2
3
4
5
6
cd /home/steam/game/dontstarvetogether/bin

#指定screen名称
screen -S master

./master_start.sh

image-20220116234153662

出现上面 Sim paused 证明服务正常启动了,下面可能还有其他日志,但目前并不是很重要。

然后按下 Ctrl+A 然后再按下 Ctrl+D 就可以让服务后台运行,并回到原来的控制台

同样的方式启动洞穴世界

1
2
3
4
#指定screen名称
screen -S caves

./cave_start.sh

出现上面 Sim paused 证明服务正常启动了,下面可能还有其他日志,但目前并不是很重要。

然后按下 Ctrl+A 然后再按下 Ctrl+D 就可以让服务后台运行,并回到原来的控制台。

这时可以通过以下命令来查看改服务是否启动

1
2
netstat -nlp |grep :1099*

10999为主服务器的端口,10998为洞穴的端口,如果两个都显示值,则表明启动成功,如下图。

image-20220117001540139

如果要退出服务,可以杀掉进程,进入screen,退出就行了

1
2
3
4
5
6
7
8
9
10
11
#杀进程
kill -9 13856
kill -9 12758

#进入之前的screen
screen -r master
screen -r cave

#进入screen 后退出
exit

启动之后,应该就能够在游戏中搜索到你的服务器了,如果搜不到,找找问题所在,或者留言,不一回复。

image-20220117001946010

如上图所示,新建的房间,专属服务器,第一天,但是一点在游戏中我们是配置了mod的,但是在这里却没有显示,mod需要单独设置。

设置mod

在我们开始的房间文件里有两个文件夹,一个是“Master”和“Caves”,这两个分别代表主地图和洞穴目录,他们下面的文件都是一样的,以“Master”为例

image-20220117002447145

这里面的 server.ini 是服务器的配置选项,应该能看懂,但不推荐在这里改,建议游戏里面设置好后,直接复制上去。

modoverrides.lua 就是我们之前房间配置好的mod,因为这个文件是创建房间自动生成的,没有任何问题,在这里写是为了告诉你这个文件的作用,并且记住这个文件,等下要用到。

回到我们之前服务器的目录,下面有一个mods文件夹,进入这个文件夹

1
cd /home/steam/game/dontstarvetogether/mods

这个时候你会在里面发现有一个 dedicated_server_mods_setup.lua 文件,里面一堆英文而且全都注释的,我们之所以没有mod是因为这个文件没有引入并下载mod,所以我们编辑这个文件,同样你可以在Linux里面使用vim编辑,如果你不懂vim命令,可以在自己电脑上创建一个名叫 “dedicated_server_mods_setup.lua” 的空文本,然后将如下的代码粘贴进去,保存后再复制到Linux下)

1
2
#查看这个文件 内容
cat dedicated_server_mods_setup.lua
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
--There are two functions that will install mods, ServerModSetup and ServerModCollectionSetup. Put the calls to the functions in this file and they will be executed on boot.

--ServerModSetup takes a string of a specific mod's Workshop id. It will download and install the mod to your mod directory on boot.
--The Workshop id can be found at the end of the url to the mod's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=350811795
--ServerModSetup("350811795")

--ServerModCollectionSetup takes a string of a specific mod's Workshop id. It will download all the mods in the collection and install them to the mod directory on boot.
--The Workshop id can be found at the end of the url to the collection's Workshop page.
--Example: http://steamcommunity.com/sharedfiles/filedetails/?id=379114180
--ServerModCollectionSetup("379114180")

--上面是自带的内容,下面是需要自己修改的内容


ServerModSetup("1392778117")
ServerModSetup("1699194522")
ServerModSetup("1714227968")
ServerModSetup("1991746508")
ServerModSetup("2032685784")
ServerModSetup("2119742489")
ServerModSetup("2505341606")
ServerModSetup("378160973")

--ServerModCollectionSetup("id")

其中ServerModSetup(“1216718131”)就是引入mod,括号里面的数字就是mod的id,还记得上一步要你记住的那个modoverrides.lua文件吗?打开那个文件,如下:

image-20220117002955670

[“workshop-1392778117”]里面的这一串数字就是mod的id,所以你将modoverrides.lua文件里面所有的workshop对应的数字(也就是你配置的mod)全部复制到dedicated_server_mods_setup.lua 文件里,一个mod对应一条ServerModSetup(“1392778117”) ,修改好后再重启服务器,mod就配置好了。

image-20220117004714205

重新启动服务的时候,会自动下载mod,这个mod会下载到游戏的本体中,而不是save中。

下载过程比较麻烦,并且容易出错,然后服务自动终止,可以多启动几次,让mod慢慢下载,直到下载完毕,服务能正常启动。基本两三次就能下载完,并正常启动。

如果mod比较少,直接复制修改就行了,倘若mod 较多,可以用脚本批量导出标准格式,有时间写一个。

配置其他设置

1.配置管理员

用谁的账户创建token,谁就是天然的管理员,不用配置,如果想添加其他人做管理员也很简单。

首先准备好要做管理员的好友的KLEI用户ID,怎么看好友的KLEI用户ID?往下看
打开游戏,点击用户信息

image-20220117003542378

箭头指向的就是ID,复制下来。

然后进入之前的/home/steam/game/save/dstsave/dst/World1目录,也就是第三步最后面cluster_token.txt存放的目录,使用vim命令(没有vim的可以用vi命令)创建一个名叫“adminlist.txt”的文件

1
2
3
cd /home/steam/game/save/dstsave/dst/World1

vi adminlist.txt

按 i 开启编辑(开启编辑后下面会显示 – INSERT –),将好友的KLEI用户ID复制到adminlist.txt文件里,然后按一下esc退出编辑(下面的 – INSERT – 会消失),再按 :wq 保存文件。如果要加两位管理员,则换一行输入第二位好友的 KLEI用户ID,一行只能放一个好友的 KLEI用户ID。

image-20220117003922741

然后服务器重新启动,至此,服务器就搭建好了。

image-20220117005024717

可以跟小伙伴们一起游玩了,服务器其实不卡的,我这边蹭的邻居家的网络,是我自己太卡了。

推荐一波【神话书说】mod,非常有意思。作者一直在更新。

二、服务器后期维护

只要游戏更新、mod更新、甚至steam更新都可能导致游戏服务器找不到,或者进不去,所以要及时更新。

1.更新游戏

首先进入之前的steamcmd的安装目录,/home/steamcmd,然后启动steamcmd

1
2
3
cd /home/steam/steamCMD

./steamcmd.sh

上面的小警告不是大问题,不影响正常使用。

当你看到上图这种以 Steam> 开头的就代表进入了SteamCMD了,接下来再接着执行以下代码代码:

1
2
3
4
5
6
7
8
9
10
11
#(这里的/home/dstserver要改为你们自己的服务器路径)
force_install_dir /home/steam/game/dontstarvetogether


force_install_dir /home/dontstartveService



login anonymous

app_update 343050 validate

等服务器更新完成就OK了。

2.mod更新

mod跟新其实是自动的,当按照上述的步骤,将使用的mod编码写到 dedicated_server_mods_setup.lua 中后,每次启动服务器,它都会自动更新mod

补充知识

screen基本指令

自动导出mod脚本

vi基本用法

饥荒指令

参考文章

饥荒联机太卡?搭建饥荒独立服务器解决