Don't Starve Together
83 ψήφοι
【教程】从steam客户端建房 到 linux建立服务器
Από 柔道部主将黑熊 και 1 συνεργάτες
教程概要:
4月份和朋友在steam买了饥荒双人份。现在游戏内置的建房插mod功能相当不错。但是遗憾的是,万一没人建房,就不能玩。
存档是基友建的,存档主体在基友那边。他不在电脑前面的话,就不能玩。因此萌生了自己建服的念头。
网上一查,Linux建服的教程还是有的,但是很多都是旧版本的游戏,目录和配置文档和现在出入很大,导致开服之路很不顺利。
现在终于成功开服了,把我的经验和建议向大家分享一下,不足之处请大家指正。
这个开服教程不含洞穴,我是饥荒新手,洞穴没玩过。。。而且我云主机开得内存比较小,就没试验洞穴了。
   
Βραβείο
Αγαπημένο
Αγαπημένο
Μη αγαπημένο
1、概要
1.1 教程对象:
对linux服务器有基础了解的人、对各大厂商的云服务器有兴趣的人、善于排查debug的人

1.2 Linux建服优势:
在服务器领域,linux和windows的优劣网上一查就有,我这就不多说了,就单提几点
1、linux建服后,可以做到无人值守,存档主体由服务器托管,对人无依赖。
2、linux服务器版本无图形计算,对资源消耗低
3、linux本身就是一款主流的服务器操作系统,性能稳定耐用,对资源消耗低,极长时间开着也很稳定。(我linux的云主机将近一年没关机了,上面的应用例如VPN还稳定得很)

1.3 教程基础需求:
steam正版饥荒联机版一份,云平台服务器一台,自家电脑一台(废话),SecureCRT等ssh连接软件


1.4 感谢

感谢各位前辈提供的技术文档支持和旧的wiki的一些安装指引。

感谢 饥荒联机吧 的几位前辈对我问题的指点

感谢猫爷(我妹子)的精神光环和云主机的费用赞助,虽然没什么鸟用并且云主机没有产生费用。

1.5 关于本指南

文笔仓促,难免有疏漏之处
如果图片分辨率不对,请点击放大查看,谢谢各位。
2、安装依赖
1、先申请一台云服务器,各大主流厂商的都可以,一般来说都会带有公网IP的,我这里用的是AWS的一年免费套餐。单核1G内存主机,带宽流量一个月总量不超15G的传出就可以,SSD IO写入不超过50G就可以。详细各大云平台的产品自己去看吧,这里就不做广告了。
2、我采用的是centos 7操作系统,64位,因此先安装依赖,安装依赖用yum命令即可

备注:我尝试使用6.5系统发现不成功,原因是饥荒主程序需要glibc.i686依赖,版本需要2.15版本,但是6.5好像默认最高才2.14,因此我必须用centos7或者reht7

用SCRT登录服务器,切换到root,安装依赖,注意前面几个lib的依赖库,都是要32位版本的
因为steamcmd是一个32位的程序,因此安装之前最好yum search 对应的包,看看i386 i686 x86之间的版本。不同的linux发行版可能不同yum源,各个yum源的版本命名可能有点不一致。

yum install glibc.i686 libstdc++.i686 libcurl4-gnutls-dev.i686 screen lrzsz unzip

注意,我们要装32位的,如果yum里面提示.x86的,是64位的。有可能ibcurl4-gnutls在某些源找不到,直接安装libcurl,然后做个软链
cd /usr/lib/
ln -s libcurl.so.4.3.0 /usr/lib/libcurl-gnutls.so.4

这样也可以启动,但是启动是时候会有个警告,说版本似乎不对,可以忽略。

screen这个软件用于把饥荒程序挂入后台,这样即使关闭了终端,也可以使用
lrzsz 用于安装rz sz命令,用于服务器和自己电脑上传下载文件

