Lolipop's Studio.

基于 SteamCMD 部署一个给朋友使用的饥荒联机版服务器

字数统计: 2.2k阅读时长: 9 min
2024/07/02
loading

本文重现了笔者在自己的 CentOS 7 (64-bit) 系统中部署饥荒联机版服务器的全过程,供君参考。

Steam 版的饥荒联机版与 Wegame 版数据不互通,也无法相互联机。

笔者主要参考了如下两个部署教程:

安装 steamcmd

安装的步骤可以直接参考 SteamCMD 的官方文档中文版)。

需要注意的是,SteamCMD 仅提供 32 位二进制文件。如果您的系统仅能运行 64 位进程(例如 OpenWRT 系统),将不能正常使用。

为了安全考虑,steamcmd 官方建议创建新的系统用户运行,而不是拥有最高命令权限的 root 用户。因此,首先创建一个名为 steam 的用户:

1
2
3
4
# 创建 steam 用户
sudo useradd -m steam
# 修改 steam 用户登录密码
sudo passwd steam

对于 64 位系统,需要安装如下的必要依赖以运行 steamcmd

1
yum -y install glibc.i686 libstdc++.i686

切换至 steam 用户:

1
su - steam

安装 steamcmd

1
2
cd ~
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

运行 steamcmd

1
/home/steam/steamcmd.sh

耐心等待更新文件下载、安装完毕……

安装饥荒联机版

安装饥荒联机版运行的必要依赖:

1
2
yum -y install libcurl.i686
ln -s /usr/lib/libcurl.so.4 /usr/lib/libcurl-gnutls.so.4

设置饥荒联机版安装目录:

1
Steam> force_install_dir /home/steam/steamapps/DST

匿名登录到 steamcmd

1
Steam> login anonymous

安装饥荒联机版:

1
Steam> app_update 343050 validate

测试饥荒联机版的运行。特别的,由于相对路径的缘故,执行 dontstarve_dedicated_server_nullrenderer 前一定要先移动到它所在的目录:

1
2
cd /home/steam/steamapps/DST/bin
./dontstarve_dedicated_server_nullrenderer

如果没有其它的报错,那么打印内容大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ ./dontstarve_dedicated_server_nullrenderer
./dontstarve_dedicated_server_nullrenderer: /lib/libcurl-gnutls.so.4: no version information available (required by ./dontstarve_dedicated_server_nullrenderer)
[00:00:00]: PersistRootStorage is now /home/steam/.klei//DoNotStarveTogether/Cluster_1/Master/
[00:00:00]: Starting Up
[00:00:00]: Version: 617969
[00:00:00]: Current time: Tue Jul 2 18:22:40 2024

[00:00:00]: System Name: Linux
[00:00:00]: Host Name: iZ2vc17uca9zl48iicx7ojZ
[00:00:00]: Release(Kernel) Version: 3.10.0-1160.108.1.el7.x86_64
[00:00:00]: Kernel Build Timestamp: #1 SMP Thu Jan 25 16:17:31 UTC 2024
[00:00:00]: Machine Arch: x86_64
[00:00:00]: Don't Starve Together: 617969 LINUX
[00:00:00]: Build Date: 9567
[00:00:00]: Mode: 32-bit
...

此时,会自动创建存档目录 /home/steam/.klei/DoNotStarveTogether/Cluster_1,如果后续不再需要可直接删除。

添加饥荒联机版服务器管理脚本

screen 命令可以用来创建独立的命令行窗口执行进程,方便对进程的管理,例如追踪运行的日志信息。笔者选用它来管理饥荒联机版服务器的进程。

1
yum install -y screen

首先创建存放脚本的文件夹:

1
mkdir /home/steam/scripts

下面开始编写管理服务器过程中最常用的两个脚本。

自动更新脚本

创建自动更新饥荒联机版的脚本 /home/steam/scripts/update_dst.sh,编写内容如下:

1
2
3
4
5
6
7
8
9
#!/bin/sh

