Ubuntu上配置饥荒联机版服务器指南

本文将介绍如何在Ubuntu云主机(阿里云ECS)上配置饥荒联机版服务器。主要过程在steamcommunity已经讲得很详细了。我提供了一个傻瓜脚本。但有一些细节操作方面需要进一步明确。

创建服务器

游戏的名字和密码分别在/home/dst/.klei/DoNotStarveTogether/MyDediServer/cluster.ini这个文件下面的cluster_namecluster_password字段上面。
出现./dontstarve_dedicated_server_nullrenderer: error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory 错误,需要安装32位的libcurl,apt-get install libcurl3-gnutls:i386

有关ClusterToken

网上有资料说可以在游戏主界面的个人资料里面找到自己的Token,但经过测试发现并没有。
这时候需要在游戏里面输入一下的命令行,应该得到下图的结果,然后可以在自己的.klei文件夹里面找到一个cluster_token.txt的文件。如果显示Attempt to call a nil value这样的错误,可以尝试在Steam的库里面的工具里面下载Don’t Starve Together Dedicated Server。

1
TheNet:GenerateClusterToken()

有关不能在DST上面显示

这个可能是由于版本不对的缘故。应当及时更新。

有关ECS的额外须知

注意我们要在阿里云的安全组里面加入10999端口的UDP规则。

创建洞穴

出现Unhandled exception during server startup: RakNet UDP startup failed: SOCKET_PORT_ALREADY_IN_USE (5)错误,注意Master世界和Caves世界的端口是不能冲突的。

有时候会出现洞穴地图被生成为地上的情况,这是因为原因是没有配置worldgenoverride.lua,或者照抄了Master里面的worldgenoverride.lua。

在另一台服务器上创建洞穴

我们需要在cluster.ini文件里面指定主服务器的ip。
有时候我们在主世界看到洞穴入口被藤蔓封住,然后查看洞穴服务器的server_log.ini发现以下log。注意设置阿里云的安全组和主服务器的cluster.ini文件中的bind_ip0.0.0.0

1
2
3
4
5
6
7
8
[00:05:35]: [Shard] Connection to master failed. Waiting to reconnect...
[00:05:40]: About to start a shard with these settings:
[00:05:40]: ShardName: Caves
[00:05:40]: ShardID: 4048981408
[00:05:40]: ShardRole: SLAVE
[00:05:40]: MasterHost: 47.101.137.181
[00:05:40]: MasterBind: (null)
[00:05:40]: MasterPort: 11001

Dedicated Server主要文件解析

  1. ~/.klei/DoNotStarveTogether/MyDediServer/cluster.ini
    用于配置整个服务器的信息,包括在Steam平台上显示的游戏房间名字和密码等。
  2. ~/.klei/DoNotStarveTogether/MyDediServer/cluster_token.txt
    服务器主人的Token。在上面的ClusterToken章节讲过怎么设置了。
  3. ~/.klei/DoNotStarveTogether/MyDediServer/下的Master和Caves文件夹
    分别是主世界和洞穴的世界。
  4. ~/server_dst/bin文件夹
    存放有start.sh、restart.sh等文件,负责启动和重启服务器,关闭服务器则可以使用htop -u dst,然后SIGTERM掉进程。
  5. ~/server_dst/mods/dedicated_server_mods_setup.lua~/.klei/DoNotStarveTogether/MyDediServer/Master/modoverrides.lua
    前者用来配置需要装的mod,后者用来给这个mod指定参数。一般mod配置是很麻烦的,首先需要验证这些mod不互相冲突,不会对服务器的性能造成较大负担。然后我们需要将这些mod的id注册到dedicated_server_mods_setup.lua里面。我们可以在steam上面创建一个ModCollection,然后直接添加这个ModCollection,从而避免手动输入每个mod的id。这里推荐我自己使用的Collection:1698005633。在设置完dedicated_server_mods_setup.lua之后可能启动后并没有加载mod,这是因为我们还需要设置modoverrides.lua。这里推荐我的配置。如果需要引入其他的模组,建议首先在自己电脑上配置后,然后可以白嫖本地的modoverrides.lua文件上的配置。
  6. ~/.klei/DoNotStarveTogether/MyDediServer/Master/save文件夹
    保存游戏存档
  7. ~/.klei/DoNotStarveTogether/MyDediServer/Master/worldgenoverride.lua
    该文件用来配置DST的世界设置。
    需要注意leveldataoverride.lua会覆盖worldgenoverride.lua,所以在新创建的Master世界的时候需要删除这个文件,不然怎么改worldgenoverride.lua都没有用。
  8. ~/home/dst/.klei/DoNotStarveTogether/MyDediServer/adminlist.txt
    用来加入管理员。
    我们可以在server_log.txt里面查找Read save字段,找到一个KU_开头的字段,加入这个文件里面即可。

备份恢复

一般来说备份MyDediServer文件夹即可在存档被意外删除后进行简单替换的恢复。在替换后应当chown或者chmod一下,不然会出现权限引起的core。

额外说明

出现问题可以查看server_log.txt,或运行start.sh看log。
特别注意要su到dst之后再sudo sh restart.sh,不能在root下面搞,否则会到/root里面搞事。

RELATED WORK

  1. https://blog.chaos.run/dreams/dst-server/
  2. https://forums.kleientertainment.com/forums/topic/100518-attempt-to-call-a-nil-value/
  3. https://xueli.li/2017/09/22/build-dst-server-on-ubuntu/