0x00:前言

饥荒
《饥荒》是由Klei Entertainment开发的一款动作冒险类求生游戏,游戏讲述的是关于一名科学家被恶魔传送到了一个神秘的世界,玩家将在这个异世界生存并逃出这个异世界的故事。
近期饥荒又更新了出了 海洋,玩家终于可以脱离陆地生存,来到大海生存,建造海上实验室了。
本文为博主在Linux下搭建《饥荒》联机版服务端的笔记。

需要准备的工具:

  • 公网服务器 & 有公网IP的家庭网络
  • 服务器系统:64位Linux系统
  • SteamCmd (安装教程
  • 配置要求:1H2G
  • 带宽要求:8Kbytes / 玩家 / s

0x01:配置并安装环境

  • 添加包管理源
dpkg --add-architecture i386
apt update
  • 安装所需相关包
apt install lib32gcc1 lib32stdc++6 libcurl4-gnutls-dev:i386 screen
  • 更新GLIBC版本

饥荒服务端的正常运行,需要GLIBC2.15以上版本的支持。
安装图文详细教程请见这篇文章:点击跳转

# 安装编译环境
apt install mlocate build-essential wget bison

# 下载GLIBC
cd /usr/src/  
wget http://mirror.bjtu.edu.cn/gnu/libc/glibc-2.20.tar.gz
tar zxvf glibc-2.20.tar.gz

mkdir build  
cd build

# 编译安装
../glibc-2.20/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make -j4
make install
  • 更新GLIBCXX版本

饥荒服务端的正常运行,需要GLIBCXX 3.4.15以上版本的支持。
安装图文详细教程请见这篇文章:点击跳转

cd /usr/src/
# 进入src目录
###################32位Linux的操作###################
wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb 
# 解压
ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz

cd usr/lib/i380-linux-gun
# 复制新的libstdc++.so.6文件
cp libstdc++.so.6.0.17 /usr/lib

cd /usr/lib
# 删除原来的软链
rm -f libstdc++.so.6
# 创建新的软链
ln -s libstdc++.so.6.0.17 libstdc++.so.6


###################64位Linux的操作###################

wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb
# 解压
ar -x libstdc++6_4.7.2-5_amd64.deb && tar xvf data.tar.gz

cd usr/lib/x86_64-linux-gnu/
# 复制新的libstdc++.so.6文件
cp libstdc++.so.6.0.17 /usr/lib64/

cd /usr/lib64/
# 删除原来的软链
rm -f libstdc++.so.6
# 创建新的软链
ln -s libstdc++.so.6.0.17 libstdc++.so.6

#####################################################
# 检查软链情况
ll libstdc*

# 查看安装情况
strings /usr/lib/libstdc++.so.6 | grep GLIBCXX       #32位Linux查看方式
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX     #64位Linux查看方式
  • 放行防火墙端口

服务端要求防火墙放行以下端口

模式端口作用
udp10089服务器监听端口
udp11000饥荒客户端通讯端口(主世界)
udp11001饥荒客户端通讯端口(洞穴)
udp27018Steam服务器列表端口(主世界)
udp27019Steam服务器列表端口(洞穴)

0x02:下载饥荒服务端

为了您服务器的安全,本文强烈建议不要使用root用户开启服务端

  1. 为饥荒服务端创建用户
useradd -m dst
  1. 切换到用户
su - dst
  • 启动SteamCmd
  • 登录
login anonymous

login anonymous

  • 设置安装目录
force_install_dir /home/dst/dstserver/
  • 下载服务端文件
app_update 343050 validate

downloading

下载时长一般需要5-10分钟左右时间(视服务器带宽而定)
Success
当出现以上提示后,即服务端下载已经完成!

如果出现Error! App '343050' state is 0x402 after update job.
则只需要再输入一次下载指令重试即可。

  • 退出SteamCmd
quit

0x03:配置服务器

  • 获取开服密钥与基本配置文件

①.访问klei个人中心点击跳转
登录界面
②.选择Steam平台登录
③.在顶部导航栏点击【游戏】
④.点击【饥荒联机版的游戏服务器】
页面步骤
⑤.生成Token
生成Token
⑥.进入基础配置页面
进入配置页面
⑦.填写基本信息,下载配置文件
配置步骤
下载完成后,我们将得到一个压缩包。内容如下:
文件

  • 修改配置文件

修改【cluster.ini】,自定义服务器信息。

[MISC]
max_snapshots = 6                   # 最大快照数,决定了可回滚的天数
console_enabled = true              # 是否开启控制台

[SHARD]
shard_enabled = true                # 服务器共享,要开启洞穴服务器的必须启用
bind_ip = 0.0.0.0                 # 服务器监听的地址,当所有实例都运行在同一台机器时,可填写 127.0.0.1,会被 server .ini 覆盖
master_ip = 127.0.0.1               # master 服务器的 IP,针对非 master 服务器,若与 master 服务器运行在同一台机器时,可填写 127.0.0.1,会被 server.ini 覆盖
master_port = 10888                 # 监听 master 服务器的 UDP 端口,所有连接至 master 服务器的非 master 服务器必须相同
cluster_key = sm@rtf0xt35t          # 连接密码,每台服务器必须相同,会被 server.ini 覆盖

[STEAM]
steam_group_only = false            # 只允许某 Steam 组的成员加入
steam_group_id = 0                  # 指定某个 Steam 组,填写组 ID
steam_group_admins = false          # 开启后,Steam 组的管理员拥有服务器的管理权限

[NETWORK]
offline_server = false              # 离线服务器,只有局域网用户能加入,并且所有依赖于 Steam 的任何功能都无效,比如说饰品掉落
tick_rate = 15                      # 每秒通信次数,越高游戏体验越好,但是会加大服务器负担
whitelist_slots = 0                 # 为白名单用户保留的游戏位
cluster_password =                  # 游戏密码,不设置表示无密码
cluster_name = ttionya test         # 游戏房间名称
cluster_description = description   # 游戏房间描述
lan_only_cluster = false            # 局域网游戏
cluster_intention = madness         # 游戏偏好,可选 cooperative, competitive, social, or madness,随便设置,没卵用

[GAMEPLAY]
max_players = 16                    # 最大游戏人数
pvp = false                         # 能不能攻击其他玩家,能不能给其他玩家喂屎
game_mode = survival                # 游戏模式,可选 survival, endless or wilderness,与玩家死亡后的负面影响有关
pause_when_empty = true             # 没人服务器暂停,刷天数必备
vote_kick_enabled = false           # 投票踢人
  • 配置Mod下载列表

饥荒服务端通过一个名为【dedicated_server_mods_setup.lua】的文件确认需要下载哪些 Mod。
该文件存放在【/home/dst/dstserver/mods/】中。
官方给的配置文件内容如下

--There are two functions that will install mods, ServerModSetup and ServerModCollectionSetup. Put the calls to the functions in this file and they will be executed on boot.
--ServerModSetup takes a string of a specific mod's Workshop id. It will download and install the mod to your mod directory on boot.
    --The Workshop id can be found at the end of the url to the mod's Workshop page.
    --Example: http://steamcommunity.com/sharedfiles/filedetails/?id=350811795
    --ServerModSetup("350811795")

--ServerModCollectionSetup takes a string of a specific mod's Workshop id. It will download all the mods in the collection and install them to the mod directory on boot.
    --The Workshop id can be found at the end of the url to the collection's Workshop page.
    --Example: http://steamcommunity.com/sharedfiles/filedetails/?id=379114180
    --ServerModCollectionSetup("379114180")

编写文件有俩种方式

①.想要安装的Mod不多的,可以直接获取单个Mod的创意工坊的ID。
获取创意工坊ID
如图获得的创意工坊ID为【1892210190】,在配置文件末尾填上以下内容。

ServerModSetup("1892210190")

②.安装的Mod较多,则创建一个合集,将Mod添加到合集中,并在配置文件里填写创意工坊合集的ID。
获取创意工坊合集ID
如图获得的创意工坊合集ID为【2001708048】,在配置文件末尾填上以下内容。

ServerModCollectionSetup("2001708048")

以下为个人常用的几个Mod

ServerModSetup("375859599")
ServerModSetup("347079953")
ServerModSetup("378160973")
ServerModSetup("556027744")
ServerModSetup("375850593")
ServerModSetup("462434129")
ServerModSetup("382177939")

编写完成后,将其保存。

  • 配置服务端启用Mod

上一个文件存放的是服务端需要下载的Mod列表,Mod是否启用则是由【modoverrides.lua】决定的。
按照以下方式填写文件

return {
["workshop-XXX"] = { enabled = true }
}
--XXX为创意工坊ID

以上方文件为例,给出对应的配置信息:

return {
["workshop-375859599"] = { enabled = true },
["workshop-347079953"] = { enabled = true },
["workshop-378160973"] = { enabled = true },
["workshop-556027744"] = { enabled = true },
["workshop-375850593"] = { enabled = true },
["workshop-462434129"] = { enabled = true },
["workshop-382177939"] = { enabled = true }
}

完成后将文件分别在【Master】和【Caves】文件夹中各放一份。

  • 通过WinSCP上传配置文件到服务器中

①.创建存档文件夹

mkdir -p ~/.klei/DoNotStarveTogether/

②.通过WinSCP或者SFTP将整个【MyDediServer】文件夹上传到【~/.klei/DoNotStarveTogether/】文件夹中
上传后文件列表如下
文件列表


0x04:运行服务器

  • 创建运行脚本
cd ~/dst/bin/

# 创建主世界服务端运行脚本
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master > dst_Master.sh

# 创建洞穴服务端运行脚本
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves > dst_Caves.sh

# 添加执行权限
chmod +x dst_*
  • 启动服务器
# 创建主世界Screen
screen -S Master
# 启动主世界服务端
./dst_Master.sh

## 按Ctrl + a + d将Screen进程切至后台

# 创建主世界Screen
screen -S Caves
# 启动洞穴服务端
./dst_Caves.sh

## 按Ctrl + a + d将Screen进程切至后台

到此,服务端已经可以被玩家连接。

服务器列表

0x05:参考文档

饥荒联机独立服务器搭建教程(三):配置篇:http://blog.ttionya.com/article-1235.html
Dont Starve Together Dedicated Servers:https://0w0.tech/oFdDVcDa

Last modification:March 12th, 2020 at 11:18 pm
给狐宝打点钱⑧