前言
环境: Ubuntu20.04 x86_64环境的云服务器
安装流程记录和问题解决
安装SteamCMD
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt-get install steamcmd
这里我们看到steamcmd是一个32位的程序
安装过程中会让我们确认一下license
按右方向键+回车
然后选择I AGREE 回车
终端运行
steamcmd
第一次启动会下载安装
然后会进入Steam终端,显示如下
Steam>
安装饥荒服务器
安装饥荒
// 指定安装位置, 安装到home下,最好用绝对路径 /home/<username>/DontStarveTogether_Server
force_install_dir ~/DontStarveTogether_Server
// steam匿名登录
login anonymous
// 下载安装, 343050是饥荒服务器的id号
app_update 343050 validate
// 退出
quit
我这里实际安装在了这个位置
~/DontStarveTogether_Server
要重装可以删掉目录,然后到steamcmd里重装
运行测试
到饥荒目录运行
cd ~/DontStarveTogether_Server/bin
./dontstarve_dedicated_server_nullrenderer
缺库修复
我这里报了一个缺库错误,是 curl 库的一个动态链接库
./dontstarve_dedicated_server_nullrenderer: error while loading shared libraries: libcurl-gnutls.so.4: cannot open shared object file: No such file or directory
看网上很多教程是说软链接可以解决
尝试了一下,Ubuntu20.04 x86_64默认有 curl 库
在这个路径
/usr/lib/x86_64-linux-gnu/libcurl.so.4
/usr/lib/x86_64-linux-gnu/libcurl.so.4.6.0
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.3
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4
/usr/lib/x86_64-linux-gnu/libcurl-gnutls.so.4.6.0
但是,软链接后运行程序又报了库的架构不匹配的问题
32位的程序用不了64位的库
dontstarve_dedicated_server_nullrenderer: error while loading shared libraries: libcurl-gnutls.so.4: wrong ELF class: ELFCLASS64
让我们重新安装一下32位的curl库
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libcurl4-gnutls-dev:i386
安装后的 curl 库,应该在这个路径可以找到
/usr/lib/i386-linux-gnu
这里已经可以直接运行了,不用软链接,程序找的到库的
cd ~/DontStarveTogether_Server/bin
./dontstarve_dedicated_server_nullrenderer
能跑起来就成功了,不用在意里面的配置
到这里基本环境就安装好了
创建服务器存档+安装Mod
打开本地饥荒联机版
创建一个多人世界,拷贝文件夹
Todo(@咖喱鱼蛋)
获取服务器token
略
Todo(@咖喱鱼蛋)
服务器端口开放
略
Todo(@咖喱鱼蛋)
创建运行脚本
本地创建一个start.sh文件
vim start.sh
然后拷贝下面的内容,scp拷贝到服务器home目录
scp ./start.sh {用户名}@{服务器IP}:/home/{用户名}
脚本内容按需修改
#!/bin/bash
# steamcmd文件夹目录, 如果是按上面的流程安装,是在~/.steam/steamcmd
steamcmd_dir="$HOME/.steam/steamcmd"
# 饥荒下载安装的目录
install_dir="$HOME/DontStarveTogether_Server"
# 存档名称
cluster_name="Cluster_1"
# klei服务器存档目录,应该是装饥荒的时候生成的
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"
# 这里运行的是64位的, 如果要32位的,可以改一下,应该在bin下面
cd "$install_dir/bin64" || fail
run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)
# 32位
# 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)
"${run_shared[@]}" Caves | sed 's/^/Caves: /' &
"${run_shared[@]}" Master | sed 's/^/Master: /'
# 如果没有洞穴, 可以把Caves的那两行注释掉
运行
一般用nohup后台运行就可以了
nohup ./start.sh>start.log 2>&1 &
tail -f start.log
本机连接测试
搜索存档创建的名字
然后就可以看到了专用服务器