跳到主要内容

配置神力科莎Linux服务器

前言

因为学习学累了,打算放松一下自己,便到处乱逛,在朋友那里看到了Assetto Corsa 这款游戏,看着朋友握着方向盘,在东京的高速上飞驰,不由的心动了....

建议新手在看这个教程之前看看

https://www.bilibili.com/video/BV1u5411s7jU?t=323 安装 cm 之后比较方便

毕竟游戏要和朋友一起玩才好嘛,但是网上的教程都是在Windows上开的服务器,看还需要路由端口映射...这么反人类,不会吧,于是研究一番,发现里面有个没有后缀的服务端文件,那个一定就是Linux开服用的,网上搜索一翻(科学上网),果然有 参考自: steam-DirkB [RM]

配置阿里云

这里详细写太麻烦了,基本上哪里都能找到教程,所以我就提一下关键的部分

如果是学生党我建议买这个 t2mYrj.png

一个月才9块钱

然后是配置服务器 这里直接选择Linux的随便一个发行版就好了(我建议是Ubuntu) 然后就是下载XShellXftp 这两个 t2nCLj.png

这个XShell就是一个SSH(理解成远程命令行就行了),至于命令不需要学,看我下面的照着敲就好了 Xftp是一个文件传输软件(就只是一个远程的文件管理器,当成网盘那样用就好了)

上面两个软件怎么配置自己百度,都很简单的

配置安全组

这一步很重要!!!

一定别忘记配置udp的,tcp和udp的端口都要允许!!!!

如果不嫌麻烦的就只打开TCP的8081、9600端口,以及udp的9600端口,这样比较安全 这个安全组的作用就是防火墙,只允许某些端口访问 t2KYse.png

都弄好就看下一步

使用 screen 来挂后台

配置好服务器之后就需要安装一个这个screen 作用是把你服务挂在后台,否则你在ssh上执行的程序在你关掉ssh那一刻就会被杀死(这样就要一直开着ssh,太麻烦了) 所以需要使用screen将其挂在后台,这样无需打开ssh启动,让其挂在后台就行了,想什么时候玩都行,一劳永逸

# 安装screen
sudo apt-get install screen

如果要退出ssh,不能直接退出,而是: 先ctrl + A 和 D 把这个线程挂载到后台 再退出

后面会提到这些命令,所以不需要记

命令参考

下面是一些命令参考

按ctrl+d,结束当前screen会话。 ctrl-a b 断开与screen会话的连接(也是一个会话) exit 在会话里使用是关闭这个会话(所以先使用 screen -r连接到会话,再使用exit关闭该会话) 或者使用 kill 会话id 就可以关闭会话了 screen -x sessionName # 重新进入之前已经创建的会话 screen -S yourname -> 新建一个名叫 yourname 的session,并马上进入 screen -ls -> 列出当前所有的session screen -r yourname -> 恢复离线的screen作业(yourname),重新连接会话是指回到那个环境,比如路径之类的 screen -d yourname -> 离线某个session




一般也就用 ```shell # 下面这三个命令,上面有说明 screen -x sessionName screen -S yourname screen -ls ```

Steam 原版配置方式

服务器上配置服务端

参考自 steam-DirkB [RM]

原文:

Dedicated Server setup on Linux -Ubuntu 16.04 +,
After running in trouble installing ACserver I thought I put a little guide together. My server is Ubuntu, but I think you can use it on any other linux distro. Only to install the needed 32 bit libraries you have to use the installation repositories and commands of your Linux ditribution.

Most Ubuntu installations today are 64bit.
As Steam is a 32 bit installation, first we have to install some 32 bit libraries to make the installation process work properly.
You can install it wherever you like, but I will explain it here as it would be installed in
/home/steam/ assetto/

原文作者使用的是 Ubuntu 16.04,但是 Linux 其他的发行版也可以,有在安装所需的 32 位库时,阿里云一般服务器都是64位的,但是 steam 是 32 位的,所以需要安装 32 位的库

# 更新一下源
sudo apt-get update
# 安装32位的库
sudo apt-get install lib32gcc1

原文:

The following library is needed for stracker, if used
use name and group of the user name and group with root rights. This is important, because sometimes the execution of ./steamcmd.sh aborts with an error, if there is no root permission to read from and write to steam subdirectories.

安装这个 zlib1g:i386 ,同时创建文件夹 /home/steam (其他路径也行,这里我直接按照作者那个路径,注意后面 root 目录下也有个 steam 文件夹,别弄错了)