unzip用于解压zip包
3、安装steamcmd
类比个人win7下面玩steam的饥荒,换成Linux也一样,首先要安装个steam的命令行版本,然后下载游戏的服务器版

先创建一个服务器上面的steam账号,如同你在win7也是要一个账号才能登入。linux的账号系统比win7要强很多,文件资源都是以账号来划分的。
useradd steam

创建密码
passwd steam

这里不用说了,其实很简单,按照代码执行即可。
su - steam
mkdir ~/steamcmd
cd ~/steamcmd
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh
login anonymous
force_install_dir /home/steam/steamapps/DST
app_update 343050 validate
quit
4、配置目录
网上凡是看到setting.ini,都是旧版饥荒,新版的都是使用cluster.ini和server.ini和server.ini

简单梳理一下,我们当前服务器上面的目录
#steamcmd的位置
~/steamcmd

#饥荒配置及存档的位置
~/.klei/DoNotStarveTogether/MyDediServer/Master

#饥荒主程序的位置
/home/steam/steamapps/DST


先创建饥荒的配置目录,注意,DoNotStarveTogether后面的一层目录,就是存档和配置的主体目录了,我这里命名为MyDediServer,你用其他什么名字都可以,然后这层目录后面再创建一个Master目录。
Master目录就是地上世界,如果要创建洞穴,那还要再这层目录创建一个Cave目录

一条命令解决
mkdir -p ~/.klei/DoNotStarveTogether/MyDediServer/Master

创建一个cluster.ini。用于记录服务器的模式
cd ./.klei/DoNotStarveTogether/MyDediServer/
vim cluster.ini

#填写一下内容,参数参考饥荒官方论坛最新的文档
[GAMEPLAY]
game_mode = endless
max_players = 6
pvp = false
pause_when_empty = true
enable_snapshots = true
enable_autosaver = true

[NETWORK]
cluster_description = lich world
cluster_name = lich world
cluster_intention = cooperative
cluster_password =


[MISC]
console_enabled = true


[SHARD]
shard_enabled = true
bind_ip = 127.0.0.1
master_ip = 127.0.0.1
master_port = 10889
cluster_key = supersecretkey

创建一个server.ini。用于记录地上世界和steam的各项认证端口,需要放在Master目录下面
cd Master
vim server.ini
编辑如下

[NETWORK]
server_port = 11000


[SHARD]
is_master = true


[STEAM]
master_server_port = 27018
authentication_port = 8768

然后,饥荒为了反盗版,需要用令牌来开服,用win7登录steam,然后按出控制台(我是按~键),然后输入TheNet:GenerateClusterToken()
令牌将会在你的C:\Users\Administrator\Documents\Klei\DoNotStarveTogether里面生成,名字是 cluster_token.txt
在服务器输入命令
cd ~/.klei/DoNotStarveTogether/MyDediServer
rz -be
把刚刚的令牌上传到这里
5、配置mod
我这里都是用steam的创意工坊mod,非创意工坊的mod没试过,请其他大神支招。
mod有两个需要进入配置的目录,第一个配置在饥荒程序位置,文件是dedicated_server_mods_setup.lua,用于通知程序启动时候,需要下载哪些创意工坊mod。
cd /home/steam/steamapps/DST/mods
vim dedicated_server_mods_setup.lua
参考以下格式,其中数字就是mod的编号,编号可以在steam的创意工坊页里面获取,有2个最简单粗暴的办法
1、到创意工坊,Mod的详情页,把url后面的数字参数复制出来,那个就是编号,例如http://steamcommunity.com/sharedfiles/filedetails/?id=683832500 683832500
2、到win7 steam 饥荒游戏本地的目录,有个mod的文件夹,里面的目录后缀就是编号。目录里面有modinfo.lua,用notepad++或者其他文本编辑工具打开,可以看到是什么mod,什么内容,有什么配置。

