Ubuntu搭设CS1.6游戏服务器

知识分子没文化
2022-01-16 / 2 评论 / 789 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年02月13日,已超过228天没有更新,如存在内容错误、图片加载失败、链接失效等问题,请留言反馈,博主将在第一时间进行修改。

目录:

环境说明:

服务器:阿里云轻量应用服务器

系统:Ubuntu 20.04

前言

CS,全称 Counter-Strike,起初是1999 年由民间团队为游戏《半条命(Half-Life)》的开发的游戏模组,由于后来深受玩家的喜爱,2000年由 Valve 购得版权发行成为独立游戏。后续出过《反恐精英:零点行动》《反恐精英:起源》《反恐精英:全球攻势》等续作。CS 1.6 作为这个系列的一代经典以及童年回忆,其在整个游戏史上的地位怎样美言都不过分。

最近心血来潮,想搭建一个 CS1.6 服务器来玩一玩,查了不少资料,大概有了点头绪。

CS1.6 有一个专门的服务器程序,叫 HLDSHalf-Life Dedicated Server),即半条命专用服务器,是 Valve 官方(也就是俗称的“V 社”)提供的 CS1.6 服务器端程序。

在下载 CS1.6 的服务器程序时,需要用到 SteamCMD,即 Steam 控制台客户端,这是 Valve 官方开发的一个命令行版本的 Steam 客户端,它的主要用途就是安装和更新 Valve 开发的游戏的专用服务器程序文件。

一、创建系统新用户

安装 SteamCMD 之前需要先创建一个用户。

因为按照官方文档的建议,最好创建一个新用户来专门运行 SteamCMD,使用 root 用户运行 SteamCMD 时会有安全风险。当然理论上来说,如果当前用户是非 root 用户,那么可以不创建新用户,使用当前用户直接操作也是一样的。

相关参考资料:Linux 用户和用户组管理 | 菜鸟教程 (runoob.com)

注意:这一步的操作需要 root 权限。

创建一个名为 steam 的新用户:

#-m:自动创建用户目录
#-s:指定用户的shell解释器,这里设为bash
useradd -m -s /bin/bash steam

然后设置用户密码:

passwd steam

到这一步之后,执行后面的 apt 命令时,可能会出现报错:

steam is not in the sudoers file. This incident will be reported
或者:
steam 不在 sudoers 文件中,此事将被报告

解决方法有两种(需要有 root 权限):

  1. 按照报错提示,将 steam 用户添加到 sudoers 文件中,编辑 sudoers 文件:

    sudo nano /etc/sudoers

    仿照root用户的格式,在如下位置添加 steam 这一行内容(请忽略 steam 前的“+”,这只是为了方便说明这一行内容是新添加的):

    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    + steam   ALL=(ALL:ALL) ALL

    ctrl + o 保存,ctrl + x 退出。

  2. 将 steam 用户添加到 sudo 用户组(在 root 用户下操作):

    adduser steam sudo

最后切换到新建的 steam 用户:

su steam

二、SteamCMD

SteamCMD 的官方文档:Main Page:zh-cn - Valve Developer Community (valvesoftware.com)

下面的这部分参考自官方文档,如果这个过程中有疑问的话也可以读一读官方文档。另外,值得一提的是,官方文档中的大部分资料都提供了中文版本,这点给个大大的好评。

2.1、安装

安装方法:Steam 控制台客户端 - Valve Developer Community (valvesoftware.com)

在官方文档中提供了两种方式来安装 SteamCMD,一种是安装来自软件仓库的软件包,另一种是手动下载压缩包再解压安装。

为了方便,直接采用第一种,用 apt 命令安装 SteamCMD:

sudo apt update && sudo apt install software-properties-common
sudo add-apt-repository multiverse
sudo dpkg --add-architecture i386
# 安装相关依赖
sudo apt install lib32gcc1 libsdl2-2.0-0:i386
# 安装 SteanCMD
sudo apt install steamcmd

安装过程中会出现如下界面,按 Tab 键选择到 OK 再按回车确认

01

选择“I AGREE”,回车确认,等候等待安装完成。

02

2.2、进入 SteamCMD 控制台

