前言

这几天被朋友拉进了饥荒的坑
作为一个有自己服务器的男人
当然要来折腾折腾了

我们这次的平台依旧是Ubuntu Server 20.04 LTS
介绍就到这里吧~ 开淦~

安装依赖环境

我们先来确认我们主机是什么架构的

1
uname -a

像我的主机显示的就是x86_64代表的是64位系统

如果大家的主机显示的是i386i586则是32位
32位的大家就可以跳过这一步了

64位系统的大家就要为你们的Ubuntu加上下列依赖库

1
2
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386

加上之后我们就可以安装这些我们需要的依赖了

1
2
sudo apt update
sudo apt install lib32gcc-s1 libcurl4-gnutls-dev:i386 lib32stdc++6 lib32z1

安装 SteamCMD

大家要不会想到我们会在一个只有命令行的Liunx上安装Steam
老惯例,还是一条指令
我不太喜欢到处wgettar这种模式

1
sudo apt install steamcmd

安装开始我们要Tab选择Ok

然后下一步我们选择I AGESS并且Tab选择OK

配置 SteamCMD

因为我们是直接安装的Steam,所以只需要

1
steamcmd

第一次打开会加载资源

当然,预期之内的报错了

那我们就先要退出SteamCMD,执行

1
sudo apt install libsdl2-2.0-0:i386

然后我们再重新打开Steam

下载 饥荒

我们先要指定的下载路径【顺序不能乱】
但是在指定目录之前我们要创建一个对应的目录

1
mkdir /home/ubuntu/dstserver

创建完目录之后我们就可以进Steam下一步了

1
2
steamcmd
force_install_dir /home/ubuntu/dstserver

然后需要使用匿名模式登录Steam
可能要根据网络环境等待一会,多多尝试

1
login anonymous

匿名登录了之后,我们就开始下载 饥荒

1
app_update 343050 validate

当显示Success! App '343050' fully installed.
饥荒就已经下载完了

如果大家在自己的文件夹找不到游戏
可以去下列地址找一找是否存在

1
/home/ubuntu/.steam/steamapps/common/Don't Starve Together Dedicated Server/

更新 饥荒

当然,因为饥荒经常更新
一旦更新服务器就无法联机
所以我们的饥荒也要进行更新
直接输入下面这条指令
保证你5分钟恢复上线【看网速】

1
steamcmd +force_install_dir /home/ubuntu/dstserver/ +login anonymous +app_update 343050 validate +quit

更新完毕之后会出现Success!字样

查看 饥荒 安装情况

我们打开我们安装的文件夹,发现这样子,那就差不多了

然后我们就尝试运行一下吧

1
2
cd /home/ubuntu/dstserver/bin/
./dontstarve_dedicated_server_nullrenderer

如果大家看到Your Server Will Not Start
那就证明到这一步还没有什么问题

添加 饥荒 存档

想搞服务器的朋友基本上都玩过饥荒
那我们直接在自己电脑上导入存档就行
你们也可以新建一个导入哦~

1
C:\Users\<User_Name>\Documents\Klei\DoNotStarveTogether\<Klei_ID>\<Map_Name>

我直接打包成.zip格式上传再unzip解压

1
2
mkdir /home/ubuntu/dstserver/map/
unzip -d /home/ubuntu/dstserver/map Clister_1.zip

更换 服务器 Token

我们首先要去登录一下Klei的官网

1
https://accounts.klei.com/account/info

我们选择我们购买的对应平台

注册或登录进去之后
我们选择游戏 --> 游戏服务器

然后我们去创建一个新的服务器

然后把我们新创建服务器的Token记录下来

然后我们进入存档,新建Token文件

1
2
3
4
cd /home/ubuntu/dstserver/map/JimLeon595/
touch ./cluster_token.txt
sudo vim ./cluster_token.txt
cat ./cluster_token.txt

做完这几步之后,我们cat文件

修改 Mod 资源

如果大家服务器中存在Mod
那我们原始的地图包里会包含一个文件modoverrides.lua

我们打开一看,发现是一堆类似Json的代码
其实也很简单,我们需要的就是"workshop-********"
那一串********的数字
一串数字代表的就是一个ModID

之后我们可以直接用正则把数据提取出来
加上ServerModSetup("")就是我们需要的数据

然后我们就需要把这些数据加入到对应文件中

1
2
cd /home/ubuntu/dstserver/mods/
sudo vim dedicated_server_mods_setup.lua
1
2
3
4
5
6
7
8
9
ServerModSetup("666155465")
ServerModSetup("378160973")
ServerModSetup("462372013")
ServerModSetup("569043634")
ServerModSetup("458587300")
ServerModSetup("2021943702")
ServerModSetup("856487758")
ServerModSetup("362175979")
ServerModSetup("1595631294")

然后我们的Mod文件就算是导入成功了

创建 启动 脚本

我在网上借鉴CDSN大佬說詤榢的大部分脚本

首先我们先在主目录创建.sh文件

1
2
sudo touch /home/ubuntu/dstserver/DstServer.sh
sudo vim /home/ubuntu/dstserver/DstServer.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/bin/bash

# steamcmd_dir 表示的是Steam安装的位置
steamcmd_dir="/usr/games/"

# install_dir 表示的饥荒服务器安装的位置
install_dir="/home/ubuntu/dstserver/"

#cluster_name 表示的是地图的名字
cluster_name="JimLeon595"

#donstarve_dir 表示的是地图的位置
dontstarve_dir="/home/ubuntu/.klei/DoNotStarveTogether/"

function fail()
{
echo Error: "$@" >&2
exit 1
}

function check_for_file()
{
if [ ! -e "$1" ]; then
fail "Missing file: $1"
fi
}

cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!"

check_for_file "steamcmd"
check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"
check_for_file "$install_dir/bin"

cd "$install_dir/bin" || fail

run_shared=(./dontstarve_dedicated_server_nullrenderer)
run_shared+=(-console)
run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)
run_shared+=(-shard)

"${run_shared[@]}" Caves | sed 's/^/Caves: /' &
"${run_shared[@]}" Master | sed 's/^/Master: /'

制完之后我们还要给他加个Buff

1
sudo chmod 777 /home/ubuntu/dstserver/DstServer.sh

添加 管理员 用户

我们在cluster_token同一目录下新建文件adminlist.txt

1
touch adminlist.txt

然后还是我们刚刚获取Token的官网主页

然后我们只需要把它加入到adminlist.txt中即可

1
sudo vim adminlist.txt

启动 服务器

因为要保持服务器24小时的运行
我们不能退出终端之后就停止服务
所以我们需要守护进程
你叫我用就会用
叫我解释也一脸蒙圈

我们现在来安装screen

1
sudo apt install screen

然后我们创建一个独立的窗口
并在里面运行我们的启动脚本

1
2
screen -S DstServer
sudo bash /home/dstserver/DstServer.sh

之后我们即使关闭了本次的终端
我们也可以很方便的使用screen调用出来

1
screen -r DstServer

还有我们退出终端的时候
请不要用Ctrl + C
这样会导致服务器停止运行
请使用Ctrl + D + A
这样会返回默认终端

进入我们自己的服务器

浏览游戏

搜索JimLeon595

点击加入

加入时可能会显示无法连接到Keli网络
请各位耐心重试多几遍

最后我们就发现我们可以游玩自己的服务器啦