ServerModSetup("656256171")
ServerModSetup("458587300")
ServerModSetup("387385956")
ServerModSetup("597710604")
ServerModSetup("375859599")

注意,服务器安装mod的时候,最好只安装服务器mod而不是客户端mod,如何分辨呢?也是有2个最简单粗暴的办法
1、modinfo.lua里面有写
2、先用steam订阅mod,然后进入win7 steam版饥荒进入主菜单后,有个mod的选项,里面可以看到你订阅的mod是客户端mod还是服务器mod
3、安装Mod成功的话,/home/steam/steamapps/DST/mods目录会多了几个目录,开头是workshop-数字。这就是mod下载回来的实体。里面有modinfo.lua等文件。

然后配置一下mod对某个存档的启动
cd ~/.klei/DoNotStarveTogether/MyDediServer/Master
vim modoverrides.lua
return {
["workshop-597710604"] = { enabled = true },
["workshop-375859599"] = { enabled = true },
["workshop-458587300"] = { enabled = true },
["workshop-656256171"] = { enabled = true,
configuration_options =
{
give_dubloons= 3,
rec_gold = 1,
rec_dubloon = 1,
}
},
}

我看到各个lua文件都是755权限,因此我也改一下

chmod 755 modoverrides.lua


可以看到,我这里安装了5个mod,但只启动了4个,原因是有个mod在饥荒启动的时候有报错,因此我这里没写它。
然后可以看到,配置里面,
enabled = true 表示启动mod。其他configuration_options 可以在mod的modinfo.lua文件里面查阅,我这里是配置了一个老虎机mod,mod的编号是656256171,改了每天收到的金币数等参数,格式参考我的,以逗号分隔。
modinfo.lua里面有写参数的name 和 默认值,请仔细阅读。
modoverrides.lua必须放在Master目录里面,才会生效
6、进阶配置【可以没有】
配置管理员
cd ~/.klei/DoNotStarveTogether/MyDediServer/
vim adminlist.txt
然后写入用户id,这里不是指游戏ID,而是klei对各个正版玩家的一个编号。
编号可以在steam打开饥荒后,进入主菜单,右下角有个acc info的图表,点进去看。
或者每次有玩家进入你的服务器,控制台日志也会打印出它的编号
编辑完成后保存
7、启动
先说一下,配置好了之后,成功启动后,目录大致如下






-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
----
网上有一堆大神的启动脚本,很不错可以用来参考。其实脚本里面都是检查路径什么的,更重要的是自己明白里面的内容,并且查看官方文档里面的启动参数。
我直接挂入后台
screen -S dst
./dontstarve_dedicated_server_nullrenderer -console -cluster "MyDediServer" -shard Master -monitor_parent_process $$

注意,我这里-cluster 就是指定用哪个存档,参考上图的存档目录图,我可以-cluster "lich" ,指定使用lich这个存档。
其他启动参数参考下面的引用。

启动完成后,命令行最终输出


