Linux搭建私人饥荒服务器(centos8-64位)

记录一次自己搭建饥荒服务器的经历

  1. 安装linux 32位运行环境
  2. 安装steamcmd和饥荒服务程序
  3. 从0配置地图存档
  4. 配置服务器mod
  5. 服务器启动
  6. window本地一键启、停脚本

一、安装Linux 32位运行环境

因为steamcmd运行需要32位系统运行环境,而目前使用的时64位环境,所以为了让steamcmd能够运行,就需要在64位的基础上再装上32位的运行环境,安装指令如下:

yum -y install glibc.i686 libstdc++.i686 libcurl4-gnutls-dev.i686 libcurl.i686

安装的时候可能会出现以下问题:

①Unable to find a match: ia32-libs.i686
这个是因为yum当前源里面,没有这个包导致的
②Errors during downloading metadata for repository ‘base’
这个是因为yum源没有设置对导致的
③Error: Failed to download metadata for repo ‘appstream’: Cannot prepare internal mirrorlist: No URLs in mirrorlist
因为centOS8于2021年12月31日停止了源的服务,而现在时间是2022年2月10日,所以之前的方法都不行的原因所在(本质是源的问题)。

这三个问题可以用同一种方法来解决,那就是换源

# 进入yum目录
cd /etc/yum.repos.d

