2026 在Linux上搭建CS2插件服务器

前言

起因是打算开一个CSGO的插件服务器趁着过年和朋友一起玩,但由于CS2的服务器端和debian13的安全政策更新,现在网上很多资料都已经过时了,前前后后折腾了好几天才搞好。所以便萌生了写一篇博客记录下来的想法,也希望能帮助到其他人。

一,准备工作

首先需要准备一台装有Linux系统的服务器。

官方给出的最低配置要求是:

  • 最低内存要求:2GB(实际体验下来2G根本不够,建议至少4G)
  • 存储空间:65GB
  • CPU:x86-64-v2(支持 POPCNT/SSE4.2)

由于CS2新版的服务器需要 Glibc 2.31,所以使用的系统应不老于Ubuntu 20.04、Debian 11 或 Enterprise Linux 9。(我这里使用的是debian13,安装插件时又吃了系统太新的亏。)

二,安装SteamCMD

SteamCMD 是 Steam 客户端的命令行版本,想要下载服务器端需要先安装SteamCMD。

SteamCMD可以通过包管理器安装,也可以手动安装。这里我把两种安装方法都写出来了,大家自行选择。(官方建议是从发行版提供的存储库安装 SteamCMD 软件包。)

从存储库安装

先直接从存储库安装。

Ubuntu:

bash 复制代码
sudo add-apt-repository multiverse; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd

Debian:

bash 复制代码
sudo apt update; sudo apt install software-properties-common; sudo apt-add-repository non-free; sudo dpkg --add-architecture i386; sudo apt update
sudo apt install steamcmd

(但由于在debian12之后apt-add-repository 命令不再有效,需要使用这个变通方法。)

安装完成后由于官方不建议直接使用root运行SteamCMD,所以我们需要先给他专门创建一个用户。

bash 复制代码
sudo useradd -m steam
sudo passwd steam

之后切换到steam用户。

bash 复制代码
su - steam

直接输入即可进入steam交互环境

bash 复制代码
steamcmd

手动安装

先安装依赖。

bash 复制代码
sudo apt-get install lib32gcc-s1

同样的,创建steam用户。

bash 复制代码
sudo useradd -m steam
sudo passwd steam

之后切换到新建的steam用户家目录下。

bash 复制代码
sudo -u steam -s
cd /home/steam

切换到steam用户。

bash 复制代码
su - steam

在家目录下创建Steam文件夹来存放SteamCMD的文件。

bash 复制代码
mkdir ~/Steam
cd ~/Steam

下载并解压文件

bash 复制代码
curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -

之后在~/Steam目录下运行即可进入steam交互环境。

bash 复制代码
./steamcmd.sh

三,安装游戏服务器

进入交互环境后steam会先检查更新,等他跑完。

之后使用匿名账号登陆SteamCMD

bash 复制代码
login anonymous

设置服务器安装位置(/full/path/to/cs2-ds/改成你自己的路径,如果不设置路径会默认安装在SteamCMD安装目录下/steamapps/common/Counter-Strike Global Offensive)

bash 复制代码
force_install_dir /full/path/to/cs2-ds/

之后安装CS2(CS2的服务器端和游戏本体合并到一起了,都是730),等待进度跑完即可。

bash 复制代码
app_update 730 validate

四,申请社区服务器令牌(可选)

如果说你打算把服务器开在公网上让大家都可以看到,需要申请社区服务器令牌。

在这个链接申请,申请基本上没有要求,只要是steam等级大于0就可以。

不过如果开插件服,修改服务器内容(如开全皮肤之类的),据说有概率被封,所以还是建议不使用令牌,直接内网穿透就行。

五,安装插件

开插件服一般都使用MetaMod+CounterStrikeSharp的组合。新出现的swiftlys2框架安装方式也差不多,所以就只讲MetaMod和CounterStrikeSharp的安装方法了。

MetaMod

先去MetaMod官网下载插件,下载时看清要下载Dev版本的,稳定版的是给起源引擎1用的,CS2是起源引擎2,所以要下载Dev版本的。

下载下来是一个压缩包,解压后得到一个addons文件夹,直接把这个文件夹放到刚刚游戏安装目录下/Counter-Strike Global Offensive/game/csgo目录下。

之后修改/csgo目录下的gameinfo.gi文件,在

bash 复制代码
Game_LowViolence    csgo_lv // Perfect World content override

这一行下面添加,保存后即可完成MetaMod的安装。

bash 复制代码
Game	csgo/addons/metamod

CounterStrikeSharp

同样的,先去官网下载,下载时选择带有运行时的,之后更新插件时可以选择不带运行时的。

压缩包解压后同样是一个addons文件夹,把这个文件夹放到刚刚放MetaMod的目录(游戏安装目录下/Counter-Strike Global Offensive/game/csgo)下即可完成安装,之后安装基于CounterStrikeSharp的插件只需要放在addons/counterstrikesharp/plugins目录下即可。

六,配置服务器

服务器的配置文件为Counter-Strike Global Offensive/game/csgo/cfg目录下的server.cfg。

打开 server.cfg并添加你想要的配置(下面为我常用的配置)

mp_autokick 0 //禁止自动踢人,防止因友伤,挂机之类被踢出服务器

mp_drop_knife_enable 1 //允许丢刀

sv_password "密码" //设置服务器连接密码

hostname "服务器名称" //设置服务器名称

mp_friendlyfire 0 // 禁止友伤

编辑完保存即可。

七,运行服务器

CS2服务端近期更新后,运行服务器是一个比较大的坑点。不同于之前很多教程写直接运行位于/game/bin/linuxsteamrt64下的CS2二进制文件,现在Linux上要通过/Counter-Strike Global Offensive/game下的cs2.sh脚本来启动服务器,一个比较常见的运行指令如下

bash 复制代码
./cs2.sh -dedicated +map de_dust2

其中常用的的参数如下

|---------------|----------------------|
| -dedicated | 表明以服务器模式启动 |
| -ip | 设置服务器ip |
| -insecure | 禁用VAC |
| -maxplayers | 设置最大人数 |
| -port | 设置服务器端口(默认为27015) |
| -map | 设置地图 |
| -game_mode | 游戏模式,用来指定竞技还是休闲 |
| -game_type | 游戏类型,用来指定是否为死斗,一般不用管 |

比如这个就是以竞技模式,沙二地图启动服务器,服务器最大人数为12人。

bash 复制代码
.\cs2.exe -dedicated maxplayers 12 +game_type 0 +game_mode 1 +map de_dust2

之后在客户端打开控制台,输入

bash 复制代码
connect (服务器ip)

即可完成连接(记得放行端口,CS2使用的是UDP)。

八,常见问题

对于debian13系统来说,还有一个坑点,因为debian13安全机制更加严格导致,导致插件无法启用可执行堆栈,进而导致插件加载失败。

目前的解决方法是先安装patchelf

bash 复制代码
sudo apt install patchelf

之后使用patchelf来清除可执行堆栈即可。

bash 复制代码
patchelf --clear-execstack /home/cs2server/serverfiles/game/csgo/addons/counterstrikesharp/bin/linuxsteamrt64/counterstrikesharp.so
相关推荐
aixingkong92116 小时前
Nvidia为例 XPU的Multi-Host、Socket Direct 、GPUDirect、RDMA 技术点分析
服务器·网络·硬件架构·硬件工程
雯宝18 小时前
mnt_init 函数
linux
律宏阔1 天前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔1 天前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴1 天前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千1 天前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei371 天前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei371 天前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei371 天前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh1 天前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker