饥荒(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 %}