因为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
此目录用于 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下就好了
新建饥荒配置目录以及一个存档
饥荒的配置目录是固定的,位于:~/.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文件夹中
cd ~/steamcmd/save/mods
# 编辑mod配置文件
vim dedicated_server_mods_setup.lua
配置文件中的模组需要的是模组id,模组id可以在自己电脑游戏中的内置浏览器地址栏查看(国内steam安装需要加速器,否则无法访问)
模组订阅页面,在头部地址栏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来创建会话,将脚本运行持续挂在后台运行。
yum install screen # 安装screen
如果执行提示No matchforargument:screen,则需要先安装epel-resease再执行上面的screen安装指令
yum install epel-release -y
# 创建一个会话,用来运行饥荒服务器启动脚本,再将该会话挂起
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脚本开启服务器,使用上面关闭服务器的指令,关闭服务器
但是身为一个标准的程序员,如此复杂的开服、关服操作,是我所不能容忍的,为此我又写了.bat脚本,实现了在自己电脑双击开服、双击关服的快捷操作。
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'
在stopScreen.sh脚本中写入如下内容:
#! /bin/bash
screen -X -S DST quit # 此指令是强制关闭会话,可能会出现游戏数据未保存的情况,目前最佳方式还是连接服务器,screen -r DST,然后Ctrl+C停止脚本运行
start.bat脚本写入如下内容:
ssh steam@服务器ip地址 ~/startScreen.sh
stop.bat脚本写入如下内容:
ssh steam@服务器ip地址 ~/stopScreen.sh
到这里,我们只需要双击start.bat文件,再输入密码就可以开启饥荒服务器;双击stop.bat文件,再输入密码就可以关闭饥荒服务器(
切记,不要一次执行两次start.bat脚本,会出问题)
上面的操作实现了开服、关服操作,但是苦恼的是每次开服、关服都要输入服务器密码,太麻烦了,直接配置免密操作简化密码输入这一步
①在本机创建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