Back

Linux上的饥荒服务器搭建

主要的锅在于网上的旧文档....

无聊的暑假,想和小伙伴联机玩一下饥荒,本来也想不到要自己搭一个服务器的,奈何后来直接游戏里面启动服务器发现客机总是会卡的令人难以接受,然后我才意识我我和我的小伙伴一个是电信网一个是移动网。以及我们玩人类一败涂地也有着比较高的延迟,于是没有办法了,想好好打饥荒就必须得搭一个服务器了。正好有一个闲置的阿里云服务器,因为嫌备案麻烦一直丢在那里,正好物尽其用。

img
img

确实踩了不少的坑,因为饥荒的配置文件经过一次不小的更新,整个都变了,所以网上很多的教程其实都已经过期了,本文主要讲述一下我是怎么干的吧.

先给steamcmd专门创建一个用户,虽然我不知道有没有这个必要,但是感觉全都用一个root账号并不好,独立开来也挺好的。

$ useradd -m steam
$ cd /home/steam
$ passwd steam

之后给新用户输入一个密码,之后切换到新建的用户安装steamcmd,通过apt安装理论上会自动安装依赖吧,如果没有自动安装的话请参照steamcmd怎么使用的官方教程(英文)里的Downloading SteamCMD - Linux - Manually进行安装。

$ su steam
$ sudo apt install steamcmd
$ ln -s /usr/games/steamcmd steamcmd

上述最后一行我也不知道有没有必要惹,link一个快捷方式而已。之后直接启动steamcmd就可以了。

$ steamcmd
Redirecting stderr to '/home/steam/.steam/logs/stderr.txt'
[  0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam API...OK.

Steam>

到了这里steam就已经成功启动了,然后我们要做的就是安装一下DST的专用服务器。首先登陆账号,跟着下面输入。

Steam>login username
... #第一次登录会要求输入密码,以及可能的话还会有验证码照着输入即可
Logging in user 'loop_void' to Steam Public ...
Logged in OK
Waiting for user info...OK

Steam>force_install_dir /home/steam/steamapps/DST

Steam>app_update 343050 validate
... #然后就是漫长的下载了,这里的343050是饥荒专业服务器的id

Steam>quit
$

到这里服务器应该就已经安装好了,到steam的用户目录下应该已经可以看到这几个文件夹了,这个时候这个目录下应该还是没有.klei文件夹的,我当时按照别的教程纠结了半天我的.klei呢

$ ll
...
drwxrwxr-x 9 steam steam  4096 Aug 24 16:27 .steam/
drwxrwxr-x 3 steam steam  4096 Jul 29 14:33 steamapps/
lrwxrwxrwx 1 steam steam    19 Jul 12 20:47 steamcmd -> /usr/games/steamcmd*
...

之后继续…

$ cd /steamapps/DST/bin
$ ./dontstarve_dedicated_server_nullrenderer

会开始刷屏,等到不动了直接 Ctrl+C 整个关掉,这个时候返回/home/steam可以看到已经多了一个.klei的目录了

$ cd ~
$ tree .klei/
.klei/
├── Agreements
│   └── DoNotStarveTogether
│       └── agreements.ini
└── DoNotStarveTogether
    └── Cluster_1
        └── ...

到这里就已经成功了大半了,之后只需要把位置文件,用户token什么的都弄好放进同一个文件夹再放到./klei/DoNotStarveTogether 这个文件夹下面。这一部分可以参考 饥荒联机独立服务器搭建教程(三):配置篇

其实这些配置并不需要自己一个一个的手动去配置,只需要本地游戏中创建世界,设定好你想要的mod和各种世界选项之后进入游戏,等世界创建完进入到选人界面之后直接退出,然后去~\Documents\Klei\DoNotStarveTogether\steam_id这个目录里面找到对应的Cluster_x;

  • ~对应的是系统用户的目录
  • steam_id是创建世界用的steam账号的id,如果只用一个账号登陆过的话应该只会有一个数字作为名字的目录
  • x就是创建世界的时候对应的第几个格子

把那个文件夹复制出来,按照 饥荒联机独立服务器搭建教程(三):配置篇 内的方法把你的klei用户token放到cluster_token.txt里面即可。

然后把整个文件夹都复制到服务器的 ./klei/DoNotStarveTogether内,服务器就配置就大致完成了。如果把原来生成的世界删掉打算在服务器上再次生成的话可以删除MasterCaves内的saves文件夹和一些别的东西,这个时候存档文件夹应该像这样。

$ tree Cluster_1
Cluster_1
├── Caves
│   ├── leveldataoverride.lua
│   ├── modoverrides.lua
│   └── server.ini
├── cluster.ini
├── cluster_token.txt
└── Master
    ├── leveldataoverride.lua
    ├── modoverrides.lua
    └── server.ini

如果打算把原来的存档也挪移到服务器上则不需要删除任何文件夹。 然后还需要把你的mod的id告诉服务器让服务器去下载这些mod,可以参照 饥荒联机独立服务器搭建教程(三):配置篇 中的 6、配置下载的 Mod 文件 , dedicated_server_mods_setup.lua/home/steam/steamapps/DST/mods目录内。

到这里配置都弄好了,只需要启动服务器就可以了。注意一定要切换到dontstarve_dedicated_server_nullrenderer所在的目录内去运行这个东西,不然会发生很快乐的事情。

$ ./dontstarve_dedicated_server_nullrenderer

即可,默认会运行Cluster_1这个存档中的Master世界,如果想要运行两个世界的话可以运行两次这个程序在后面分别添加参数-shard Master-shard Caves,当然,同样可以添加参数-cluster Cluster_x来指定加载哪一个存档。

你可能发现了当你运行了这个程序之后就不能再干别的事情了,Ctrl+C会直接中止服务器,这个时候可以考虑一下使用screen这个程序,如果服务器上没有screen则可以这么安装。

$ sudo apt install screen

然后该执行的代码就变成了

$ screen -S "DST Server Master" ./dontstarve_dedicated_server_nullrenderer -shard Master -cluster Cluster_1
$ screen -S "DST Server Caves" ./dontstarve_dedicated_server_nullrenderer -shard Caves -cluster Cluster_1

进入一个screen之后按Ctrl+A然后松开再按D即可返回,上面的两条命令中间就需要进行一次这个操作。执行完第二条命令之后也可以这么干把终端腾出来。

screen -ls 可以查看所有的在运行的screen,screen -r id可以回到某一个screen,如果只有一个运行中的screen则不需要输入id,id可以输入screen -ls看到正在运行的所有screen的id