Linux-搭建饥荒专用服务器
本文最后更新于:2023年1月24日 下午
搭建饥荒专用服务器
(8条消息) 事无巨细的Steam饥荒联机云服搭建教程(阿里云;CentOS7.7)
饥荒联机太卡?搭建饥荒独立服务器解决 - 知乎 (zhihu.com)
设置一个专用的服务器对游戏体验来说有很大的提升,本文旨在用最简单的话语描述如何搭建一个饥荒联机版专用服务器。
首先声明,饥荒的专用服务器可以是 Windows 或 Linux,这里使用Linux的发行版本CentOS示例
1.准备服务器
为了创建可靠、高性能的专用服务器体验,官方给出的服务器需求是:
网络带宽(upload)= 8Kbytes / player /s
RAM= 65Mbytes / player
CPU:未给出明确要求
VCRedist_2008(x86)
如果你是高校学生的话,这里推荐去阿里云白嫖一台服务器:高校计划 - 免费学生云服务器 (aliyun.com)。
2.安装SteamCMD
参考:Steam 控制台客户端 - Valve Developer Community (valvesoftware.com)
Steam 控制台客户端(SteamCMD)是一个命令行版本的 Steam 客户端。它的主要用途是在一个命令行界面的 Steam 客户端上安装及更新各种可用的专用服务端。我们得先在服务器上安装SteamCMD,具体操作如下:
1.创建用户和目录
useradd steam
su - steam
mkdir -p ./SteamCMD ./Games
./SteamCMD
用来放SteamCMD,./Games
用来放饥荒(服务器版)。
2.在开始安装SteamCMD之前,必须先安装运行 SteamCMD 所需的依赖项。
由于linux上的SteamCMD需要在32位的环境下运行,我选择的是CentOS64位的,因此我们要事先安装32位(i686)的运行库
sudo yum -y install glibc.i686 libstdc++.i686
Steam官方给出的参考,大家根据自己的Linux系统选择:
Ubuntu/Debian 64-Bit
sudo apt-get install lib32gcc1
RedHat/CentOS
sudo yum install glibc libstdc++
RedHat/CentOS 64-Bit
sudo yum install glibc.i686 libstdc++.i686
3.下载SteamCMD
cd /home/steam
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -zxvf steamcmd_linux.tar.gz -C /home/steam/SteamCMD/
rm steamcmd_linux.tar.gz
3.安装饥荒(服务器版)
启动SteamCMD
cd /home/steam/SteamCMD/
./steamcmd.sh
登录Steam并下载饥荒(服务器版)
Steam> login anonymous # “匿名登录steam”,相当于不登陆地打开了steam商店
Steam> force_install_dir /home/steam/Games/DST # 设置目录,强制steamcmd将游戏下载到这个目录中
Steam> app_update 343050 validate # 安装编号为343050的游戏,这个编号是服务器版Don’t Starve Together的编号,在网站https://steamdb.keylol.com/可以搜索到。
Steam> quit # 退出
4.配置世界
1.创建世界目录
cd /home/steam/Games/DST/
mkdir -p allworlds/world1
2.准备世界
创建好一个世界,在饥荒世界文件夹中创建adminlist.txt
文件和cluster_token.txt
文件。
接下来获取用户ID和服务器ID:
点击账号:
获取用户ID,将用户ID复制到adminlist.txt
中(adminlist.txt里的用户ID会变为世界里的管理员)
点击游戏,跳转到饥荒服务器管理界面
这里新建一个服务器,获取服务器ID,将服务器ID复制到cluster_token.txt
中
最后将电脑上的饥荒世界文件 及
两个文本文件上传到服务器上/home/steam/Games/DST/allworlds/world1
。
3.创建启动脚本
cd /home/steam/Games/DST/bin
echo "./dontstarve_dedicated_server_nullrenderer -console -persistent_storage_root /home/steam/Games/DST -conf_dir allworlds -cluster world1 -shard Master" > master_start.sh
echo "./dontstarve_dedicated_server_nullrenderer -console -persistent_storage_root /home/steam/Games/DST -conf_dir allworlds -cluster world1 -shard Caves" > cave_start.sh
chmod +x master_start.sh cave_start.sh
5.配置mod
1.修改mod配置文件
打开世界文件中Master 或
Caves目录下的modoverrides.lua
文件,寻找类似于workshop-xxxxxxxx
的内容,workshop-
后面的纯数字串就是你创建世界时开启的mod编号,将这些数字串全部复制出来写成ServerModSetup("xxxxxxx")
的形式,存入服务器上的/home/steam/Games/DST/mods/dedicated_server_mods_setup.lua
文件中。
2.找到mod的数据文件并上传到服务器
Windows下饥荒的mod存放在这两个位置:
Steam安装位置\steamapps\common\Don't Starve Together\mods
Steam安装位置\steamapps\workshop\content\xxxxxx
将这些文件夹都复制出来,重命名:加上workshop-
前缀,比如
123456 改为 workshop-123456。
修改完后,全部上传到服务器上/home/steam/Games/DST/mods
目录下
6.启动服务器
Linux下饥荒的服务器似乎需要的组件跟现在的组件产生了名字上的差错导致启动服务器会显示缺少关键的组件libcurl-gnutls.so.4
,因此需要执行下面的命令来解决:
ln -s /usr/lib/libcurl.so.4 /home/steam/Games/DST/bin/lib32/libcurl-gnutls.so.4
解决问题后,下载一个screen用来执行启动服务器的命令
screen是一个终端复用器,可以让命令在后台运行
sudo yum -y screen
cd /home/steam/Games/DST/bin/
开启主世界:
screen -S master
./master_start.sh
开启完毕后,看到Sim paused
的字眼说明是开启成功了,下面的也一样。接下来按下Ctrl+ a d
,让命令在后台运行。
开启洞穴:
screen -S cave
./cave_start.sh
和上面开启主世界一样的操作,按下Ctrl+ a d
,让命令在后台运行。
操作完毕后,就可以在联机服务器里搜到自己的房间了。
7.更新
游戏更新:重新执行安装饥荒(服务器版)的步骤即可
Steam> login anonymous
Steam> force_install_dir /home/steam/Games/DST
Steam> app_update 343050 validate
Steam> quit
模组更新:
模组更新也很简单,在你电脑上模组文件夹内(有两个模组目录)查看有没有最近更新的(看修改日期),有的话就把linux服务器mods目录下的对应文件夹替换掉,也要改名。(全部打包,不管新的旧的都替换掉也行)
8.关闭服务器
使用screen -ls
查看screen列表,看到的是这样的
使用screen -r sessionid
进入到screen,比如这里进入2883
screen -r 2883
执行完命令后,就来到了执行洞穴世界命令的screen,我们按下Ctrl + c
就可以关闭服务器的运行。
issue
某些mod文件夹被删除的原因
服务端程序判定这些mod文件夹不应该在这个位置。所以在开启服务端的时候,它会删除那些认为不规范的mod文件夹,并且根据 dedicated_server_mods_setup.lua 里面填写的id,自动下载没下的mod到另一个位置(那里才是正确的位置)。
但是服务端的启动程序好像有点毛病,下载不到一两分钟就自动断了,然后跳过下载直接创建世界并开服。这就导致一些比较大的mod还没下载完,就创建了世界,造成启动失败或者地形mod未加载到世界中。