# 安装这个库
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install zlib1g:i386


# 创建文件夹
sudo mkdir /home/steam
# 设置组权限
# 这步操作就是给普通用户执行这个文件夹有管理员权限(大概意思)
# 否则执行 ./steamcmd.sh 会报错

# (如果是用的 root 用户进入可以不执行这步,一般来说默认登陆用的是 root)
chown user: group /home/steam -R
sudo chmod -R 755 /home/steam/

# 如果是 root 用户进入
chmod -R 755 /root/Steam/

# 跳转到 /home/steam目录下
cd /home/steam
# 下载 steam 的安装包
wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
# 解压
tar -xvf steamcmd_linux.tar.gz
# 把那个安装包删除
rm steamcmd_linux.tar.gz
# 执行steam控制台
./steamcmd.sh +@sSteamCmdForcePlatformType windows

如果报错:

 $DEBUGGER "$STEAMEXE" "$@"

进入到 steam 控制台

# 登陆
Steam> login <username>;
Steam> passwd
Steam> 输入steam发的验证码(检查一下你的邮箱)
# 安装服务端
Steam> force_install_dir ./assetto
Steam> app_update 302550
Steam> exit

这里开始服务端就就基本弄好了 下面是修改你服务端的配置文件 一般用游戏 自带的 gui(在你游戏根目录的 server 文件夹里面)生成配置文件再丢到 /home/steam/assetto/cfg/文件夹下覆盖就行了

下面的操作会使用 vim 的也可以直接使用 vim 改,不会的直接跳到最后启动服务器就好了

# 或者直接vim也行,反正只是改配置文件
nano /home/steam/assetto/cfg/server_cfg.ini

to configure your car list

nano /home/steam/assetto/cfg/entry_list.ini

start the server after configuration and needed ports are open with

启动服务器

启动服务器 原文: Ports you can open with sudo ufw allow “portnumber” or if you like to open a port range sudo ufw allow “from”:”to”/tcp or sudo ufw allow “from”:”to”/udp

其实这步也不需要作者提醒,反正意思就是打开端口,否则会被防火墙拦截

# 关于这个防火墙,你可以选择直接关掉防火墙(如果服务器里有什么重要东西的就看下面的)

# 关闭防火墙
sudo ufw disable
# 再输入
sudo ufw status
# 如果出现的是 Status: inactive 表示已经关了,可以直接执行最后一条命令启动服务器了


# 不想关闭防火墙可以启动特定端口就好了(如果自己改了端口的自己改成对应的就好了)
sudo ufw allow 9600
sudo ufw allow 9600/udp
sudo ufw allow 8081

# 先创建一个窗口,名字自定义,我直接用ACS(Assetto Corsa Server的缩写 简单明了
screen -S "ACS"
# 在/home/steam/assetto里面启动服务器
./acServer




# 使用ctrl+a+d把服务器挂在后台


# 如果要回到你的服务器进程
screen -x "ACS"

# 如果要关闭服务器直接输入ctrl+c就可以了

# 如果之前启动的服务器处于异常状态的关闭可以使用kill来关闭
# 注意:要重启服务器需要先关闭(ctrl+c)再开(./acServer)
# 这个数字填入你使用screen -ls 获取到窗口信息,一般ACS后面有串数字,输入就好了
kill 12345
# 注意:前面提到的异常状态是指进入到"ACS"窗口但是还是还是没有显示服务请求

成功之后一般可以看到 t2l3R0.png

游戏里添加自己的服务器

t28Fi9.png

右下角能看到一个加号 把这个服务器加上去有就好了 如下(ip输入自己服务器的)

t281JA.png

然后就可以和朋友快乐飙车了!!

解决问题的过程

基本能看到上面的那个就成功开启了,这里不妨唠嗑一下踩到的 嫌烦可以直接关了

这个udp真是一言难尽,本来全部都弄好,也能在游戏里面搜索到自己的服务器,但是有个问题就是那个ping 一直为0,而且一直显示The server seems to be unavailable,当时研究了很久一直研究到凌晨2点都没有解决(翻遍了国内外),为毛我服务都能搜索到而且也能正确的显示配置信息但就是无法转发数据啊!