# 更新饥荒联机版
cd /home/steam
./steamcmd.sh +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +force_install_dir /home/steam/steamapps/DST +login anonymous +app_update 343050 validate +quit

# 更新已安装的模组
cd /home/steam/steamapps/DST/bin
./dontstarve_dedicated_server_nullrenderer -cluster CustomSaveName -only_update_server_mods

其中 CustomSaveName 为您的存档目录名称,可自定义修改,如不配置将默认使用 Cluster_1

添加脚本的执行权限,后略:

1
chmod +x /home/steam/scripts/update_dst.sh

启动(重启)服务器脚本

创建启动(重启)饥荒联机版服务器的脚本 /home/steam/scripts/start_dst.sh,编写内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh

# 保存服务器数据并退出
screen -S dst_master -X stuff $'c_shutdown()\n'
screen -S dst_caves -X stuff $'c_shutdown()\n'

# 更新饥荒联机版
/home/steam/scripts/update_dst.sh

cd /home/steam/steamapps/DST/bin
# 启动地上世界服务器
screen -dmS dst_master ./dontstarve_dedicated_server_nullrenderer -cluster CustomSaveName -console -shard Master
# 启动洞穴世界服务器
screen -dmS dst_caves ./dontstarve_dedicated_server_nullrenderer -cluster CustomSaveName -console -shard Caves

脚本将自动保存服务器数据(如果不使用 c_shutdown() 而直接关闭 Screen 的话,将丢失度过黑夜前未保存的所有数据),检查并安装饥荒联机版更新包,最后重新启动服务器。

服务器启动后,执行命令 screen -r dst_masterscreen -r dst_caves 查看日志,您会发现打印有如下内容:

1
2
3
4
5
6
7
[00:00:05]: [200] Account Failed (6): "E_INVALID_TOKEN"
[00:00:05]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[00:00:05]: !!!! Your Server Will Not Start !!!!
[00:00:05]: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[00:00:05]: No auth token could be found.
[00:00:05]: Please visit https://accounts.klei.com/account/game/servers?game=DontStarveTogether
[00:00:05]: to generate server configuration files

这意味着我们最后还需要配置 Auth Token 等信息,使得服务器能正确地注册并被联机用户发现。

正式启动饥荒联机版服务器

访问 https://accounts.klei.com/account/game/servers?game=DontStarveTogether,创建一个饥荒联机版服务器并获取 Auth Token:

创建服务器

填写基本的配置信息:

配置服务器

下载设置并上传到主机,将解压后的文件放置到存档目录:

1
2
3
4
5
unzip DST_Lolipop.zip
mv MyDediServer /home/steam/.klei/DoNotStarveTogether/CustomSaveName

# 如果使用了 root 用户解压,别忘了修改文件夹所有权
# chown -R steam /home/steam/.klei/DoNotStarveTogether/CustomSaveName

最后的最后,执行前面编写的启动脚本:

1
/home/steam/scripts/start_dst.sh

在游戏大厅里搜索服务器,开始愉快地玩耍吧!

搜索服务器

饥荒联机版服务器运维

添加模组

在饥荒联机版服务器添加并启用模组,需配置两部分内容。

下载模组

第一部分是告诉服务器要下载哪些模组。编辑 /home/steam/steamapps/DST/mods/dedicated_server_mods_setup.lua,使用指令 ServerModSetup()ServerModCollectionSetup() 添加需要下载的模组,例如:

1
2
3
-- /home/steam/steamapps/DST/mods/dedicated_server_mods_setup.lua
ServerModSetup("345692228")
ServerModCollectionSetup("3286974182")

通过上面的配置,服务器将自动下载 Steam 创意工坊上的模组 #345692228,以及模组集合 #3286974182 中的所有模组。

由于每次执行 steamcmd.sh 命令检查游戏更新后会重置 dedicated_server_mods_setup.lua,建议手动备份该文件,这样的话未来增删模组时可以直接复用。例如:

