如何在CentOS系统上设置饥荒服务器?
用这篇文章记录一下我搭建饥荒服务器的过程,在阅读参考本文章前,您需要:
- 拥有安装CentOS的云服务器,使用其他操作系统在部署饥荒服务器的时候可能会出现问题
- 包含
cluster_token
的地图文件夹。这部分操作比较简单,现在在KLEI配置token时可以直接下载整个地图文件。可以参考专属服务器搭建指南(Windows)这个教程,比较新。本文我使用的服务器配置及工具,需要的可以参考一下。
- 使用的是腾讯云的轻量应用服务器,安装的系统是“官方镜像-系统镜像-CentOS7.6”。
- ssh工具使用的是WindTerm
1 准备
首先,需要安装部署饥荒服务器所需的环境
# root用户下执行
yum -y update #升级服务器
yum -y install glibc.i686 libstdc++.i686 screen libcurl.i686 #安装所需环境
然后,创建一个steam用户来管理饥荒服务器。注意,步骤2开始的所有操作在steam用户下进行,若某个步骤在root用户下运行,可能导致使用steam用户启动服务器时没有权限。
# root用户下执行
useradd -d /home/steam steam # 创建steam用户,并设定家目录
passwd steam # 为steam用户设定密码
linux下的用户管理还有其他问题的,可以参考:CentOS 7.6用户和组账号的添加、管理和删除。如果出现不能用密码登录的问题,可能是由于开启了密钥,需要修改 SSH 配置开启密码登录。
最后,请切换到steam用户。如果使用的是WindTerm或其他ssh软件,可以尝试为steam用户配置ssh会话,之后控制服务器时可快速登录steam用户,也可以接着上面,由root用户切换到steam用户。
#root用户下执行
su steam
cd ~
pwd
完成本步骤,应该如图所示登录steam用户并位于steam用户的家目录,并确保饥荒服务器的环境已正确安装。
2 安装steamcmd及饥荒服务器
在steam用户下执行以下命令,会下载并解压steamcmd,进入~/steamcmd
会有一个steamcmd.sh
的可执行文件。
mkdir ~/steamcmd
cd ~/steamcmd # 创建安装位置
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz # 下载程序
(如果下载太慢)也可以在本机下载,然后上传到服务器。给个参考的命令,-i
是指定密钥的位置,因为我这边是禁用了密码登录,且只给root用户配了密钥,所以需要用root用户加上密钥来将进行上传,如果没禁用密码登录,可以直接用密码上传。
# 本机cmd或本机shell
scp -i "root用户登录密钥位置" .\steamcmd_linux.tar.gz root@服务器ip地址:/home/steam/steamcmd # 密钥
scp .\steamcmd_linux.tar.gz steam@服务器ip地址:/home/steam/steamcmd # 密码
最后解压文件,可以看到多了一个steamcmd.sh
可执行文件。
tar -zxvf steamcmd_linux.tar.gz # 解压
接着使用以下命令安装饥荒服务器。
./steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit
# 登录Steam并安装饥荒联机版服务器
饥荒服务器会安装在~/dst
下,安装完成后在bin
目录下有dontstarve_dedicated_server_nullrenderer
可执行文件,马赛克掉的是后续的内容 。
cd ~/dst/bin
3 试运行饥荒服务器并检查依赖
执行以下命令,不带参数运行饥荒服务器。这一步主要检查饥荒服务器的环境有没有问题。
./dontstarve_dedicated_server_nullrenderer
一般情况下centos试运行饥荒服务器这里应该会报一个错,会出现找不到libcurl-gnutls.so.4
文件的错误,执行以下代码创建一个软链接链一下即可。(如果这里建软链接也出错了,应该是第1步准备中没有正确安装libcurl.i686
等文件,切回root用户重新安装或自行解决。)
#error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
ln -s /usr/lib/libcurl.so.4 ~/dst/bin/lib32/libcurl-gnutls.so.4
再执行一次上面的命令,如果服务器跑起来了并出现Your Server Will Not Start
及No auth token could be found
则说明环境没有问题。
./dontstarve_dedicated_server_nullrenderer
如果这里还出现了其他错误,请参考重写饥荒服务器搭建全指南下的检查依赖
部分解决。
4 上传文件到指定位置
我们接下来需要将准备的地图文件上传到服务器,因为直接在游戏的图形界面方便对地图进行设置,还可以添加一些mod。地图上传的位置是/home/steam/.klei/DoNotStarveTogether
,也就是steam用户下的~/.klei/DoNotStarveTogether
,我们进入这个路径看一下。
cd ~/.klei/DoNotStarveTogether/
可能会看到一个Cluster_1
文件夹,这个是刚才试运行时新建的地图,直接删除即可。
rm -rf Cluster_*
接下来,需要将准备的地图文件上传到该文件夹下。请检查地图文件是否完整,如下图所示。以下提供几个方案将地图传输到服务器。
使用scp命令上传
简单介绍一下scp命令,它的格式是scp 源文件 目标文件
,用用户名@服务器地址:
来表示远程服务器种的文件,加-r
可以传文件夹,加-i 密钥位置
是通过密钥的方式鉴权。
回到本文的内容,首先需要在本机上打开cmd进入准备好的地图文件所在位置(或者其他方式),在本机的cmd执行以下命令。这里由于我禁用了用户密码鉴权,所以用root用户并带上密钥,如果没禁用可以执行下面用密码鉴权的命令。
# 本机cmd,进入到地图文件所在位置
tar -czf .\MyDediServer.tar.gz .\MyDediServer # 压缩地图文件
scp -i "省略号\.ssh\id_rsa" .\MyDediServer.tar.gz root@服务器ip地址:/home/steam/.klei/DoNotStarveTogether # 密钥
scp .\MyDediServer.tar.gz steam@服务器ip地址:/home/steam/.klei/DoNotStarveTogether # 密码
因为上传的是压缩文件,还需要解压。回到服务器的命令行并进入到地图文件夹。
# 服务器bash
tar -xzf MyDediServer.tar
如果想直接上传文件夹,加上-r
就好(我用root用户上传文件夹,发现地图文件的所有者都是root用户,不知道会不会出现权限的问题)。
scp -r .\MyDediServer\ root@服务器ip地址:/home/steam/.klei/DoNotStarveTogether
使用WindTerm文件管理器上传
如果使用的是WindTerm或者FinalShell,可以直接再这些软件的文件管理器中上传文件。以WindTerm为例,请确认以显示文件管理器
,通过图形界面操作进入/home/steam/.klei/DoNotStarveTogether
,其中进入.klei/
文件夹可能需要在地址栏输一下。
进入文件夹后,直接把地图文件拖进来就好了。
使用lrzsz命令上传
使用xshell但不想用xftp的可以使用rz
命令上传,putty好像不可以使用rz
命令,还是得要使用SCP
命令。
首先安装lrzsz。
# centos bash(建议用root用户安装,也可能已经安装了)
yum install -y lrzsz
rz命令不能上传文件夹,所以需要在上传前打包一下。在本地机器上打开shell进入地图文件所在的文件夹,执行打包命令。具体的地图文件位置和地图文件名请根据自身情况进行修改。
# windows cmd
cd /d D:\Desktop\MyDediServer-template
cd ..
tar -cvf MyDediServer.tar MyDediServer-template
回到centos中,执行rz
命令。在文件选择器中选择桌面的MyDediServer.tar
文件,即可上传到服务器。
# centos bash
rz
再运行命令解压缩,上传地图到服务器就完成啦。
tar -xvf MyDediServer.tar
最后,再总结一下用到的命令:
#scp
scp filename steam@服务器地址 # 上传
scp steam@服务器ip地 filename # 下载
scp -i "密钥位置" steam@服务器ip地 filename # 通过密钥鉴权
scp -r foldername steam@服务器ip地址 # 传文件夹
# lrzsz
sz filename # 发送文件到本地
rz # 上传文件到服务器
# 解压缩文件
tar -cvf xxxx.tar XX # 打包XX文件
tar -xvf xxxx.tar # 解压文件
tar -czf xxxx.tar.gz XX # 打包并压缩XX文件
tar -xzvf xxxx.tar # 解压文件,并显示过程(-v)
5 创建启动文件
上传地图文件到服务器后,回到饥荒服务器的文件夹,执行以下命令创建Master服务器
和Caves服务器
的启动文件,请注意MyDediServer
需要与上传的地图文件夹名对应(不用与server.ini
中的服务器名对应)。
cd ~/dst/bin/
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Master > dst_overworld.sh
echo ./dontstarve_dedicated_server_nullrenderer -console -cluster MyDediServer -shard Caves > dst_caves.sh
接下来再来试一试启动文件能不能用,一般出现Sim paused
就说明服务器已经可以使用了。
sh dst_overworld.sh # 等待其运行完成,没问题后按一下Ctrl+C
sh dst_caves.sh # 同上,没问题后再按Ctrl+C
6 配置MOD
为饥荒服务器配置MOD涉及两个文件:
-
modoverrides.lua
是配置mod是否启用和mod设置的,位于地图文件的Master文件夹
和Caves文件夹
下,而且的内容应该是一样的。一般在图形界面生成就不需要修改了。 -
dedicated_server_mods_setup.lua
是用来确定要下载哪些mod,位于~/dst/mods
目录下
在本地或服务器上打开modoverrides.lua
文件
然后把MOD的Id复制出来以ServerModSetup("666155465")
的格式写到dedicated_server_mods_setup.lua
中。
cd ~
vi ./dst/mods/dedicated_server_mods_setup.lua
如果是想往现有专服再添加MOD,可以新建一个本地的服务器地图,在饥荒的图形界面里添加配置mod(注意有些mod需要配置),然后再去把modoverrides.lua
文件复制出来,到服务器的地图文件中,把的Master
和Caves
下的该文件给覆盖后重启服务器即可。
7 dst控制脚本
为了方便维护饥荒服务器,在steam家目录新建一个dst_control
文件夹,用于存放服务器的控制脚本。
cd ~
mkdir dst_control
cd ~/dst_control/
先创建了一个软连接连到dedicated_server_mods_setup.lua
用于快速编辑该文件。
ln -s /home/steam/dst/mods/dedicated_server_mods_setup.lua ./mod_setup.lua
启动饥荒服务器
新建run_dst_server
文件并输入以下内容。
vi run_dst_server
# 进入vi后按‘i’键,然后复制下面的脚本,粘贴。再按“Esc”键,在键盘上键入“:wq”并回车
master_screen=$"dst_master"
cave_screen=$"dst_cave"
screen -dmS $master_screen
echo "create screen: dst_master...OK"
screen -dmS $cave_screen
echo "create screen: dst_cave...OK"
to_game_dir=$"cd /home/steam/dst/bin"
run_master_server=$"sh dst_overworld.sh"
run_cave_server=$"sh dst_caves.sh"
screen -x -S $master_screen -p 0 -X stuff "$to_game_dir"
screen -x -S $master_screen -p 0 -X stuff $'\n'
echo "dst_master: goto game dir..."
screen -x -S $master_screen -p 0 -X stuff "$run_master_server"
screen -x -S $master_screen -p 0 -X stuff $'\n'
echo "dst_master: run master server...OK"
screen -x -S $cave_screen -p 0 -X stuff "$to_game_dir"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "dst_cave: goto game dir..."
screen -x -S $cave_screen -p 0 -X stuff "$run_cave_server"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "dst_cave: run cave server...OK"
echo "Success! dst server is running."
尝试执行run_dst_server
脚本,会新建两个screen
并分别运行master
和cave
服务器。
sh run_dst_server
screen -ls
这里解释一下,screen
是linux的一个工具,上面的脚本就是通过screen -S screenname
让饥荒服务器在后台运行,不然命令行一关饥荒服务器就被关了。可以通过screen -ls
查看运行的服务器,下图可以看到dst_master
和dst_cave
都在被正常创建了,如果少了或没有,检查一下脚本是不是没复制全。
可以通过-r
进入screen中查看服务器运行状况和服务器log
screen -r dst_master
按Ctrl + A, C
与screen分离,回到上一级的命令窗口。到饥荒中可以看到服务器已经启动起来了,而且装了MOD。
关闭饥荒服务器
vi stop_dst_server
# 进入vi后按‘i’键,然后复制下面的脚本,粘贴。再按“Esc”键,在键盘上键入“:wq”并回车
master_screen=$"dst_master"
cave_screen=$"dst_cave"
shutdown_server=$"c_shutdown(true)"
screen_exit=$"exit"
screen -x -S $master_screen -p 0 -X stuff "$shutdown_server"
screen -x -S $master_screen -p 0 -X stuff $'\n'
screen -x -S $cave_screen -p 0 -X stuff "$shutdown_server"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "shutdown master and cave server..."
for i in '20%' '40%' '60%' '80%' '100%'
do
sleep 1s
echo $i
done
screen -x -S $master_screen -p 0 -X stuff "$screen_exit"
screen -x -S $master_screen -p 0 -X stuff $'\n'
echo "dst_master screen exit...OK"
screen -x -S $cave_screen -p 0 -X stuff "$screen_exit"
screen -x -S $cave_screen -p 0 -X stuff $'\n'
echo "dst_cave screen exit...OK"
echo "Success! dst server is stoped."
更新饥荒服务器
饥荒服务器更新后服务器会连不上,需要更新一下服务器。此外,每次更新都会导致dedicated_server_mods_setup.lua
被重置(我瞎说的,不知道是不是更新导致的,但这个文件里的内容经常不见),虽然mod已经下载了启动服务器的时候就没有问题,但增加mod的时候就需要把之前的重新打一遍,很麻烦。因此新增一个mods_setup
的备份,每次更新后都用这个备份覆盖源文件。
cp /home/steam/dst/mods/dedicated_server_mods_setup.lua ./dedicated_server_mods_setup.lua.backup
新建update_dst_server
vi update_dst_server
# 进入vi后按‘i’键,然后复制下面的脚本,粘贴。再按“Esc”键,在键盘上键入“:wq”并回车
写入一下内容
sh stop_dst_server
~/steamcmd/steamcmd.sh +login anonymous +force_install_dir ~/dst +app_update 343050 validate +quit
cp /home/steam/dst_control/dedicated_server_mods_setup.lua.backup /home/steam/dst/mods/dedicated_server_mods_setup.lua
sh run_dst_server
之后添加mod除了地图上的修改,只需要把对dedicated_server_mods_setup.lua
修改增加到dedicated_server_mods_setup.lua.backup
文件,然后执行更新饥荒服务器脚本即可。
执行权限
给上述三个文件一个执行权限,可以直接./
执行。
chmod +x run_dst_server stop_dst_server update_dst_server
8 总结
本文我参考许多饥荒的搭建专服的文章,我主要是增加了使用脚本控制服务器的内容,但是我也不是很熟悉bash脚本的编写,现学现卖,如果有错误或有更好的想法欢迎在评论区告诉我,不懂的地方或是遇到了问题也可以在评论区留言。祝大家游戏愉快。
推荐阅读
-
如何在CentOS系统上设置本地yum源
-
如何在Ubuntu上设置饥荒服务器的简易指南
-
如何在CentOS系统上设置饥荒服务器?
-
如何在CentOS 8-64位上设置个人饥荒服务器?
-
如何在Ubuntu系统中设置《饥荒》游戏服务器
-
如何在Ubuntu上轻松设置饥荒游戏服务器指南
-
如何在Linux系统中设置饥荒游戏服务器
-
如何在CentOS 7和Ubuntu 18.04上设置Linux系统的bond4网络连接?
-
如何在CentOS上设置本地YUM服务器?- 引言 注意:虽然在CentOS中可以直接使用YUM源,但在某些情况下,您可能需要搭建一个本地YUM源以解决RPM包之间的依赖关系问题。本篇文章将详细介绍如何在CentOS 6.x系统上设置本地YUM服务器。