搭建饥荒服务器


搭建一个饥荒服务器

前言

哈喽,许久未见,肾是想念。转眼就到了五月,这次呢,我开始打算搭建一个饥荒的服务器。因为先前的服务器内存不够,所以只好换个服务器重新搭建啦。正好整理成一个文章,方便日后copy。

准备

  • 一台4G+RAM的服务器(装MOD的话至少4G)
  • 服务器系统:CentOS Stream 8 64位

开始

废话少说,开始进入正文。

创建新Linux用户

sudo adduser steam

注意:该命令可以创建用户和该用户在home中的文件夹

修改用户密码

sudo passwd steam
# 以 root 用户身份升级至 steam 用户:
su - steam

安装环境依赖

# 安装epel源
sudo yum install epel-release
# 安装各种环境软件依赖
sudo yum -y install glibc.i686 libstdc++.i686 libcurl.i686

安装steamcmd

Tips:

您可以自行百度或google或bing搜索centos安装steamcmd方法,应该能搜到官方的文档,这也是最推荐的,当然您也可以选择直接看下面的命令,或者点击下面的连接查看文档

https://developer.valvesoftware.com/wiki/SteamCMD:zh-cn

# 注意,需要在你刚刚创建的用户下(steam)执行下面命令,否则目录不一致
cd ~
mkdir steamcmd
cd steamcmd
# 下载并解压缩适用于 Linux 的 SteamCMD。
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
# 中国内地用户可使用以下命令以使用内地节点,注意:该方式我试了下会报错,也许是系统的问题,大家可以试试能不能用
curl -sqL "https://media.st.dl.bscstorage.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

安装tmux 和/或 screen 以简化服务器管理

sudo yum install tmux screen

steamcmd操作

进入steam

./steamcmd.sh

Tips:

当出现Steam>的时候代表steam服务已经启动成功了,第一次启动可能需要更新

设置你的应用安装目录

# force_install_dir <路径>
force_install_dir /home/steam/software/dontstarve

登录用户

login 用户名
set_steam_guard_code 验证码

Tips:

验证码为你输入正确密码后向你输入的账户的邮箱中发送的验证码

安装或更新应用(饥荒)

在Steam中执行以下命令

# app_update ID validate
app_update 343050 validate

Tips:

安装或更新应用使用app_update命令(在这里提供Steam 应用 ID)。 要同时校验应用的话,需添加validate到命令里。要下载测试分支的话,使用-beta <测试名称>选项 – 例如,半条命专用服务器的测试分支名为beta以及起源专用服务器的测试分支名为prerelease。一些测试分支设置了密码;如果要从它那里下载,需同时添加-betapassword <密码>选项。

app_update <应用ID> [-beta <测试名称>] [-betapassword <密码>] [validate]

退出Steam

quit
# 或者按一次Ctrl+c即可

游戏内操作

游戏风格

选择轻松或者无尽模式,其它模式可能会因为死亡而从零开始

森林设置

本设置以轻松游戏风格模式下进一步调整,主要面对萌新,毕竟俺也是萌新(●ˇ∀ˇ●)

世界规则

  • 全局
    • 秋季时间设置为长或默认,秋季长一些对新手友好
    • 冒险家死亡推荐设置为更改冒险家
  • 冒险家
    • 血量上限惩罚建议关闭
    • 理智怪兽设置为默认
  • 世界
    • 冰猎犬群和火猎犬群关闭
    • 野火设为无
    • 猎犬袭击不建议关闭,可以设为很少,不然犬牙不好得
  • 资源再生
    • 个人推荐,想降低难度的话,只需要将胡萝卜调快一些即可
  • 生物
    • 别的可以不动,但是草壁虎转化必须关闭,不然你种的草乱跑很难受
    • 想降低难度的话,推荐将猪设置多一些,别太多,不然就没意思了

世界生成

  • 世界

    • 分支:最多
    • 环形:从不

    这样设置的话会跟花瓣一样你在花瓣中间其它区域四散分开,就很少需要跨海了

  • 资源

    • 没啥好说的,就把资源中的萝卜调多一些

模组设置

推荐模组:

强烈推荐

  • 防卡两招:物品堆叠+垃圾清理
  • Global Positions:共享地图、查看玩家位置
  • Show Me:查看物品信息
  • Tips:左上角查看怪物到来倒计时
  • Smart Minisign:箱子显示首个物品图标,方便分类
  • Simple Health Bar DST:简易血条
  • Fast Travel(GUI):快速在两个木牌之间传送,方便跑图

难度降低