输入以下命令进入 SteamCMD 控制台:

steamcmd

如果是手动安装的 SteamCMD,那么还需要在当前目录下生成一个软链接:

ln -s /usr/games/steamcmd steamcmd

否则使用 steamcmd 命令时会提示找不到命令。如果直接使用 apt 命令安装的话则不用生成软连接。

第一次进入时,会更新文件,等待更新完成即可进入 SteamCMD 控制台:

03

更新完成后会在当前目录下生成一个隐藏的 .steam 文件夹,使用 ls -al 命令查看。

进入到 SteamCMD 控制台之后,如果出现警告信息:

Warning: failed to init SDL thread priority manager: SDL not found

这是由于缺少依赖,输入 quit 退出 SteamCMD 控制台,再执行以下命令安装依赖:

sudo apt install libsdl2-2.0-0:i386

当正常进入 SteamCMD 控制台后,没有报错信息,就可以开始下载游戏文件了。

三、下载游戏服务器文件

3.1、设置下载位置

下载之前,先设置文件的下载位置:

# 用绝对路径:
force_install_dir /home/steam/cs1.6

3.2、下载文件

下载游戏服务器文件需要登录,我们可以选择匿名登录:

login anonymous

04

这里就有一个问题,我先匿名登录了之后再设置下载目录,然后就出现了报错,提示要在登录之前设置下载位置:

05

而在官方文档的这个位置:Steam 控制台客户端 - 下载一个应用,这段描述意思是可以先登录再设置下载目录的,所以我也不清楚这是什么情况,按实际情况来就好吧。

以上准备完成之后就可以下载 CS1.6 游戏服务器文件了:

app_set_config 90 mod cstrike
app_update 90 validate

需要注意的是,由于 BUG,中途可能下载中断,再次运行 app_update 90 validate 命令会继续下载。多试几次等待出现 “Success” 字样:

06

服务端文件下载完成之后,输入 quit 退出 SteamCMD 控制台。

我在下载完之后,找下载好的文件时踩了不少坑。下了好几遍之后,最后我发现规律如下:

  • 如果不设置下载目录,则默认会下载到当前目录的 .steam 隐藏文件夹下,具体路径为:.steam/steamapps/common/Half-Life

  • 如果将下载目录设置为了绝对路径,那么按照绝对路径就能找到;

  • 如果用了相对路径,则是在隐藏的 .steam 路径下 ,具体路径为 ./steam/steamcmd/

所以,为了比较容易找到之后下载下来的游戏服务器文件,我的建议是在下载之前将路径设置成绝对路径。

四、启动服务器程序

4.1、启动

启动之前,将目录定位到服务器程序文件的根目录下,先给启动程序赋予执行权限:

sudo chmod a+x hlds_run hlds_linux hltv

启动命令为:

# 启动 cs1.6 服务器,服务器端口为 27015,地图为“de_dust2”,最大容纳人数为 16
./hlds_run -game cstrike +port 27015 +map de_dust2 +maxplayers 16

启动命令的格式为:

./hlds_run -game <game> +maxplayers X +map <map> +port <port>

这段启动命令看似复杂,其实并不,简单分析一下你就明白了:

./hlds_run 是根目录下的服务器启动程序,后面一大段是启动参数,几个基本的启动参数含义如下:

参数 含义
-game 游戏名称
+port 游戏服务器启动端口
+map 设置地图
+maxplayers 地图最大容纳人数(2~32)

更多的启动参数可以参考这份官方文档:Command Line Options - Valve Developer Community (valvesoftware.com)

4.2、报错信息

这里我碰到了问题,服务虽然启动起来了,但是有报错信息。不过经过后来的尝试,游戏客户端能连接到服务器,应该是不影响服务基本运行。

但是为了保险起见,我觉得还是有必要消除这些报错信息,尝试着用我的渣渣英语水平分析了一下控制台输出中的报错信息,提取出来一部分可能有用的信息,再加上一些网上其他大佬的资料,差不多就能部分解决这些报错了。

