Linux下架设CSGO社区服务器以及性能优化
免责声明
- 对于本教程造成的硬件或软件损坏,我概不负责。你做任何事情都需要自担风险。不正确的操作会导致系统不稳定,并且可能无法引导进系统。本教程适用于 Linux 初级以上用户,如果你是一个 Linux 初学者,建议您使用虚拟机(Virtualbox/VMWare/Hyper-V)。我建议先备份你的数据,然后再继续本教程。
- 本教程不保证性能一定有提升。因为我们不可能是完全相同的的软硬件。
- 本文以 Ubuntu 20.04 LTS 为例,不一定适用于其他 Linux 发行版。
准备工作
首先强烈不建议使用 root 用户运行服务端,会带来潜在的安全问题。
创建一个用户 这里用户名以steam
为例:
adduser steam
接下来系统会提示你输入 两次 密码 和可以直接按回车跳过的一些信息(姓名啊之类)。
还可以把这个用户添加进 sudoers 中(可以使用sudo
命令)
sudo usermod -G sudo steam
或者直接编辑sudoers
文件
sudo vim /etc/sudoers
在# User privilege specification
下面加上刚刚新建立的用户:
按 I 键进入编辑模式 然后另起一行照抄 root 用户的就可以 完成之后按 esc 键然后键盘输入
:wq!
这个命令是强制写入并退出
然后就可以切换到新建的用户了:
su - steam
搭建依赖环境
第一步当然是:
sudo apt update && sudo apt upgrade -y && sudo apt --purge autoremove
检查是否有软件包的更新并且安装以及移除旧版本的软件包
性能优化 #1
CSGO 服务端需要足够的 CPU 性能,为了榨干 CPU 性能,我们来安装并且配置tuned:
sudo apt install tuned
安装完成之后需要进行配置, 这里选择了效果好的低延迟性能模式:
sudo tuned-adm profile latency-performance
配置完成即可启动:
sudo tuned-adm active
以及开启睿频
echo 0 | sudo tee /sys/devices/system/cpu/intel_pstate/no_turbo
并锁定 CPU 频率
sudo apt install cpufrequtils
vim cpu.sh
创建一个cpu.sh
并写入以下内容:
#!/bin/bash
cpufreq-set --cpu 0 --governor performance
cpufreq-set --cpu 1 --governor performance
cpufreq-set --cpu 2 --governor performance
cpufreq-set --cpu 3 --governor performance
cpufreq-set --cpu 4 --governor performance
cpufreq-set --cpu 5 --governor performance
cpufreq-set --cpu 6 --governor performance
cpufreq-set --cpu 7 --governor performance
cpufreq-set -u X.XXGHz
cpufreq-set -d X.XXGHz
cpufreq-set -r -g performance
需要自行修改X.XXGHz
为你需要的频率 --cpu 0
到--cpu 7
是核心数量 按需求自己更改。
chmod +x cpu.sh
sudo ./cpu.sh
赋予运行权限并执行
或者可以添加进 rc.local 让每次服务器重启都自动执行,这里就不详细描述了
但这还不够,我们还可以选择优化过的的内核如 Xanmod 内核 或是 Liquorix 内核
下面会分别讲述这两个内核的安装:
Xanmod 篇
按照网站上的教程 输入以下命令添加源:
echo 'deb http://deb.xanmod.org releases main' | sudo tee /etc/apt/sources.list.d/xanmod-kernel.list && wget -qO - https://dl.xanmod.org/gpg.key | sudo apt-key add -
然后安装:
sudo apt update && sudo apt install linux-xanmod
如果 CPU 是 Intel 的话 还需要
sudo apt install intel-microcode iucode-tool
AMD 的则是
sudo apt install amd64-microcode
然后是网络优化
echo 'net.core.default_qdisc = cake' | sudo tee /etc/sysctl.d/90-override.conf
接下来重启就会自动切换至 Xanmod 内核了
sudo reboot
Liquorix 篇
由于使用的是 Ubuntu 所以只需要简单的两行命令:
sudo add-apt-repository ppa:damentz/liquorix && sudo apt-get update
sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
然后重启
sudo reboot
顺带一说,目前 Xanmod 在 CSGO 服务端上性能不如 Liquorix。
回归正题,接下来安装需要的依赖:
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
sudo apt update && apt install lib32gcc1 libcurl4 screen
进行第一步的时候有时你会遇到找不到命令的错误,这时需要
sudo apt install software-properties-common
安装 Steamcmd 并下载 CSGO 服务端
一行命令:
sudo apt install steamcmd
接下来我们选择简单的方法,新建一个自动更新脚本,这里的文件名为 update.txt 可以自行修改:
vim update.txt
然后按下 I 进入编辑模式,把下面的内容复制进去
@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
login anonymous
force_install_dir /home/steam/csgoserver/
app_update 740
quit
其中force_install_dir
是指定服务端安装位置,可以自行修改
使用下面的命令来下载(或是之后更新)CSGO 服务端
steamcmd +runscript /home/steam/update.txt
接下来 steamcmd 会自动进行自我更新和下载 CSGO 服务端的任务,如果中途没有因为各种问题中断下载的话会显示:
Success! App '740' already up to date.
quit
这时你就得到了一个纯净的 CSGO 服务端
安装 Sourcemod 服务端模组
Sourcemod 是一个功能强大的 Source 引擎模组,可以进行服务器管理以及给服务器添加各种功能,服务器浏览器里的各种娱乐模式都是基于这个模组的插件。
curl -fsSL https://mms.alliedmods.net/mmsdrop/1.10/mmsource-1.10.7-git971-linux.tar.gz | tar -C csgoserver/csgo -xvz
curl -fsSL https://sm.alliedmods.net/smdrop/1.10/sourcemod-1.10.0-git6488-linux.tar.gz | tar -C csgoserver/csgo -xvz
安装完毕之后我们需要进行配置
vim csgoserver/csgo/addons/sourcemod/configs/admins_simple.ini
在最下方添加你的 SteamID,或是 IP,用户名:
SteamID 的格式是 STEAM_X:X:XXXXXXXX
如果不知道自己的 SteamID,可以到 https://steamidfinder.com/(或是其他类似的网站)输入自己的 steam 社区主页网址然后点击“Get SteamId”按钮
这里的示例是 第一行:给 STEAM_1:1:59886493 这个用户服务器的所有权限并且有“99”的“免疫值” 不需要验证密码并且有“99”的“免疫值”
第二行是给所有来自 127.0.0.1 这个 IP 地址的用户所有权限并且有“99”的“免疫值” 不需要验证密码(127.0.0.1 也就是本机 IP)
关于“免疫值”Immunity 的功能的说明:
一个例子,两个管理员如果都在游戏中,Immunity 低的管理员命令(如处死)不会生效在 Immunity 高的人身上。root 权限不受这个的影响(可以无视免疫操作任何人)。
附上一个权限的说明:
"a"//reservation 预留通道
"b"//generic 管理员菜单的权限
"c"//kick 踢人
"d"//ban BAN人
"e"//unban 解BAN
"f"//slay 娱乐命令(处死 火烧冰冻等)
"g"//changemap 更换服务器地图
"h"//cvar 修改服务器cvar参数 (例如更改重力 回合时间等等)
"i"//config 执行服务器cfg文件
"j"//chat 发送消息(指sm_chat 给在线的其他管理员发消息)
"k"//vote 发动服务器投票
"l"//password 修改服务器密码
"m"//rcon rcon命令 允许远程控制服务器(sm_rcon)
"n"//cheats 修改sv_cheats参数以及使用其他作弊参数(平时需要sv_cheats的参数)
"z"//root 顶级权限 拥有所有权限并且无视免疫
"o-t" //o p q r s t 自定义权限组(比如使用warmod菜单,自定义VIP等)
配置你的 CSGO 服务器
首先,如果你需要让你的服务器出现在游戏内的服务器浏览器中,你需要在 steam 上创建一个服务器令牌:
进入 https://steamcommunity.com/dev/managegameservers
在“创建一个新的游戏服务器帐户”下面填入你的服务端 APPID(CSGO 就是 730)和一个备注(方便管理)
点击创建之后 在“您的游戏服务器帐户”下会出现你刚刚创建的登录令牌,稍后会用到这个东西。
服务器的配置 + 性能优化 #2
这里选择一个便于维护的方式,新建一个服务端的配置文件
vim csgoserver/csgo/cfg/csgoserver.cfg
并且输入以下内容:
rcon_password "password" //这是服务器的远程管理密码 不是sourcemod的
sv_setsteamaccount "上面的登录令牌 32位数字+字母"
host_info_show 2 //服务器显示信息
host_players_show 2 //服务器显示玩家
sv_region 4 //服务器地区 不过现在好像没用了
sv_contact "" // 服务器联系人邮箱 现在好像没用了
sv_steamgroup "" //这个服务器关联的steam组,在编辑steam组资料里会显示id 等同于在sv_tag中加上*grp:123456i
sv_steamgroup_exclusive 0 //0 所有人都能进入服务器, 1 是当服务器为空时其他人可以进入服务器(不过跟0效果差不多),2 是只有加入steam组的人才能进入服务器
sv_tags "" //服务器的tag 下面有详细说明
sv_downloadurl "" // 服务器的资源下载网址,不使用非官方地图或是模型之类的可以不设置
sv_visiblemaxplayers 32 //服务器可见的最大人数
mp_disable_autokick "" //如果开启自动踢人(TK踢出等),设置的人不会被踢,这里要设置SteamID
sv_allowupload 0
sv_allowdownload 0
sv_mincmdrate 128 //强制128tick
sv_minupdaterate 128 //强制128tick
motdfile motd.txt // motd文件
exec banned_user.cfg
exec banned_ip.cfg
writeid
writeip
//性能优化
sv_clockcorrection_msecs 0
sm_cvar sv_client_min_interp_ratio 2
sm_cvar sv_client_max_interp_ratio 2
sm_cvar sv_parallel_sendsnapshot 1
sm_cvar sv_enable_delta_packing 1
sm_cvar sv_maxunlag 0.1
sm_cvar net_maxcleartime 0.001
sm_cvar net_minroutable 1000
sm_cvar net_earliertempents 1
sm_cvar net_compresspackets 0
sm_cvar net_maxfilesize 1024
sm_cvar g_ragdoll_important_maxcount 1
sm_cvar g_ragdoll_maxcount 1
sm_cvar phys_enable_experimental_optimizations 1
sm_cvar prop_active_gib_limit 1
sm_cvar prop_active_gib_max_fade_time 1
sm_cvar sv_turbophysics 1
sm_cvar fps_max 0
sm_cvar host_framerate 0
sm_cvar host_syncfps 0
sm_cvar pvs_min_player_distance 1
sm_cvar sv_alternateticks 1
sm_cvar sv_force_transmit_ents 0
sm_cvar sv_force_transmit_players 0
sm_cvar sv_forcepreload 1
sm_cvar sv_stats 0
sm_cvar sv_parallel_packentities 1
sm_cvar sv_multiplayer_maxtempentities 1
sm_cvar occlusion_test_async 1
sm_cvar host_threaded_sound 1
sm_cvar host_thread_mode 2
sm_cvar sv_threaded_init 1
sm_cvar mod_load_anims_async 1
sm_cvar mod_load_mesh_async 1
sm_cvar mod_load_vcollide_async 1
sm_cvar vprof_server_thread 1
sm_cvar g_ai_threadedgraphbuild 1
sm_cvar sv_server_verify_blood_on_player 0
sm_cvar net_queued_packet_thread 1
log on // 开启日志记录
关于sv_tags
可以同时设置多个 tag 以半角逗号,
分割,以及你设置特定内容可以起到一些特殊效果。例如:
sv_tags "*grp:123456i,hidden"
第一个参数是设置你的 steam 组为 123456,等同于 sv_steamgroup 123456
但是你如果设置了sv_steamgroup
之后修改sv_tags
并且没有加*grp:123456i
你的服务器跟 steam 组关联会失效
这说明了sv_steamgroup
做的就是在sv_tags
中加入*grp:123456i
参数
第二个参数是在服务器浏览器中隐藏 这跟服务器启动项加-nomaster
或者修改服务器 cvar host_info_show 0
的区别是:-nomaster
或者host_info_show 0
:服务器浏览器,收藏夹,黑名单等都看不见这个服务器 只能通过 connect 或者通过好友进入 sv_tags hidden
:服务器浏览器里面搜不到你的服务器,但是收藏夹,黑名单(如果你被服务器 ban 了)里可以看见。
启动服务器之前需要做的
新建一个启动脚本:
vim csgoserver/run.sh
输入以下内容:
#!/bin/bash
./srcds_run -game csgo -threads 4 -authkey * -maxplayers_override 32 -noipx -steam_dir /home/steam/.steam/steamcmd/ -steam_sh /home/steam/.steam/steamcmd/steamcmd.sh -steamcmd_script /home/steam/update.txt -autoupdate -aurorestart -port 27015 -tickrate 128 +game_mode 0 +game_type 0 +exec csgoserver.cfg +map de_dust2
说明:-threads
是服务端使用的线程数,但会影响服务器稳定性,建议不要超过 16-authkey
是你的 steam api key 主要用在使用 steam 创意工坊地图时 在 https://steamcommunity.com/dev/apikey 申请 -maxplayers_override 32
是服务器最大人数 -noipx
禁用 ipx 协议 能略微提升性能(在客户端也有效)-aurorestart
在服务器崩溃时自动重启 -tickrate
服务器的 tickrate 或者说“刷新率”-port
端口 默认是 27015 可以修改 -ip
服务器 ip 在服务器有多个 ip 的时候有用 +game_mode 0 +game_type 0 +exec csgoserver.cfg +map de_dust2
使用休闲模式开启服务器并且载入刚刚的配置文件 csgoserver.cfg
和 de_dust2 这张地图 -steam_dir
-steam_sh
-steamcmd_script
-autoupdate
这四个影响到服务端的自动更新
当然 还需要一点小改动才能实现服务端的自动更新
vim csgoserver/srcds_run
修改第 301 行的 "steam.sh" 为 "steamcmd.sh"
可以通过输入/steam.sh
快速找到这一行再按 I 进入编辑模式修改
然后保存退出
新建立一个 screen 让服务端可以后台运行:
screen
按回车或者两下空格跳过 screen 的介绍
cd csgoserver
chmod +x run.sh
run.sh
这样你的服务器就开始运行了
性能优化 #3
这时候我们还需要把服务端的优先级设置为高:
这里参考了https://github.com/MikkelDK/GameServerKernel
wget https://raw.githubusercontent.com/MikkelDK/GameServerKernel/master/script.sh && chmod +x script.sh && sudo ./script.sh
这一步要在服务端开启之后使用 每次开服都要使用一次sudo ./script.sh