最后突然想到了之前写过一个udp聊天室,这时突然想起前面配置文件里要配置httptcpudp三个端口,顿时醍醐灌顶,tcp是可靠连接,建立一个连接需要三次握手,连接一次成本太高(因为TCP的特性,一旦丢包就会重发,阻塞住后续的数据包,因而可能会产生一个较大的瞬时延迟),而且tcp本身重传默认时间是200ms,所以需要使用udp这种协议(不可靠连接),udp效率高,速度快,缺点在于协议本身不带校验,纠错和重发机制,游戏需要自己维护这些场景。对于固定刷新每次更新完整所有玩家信息的游戏来说,即使少量丢失和错误的包出现,并不需要被重发,只需要在下一次数据来时更新(玩家位置动作状态等)即可,如果条件恶劣,只要安排关键数据重发,非常灵活,像MOBA、吃鸡之类的游戏就常常采用这个协议来提升流畅度(这类游戏延迟上百都无法玩....)

因此,之前能搜索到服务器但在服务器里却出现 The server seems to be unavailable 的原因找到了,能搜索到服务器表示TCP端口正常配置,无法转发是因为udp端口出现问题,缩小问题范围就好排查了,最后发现不是服务器那里的问题,阿里云有个安全组,里面也需要打开udp端口,然鹅我却憨批一般的忘记了,打开就好了(最开始强调一定要在安全组打开就是这个原因)

其他细节问题

下面都是这个 server_cfg.ini 配置文件的设置

# 注意!!一定要先把REGISTER_TO_LOBBY关掉
# 这个是注册到官方服务器上去,由于这个官方服被墙了,所以....
REGISTER_TO_LOBBY=0


# 这游戏无法直接修改时间,而是通过改太阳角来修改的
# 修改SUN_ANGLE更改时间
# 黄昏18:00
SUN_ANGLE=80
# 21:00
SUN_ANGLE=150

# 首都高的晚上天气应该使用自带的c1-midnight_dark
[WEATHER_0]
GRAPHICS=c1-midnight_dark
BASE_TEMPERATURE_AMBIENT=20
BASE_TEMPERATURE_ROAD=7
VARIATION_AMBIENT=2
VARIATION_ROAD=2
WIND_BASE_SPEED_MIN=0
WIND_BASE_SPEED_MAX=5
WIND_BASE_DIRECTION=45
WIND_VARIATION_DIRECTION=5


# CM编辑服务器24h昼夜循环的配置行,起始时间是秒数,后面的时间流逝速度,这里起始时间53061秒是14:44分 48倍时间流逝

[WEATHER_0]
GRAPHICS=3_clear_type=17_time=53061_mult=48
BASE_TEMPERATURE_AMBIENT=21
BASE_TEMPERATURE_ROAD=3
VARIATION_AMBIENT=2
VARIATION_ROAD=1
WIND_BASE_SPEED_MIN=0
WIND_BASE_SPEED_MAX=0
WIND_BASE_DIRECTION=0
WIND_VARIATION_DIRECTION=0
__CM_WFX_DATE=1589654225
__CM_WFX_USE_CUSTOM_DATE=0
__CM_WFX_TIME_MULT=48
__CM_WFX_TIME=53061
__CM_WFX_USE_CUSTOM_TIME=1
__CM_WFX_TYPE=17
__CM_GRAPHICS=3_clear

使用 assettoserver

参考项目 https://assettoserver.org/docs/intro

先安装 .NET Runtime

# Get Ubuntu version
declare repo_version=$(if command -v lsb_release &> /dev/null; then lsb_release -r -s; else grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"'; fi)

# Download Microsoft signing key and repository
wget https://packages.microsoft.com/config/ubuntu/$repo_version/packages-microsoft-prod.deb -O packages-microsoft-prod.deb

# Install Microsoft signing key and repository
sudo dpkg -i packages-microsoft-prod.deb

# Clean up
rm packages-microsoft-prod.deb

# Update packages
sudo apt update

apt install dotnet-sdk-7.0

安装服务

wget https://github.com/compujuckel/AssettoServer/releases/download/v0.0.52-pre10/assetto-server-linux-x64.tar.gz
# 解压
tar -xvf assetto-server-linux-x64.tar.gz
# 把那个安装包删除
rm assetto-server-linux-x64.tar.gz

编辑配置文件

cfg/server_cfg.ini
cfg/entry_list.ini

这两个配置文件是通过游戏根目录下面的服务器生成的配置

启动一次失败后跳过汽车检查,否则会报错

IgnoreConfigurationErrors:
MissingCarChecksums: true

运行

./AssettoServer