饥荒联机版服务器搭建Linux(Ubuntu20.04)及常见报错和模组启用2023.5(超详细)
WananeezZ
编辑于 2023年05月23日 22:42

为了更加愉快和兄弟们玩游戏,根据网上资料学习自行搭建了一个饥荒联机版服务器,最初也不少踩坑,下面我会尽量详细讲解如何搭建,如何避坑,以及解决模组启用问题,有问题欢迎在评论区咨询

cut-off

目录预览

  1. 获取云服务器

  2. 安装依赖

  3. 安装SteamCMD和饥荒联机版

  4. 创建服务器存档

  5. 把设置好的存档传入服务器

  6. 设置启动脚本

  7. 设置饥荒服务器模组mods

  8. 开放端口

  9. 启动饥荒服务器

  10. 关闭服务器

  11. 服务器性能查看

cut-off

前提说明

代码直接复制我这里的就行,文件名最好也别改,如果友友是零基础,我这里提醒一下,代码指令是一行一行执行的,多行的不要一次性全部复制

cut-off

获取云服务器

up用的是阿里云的服务器ECS,友友们用腾讯云,华为云都行,原理都一样

这是我的服务器配置,仅供参考,其实我这配置偏高(没必要的...)

说明:通过云服务器官网自带的远程连接功能操控服务器,也可以通过Xshell等ssh工具进行服务器配置,下载方式我就不再赘述了,官网就能下,ssh的教程网上也不少

cut-off

安装依赖

安装服务器所需steam和饥荒的依赖

用有sudo权限的用户登录服务器,一般直接用root用户就行

代码块
JavaScript
自动换行
复制代码
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install libstdc++6 libgcc1 libcurl4-gnutls-dev:i386 lib32z1
复制成功

第一行指令如果提示'add-apt-repository command not found'通过如下方式解决:

代码块
JavaScript
自动换行
复制代码
sudo apt update
sudo apt install software-properties-common
sudo apt update
复制成功

注意:有些源里可能没有libcurl4-gnutls-dev,需要直接安装:

代码块
JavaScript
自动换行
复制代码
cd /usr/lib/
ln -s libcurl.so.4 libcurl-gnutls.so.4
复制成功

如果一会启动饥荒服务器时报错:

'error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory'

说明依赖项没有装好,最好把上一步也做了防止出现该问题

cut-off

安装SteamCMD和饥荒联机版

创建steamcmd文件夹

代码块
JavaScript
自动换行
复制代码
mkdir ~/steamcmd
cd ~/steamcmd
复制成功

下载、解压并启动steamcmd

代码块
JavaScript
自动换行
复制代码
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh
复制成功

输入左侧出现“steam>”说明steamcmd启动成功

接着,安装饥荒联机版

代码块
JavaScript
自动换行
复制代码
force_install_dir ../dontstarvetogether_dedicated_server
login anonymous
app_update 343050 validate
quit
复制成功

'app_update 343050 validate&#​39;是去steam中下载饥荒联机服务器的命令,需要等待一会,当执行完成后输入'quit&#​39;退出steam服务

cut-off

创建服务器存档

这里需要使用到FileZilla工具,简单理解为一个系统间服务器传输文件的工具,到官网下载,网上也有使用教程

打开饥荒联机版

2023.5月的饥荒更新

创建游戏->创建世界,具体想设置什么自己调一下,洞穴记得勾选,模组也根据自己需求选上,创建好世界开始后加载到如下选人物页面就完成了

选不选人都行

在服务器中创建存档的文件夹

代码块
JavaScript
自动换行
复制代码
mkdir -p ~/.klei/DoNotStarveTogether/Cluster_1
复制成功

在本地电脑中的C://User/xxx/文档/klei/DoNotStarveTogether文件夹下,找到你刚才创建的饥荒存档,上传到服务器的/.klei/DoNotStarveTogether/Cluster_1这个文件夹里面(上面创建的),具体操作一会会用FileZilla实现

这样的

回到饥荒联机版主页面,获取服务器token

依次选择'账号&#​39;->'游戏&#​39;

进入

复制令牌,记得是全部

在本地电脑,还是刚刚游戏存档的位置,创建cluster_token.txt文件,记事本打开,把刚刚复制的令牌粘贴进去

该目录下创建cluster_token.txt文件

保存

复制自己的Klei用户ID,一会用来创建管理员权限

