饥荒(dst)联机,尤其是 steam 饥荒联机的时候,除了房主,其他人往往是黄色,红色信号,延迟拉满,不时掉线,丢包严重(甚至无师自通地学会了瞬移),可谓是饱受摧残,痛不欲生。

残忍的现状将房主与他的小伙伴们分隔开,一层可悲的厚障壁悄无声息地出现。然而,自幼聪敏的房主怎会坐以待毙?!\ 是时候展示真正的技术啦!!!

建立一个优质的饥荒联机服务器,拯救房主的小伙伴们于水深火热之中,已经迫在眉睫!

环境依赖

CentOS 7.*

yum -y install glibc.i686 libstdc++.i686 libcurl4-gnutls-dev.i686 libcurl.i686

Ubuntu .

sudo apt-get install libstdc++6:i386 libgcc1:i386 libcurl4-gnutls-dev:i386 lib32gcc1

创建 steam 用户

创建 steam 用户, -d 将 /home/steam 目录分配给用户 steam

useradd -d /home/steam steam

修改 steam 用户密码

passwd steam

切换至 steam 用户

su steam

删除 steam 用户, -r 并将所属目录删除

userdel -r steam # 有问题才需要删除!

安装 steamcmd

创建 ~/steamcmd 目录用于安装, ~ 是 steam 用户的所属目录,即 /home/steam

mkdir ~/steamcmd

下载 steamcmd 安装文件

wget -P ~/steamcmd https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

解压压缩包

tar -xvzf steamcmd_linux.tar.gz

下载饥荒

启动 SteamCMD

./steamcmd.sh

指定下载目录

force_install_dir /home/steam/common/dstserver

匿名登录(首次登陆可能会 retry 几次,可以重启 steamcmd 再试)

login anonymous

下载饥荒

app_update 343050 validate

解决依赖缺失

启动服务器会显示缺少关键的组件 libcurl-gnutls.so.4

ln -s /usr/lib/libcurl.so.4 /home/steam/common/dstserver/bin/lib32/libcurl-gnutls.so.4

验证并生成相关文件

到此为止已经可以尝试启动饥荒了~~(启动但不完全启动)~~
在 /home/steam/common/dstserver/bin/ 目录下运行如下命令

./dontstarve_dedicated_server_nullrenderer console_enabled -persistent_storage_root /home/steam/common/dstserver/dst_save -conf_dir dst -cluster Cluster_1 -shard Master

意思是,启用控制台,保存在 dst_save 里,设置文件在 dst 里,用 Cluster_1 的存档 的地表

上传存档 & cluster_token.txt

将存档(Cluster_1) 上传到 dst_save 里
cluster_token.txt 是 klei 的服务器 token,放在 Cluster_1 目录下即可

编写 自动更新 shell 脚本

脚本内容在文章末尾
在 /home/steam/common/dstsever/bin/ 目录下
把 stop update start 内容全部复制进去(记得检查一下)

vim auto_update.sh

赋予脚本执行权限

chmod 744 auto_update.sh

设置 crontab 定时任务

crontab -e

写入如下内容:

0 4 * * *  /home/steam/common/dstserver/bin/auto_update.sh

每天第 0 秒,第 4 小时启动一次自动更新脚本

检查饥荒进程

此时应有两个进程

pgrep -f dontstarve

饥荒自动更新 shell 脚本

放在与 dontstarve_dedicated_server_nullrenderer 同一个目录下
即 /home/steam/common/dstserver/bin/ 目录下

pids=$(pgrep -f dontstarve)
if [[ $pids != "" ]]
then
        for pid in $pids
        do
                kill -9 $pid
        done
fi
sleep 10

pgrep -f dontstarve 查找有 “dontstarve” 的进程号
变量 pids 不为空则 kill 掉所有相关进程
随后 sleep 10 秒 等待进程彻底结束

~/steamcmd/steamcmd.sh \
+force_install_dir /home/steam/common/dstserver \
+login anonymous \
+app_update 343050 validate \
+quit

运行 steamcmd.sh
随后执行下列命令:

  • force_install_dir /home/steam/common/dstserver
  • login anonymous
  • app_update 343050 validate
  • quit

分别对应:

  • 指定安装目录
  • 匿名登录
  • 更新饥荒
  • 退出 steamcmd
cd ~/common/dstserver/bin/
nohup ./dontstarve_dedicated_server_nullrenderer console_enabled -persistent_storage_root /home/steam/common/dstserver/dst_save -conf_dir dst -cluster Cluster_1 -shard Master >/dev/null 2>&1 &
nohup ./dontstarve_dedicated_server_nullrenderer console_enabled -persistent_storage_root /home/steam/common/dstserver/dst_save -conf_dir dst -cluster Cluster_1 -shard Caves >/dev/null 2>&1 &

在后台启动饥荒地表,洞穴服务器

References

[1] https://zhuanlan.zhihu.com/p/146379848
[2] https://github.com/cuukenn/dontstarveserver
[3] Error, failed to change working directory to ../data


{% blockquote End ---- for my love %}
下次再遇到喜欢的人,千万要记得只做朋友,
不远不近的欣赏,淡淡的喜欢,
不至于到了最后,
乱了初心,败了芳华。
{% endblockquote %}