此时已经成功启动是在饥荒控制台了,输入什么c_announce("hell全世界“),就可以操纵游戏了
然后按住ctrl键+a键,再按d键就可以退出当前的终端。这样饥荒所在的终端就挂入后台了
下次再进来就这样
screen -ls
看到那个终端id号,然后输入
screen -r [你的ID号]
这样就可以返回饥荒的控制台

如果当前的终端有其他窗口打开着,是Attached,你需要-Rd 强行抢占。

关闭服务器就直接进入screen后,按ctrl+c


正常启动之后,应该在饥荒浏览房间里面看到你的房间了
如果饥荒官方有版本更新,记得去更新一下,否则会看不到房间,执行如下命令则可以更新,更新时候需要关闭服务器。建议做个crontab,让服务器定期自己更新、停机维护,这里就不详细说了
cd ~/steamcmd
./steamcmd.sh +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +login anonymous +force_install_dir /home/steam/steamapps/DST +app_update 343050 validate +quit
8、steam-client存档到服务器的迁移
和基友玩了大概有2周的win7 steam版饥荒,不想舍弃之前的存档,怎么办?做迁移咯。
摸索了一天,终于成功了。有以下做法和注意点
steam的客户端开房,所做出来的存档配置目录,和linux服务器的存档目录,有比较大的不同。
linux的存档数据,位于Master/save
win_steam-client-server是位于 C:\Users\Administrator\Documents\Klei\DoNotStarveTogether\client_save

当前steam的客户端开房,存档是有6个存档槽的,但是linux服务器是以DoNotStarveTogether/MyDediServer 这层目录来区分不同的存档。
即使steam-client-serverd 的数据原封不动迁移过去之后,按照linux版服务器的规则,只能放在
.klei/DoNotStarveTogether/你要迁移的存档的命名/Master/save里面

研究了一下服务器默认只会读存档数据的文件第一个存档插槽。
server_save_slot = 1 从最新的官方说法来看,这个服务器参数已经废弃了,默认只会读取第一个插槽。总之我逛了一下官方论坛,找不到更新后的参数。
那么悲剧了,我基友的存档,原本在steam-client-server位于第三个插槽,那不是悲剧了?
不是的,还有解,做法如下。

服务器目录、配置文件如之前的做法,先创建出目录
首先,把win7 steam版饥荒的这两个目录,压缩打包,打包为zip
client_save 这个目录就是存档的数据
backup 这个不知道有什么鸟用,我看到服务器也会生成貌似是用来记录用户行为的,以防万一,一并打包

cd /home/steam/.klei/DoNotStarveTogether/你要迁移的存档的命/Master/
rz -be

选择刚刚的打包,上传
然后解压
unzip client_save.zip
unzip backup.zip

然后如果你留意到,一个新linux服,创建出来的目录应该叫save,因此重命名一下
mv client_save save

原本steam-client-server的server.ini不要上传上来,我比对了一些,server.ini里面的端口,和linux的端口是不一样的。
因此其他配置,按之前的搞就行了。

然后,我们要修改存档插槽,进入save目录,找到一个saveindex的文件,打开编辑它。编辑前先做好备份,建议在win7环境下,用notepad工具编辑好再上传。
它其实是一个结构体,结构如下

slots={

{ enabled_mods={ }, server={ }, world={ } },
{ enabled_mods={ }, server={ }, world={ } },
{ enabled_mods={ }, server={ }, world={ } },
{ enabled_mods={ }, server={ }, world={ } }

}

一个enabled_mods={ }, server={ }, world={ } 就是对应一个(空白)存档槽
如果某个槽,比如server=里面不是空白的,就是说明该槽下面有存档。那么接下来就简单了
我把上面两个槽的数据删掉,这样我本身第三个槽就变成了顶部第一个,然后我在后面补充空槽
写入
{ enabled_mods={ }, server={ }, world={ } },

那就OK了
然后稍微按需改一下cluster.ini。里面怎么改都没关系,好启动游戏吧!
enjoy your game !!!!
10、修订日期
2016年5月19日最后一次修订本文

提醒各位,看文档和教程,记得留意修改日期,少走弯路。
32 σχόλια
蓝冰 29 Ιαν 2022, 0:38 
6
Hiccupkoo 28 Νοε 2021, 19:57 
zan
五斤西瓜不够大 6 Αυγ 2021, 22:50 
6
lpze💕 4 Αυγ 2021, 17:50 
6
一位可疑的网友 5 Ιαν 2021, 4:23 
666
小玛芬 26 Δεκ 2020, 2:55 
赞赞
叫人家小甜甜 22 Δεκ 2020, 22:21 
攒攒
Natsume 1 Δεκ 2020, 18:47 
赞赞赞
9 Μαϊ 2020, 22:32 
为什么我注册不了中国主机,一直都是Registering master server in Sing lobby
Qxx 3 Φεβ 2019, 14:42 
weebs