4.2.1、报错信息之一
[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.

这个看提示像是 SteamAPI_Init()SteamAPI_IsSteamRunning() 这两个方法执行失败,找了些资料之后还是无法下手解决,就念在它不影响运行的份上放过它吧。

4.2.2、报错信息之二
dlopen failed trying to load:
/home/steam/.steam/sdk32/steamclient.so
with error:
/home/steam/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory

结合这篇博客 Debian10搭建CS1.6服务器-Rain's Blog (im.ci) 的内容,基本可以确定是这个博主所说的游戏服务器文件缺失的问题,缺失的文件是 .steam/sdk32/steamclient.so,我们可以手动把 .steam/steamcmd/linux32 目录下的 .steamclient.so 文件复制过来一份:

# 整个操作还是在 .steam 目录下:
mkdir /home/steam/.steam/sdk32
cp /home/steam/.steam/steamcmd/linux32/steamclient.so /home/steam/.steam/sdk32
4.2.3、报错信息之三
couldn't exec listip.cfg
couldn't exec banned.cfg

原因在点通论坛的这篇帖子linux系统架设cs1.6服务器图文教程(兼容47/48协议的non-steam)第二部分中提到了,是因为服务器文件根目录的 cstrike 文件夹下缺少了 listip.cfgbanned.cfg 这两个文件,listip.cfg 是存放踢出的玩家 IP,banned.cfg 存放的是被管理员封禁的玩家 IP。

所以消除警告信息的办法就是创建这两个文件(空文件即可):

# 进入 cstrike 文件夹下
cd ~/cs1.6/cstrike/
# 创建文件并且给775权限
touch listip.cfg banned.cfg && chmod 775 listip.cfg banned.cfg

以上步骤做完之后,ctrl + c 取消刚才的运行,再重新启动一次服务,这样就没有报错信息了。

4.3、开放端口

这是很重要的一步,但也很容易被忽略,不管搭建出怎样牛逼的服务,端口不开放那都是白搭。

开放端口具体步骤就不再赘述了,各个服务器厂商的操作都是大同小异的,无非就是在服务器控制台找“防火墙”之类的字眼,进去之后添加端口即可。

按照官方文档:Half-Life Dedicated Server - Valve Developer Community (valvesoftware.com),完整的游戏服务总共需要四个端口:

端口号 网络类型 用途说明
27015 UDP 游戏传输、pings
27015 TCP RCON协议(RCON - 百度百科
27020 UDP HLTV 传输(HLTV - 百度百科
26900 UDP VAC 服务

如果仅仅维持基本的游戏服务及远程管理,只需要添加如下两个端口即可:

07

到这里,没什么问题的话,服务器就已经运行起来,可以被我们的游戏连接了。

五、连接服务器

现在正版 CS1.6 客户端就可以连接这个服务器了。在首页用~调出控制台,输入命令 connect ip地址/域名,回车即可连接。

或者也可以在游戏中搜索 IP 地址或域名:

08

可以看到,已经搜索出来了刚建的服务器:

09

双击可以直接加入。

这是已连接到的样子:

10

至此,我们用官方工具成功搭建出了一个 CS1.6 的游戏服务器。目前这个服务器还只能允许正版 CS1.6 玩家游玩,下一篇,我们将会通过安装插件来破解这个限制,并且对这个游戏服务器做一些优化。

下一篇链接:CS1.6 服务器安装插件及优化教程 - Roookie博客 | 记录 · 收纳 · 分享 (wlplove.com)

参考资料:

Debian10搭建CS1.6服务器-荒岛 (lala.im)(这篇博客可能需要科学上网才能看到)

cs1.6服务器搭建 2021-11-30 - 王冰冰 - 博客园 (cnblogs.com)

[linux系统架设cs1.6服务器图文教程(兼容47/48协议的non-steam) - HLDS 技术讨论区 - 点通论坛(dt-club.net)](http://www.dt-club.net/thread-46567-1-1.html

0

评论 (2)

取消
  1. 头像
    MrSnake
    MacOS · Google Chrome

    博主打csgo么表情

    回复
    1. 头像
      知识分子没文化 作者
      Windows 10 · Google Chrome
      @ MrSnake

      打啊,技术一直稳定停留在打人机的水平表情

      回复