Linux上搭建饥荒联机版Don't Starve Together服务器

架构设计 2016-12-05

最近的小伙伴开始迷上饥荒这个游戏,甚至不惜重金买来人生的第一份正版游戏,显然在我的鼓动之下,大家买的都是STEAM版本,秋季促销双人份31元,还是比较不错的。这里要说的是搭建STEAM正版用户的联机服务器。(如果你还没购买,或者购买了TGP版本的游戏,估计是无法使用这里的步骤进行搭建和游玩的)

Don't Starve Together

配置服务器Linux环境

这里用的是Ubuntu,根据不同环境安装不同的依赖库

Ubuntu 64位环境:

sudo apt-get install libstdc++6:i386 libgcc1:i386 libcurl4-gnutls-dev:i386

Ubuntu 32位环境:

sudo apt-get install libstdc++6 libgcc1 libcurl4-gnutls-dev

安装STEAMCMD命令行平台及游戏包

下载SteamCMD:

mkdir ~/steamcmd
cd ~/steamcmd
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz

你也可以使用饥荒官网提供的精简版SteamCMD:

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

接着解压并运行安装:

tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh

steam>模式下,登录及安装游戏包

login anonymous
force_install_dir ../dstserver
app_update 343050 validate
quit

上面的命令中,第一行以匿名方式登录,当然你也可以登录你自己的SteamID,然后第三行的343050是Don't Starve Together在Steam平台中的ID。

等待更新结束后,平台和游戏包就安装好了,已经完成了一半的工作,接下来是配置了。

配置Don't Starve Together

生成默认配置文件

cd ~/dstserver/bin
./dontstarve_dedicated_server_nullrenderer

当看到以下提示

[200] Account Failed (6): "E_INVALID_TOKEN"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!! Your Server Will Not Start !!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

按Ctrl+C中断,然后完善生成的默认配置

设置Token

这里由于搭建的Steam平台的正版服务器,需要在游戏中获取一个Token,正常进入Don't Starve Together游戏,然后选择我的资料,在弹出的页下方可以生成token,复制到cluster_token.txt中

cd ~/.klei/DoNotStarveTogether/MyDediServer
vi cluster_token.txt

粘贴后保存该文件

设置服务器全局配置


cd ~/.klei/DoNotStarveTogether/MyDediServer
vi cluster.ini

填入以下内容:

[GAMEPLAY]
game_mode = survival
max_players = 6
pvp = false
pause_when_empty = true

[NETWORK]
cluster_description = KTSee.com DST Server
cluster_name = KTSee.com DST Server
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

注意上面的cluster_name是服务器房间名,cluster_password是服务器房间密码,可以自行修改.

设置局部配置

cd ~/.klei/DoNotStarveTogether/MyDediServer/Master
vi server.ini

填入

[NETWORK]
server_port = 11000

[SHARD]
is_master = true

[STEAM]
master_server_port = 27018
authentication_port = 8768

接着在改洞穴部分

cd ~/.klei/DoNotStarveTogether/MyDediServer/Caves
vi server.ini

填入

[NETWORK]
server_port = 11001

[SHARD]
is_master = false
name = Caves

[STEAM]
master_server_port = 27019
authentication_port = 8769

增加Mod(可选)

这里只加载了一个全局地图定位的Mod,加载其它可以根据Steam社区中Mod地址URL中的ID替换

创建下载Mod的脚本

cd ~/.klei/DoNotStarveTogether/MyDediServer
vi dedicated_server_mods_setup.lua

填入

     
ServerModSetup("378160973")
--ServerModCollectionSetup("id")

创建Mod配置文件

cd ~/.klei/DoNotStarveTogether/MyDediServer/Master
vi modoverrides.lua

填入

return {
["workshop-378160973"] = { enabled = true }
}

同样创建洞穴部分的

cd ~/.klei/DoNotStarveTogether/MyDediServer/Caves
vi modoverrides.lua

填入

return {
["workshop-378160973"] = { enabled = true }
}

启动服务器

创建启动服务器脚本

cd ~/
vi rundst.sh

填入

#!/bin/bash

steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/dontstarvetogether_dedicated_server"
cluster_name="MyDediServer"
dontstarve_dir="$HOME/.klei/DoNotStarveTogether"

function fail()
{
        echo Error: "$@" >&2
        exit 1
}

function check_for_file()
{
    if [ ! -e "$1" ]; then
            fail "Missing file: $1"
    fi
}

cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!" # TODO

check_for_file "steamcmd.sh"
check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"
check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"
check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"
check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"

./steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit

check_for_file "$install_dir/bin"

cd "$install_dir/bin" || fail 

run_shared=(./dontstarve_dedicated_server_nullrenderer)
run_shared+=(-console)
run_shared+=(-cluster "$cluster_name")
run_shared+=(-monitor_parent_process $$)
run_shared+=(-shard)

"${run_shared[@]}" Caves  | sed 's/^/Caves:  /' &
"${run_shared[@]}" Master | sed 's/^/Master: /'

给脚本赋予执行权限

chmod u+x ~/rundst.sh

 接着进入screen,执行脚本,开启服务器

screen
./rundst.sh

这样就大功告成了,enjoy!

参考:http://forums.kleientertainment.com/topic/64441-dedicated-server-quick-setup-guide-linux/


本文由 surenkid 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

