USAGI NOTE|一起玩饥荒嘛!

> U酱收藏了一篇笔记,小兔报告说。
> 主要的内容是:
> 在云服务器上搭建饥荒联机版(Don't Starve Together)服务器。


第一步 安装Steamcmd

对于Ubuntu 16.04来说,可以用apt install steamcmd -y直接安装steamcmd;

如果说什么E: 无法定位软件包steamcmd (E: Unable to locate package steamcmd)的话,说明APT的软件源里面没有添加muitiverse的仓库(例如阿里云)。
解决方案当然就是添加进去了,APT的软件源是写在文件/etc/apt/sources.list文件里的,在里面加上multiverse:
这里采用阿里云的镜像站,其他镜像站也可;Ubuntu的codename,16.04是xenial,18.04是bionic,和文件里的其他行保持一致即可

 deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial multiverse
 deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial multiverse
 deb http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates multiverse
 deb-src http://mirrors.cloud.aliyuncs.com/ubuntu/ xenial-updates multiverse
  • 阿里云本身的话,打开/etc/apt/sources.list.d/sources-aliyun-0.list这个文件然后把里面相应的几行前的#去掉即可)

手动安装参考官方文档,关键代码如下。并且需要用steamcmd.sh的路径代替steamcmd命令。
(其实使用steamcmd会产生一个Steam文件夹,想让文件夹少一点的话,也可以一开始就解压到Steam文件夹里面)

apt install lib32gcc1 screen -y
useradd -m -s /bin/bash steam
su - steam
mkdir steamcmd && cd steamcmd
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

第二步 安装服务端

这一步建议不要使用root用户运行,可以留在上一步的steam用户。
安装服务端不需要登录已购买游戏的steam账号。故采用匿名(Anonymous)登录即可。

steamcmd +login anonymous \
+force_install_dir ~/dstds \
+app_update 343050 \
+quit
  1. 这里采用steamcmd的脚本模式,效果相当于在steamcmd中按顺序运行每个+后的命令;
  2. \为排版用,具体效果请询问渡渡鸟。
  3. 这个命令同样也用于更新。

第三步 编写配置文件

概念:在服务器列表中能看到的世界称为"Cluster",意为群组;而其中的每一张地图叫做"Shard",意为分区。典型的含洞穴世界就是一个包含地上地下共两个Shard的一个Cluster。

Cluster里指定一个Shard作为Master(主服,一般就是地表服务器),其余的都是Slave(从服)。Slave的配置文件内容比较精简。

配置文件的位置在.klei/DoNotStarveTogether,如图:

CLUSTER_NAME/
├── cluster.ini
├── cluster_token.txt
└── SHARD_NAME/
    ├── modoverrides.lua
    ├── leveldataoverride.lua
    │   或 worldgenoverride.lua
    └── server.ini
  1. CLUSTER_NAME:群组的名称,这里只是内部名称,因此不要使用特殊字符;
  2. cluster.ini:群组的设置文件,在服务器列表里显示的信息可以在这里修改;
  3. cluster_token.txt:由已购买的游戏产生的令牌,服务端必须拥有令牌才能运行;
  4. SHARD_NAME:分区的名称。习惯上将地表命名为Master,地下命名为Caves
  5. server.ini:服务端的设置文件,主要是端口一类的,和游戏内容无关;
  6. *.lua:如果设置了MOD,或者世界生成选项就需要对应的文件供服务端读取。

下面介绍各个文件的写法。注意要想正常使用这些文件,建议在SSH里用vim、nano等编辑器直接粘贴修改;如果要在Windows里编写的话,请用Notepad++并且选择UTF-8无BOM编码,一定不要用记事本。

cluster.ini

设主服和从服在两台不同的云服上。
主服需要完整的cluster.ini,例子如下:

[GAMEPLAY]
game_mode = endless
; 游戏模式可选无尽endless,荒野wilderness,生存survival
max_players = 4
; 玩家上限,一般1Mbps可带4人
pvp = false
; 是否开启玩家间pvp
pause_when_empty = true
; 服务器无人时暂停,建议开启
[NETWORK]
cluster_intention = cooperative
; 表面上的服务器类型,似乎没什么实际影响
cluster_description = Antoher DST dedicated server
; 服务器在列表里显示的描述文
cluster_name = DST-DS
; 服务器在列表里显示的名字 
cluster_password = 
; 服务器的密码,不要的话可以跳过
[STEAM]
steam_group_id = 33026301
; 使服务器变成"组服务器",会在组员的列表里置顶显示
steam_group_admins = true
; steam组的管理员自动成为服务器管理员
steam_group_only = false 
; true的话只有steam组员能够加入服务器

[SHARD]
shard_enabled = true
; 开启这个才能让地上和地下连接
bind_ip = 0.0.0.0
; 如果主从都在同一台机器上,填127.0.0.1
master_port = 10889
; 对外的通讯端口,要让防火墙放行
cluster_key = zxcvbnm
; cluster暗号,所有shard需要保持一致

从服只需要下列的精简版:

[GAMEPLAY]
game_mode = endless
; 和主服保持一致

[SHARD]
master_ip = 8.8.8.8
; 主服的IP地址,同一台机器用127.0.0.1
shard_enabled = true
master_port = 10889
cluster_key = zxcvbnm
; 以上全部保持一致

cluster_token.txt

内容为形如pds-g^KU_********^H6q2zR9Kj6********************ePCsBfec=的序列号。需要注意的是,虽然一个cluster_token.txt可以用在多个cluster里,但是同一个cluster在不同主机上的cluster_token.txt一定要一致。

server.ini

主服的例子

[NETWORK]
server_port = 11000
; 要求在10998-11018之间,不能重复

[SHARD]
is_master = true
; 表明这是主服

[STEAM]
master_server_port = 27018
authentication_port = 8768
; 同样不能重复

从服的例子

[NETWORK]
server_port = 11001

[SHARD]
is_master = false
name = Caves
; 除了主服外的shard都需要名称

[STEAM]
master_server_port = 27019
authentication_port = 8769

leveldataoverride.lua或worldgenoverride.lua

影响世界的生成,地表服务器没有这个文件可以生成一个完全默认的世界;但是地下没有的话就会获得另一个地表……

lua文件可以通过在游戏里修改预设并建立世界来自动写好,然后在"我的文档"里寻找Klei/DoNotStarveTogether/Cluster_n/(n和存档在第几格对应),把里面的lua文件上传到服务器的对应位置即可。

worldgenoverride.lua现在已经被leveldataoverride.lua取代了,这里提一下它仍然可以生效而已。

  • 对于所有的配置文件,要注意文件所有者!如果饥荒服务端在普通用户运行,而配置文件属于root用户,就可能读取不了。
    请使用ls -al来检查文件夹,下列的输出是正确的(均为steam用户所有):

    total 28
    drwxrwxr-x 4 steam steam 4096 Nov 29 00:13 .
    drwxrwxr-x 3 steam steam 4096 Aug 17 10:21 ..
    drwxrwxr-x 4 steam steam 4096 Nov 27 10:01 Caves
    -rw-r--r-- 1 steam steam  631 Jul 23 19:15 cluster.ini
    -rw-r--r-- 1 steam steam   62 Jul  7 23:56 cluster_token.txt
    drwxrwxr-x 4 steam steam 4096 Nov 27 10:01 Master
  • 万一发现里面混入了属于root的文件,请用root用户于此文件夹执行chown steam:steam -R *来修复(如果普通用户名为steam的话)

第四步 配置MOD

如果想要在服务器上配置mod的话,首先需要修改游戏安装目录里的mods/dedicated_server_mods_setup.lua文件。

这个文件原先的内容是若干--开头的注释,不需要理会。
安装mod的代码格式是

ServerModSetup("884395113") --古明地恋

引号内是MOD的创意工坊ID,可以很轻松地从网址里找到:
https://steamcommunity.com/sharedfiles/filedetails/?id=884395113

建议在代码后用--来注释上MOD的名字,当想删除一个MOD时可以很方便地找到。

服务器装上MOD之后并不会自然启用。还需要在shard文件夹里放入modoverrides.lua告诉服务器MOD的设置。这个lua文件同样可以在游戏里创造世界时生成。

里面的代码是由若干这样的块构成的:

  ["workshop-884395113"]={
    configuration_options={ lan=0, power=1, system=1, vision=1, volume=0.1 },
    enabled=true 
  },
  • 每个shard可以有不同的设置,例如让恋恋在地上处于伪自我系统system=1,地下处于无意识系统system=0是完全可行的。
  • 如果要禁用一个MOD,最快的办法是把它改成enabled=false
  • 其实可以利用modoverrides.luaNotepad++的正则替换功能快速写出dedicated_server_mods_setup.lua来,留给读者思考。

第五步 启动脚本和自动更新脚本

(自动更新脚本更新中,这里先摘录启动脚本)

  1. 下载启动脚本(更新自过时的官方脚本),建议直接下载到服务器上
    wget https://gitlab.com/inactive_virus/auto_update_dst/raw/master/run_shard.sh
  2. 根据脚本内的说明,编辑文件最开始的变量信息(更新后会把这部分单独取出来,并且再写一个脚本来帮助填写这个文件)
    INSTALL_DIR=
    SERVER_DIR=
    CLUSTER_NAME=
    SHARD_NAME=
    PREFIX=
  3. 为了让服务器在后台运行,我们需要使用screen来运行脚本。
    screen bash run_shard.sh
  4. 先观察运行情况,如果没有出错,最终显示Sim paused.就可以用Ctrl+a 然后按d断开screen了。
  5. 别忘了防火墙。一般默认防火墙是关闭的,但是真诚建议把防火墙打开然后放行配置文件里写的对应port。ufw的具体用法请问渡渡鸟吧,别忘了给SSH端口22放行,不然可能再也连不上了。
点赞
  1. 明灵灵灵说道:

    うーあーうーあーうー

发表评论

电子邮件地址不会被公开。必填项已用 * 标注