从上到下逐渐不推荐

  • More cooking:整租烹饪和喂鸟
  • 六格装备栏:允许为护甲、衣服、护身符添加单独的装备槽
  • 永久保鲜反鲜(不太推荐):冰箱永久保鲜,还可以返还新鲜度
  • Multi Rocks(不推荐):挖矿概率掉落宝石且单个矿就可以挖很久很久出很多很多矿
  • 45格物品栏(非常不推荐):除非你是刚玩,不然非常不推荐,物品栏那么多,谁还做背包啊,没难度了

设置好后就可以生成世界了

Klei操作

获取Klei用户ID

注意:挂好加速器或者科学上网

  1. 回到游戏主界面

  2. 点击账号(英文的话可以点击Account)

  3. 点击用户信息

  4. 保存用户信息下的Klei用户ID

    方便设置管理员

获取服务器token

  1. 回到游戏主界面

  2. 点击账号(英文的话可以点击Account)

  3. 点击游戏

  4. 点击《饥荒:联机版》的游戏服务器

  5. 随便起个服务器名称(边貌似不允许设置中文)

  6. 创建好后你会发现有一条很奇怪的字母和特殊字符组成的token,复制保留下来

    注意:看好自己服务器截止日期,我24年5余额4日创建的,结束日期是44年4月29日

地图文件操作

  • 打开地图在本机的位置

    有两种方式

    1. 第一种直接找到下面目录

      C:\Users\当前用户文件夹\Documents\Klei\DoNotStarveTogether\编号就是一串数字\Cluster_数字
    2. 第二种,进入饥荒联机版游戏首页,然后点击左下角的数据(英文应该叫Data)

  • Cluster_数字文件夹就是你的地图数据,如果你不知道哪个是的话。。。。粗暴点,都删了(记得备份)只保留你创建的就知道哪个是你刚创建的了

  • 进入Cluster_数字目录,并创建cluster_token.txt文件,并将token扔进去

  • 进入Cluster_数字目录,并创建adminlist.txt,并将Klei用户ID扔进去

  • Cluster重要文件目录解析(并非全部)(目录解析容可以不看,不影响开服

    • Caves:地图资源、Master:洞穴资源

      • modoverrides.lua:订阅的mod以及mod的配置信息
      • backup:备份日志信息
    • cluster.ini:基本配置

      因为我也是萌新,所以我只写一些自己确定和方便修改的配置

      • max_players:最多玩家人数
      • pvp:玩家是否允许互殴
      • cluster_password:房间密码
      • cluster_description:房间描述
      • cluster_name:房间名称
    • cluster_token.txt:服务器token

    • adminlist.txt:管理员的Klei用户ID,一行一个

  • 利用ssh连接到服务器,并进行下面操作

    • 进入用户目录下

      cd ~
    • 查看是否有.klei文件夹

      ls -al
    • 若没有则需要依次创建

      cd ~
      mkdir .klei
      cd .klei
      mkdir DoNotStarveTogether
  • Cluster_数字目录上传到服务器的~/.klei/DoNotStarveTogether目录中即可

    若不知道~代表什么

    可以用ssh连接好后进入到~/.klei/DoNotStarveTogether目录下并使用pwd命令来查看

    例如我的目录就是

    /home/steam/.klei/DoNotStarveTogether

    我用的是filezilla来上传文件,看各位自己用啥都行,不想装软件的大神直接用scp命令吧

    当然也可以直接使用免安装版、

    注意:是将Cluster_1整体扔进去,包括这个目录

服务器操作

加载mod

如果你任务只有地图设置mod就完事的话那就大错特错了,这是个很容易踩坑的一点,我们还需要让服务器来下载并加载mod

  • 获取mod的id

    打开本机的Cluster_数字\Caves目录下,并找到modoverrides.lua文件

    记住workshop后的纯数字,这个就是mod的id

  • 进入到steam下载目录下的mods目录下,我的是~/software/dontstarve/mods

    cd ~/software/dontstarve/mods
  • 编辑dedicated_server_mods_setup.lua文件

    vim dedicated_server_mods_setup.lua
  • 根据注释提示,可以通过下面的命令来设置mod

    ServerModSetup("MOD的id")
  • 按下esc,按下输入冒号:输入wq即保存退出

大概就是这样

--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")
        ServerModSetup("1207269058")
        ServerModSetup("1216718131")
        ServerModSetup("1530801499")
        ServerModSetup("1595631294")
        ServerModSetup("1607644339")
        ServerModSetup("1607644339")
        ServerModSetup("1898292532")
        ServerModSetup("2287303119")
        ServerModSetup("2798599672")
        ServerModSetup("378160973")

编写启动脚本

#创建脚本文件
touch dontstarve_start.sh
#编辑脚本文件
vim dontstarve_start.sh

脚本文件写入以下内容

#!/bin/bash

steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/software/dontstarve"
cluster_name="Cluster_1"
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!"
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"
check_for_file "$install_dir/bin"
cd "$install_dir/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
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: /'

注意:若只有32位支持,可以更改脚本中的,上面脚本是64位的

cd "$install_dir/bin64" || fail
#和
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)