1
cp dedicated_server_mods_setup.lua dedicated_server_mods_setup.temp.lua

优化前面我们编写的更新服务器脚本 /home/steam/scripts/update_dst.sh,在检查游戏更新之后还原备份文件:

1
2
3
4
5
6
7
8
9
cd /home/steam
./steamcmd.sh +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +force_install_dir /home/steam/steamapps/DST +login anonymous +app_update 343050 validate +quit

# 还原备份文件
cd /home/steam/steamapps/DST/mods
cp dedicated_server_mods_setup.temp.lua dedicated_server_mods_setup.lua

cd /home/steam/steamapps/DST/bin
./dontstarve_dedicated_server_nullrenderer -cluster CustomSaveName -only_update_server_mods

启用模组

第二部分是告诉服务器要启用哪些模组。有两种配置方式,选择其一即可:

  1. /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/modoverrides.lua 用于管理洞穴世界模组的启用与配置;/home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/modoverrides.lua 用于管理地上世界模组的启用与配置。
  2. /home/steam/steamapps/DST/mods/modsettings.lua 用于管理模组的启用。需留意的是:1)本方式通常用于模组的开发调试;2)不能对模组进行详细设置,模组将始终使用默认配置;3)使用部分模组时可能会报错,此时请切换为第一种配置方法。

笔者选用第一种配置方法,新建文件 modoverrides.lua,编写内容如下:

1
2
3
4
5
-- modoverrides.lua
return {
["workshop-345692228"] = { enabled = true },
["workshop-xxxxxxxxx"] = { enabled = true }
}

需注意的是,modoverrides.lua 不支持一键启用某个模组合集的所有模组,还是需要获取这些模组的编号并编写配置。

添加可执行权限并拷贝到对应目录:

1
2
3
chmod +x modoverrides.lua
cp modoverrides.lua /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/
cp modoverrides.lua /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/

执行脚本 /home/steam/scripts/start_dst.sh 重启服务器即可。

服务器模组

自定义世界

笔者建议在电脑上手动启动一个自定义好的世界,再将生成的配置文件 worldgenoverride.lualeveldataoverride.lua 分别粘贴到服务器的对应文件夹里。地上世界和洞穴世界的配置文件有所区别,不要搞混喽:

  • /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/leveldataoverride.lua
  • /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/worldgenoverride.lua
  • /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/leveldataoverride.lua
  • /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/worldgenoverride.lua

其中,worldgenoverride.lua 是世界生成规则,修改后需要重新生成世界才能生效。

进一步配置服务器

之前步骤中下载的基本配置已足够支持正常游玩。如果还想要更深度的定制,可以参考此文档,按需修改以下三个文件:

  • /home/steam/.klei/DoNotStarveTogether/CustomSaveName/cluster.ini
  • /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Caves/server.ini
  • /home/steam/.klei/DoNotStarveTogether/CustomSaveName/Master/server.ini

定时重启并更新服务器

可以使用 crontab 命令实现,但默认情况下,我们新建的 steam 用户是没有使用该命令的权限的,需要首先切到管理员用户添加权限:

1
echo steam >> /etc/cron.allow

切回 steam 用户,编辑计划任务 crontab -e,添加如下内容:

1
0 6 * * * /home/steam/scripts/start_dst.sh

上面的配置表示,在系统时间每天凌晨 6 点整,自动重启并更新饥荒联机版服务器。

CATALOG
  1. 1. 安装 steamcmd
  2. 2. 安装饥荒联机版
  3. 3. 添加饥荒联机版服务器管理脚本
    1. 3.1. 自动更新脚本
    2. 3.2. 启动(重启)服务器脚本
  4. 4. 正式启动饥荒联机版服务器
  5. 5. 饥荒联机版服务器运维
    1. 5.1. 添加模组
      1. 5.1.1. 下载模组
      2. 5.1.2. 启用模组
    2. 5.2. 自定义世界
    3. 5.3. 进一步配置服务器
    4. 5.4. 定时重启并更新服务器