复制灰色的ID

设置管理员权限

设置服务器密码、人数等

自行设置

cut-off

把设置好的存档传入服务器

使用FileZilla

连接服务器

输入密码,密码是你在服务器给root设置过的密码

输入密码,提示什么都点确定

连接成功

此图右侧为拖拽完毕后的结果

cut-off

设置启动脚本

编写服务器中启动饥荒服务器的脚本

根目录下,创建并设置脚本文件

代码块
JavaScript
自动换行
复制代码
cd ~
vim boot.sh
复制成功

把如下代码粘贴到刚创建的boot.sh

代码块
JavaScript
自动换行
复制代码
#!/bin/bash

steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/dontstarvetogether_dedicated_server"
cluster_name="Cluster_1"
dontstarve_dir="$HOME/.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.sh"
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/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
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: /'
复制成功

注意:代码粘贴完毕后按“:”,然后输入“wq”,回车,便可保存并退出

该设置中的启动方式为64位服务器,想启动32位的如下修改

修改这两行

如下:

代码块
JavaScript
自动换行
复制代码
cd "$install_dir/bin" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer)
复制成功

设置boot.sh权限

代码块
JavaScript
自动换行
复制代码
sudo chmod u+x boot.sh
复制成功

饥荒服务器还剩下最后模组mods部分,下面我单独放一个模块说明

cut-off

设置饥荒服务器模组mods

模组设置和启用耗费了我想当长的时间,希望通过这篇专栏友友们可以顺利避坑,解决问题

尽管上面我们把本地创建添加模组后的游戏存档通过FileZilla传入了服务器中,但也会可能会导致饥荒服务器可以正常游玩后却没有模组被启用,解决方法如下:

本地的饥荒存档目录下,进入到Master,用记事本打开modoverrides.lua文件,如下圈出的数字为steam创意工坊的模组编号,这个文档因为在游戏中生成过了,所以指令都添加好了,重点是这些数字,我这里四个分别代表四个模组,都复制下来

Caves文件夹中也有modoverrides.lua文件,该步骤的意义就是获取模组编号,友友们也可以在steam创意工坊中通过网页连接自行获取,效果一致

模组编号

重中之重:

该文件会在服务器启动是被调用

记事本打开此dedicated_server_mods_setup.lua,有一些注释,都没用,全部删掉即可

按如下方式编辑:你用几个就写几行

代码块
JavaScript
自动换行
复制代码
ServerModSetup("模组编号")
复制成功

保证模组万无一失启用

到此,饥荒服务器与模组设置完毕。如果想要新添加模组,我的建议是重新在主机饥荒联机版中生成,然后替换Caves和Master文件夹中的modoverrides.lua文件,还要再重复上述步骤,dedicated_server_mods_setup.lua里添加对应模组编号。

cut-off

开放端口

服务器搭建好了,端口不开放,其他小伙伴们还是进不来的

UDP协议开放10888、10998、10999

TCP和UDP协议开放8767、27017

开放端口

cut-off

启动饥荒服务器

到根目录,也就是boot.sh所在的目录,运行下面的代码,启动服务器

代码块
JavaScript
自动换行
复制代码
cd ~
nohup ./boot.sh>root.log 2>&1 &
复制成功

如果报错error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file:或者其中有‘libcurl-gnutls.so.4’一类的报错,那是依赖没有装好,回到上面重新装一下

执行后饥荒服务器会在后台运行,可以通过下面这个命令查看输出的日志

代码块
JavaScript
自动换行
复制代码
tail -f root.log
复制成功

有这些提示就代表启动成功了

启动成功

cut-off

关闭服务器

服务器启动后会一直运行,玩家都不在会暂停,关闭服务器需要找到服务器pid,然后kill掉即可,再想启动还是上述命令

代码块
JavaScript
自动换行
复制代码
ps -ef | grep don
kill 服务器pid
复制成功

服务器性能查看

代码块
JavaScript
自动换行
复制代码
top
复制成功

这两个便是饥荒服务器进程,一个是主世界,一个是洞穴

结语

至此,饥荒服务器的搭建流程全部结束。

如有问题欢迎在评论留言。

up也不少参考其他大佬的教程,如下附上一个不少参考的链接:

代码块
JavaScript
自动换行
复制代码
https://zhuanlan.zhihu.com/p/625645476
复制成功