cd "$install_dir/bin" || fail
#和
run_shared=(./dontstarve_dedicated_server_nullrenderer)

Tips:

vim一次性清除文件内所有内容

ggdG

不需要输入冒号

说明:

  • gg:光标跳转到该文件的行首;
  • dG:删除光标行及其以下行的全部内容。(注:d为删除,G为光标跳转到末尾行)

开放端口

UDP协议开放10888、10998、10999

TCP和UDP协议开放8767、27017

ps:林风亲测,不开放端口貌似也行,可以先不开放试试,如果没有搜到服务器再开放端口

启动服务器

启动服务器很简单,比较头疼的一点是如何将饥荒服务器置于后台启动,不然关闭了ssh服务器也就关了

所以这里有两个方案:

  1. screen(推荐)

    # 创建screen
    screen -S dontstarve
    # 运行服务器
    bash ./dontstarve_start.sh
    # 当想要回到这个screen时可以这么玩
    screen -r dontstarve
    # 关闭进程只需要进入screen后按下ctrl+c即可
  2. nohup

    自行搜索,比较麻烦,林风比较懒,尤其关闭进程很麻烦

查看日志

# 在启动时可以这么玩,但是不推荐,因为日志会越来越多,文件会越来越大
bash ./dontstarve_start.sh>logs.log
tail -f logs.log

常见问题

libcurl-gnutls.so.4:无法打开共享目标文件:没有这样的文件或目录

详细报错内容:

./dontstarve_dedicated_server_nullrenderer_x64./dontstarve_dedicated_server_nullrenderer_x64: : error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory

我们翻译一下

./dontstarve_dedicated_server_nullrenderer_x64./dontstarve_dedicated_server_nullrenderer_x64::加载共享库时出错:libcurl-gnutls.so.4:无法打开共享目标文件:没有这样的文件或目录。
加载共享库时出错:libcurl-gnutls.so.4:无法打开共享目标文件:没有这样的文件或目录

说白了就是没有libcurl-gnutls.so.4文件,林风百度了下发现,主要是有个依赖只有Ubuntu的apt源才能下载,centos的yum源没有,于是我在一个帖子上搜到了另一个方法,可以不需要使用Ubuntu也不需要make或换源的方法:

centos系统直接用软连接拉一下依赖即可

32位执行

ln -s /usr/lib/libcurl.so.4 /home/steam/software/dontstarve/bin/lib32/libcurl-gnutls.so.4

64位执行

ln -s /usr/lib64/libcurl.so.4.3.0 /home/steam/software/dontstarve/bin64/lib64/libcurl-gnutls.so.4

这里林风试过了,没用,后来看了下usr/lib64的目录才发现libcurl.so.4.3.0文件没有,反而有个更高版本的libcurl.so.4.5.0文件,所以如果还是不行的可以试试这个命令

ln -s /usr/lib64/libcurl.so.4.5.0 /home/steam/software/dontstarve/bin64/lib64/libcurl-gnutls.so.4

更新服务器

只需要走一遍steamcmd操作即可,有mod的话还需要重新写一遍mod的id或者直接备份然后copy一份即可

例如:

# 进入到steamcmd
./steamcmd.sh
# 设置安装目录
force_install_dir /home/steam/software/dontstarve
# 登录用户
login 用户名
# 更新应用
app_update 343050 validate
# 退出steamcmd
quit
# 进入到备份文件夹
cd ~/back/dontstarve
# 将备份的mod文件copy到指定目录
cp dedicated_server_mods_setup.lua /home/steam/software/dontstarve/mods

Tips:

我这里将备份的dedicated_server_mods_setup.lua文件扔到了~/back/dontstarve里面,你们跟我的或许不一样,所以不要照抄,直接进你自己的备份目录即可

更新mod

重启下服务器即可,完全不需要重新进入steamcmd下载

关于本次开服

有人可能会问:为什么没有图片?

先前我图片都是扔在阿里云的oss上,怕有人恶意攻击刷流量之类的,就扔到了路过图床,但是有图片上传次数限制,所以,索性直接不加图片了,也是无奈之举。

最后感谢大家能看到这里,林风希望这篇文章能对你有所帮助,当然也希望大家能来我服务器里玩,直接在steam版的饥荒联机版中搜索林风即可


文章作者: 林风
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 林风 !
  目录