在Ubuntu搭建饥荒专用服务器

由于很多教程只是老版本的教程,新版本饥荒有较大改变,所以写了这篇笔记短文,可供新手搭建服务器使用。

准备工作

需要知道的基本Linux操作

  • 删除文件命令 rm -f 文件名 将会强行删除文件,且无提示

  • 删除文件夹以及文件夹中的所有文件命令:rm -rf 目录名字其中:-r:向下递归删除 -f:直接强行删除,且没有任何提示

划分Swap分区

1.使用最常用的 free 命令来查看当前系统是否存在 Swap 交换分区

free -m

2.查看磁盘分区的空闲空间

df -h

3.创建Swap分区文件

dd if=/dev/zero of=/swapfile bs=1G count=1

或者

fallocate -l 1G /swapfile

4.设置Swap分区文件

chmod 600 /swapfile

mkswap /swapfile

5.启用交换分区文件

swapon /swapfile

6.开机挂载交换分区文件,使用 vi 或 nano 在 /etc/fstab 文件底部添加如下内容:

LABEL=SWAP-sda    /swapfile swap swap default 0 0

安装依赖

如果你是64位系统

1.向包管理器中添加i386的构建器

dpkg --add-architecture i386 # If running a 64bit OS

2.更新包管理器资源

apt-get update

3.安装 32位依赖库

apt-get install lib32gcc1    # If running a 64bit OS
apt-get install lib32stdc++6 # If running a 64bit OS
apt-get install libcurl4-gnutls-dev:i386

如果你是32位系统

apt-get install libgcc1      # If running a 32bit OS
apt-get install libcurl4-gnutls-dev:i386

添加并切换用户:

useradd -m steam
chmod a+rw `tty`  # Note those are backticks, not single quotes
su - steam

安装SteamCMD

1.创建文件夹

mkdir ~/steamcmd
cd ~/steamcmd

2.下载解压steamcmd

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

3.运行 SteamCMD

./steamcmd.sh

login anonymous
force_install_dir /home/steam/steamapps/DST (or whatever absolute path is wanted)
app_update 343050 validate
quit

4.进入DST文件夹开启一次服务器

cd /home/steam/steamapps/DST/bin/
screen -S "DST Server" ./dontstarve_dedicated_server_nullrenderer

按Ctrl+C退出

升级DST

创建脚本

vim /home/steam/update_dst.sh

添加这些代码,保存:

#!/bin/sh

/home/steam/steamcmd/steamcmd.sh +@ShutdownOnFailedCommand 1 +@NoPromptForPassword 1 +login anonymous +force_install_dir /home/steam/steamapps/DST +app_update 343050 validate +quit

/home/steam/steamapps/DST/bin/dontstarve_dedicated_server_nullrenderer -only_update_server_mods

赋权执行:

chmod +x update_dst.sh

/home/steam/update_dst.sh

获取令牌

在你本地游戏登录后,进入按键盘上~进入饥荒控制台。输入TheNet:GenerateClusterToken(),将会生成一个令牌文件。

On Windows:

/My Documents/Klei/DoNotStarveTogether/cluster_token.txt

On Linux:

~/.klei/DoNotStarveTogether/cluster_token.txt

On Mac OS X:

~/Documents/Klei/DoNotStarveTogether/cluster_token.txt

Ubuntu服务器可以新建一个存档配置文件夹:

mkdir -p ~/.klei/DoNotStarveTogether/MyDediServer/Master

将此令牌上传到Ubuntu服务器上的~/.klei/DoNotStarveTogether/MyDediServer/中。

设置启动脚本

vim /home/steam/steamapps/DST/bin/start_dst.sh

加入

#!/bin/sh
cd /home/steam/steamapps/DST/bin
/usr/bin/screen -S "DST" /bin/sh -c './dontstarve_dedicated_server_nullrenderer -cluster "MyDediServer" -shard Master -monitor_parent_process`

然后赋权

chmod 700 start_dst.sh

今后,你可以通过运行start_dst.sh来启动服务端。

添加配置文件

网上教程写setting.ini的都是老版本。新版本应该在你存档和主体目录的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 = DuckDuckWorld
cluster_name = DuckDuckWorld
cluster_intention = cooperative
cluster_password = yourpasswd


[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目录下面:

[NETWORK]
server_port = 11000


[SHARD]
is_master = true


[STEAM]
master_server_port = 27018
authentication_port = 8768

为了防止意外情况,顺便让防火墙把这几个端口开放了:

iptables -I INPUT -p udp --sport 8768 --dport 1025:65355 -j ACCEPT
iptables -I INPUT -p udp --sport 11000 --dport 1025:65355 -j ACCEPT
iptables -I INPUT -p udp --sport 27018 --dport 1025:65355 -j ACCEPT

保存规则:

iptables-save > /root/iptables.rules

重新加载规则:

iptables-restore < /root/iptables.rules

设置自启动

vim /etc/network/if-pre-up.d/iptables

添加如下内容:

#!/bin/bash
/sbin/iptables-restore < /root/iptables.rules

保存后赋予执行权限:

chmod +x /etc/network/if-pre-up.d/iptables

添加配置MOD

首先你需要知道MOD的id:到创意工坊,Mod的详情页,把url后面的数字参数复制出来,那个就是编号,例如http://steamcommunity.com/sharedfiles/filedetails/?id=683832500 那么683832500就是MOD的id。

把你需要的MOD按如下方式添加:

cd /home/steam/steamapps/DST/mods
vim dedicated_server_mods_setup.lua

写入你一些想要添加的MOD,例如:

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

配置mod的窍门

在本地开一个新游戏,选上你想要添加的mod,创建世界后退出。去klei下存档找到modoverrides.lua这个文件,然后上传到服务器~/.klei/DoNotStarveTogether/MyDediServer/Master下。

当然你也可以手动在服务器上创建一个新的配置,内容示例:

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,
}
},
}

添加自动更新游戏和MOD的脚本

加入自动更新mod

cd /home/steam/steamapps/DST/mods

mkdir modgracefulshutdown
cd modgracefulshutdown

wget http://7xptwy.com1.z0.glb.clouddn.com/dst/modinfo.lua
wget http://7xptwy.com1.z0.glb.clouddn.com/dst/modmain.lua

启用自动更新mod,编辑刚刚说过的modoverrides.lua启用这个mod:

return {-- Your other mods...["modgracefulshutdown"] = { enabled = true }, -- Graceful Shutdown-- Your other mods...}

下载自动更新脚本

cd ../../bin

wget http://7xptwy.com1.z0.glb.clouddn.com/dst/auto_update_dst.sh

更改脚本参数:(根据自己实际情况)

DST_game_path[1]="/home/${USER}/steamapps/DST"
DST_conf_dirname[1]="DoNotStarveTogether" # Server configuration directory name located in /home/${USER}/.klei/
DST_screen_name[1]="DST"
DST_allow_forced_shutdown[1]=true
DST_game_beta[1]="public" # "public" for the production game, or "cavesbeta" for caves master&slave servers
steamcmd_path="/home/${USER}/steamcmd"

更改启动参数

找到启动参数那行,加入-cluster "MyDediServer" -shard Master -monitor_parent_process

注意:找到所有log.txt和所有chat_log.txt,根据自己的实际情况改为某路径下的server_log.txtserver_chat_log.txt。因为脚本针对的是较老版本的饥荒服务端。

赋权

chmod 775 auto_update_dst.sh

尾声

找到并执行之前写好的start_dst.sh启动游戏,然后执行auto_update_dst.sh。去浏览世界找到你已经搭建好的房间吧!