34 条评论

  1. w
    w

    搭建完成

  2. q
    q

    运行脚本会提示erro:miss file: ~/.klei...........cluster.ini;
    但是这个文件明明是在的呀
    ;求教这是怎么回事

  3. q
    q

    运行脚本会提示erro:miss file: ~/.klei...........cluster.ini;
    但是这个文件明明是在的呀
    ;求教这是怎么回事

    1. surenkid
      surenkid

      可以检查一下你的配置文件目录是否是MyDediServer,另外看一下cluster.ini是否存在权限问题

  4. 龙猫
    龙猫

    按照步骤安装的 服务器可以用
    为什么 mod 一直下载不了

    1. surenkid
      surenkid

      服务器似乎无法自动下载脚本,你可以试试手工下载后放在对应的目录下,手工下载Mod可以借助这个网站 http://steamworkshopdownloader.com/

  5. 924060929
    924060929

    服务器已挂在阿里云,日志最后一行是Sim paused
    请问一下客户端怎么连过去

    1. surenkid
      surenkid

      那应该就是成功了,直接可以登陆饥荒联机版,查找在线服务器,查找服务器名就是你之前“设置服务器全局配置”这一步中,在配置文件中填写的cluster_name参数的值

  6. tao
    tao

    生成默认配置文件的时候报错./dontstarve_dedicated_server_nullrenderer: error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory,说找不到文件

    1. surenkid
      surenkid

      我没有遇到这个问题,因此无法自行测试,给出网友的方法你参考下试试:
      Ubuntu下执行:sudo apt-get install libcurl4-gnutls-dev:i386
      CentOS下执行:cp /usr/lib/libcurl.so.4 ~/dstserver/bin/lib32/libcurl-gnutls.so.4

  7. yyangcr
    yyangcr

    Caves: [00:00:40]: Telling Client our new session identifier: AC99A2DE8CBC48D9
    [S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
    Caves: [00:00:41]: [Steam] SteamGameServer_Init(8769, 11001, 27019)

    1. xuan
      xuan

      我也是这个问题,找到解决办法了吗?

      1. surenkid
        surenkid

        忽略即可,如果可以正常游戏,就不用管它。

    2. surenkid
      surenkid

      根据网上的描述,这个问题直接忽略就可以了,应该是不会引发游戏的错误

  8. tyw9000
    tyw9000

    太实用了!真的搭好了,不过还想请教下MOD是安装在哪个目录下呀?MOD配置好之后进游戏发现并没有安装服务器mod呢

    1. surenkid
      surenkid

      mod的安装还是需要手工去下载,服务器似乎无法自动下载脚本,你可以试试手工下载后放在mod的目录下

      1. Anony
        Anony

        服务器并非不可自动添加MOD,在这里你需要将Shell Script
        ./steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit其中的
        [validate]删除,这样就不会覆盖掉dedicated_server_setup.lua文件了
        不过要启用mod还需要编辑modoverrides这个文件才行

        1. surenkid
          surenkid

          原来是这个原因,我说怎么每次都无法自动下载呢。
          以后再玩的时候我再试试

      2. Ksiem
        Ksiem

        对于mod建议去steam工坊添加,然后开启本地的together客户端,确认哪些是服务器mod,哪些是客户端mod,最后再打个包上传到当初在服务器上安装的dst/mods文件夹下

        1. surenkid
          surenkid

          是的,之前一直用的是你的方法添加mod,因为脚本总是无法自动下载mod。

  9. 萌新
    萌新

    请问在steam>模式下,登录及安装游戏包是什么意思,不懂

    1. surenkid
      surenkid

      前一步执行./steamcmd.sh之后,就会看到命令行界面显示,steam>,在这里是steam cmd版本,继续接下来的操作就可以了。

  10. ZQ
    ZQ

    root@vultr:~# ./rundst.sh
    Redirecting stderr to '/root/Steam/logs/stderr.txt'
    Looks like steam didn't shutdown cleanly, scheduling immediate update check
    [ 0%] Checking for available updates...
    [----] Verifying installation...
    Steam Console Client (c) Valve Corporation
    -- type 'quit' to exit --
    Loading Steam API...OK.

    Connecting anonymously to Steam Public...Logged in OK
    Waiting for user info...OK
    Success! App '343050' already up to date.
    这是成功了吗,怎么找不到我的服务器。

    1. surenkid
      surenkid

      这是成功了,稍等一会进入游戏,搜索你在配置文件中设置的服务器关键词就可以找到你的服务器了

  11. tjsdtc
    tjsdtc

    问一下1核2G 1Mb带宽的云服务器大概可以支持多少人同时在线?

    1. surenkid
      surenkid

      没有具体测试过,当时我运行早期的版本,没有安装太多mod,1核1G 1Mbps大概5个基友玩没有问题(正常玩的情况,当时有个基友开挂刷了太多怪导致服务器直接宕机了),你可以参考一下。

      1. tjsdtc
        tjsdtc

        感谢解答

  12. Mole
    Mole

    为什么我的/DoNotStarveTogether目录下没有/MyDediServer文件夹呢。

    1. surenkid
      surenkid

      MyDediServer是饥荒默认的配置文件目录,没有的话可以新建一个,里面放入对应的配置即可。其实这个目录你也可以随意命名,只是后续步骤中的目录要跟你重命名的配置目录一致才行。

  13. Mole
    Mole

    感谢回答,还有一个问题,就是我添加的mod,也更改了文件modoverrides.lua和dedicated_server_mods_setup.lua,但是游戏实际是没有mod的,

  14. 大白
    大白

    cd ~/.klei/DoNotStarveTogether/MyDediServer && vi cluster_token.txt
    [00:06:32]: RemoteCommandInput: "cd ~/.klei/DoNotStarveTogether/MyDediServer && vi cluster_token.txt"
    [00:06:32]: attempt to call a nil value

    求这个错误怎么解决

  15. 大白
    大白

    依赖下载的网址404了

  16. Javen
    Javen

    搭建成功,牛逼~

  17. 兔兔兔兔兔
    兔兔兔兔兔

    为何不能出一个centos 32位i386的

添加新评论