# 删除目录下所有文件(注意完整复制,不要漏了那个点)
rm -rf ./*

# 安装正确的源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

# 生成缓存
yum makecache

创建一个用户来管理饥荒服务

非常重要的一点,Don’t Starve Together服务程序(以下简称DST)不允许以root用户身份运行,否则不会正常运行

useradd -m steam # 创建steam用户
su steam # 切换到steam用户下进行后续操作

二、安装steamcmd和饥荒服务程序

新建目录 steamcmd
此目录用于 steam 程序的安装目录。

mkdir ~/steamcmd

下载 SteamCMD 安装文件

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

解压压缩包

cd ~/steamcmd
tar -xvzf ~/st

启动steamcmd

./steamcmd.sh

设置steamcmd存储位置(此步骤需再登录前执行,登录后无法执行该指令)

force_install_dir ./save

登录steamcmd

login stream用户名(就是window上登录steam的账号)

然后按提示输入密码、令牌口令即可完成登录
下载饥荒服务程序

app_update 343050 validate

这里的343050是steam中,饥荒的id编号,安装完成之后输入quit退出steamcmd(后续是配置饥荒服务程序,用不到steamcmd了)

# 当饥荒服务程序下载成功之后,输入下面的指令退出steamcmd
quit

如果安装显示Error! App ‘232250’ XXXXX…,这是因为steam服务器在国外,因为网络不稳定导致下载失败,只需重复下载饥荒服务程序步骤即可
如果操作过程中,提示缺少libcurl-gnutls.so.4包,解决方案如下:

cd ~/dontstarvetogether_dedicated_server/bin/lib32
ln -s /usr/lib/libcurl.so.4 libcurl-gnutls.so.4 # 把/usr/lib下的libcurl.so.4的包放到steamcmd当前的存储位置的bin下就好了

三、从0配置地图存档

获取UserID和user_token

1.打开饥荒联机版的客户端,进入游戏,点击位于右下角的 账号 按钮,进入浏览器,记录用户 ID 值。

Linux搭建私人饥荒服务器(centos8-64位)_第1张图片

2.在上一步的网页中,点击导航栏的 游戏 ,再点击 DST 的 服务器,进入页面后添加新服务器并记录内容。

Linux搭建私人饥荒服务器(centos8-64位)_第2张图片
Linux搭建私人饥荒服务器(centos8-64位)_第3张图片
Linux搭建私人饥荒服务器(centos8-64位)_第4张图片
新建饥荒配置目录以及一个存档
饥荒的配置目录是固定的,位于:~/.klei/DoNotStarveTogether
默认配置目录不存在,我们自己进行创建路径同时创建并进入一个存档文件夹

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

配置主配置文件

touch cluster.ini

vim cluster.ini
#################分割线(cluster.ini中的内容)################
[GAMEPLAY]
max_players = 6
pvp = false
game_mode = endless
pause_when_empty = true
vote_kick_enabled = true

[NETWORK]
cluster_description = 服务器描述
cluster_name = 服务器名称(同上面获取user_token时的服务器名保持一致)
cluster_password = 服务器密码
cluster_intention = cooperative

[MISC]
max_snapshots = 6
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_token用来放前面拿到的user_token
touch cluster_token.txt
vim cluster_token.txt
# 把前面获取到的user_token粘贴到cluster_token.txt中

# 再创建adminlist.txt用来放前面拿到的UserID
touch adminlist.txt
vim adminlist.txt
# 把前面获取到的UserID粘贴到adminlist.txt中

配置地上部分
在存档目录下(教程中是MyDediServer)创建并进入Master文件夹

mkdir Master # 创建Master文件夹
cd Master # 进入到Master文件夹
touch server.ini # 创建server.ini配置文件
vim server.ini # 编辑server.ini配置文件
################分割线(server.ini中的内容)##############
[NETWORK]
server_port = 11000

[SHARD]
is_master = true

[STEAM]
master_server_port = 27018
authentication_port = 8768

[ACCOUNT]
encode_user_path = true

配置地图文件,新建 worldgenoverride.lua 文件。

touch worldgenoverride.lua
vim worldgenoverride.lua
################分割线(worldgenoverride.lua的内容)##################
return {
    override_enabled = true,
    preset = "SURVIVAL_TOGETHER",
}

配置地下部分(开启洞穴的话)

mkdir Caves
cd Caves
touch server.ini
vim server.ini
##################分割线(server-ini的内容)###############
[NETWORK]
server_port = 11001

[SHARD]
is_master = false
name = Caves

[STEAM]
master_server_port = 27019
authentication_port = 8769

[ACCOUNT]
encode_user_path = true

配置地图文件,新建 worldgenoverride.lua 文件。

touch worldgenoverride.lua
vi worldgenoverride.lua
#############分割线(worldgenoverride.lua的内容)##########
return {
    override_enabled = true,
    preset = "DST_CAVE",
}

mods配置

进入到服务器的的饥荒安装目录:

# 进入到服务器的饥荒安装目录下的mods文件夹中
cd ~/steamcmd/save/mods
# 编辑mod配置文件
vim dedicated_server_mods_setup.lua 

配置文件中的模组需要的是模组id,模组id可以在自己电脑游戏中的内置浏览器地址栏查看(国内steam安装需要加速器,否则无法访问)
Linux搭建私人饥荒服务器(centos8-64位)_第5张图片
模组订阅页面,在头部地址栏id=后面的数字内容
mod添加格式为:

ServerModSetup("362175979") # 双引号中是上面说的模组ID,如果有多个,就一直往下列就行了

四、启动游戏

回到~目录创建启动脚本

cd ~
touch startDST.sh
chmod 700 ./startDST.sh # 给脚本加上权限,否则会出现脚本无法运行
###################分割线(startDST.sh的内容)##################
#! /bin/bash

steamcmd_dir="$HOME/steamcmd"
install_dir="$HOME/steamcmd/save"
cluster_name="MyDediServer" # 这个是存档目录的名称,就是/.klei/DoNotStarveTogether下面的存档目录名称,可更改为不同存档名称,开启不同存档服务
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/bin" || fail 

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

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

启动脚本,试运行游戏

~/startDST.sh

如果运行没有报错,且在饥荒中搜索服务器名称可以搜到,则表示服务器启动成功。
当然,目前运行在当前会话中还不能满足服务器的持续运行需求,因为会话一旦终止,则当前运行的脚本也会被关闭,这意味着当前会话断开的时候,服务器也会关闭,这个时候我们需要用到screen来创建会话,将脚本运行持续挂在后台运行。

使用screen执行启动脚本

1、安装screen

yum install screen # 安装screen

如果执行提示No matchforargument:screen,则需要先安装epel-resease再执行上面的screen安装指令

yum install epel-release -y

2、screen创建会话

# 创建一个会话,用来运行饥荒服务器启动脚本,再将该会话挂起
screen -S DST # 创建一个名为DST的会话
screen -r DST # 进入DST会话
~/startDST.sh # 运行饥荒服务器启动脚本
# 脚本启动无误之后,使用快捷键Ctrl+A+D挂起当前会话
# 如果要关闭startDST.sh脚本(关闭饥荒服务器),首先需要进入名为DST(这里的名字依据自己创建的会话名为准)的会话,使用快捷键Ctrl+C终止脚本执行,再输入quit关闭会话
screen -r DST # 进入饥荒服务器脚本运行会话中
# 使用快捷键Ctrl+C终止饥荒服务器脚本执行
quit # 关闭并退出当前会话

到这里,饥荒服务器的搭建就已经完成了,启动~/startDST.sh脚本开启服务器,使用上面关闭服务器的指令,关闭服务器

window一键开服、关服脚本

但是身为一个标准的程序员,如此复杂的开服、关服操作,是我所不能容忍的,为此我又写了.bat脚本,实现了在自己电脑双击开服、双击关服的快捷操作。

1、在~下新建startScreen.sh脚本,用来简化创建screen和开启startDST.sh脚本的操作。

startScreen.sh脚本中写入如下脚本:

#! /bin/bash
screen_name=$"DST"
screen -dmS $screen_name
cmd=$"~/startDST.sh"
screen -x -S $screen_name -p 0 -X stuff "$cmd"
screen -x -S $screen_name -p 0 -X stuff $'\n'

2、创建stopScreen.sh脚本用来简化终止screen的操作,实现关服。

在stopScreen.sh脚本中写入如下内容:

#! /bin/bash
screen -X -S DST quit # 此指令是强制关闭会话,可能会出现游戏数据未保存的情况,目前最佳方式还是连接服务器,screen -r DST,然后Ctrl+C停止脚本运行

3、windows上创建start.bat脚本,用来调用服务器startScreen.sh脚本实现一键开服

start.bat脚本写入如下内容:

ssh steam@服务器ip地址 ~/startScreen.sh

4、windows上创建stop.bat脚本,用来调用服务器stopScreen.sh脚本实现一键关服

stop.bat脚本写入如下内容:

ssh steam@服务器ip地址 ~/stopScreen.sh

到这里,我们只需要双击start.bat文件,再输入密码就可以开启饥荒服务器;双击stop.bat文件,再输入密码就可以关闭饥荒服务器(

切记,不要一次执行两次start.bat脚本,会出问题)

5、配置ssh key实现脚本ssh免密登录

上面的操作实现了开服、关服操作,但是苦恼的是每次开服、关服都要输入服务器密码,太麻烦了,直接配置免密操作简化密码输入这一步
①在本机创建ssh key

# win+r 输入cmd,打开控制台,输入ssh-keygen -t rsa生成ssh key
# 按提示配置一些信息,或者一路回车简单快捷
# 创建完成之后,可以在C:\Users\当前登录用户\.ssh下面可以找到
ssh-keygen -t rsa

②服务器创建ssh配置文件

touch ~/.ssh/authorized_keys # 创建authorized_keys文件
vim ~/.ssh/authorized_keys # 编辑配置文件,并将上面在自己电脑创建的id_rsa.pub文件中的内容复制、粘贴到这里
# vim打开之后,按i开启编辑模式,编辑完成之后先按Esc键退出编辑状态,再输入 :wq 保存并退出编辑
chmod 600 ~/.ssh/authorized_keys # 给authorized_keys设置权限

此处参考:https://blog.csdn.net/weixin_35757704/article/details/111573824

至此,饥荒服务器搭建、服务器配置、快捷启停已经全部完成。
文章参考博文如下:
饥荒服务器搭建教程1:https://blog.csdn.net/szhiy/article/details/79996017
饥荒服务器搭建教程2:https://zhuanlan.zhihu.com/p/25831490
centos8安装screen:https://www.jianshu.com/p/b31aead3bbc3
yum换源教程:https://blog.csdn.net/tongkongyu/article/details/122824763
实现ssh key免密登录:https://blog.csdn.net/weixin_35757704/article/details/111573824
Errors during downloading metadata for repository ‘base‘问题解决:https://blog.csdn.net/tongkongyu/article/details/122824763

你可能感兴趣的:(游戏,服务器,linux,centos,steam)