Difference between revisions of "Linux dedicated server/zh-hans"
Hoto Cocoa (talk | contribs) (Created page with "{{DISPLAYTITLE:Linux专用服务器}} {{rewrite}} {{ambox | type = notice | image = Ambox_notice.png | contents = 此教程假设阅读者已经有了基本的Linux命令知...") |
(→screen) |
||
(One intermediate revision by one other user not shown) | |||
Line 246: | Line 246: | ||
:<code>$ screen -m -S tf2.MapNameHere -t MapNameHere /home/Username/hlserver/srcds_run -game tf +map MapFileNameHere -maxplayers 32 -autoupdate -steam_dir /home/Username/hlserver/ -steamcmd_script /home/Username/hlserver/tf2_ds.txt +sv_shutdown_timeout_minutes 5 -port 27015 +exec server.cfg +mapcyclefile mapcycle.txt</code> | :<code>$ screen -m -S tf2.MapNameHere -t MapNameHere /home/Username/hlserver/srcds_run -game tf +map MapFileNameHere -maxplayers 32 -autoupdate -steam_dir /home/Username/hlserver/ -steamcmd_script /home/Username/hlserver/tf2_ds.txt +sv_shutdown_timeout_minutes 5 -port 27015 +exec server.cfg +mapcyclefile mapcycle.txt</code> | ||
− | 此处的 ''parameters'' 是你的普通的<code>srcds_run</code>参数。你可以使用{{key|Ctrl}}+{{key|A}}+{{key|D}}来最小化控制台,使用<code>screen -r tf2</code>来召回控制台。{{key|Ctrl}}+{{key|D}}会终止会话( | + | 此处的 ''parameters'' 是你的普通的<code>srcds_run</code>参数。你可以使用{{key|Ctrl}}+{{key|A}}+{{key|D}}来最小化控制台,使用<code>screen -r tf2</code>来召回控制台。{{key|Ctrl}}+{{key|D}}会终止会话(确保你首先使用了结束服务器命令),{{key|Ctrl}}+{{key|A}}接着{{key|Esc}}允许你用 {{key|Up}} 和 {{key|Down}} 来滚动浏览。查看 [http://www.gnu.org/software/screen/manual/screen.html 手册] 来查看更多的命令和参数。 |
− | |||
====其他命令行选项==== | ====其他命令行选项==== | ||
Line 457: | Line 456: | ||
WARNING: Failed to locate steam binary. | WARNING: Failed to locate steam binary. | ||
WARNING: Could not locate steam binary:, ignoring. | WARNING: Could not locate steam binary:, ignoring. | ||
− | :» 有的话,你要把<code>srcds_run</code>指向你的SteamCMD目录,使用<code>-steam_dir</code>参数指向SteamCMD目录并使用<code>-steamcmd_script</code>参数指向你的SteamCMD更新脚本。查看上面的''[[ | + | :» 有的话,你要把<code>srcds_run</code>指向你的SteamCMD目录,使用<code>-steam_dir</code>参数指向SteamCMD目录并使用<code>-steamcmd_script</code>参数指向你的SteamCMD更新脚本。查看上面的''[[#.E5.85.B6.E4.BB.96.E5.91.BD.E4.BB.A4.E8.A1.8C.E9.80.89.E9.A1.B9|其他命令行选项]]''。 |
* <b>服务器更新时卡在 0/0 。</b> | * <b>服务器更新时卡在 0/0 。</b> |
Latest revision as of 07:25, 7 January 2021
本文章或章节 可能需要重写 来达到军团要塞维基的质量需求。 如果可以,我们欢迎您做出相关更改。该文章的讨论页面可能有相应的建议。 |
此教程假设阅读者已经有了基本的Linux命令知识。 |
此为关于在GNU/Linux (x86 或 amd64)或FreeBSD (x86 或 amd64)等运行Linux内核的系统上安装基本的军团要塞2专用服务器的教程。在如下案例中,服务器被安装到用户home目录下的hlserver
目录。
基本的安装与配置方法在不同的Linux发行版之间是基本一致的,但是一些小细节,比如package名称和目录可能会因发行版本不同而有所区别。推荐你在继续之前检查你的package仓库来查看你是否安装了必要的前置。
注意: 在Windows上运行的服务器的部分信息与Linux是通用的,比如,像server.cfg
和motd_default.txt
这样的文件在两个系统都是可用的。查看该页面来获得额外的细节和建议。该页面和此页面的信息可能也对Unix系列的平台适用。
目录
阅读本文前
本文是根据标准的Linux系统文档语法编写的,意味着:
- 有着
#
(井号)前缀的命令意味着是root运行的。绝大多数发行版有着独自的root账号;对于其他的发行版比如Ubuntu, Linux Mint和Crunchbang,预置sudo
命令来确保命令以root运行。其他发行版也有可能使用su
来使指令确保在root下运行,虽然并不推荐这么做。 - 有着
$
(美元符号)作为前缀的命令意味着是由没有root权限的普通用户执行的。 ./
表示当前工作目录,输入的指令将在当前目录下执行。
Docker
假如你的服务器运行着 Docker ,你可直接使用:
docker run -d --net=host --name=tf2-dedicated -e SRCDS_TOKEN={YOURTOKEN} cm2network/tf2
SRCDS_TOKEN 是需要列出的; https://steamcommunity.com/dev/managegameservers
容器会在开始时自动升级游戏,假如有更新时,重启容器即可。
配置文件位于: /home/steam/tf2-dedicated/tf/cfg
如果要启动另一个实例,可以增加环境变量,使用 -e (--env):
docker run -d --net=host -e SRCDS_PORT=27016 -e SRCDS_TV_PORT=27021 -e SRCDS_TOKEN={YOURTOKEN} --name=tf2-dedicated2 cm2network/tf2
SRCDS_TOKEN 是需要列出的; https://steamcommunity.com/dev/managegameservers
你可以在这里找到相关的Docker Hub页面: https://hub.docker.com/r/cm2network/tf2/
详细步骤
前置
要在GNU/Linux平台安装和运行军团要塞2专用服务器,需要一些前置,即为:
- 对工作目录的写入权限
- 版本大于或等于2.3.6的
glibc
- 不少于8GB的空余硬盘容量(原装服务器,没有自定义地图,音乐等等)
- 假如你在FreeBSD系统执行这个教程,那大多数的命令还是适用的,但你必须在内核启用Linux兼容性并通过端口连接安装一个基本系统。关于此的教程在这里。 警告: 此链接的教程已过期。考虑参考FreeBSD Handbook或其他最近的信息来源。
- 在64-bit的发行版上,叫做 lib32gcc1 或 ia32-libs 的package必须要安装:
- 在64-bit的CentOS运行:
# yum install ncompress libgcc.x86_64 libgcc.i686 glibc.i686 zlib.i686 ncurses-libs.i686
- 在64-bit的Debian/Ubuntu/Linux Mint运行:
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install lib32z1 libncurses5:i386 libbz2-1.0:i386 lib32gcc1 lib32stdc++6 libtinfo5:i386 libcurl3-gnutls:i386
- 对于x86_64的Arch Linux运行:
# pacman -Syy lib32-gcc-libs
- (您需要启用多库存储库)
你可能还需要安装其他package的32-bit形式(例如libcurl4-gnutls)。
下载和安装SteamCMD工具
推荐你创建一个独立的用户(比如"gameserver")来安装和运行游戏服务器。
- 创建名为"gameserver"的用户
# adduser gameserver
- 创建SteamCMD将要安装的目录,比如 './hlserver'
$ mkdir ./hlserver
- 更改工作目录为 hlserver:
$ cd hlserver
- 下载 steamcmd_linux.tar.gz :
$ wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
- 使用tar命令解压到工作目录:
tar zxf steamcmd_linux.tar.gz
下载服务器
- 使用这个命令下载最新服务器:
./steamcmd.sh +login anonymous +force_install_dir ./hlserver +app_update 232250 +quit
- 假如你需要安装预发行版本的TF2专用服务器,添加以下文本:
+beta prerelease
- 你在以后也可以执行此命令来更新。
- 假如你发现错误 "Error! App '232250' state is 0x202 after update job."
- » 你没有足够的硬盘空间
- 假如你有错误显示
/something/linux32/steamcmd - No such file or directory
- » 你没有安装好以上所需的前置
创建/更新服务器设置文件
- 更改工作目录为
~/hlserver/tf2/tf/cfg
:
$ cd ~/hlserver/tf2/tf/cfg
- 建造文件,名为 server.cfg:
$ nano server.cfg
- 将以下内容插入你的 server.cfg (查看Windows专用服务器查看更多信息):
hostname "Your_Server's_Name" rcon_password "Your_Rcon_Password" sv_contact "admin@yourdomain.com" mp_timelimit "30"
- 编辑文件motd.txt, maplist.txt(?)和mapcycle.txt。你能在'~/hlserver/tf2/tf'找到这些文件。
创建一个shell脚本来运行服务器
- 在目录下创建 './hlserver/tf2.sh' ,写入以下内容:
#!/bin/sh tf2/srcds_run -console -game tf +sv_pure 1 +randommap +maxplayers 24 +sv_setsteamaccount [STEAMTOKEN]
- +sv_setsteamaccount 需要被列出; https://steamcommunity.com/dev/managegameservers!
- 命名为可执行文件 ./tf2.sh :
# chmod u+x tf2.sh
- 运行
./tf2.sh
启动服务器:
$ ./tf2.sh
端口
- TF2使用了一些特定端口让外网的玩家连接到你的本地网络。以下列出了对应的端口。
- UDP 27015 - 主要连接端口(必要)。此端口和协议被服务器浏览器所用,用来允许客户端连接。
- TCP 27015 - 这端口被用于RCON,比如Sourcebans(假如需要的话)。
- UDP 27020 - SourceTV(开启的话)。你可以在起始命令行添加"-nohltv"来禁用此端口。
- UDP 27005 (可选) - 这是客户端使用的出站端口。由于此为出站连接,一般来说你不需要在防火墙打开此端口
- 假如你使用AWS EC2,至少打开主要入站端口UDP 27015给0.0.0.0/0,然后根据需要打开其他端口。
- 查看TF2使用的端口和用户连接:
$ netstat -a |egrep 270
UFW
假如安装了UFW,你可以使用接下来的命令:
ufw allow 27015 ufw allow 27020/udp
IPTables
首先,运行sudo -i
获取root状态。然后输入这个(全部行)。想要离开root状态回到标准用户,输入exit
即可。
iptables -A INPUT -i venet0 -p tcp -m tcp --dport 27015 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p tcp -m tcp --dport 27005 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p udp -m udp --dport 27015 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p udp -m udp --dport 27005 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p tcp -m tcp --dport 27016 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p tcp -m tcp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p tcp -m tcp --dport 27018 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p tcp -m tcp --dport 27019 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p tcp -m tcp --dport 27020 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p udp -m udp --dport 27016 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p udp -m udp --dport 27017 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p udp -m udp --dport 27018 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p udp -m udp --dport 27019 -m state --state NEW,ESTABLISHED -j ACCEPT && iptables -A INPUT -i venet0 -p udp -m udp --dport 27020 -m state --state NEW,ESTABLISHED -j ACCEPT
CentOS 6.4 (最小化安装)
在CentOS 6.4中默认IPTables在最后一条目为拒绝。假如你直接在文本这样编辑(使用了如上的命令),所有网络连接会被拒绝。想要修复此问题,我建议首先运行一次服务器来查看什么端口被使用了:
netstat -lnptu
这应该会输出这样子的内容:
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN - tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:27015 0.0.0.0:* LISTEN 1393/./srcds_linux tcp 0 0 :::22 :::* LISTEN - tcp 0 0 ::1:25 :::* LISTEN - udp 0 0 0.0.0.0:27020 0.0.0.0:* 1393/./srcds_linux udp 0 0 0.0.0.0:26901 0.0.0.0:* 1393/./srcds_linux udp 0 0 0.0.0.0:68 0.0.0.0:* - udp 0 0 0.0.0.0:27005 0.0.0.0:* 1393/./srcds_linux udp 0 0 0.0.0.0:27015 0.0.0.0:* 1393/./srcds_linux
被名称为 ./srcds_linux 使用的端口就是你服务器要使用的端口。在此实例中27015使用了TCP协议,26901,27005,27015,和27020使用UDP协议。这些端口需要被添加进iptables规则使防火墙不阻挡这些端口的连接。
为了添加它们,首先你要找到你当前的iptables配置。你必须以root执行下列命令。最安全的方法就是每一个命令都以sudo
开头。
# iptables -nL --line-numbers
有可能会输出这样的内容:
Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination
注意,第五行写的"REJECT all..."。意味着你的服务器将拒绝一切连接。假如你选择追加新规则到iptables的化,你仍然不会成功把服务器所需的端口添加到iptables。你可能需要运行下面的命令(以root或者用sudo运行):
# iptables -I INPUT 5 -p tcp --dport 27015 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -I INPUT 6 -p udp --dport 27015 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -I INPUT 7 -p udp --dport 27005 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -I INPUT 8 -p udp --dport 27020 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -I INPUT 9 -p udp --dport 26901 -m state --state NEW,ESTABLISHED -j ACCEPT # service iptables save # service iptables restart
这将增加新规则在拒绝行之上。观察一下命令,它们都有一段写着 "-I INPUT 5,6,7,8,9." 。这是在标识此规则要写在第几个。每一次添加新规则,都将把拒绝行向下移动一行,增加了规则数。你可以把所有的命令都用"-I INPUT 5",一切都能正常运作,但是我建议把iptables弄得干净一点。假如你想的话,你可以删除拒绝行(sudo iptables -D INPUT 5)并在以后需要时再添加,但你必须保持语法正确才能更加方便的添加上面的内容。规则在重启后生效,所以你必须重启服务让新的规则被系统识别。你的iptables现在应该是这样的:
Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:27015 state NEW,ESTABLISHED 6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:27015 state NEW,ESTABLISHED 7 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:27005 state NEW,ESTABLISHED 8 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:27020 state NEW,ESTABLISHED 9 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:26901 state NEW,ESTABLISHED 10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination
这样防火墙问题应该就解决了。
工具
screen
许多服务器管理员选择在screen
或者相似的软件包环境(比如tmux
)下运行服务器,它允许你在控制台和shell之间切换,也不会在你结束SSH会话时杀死服务器。你可以在软件包管理工具安装这些应用。启动服务器的命令就变成:
$ screen -m -S tf2 ./srcds_run parameters
命令参数示例:
$ screen -m -S tf2.MapNameHere -t MapNameHere /home/Username/hlserver/srcds_run -game tf +map MapFileNameHere -maxplayers 32 -autoupdate -steam_dir /home/Username/hlserver/ -steamcmd_script /home/Username/hlserver/tf2_ds.txt +sv_shutdown_timeout_minutes 5 -port 27015 +exec server.cfg +mapcyclefile mapcycle.txt
此处的 parameters 是你的普通的srcds_run
参数。你可以使用Ctrl+A+D来最小化控制台,使用screen -r tf2
来召回控制台。Ctrl+D会终止会话(确保你首先使用了结束服务器命令),Ctrl+A接着Esc允许你用 ↑ 和 ↓ 来滚动浏览。查看 手册 来查看更多的命令和参数。
其他命令行选项
TF2使用的一些其他命令行:
+ip 0.0.0.0
- 绑定特定IP。默认情况下监听所有网络接口。-port 27015
- 绑定特定的端口(默认是27015)-secured
- VAC安全模式-timeout 0
- 服务器崩溃后更快地重启-strictportbind
- 假如服务器运行的端口被占用了,停止启动服务器+randommap
- 替代+map选择一个随机地图+servercfgfile
- 更换地图时执行的 tf\cfg\ 下的文件,默认是server.cfg+mapcyclefile
- 位于 tf\cfg\ 下的地图轮换文件,默认是mapcycle.txt。同时也会查询 tf\ 下的文件。-replay
- 执行replay.cfg并为回放机器人增加一个额外位置,同时从玩家人数中移除。-autoupdate
- 有更新可用时尝试自动更新。必须设置好 -steam_dir 和 -steamcmd_script 。-steam_dir ~/hlserver/
- SteamCMD的位置。是使用-autoupdate
的要求。-steamcmd_script ~/hlserver/tf2_ds.txt
- 更新服务器的SteamCMD脚本。是使用-autoupdate
的要求。+sv_shutdown_timeout_minutes 360
- 自动更新时,在此数值分钟后自动重启服务器。默认是360(6小时)。
持续地重启
在意外断电的情况下,自动重新启动服务器可能会很有用。
使用systemd
对于使用systemd而不是init scripts的系统,你需要做一次systemd service。 在目录 /etc/systemd/system/ 下创建一个文件,命名为tf2server.service然后添加以下文本:
[Unit] Description=Team Fortress 2 server RefuseManualStart=no RefuseManualStop=yes [Service] Type=oneshot ExecStart=/bin/sh /home/tf2server/hlserver/tf2.sh [Install] WantedBy=multi-user.target
这将在主机启动时运行/home/tf2server/hlserver/tf2的shell脚本。你可用在ExecStart=/bin/sh /home/tf2server/hlserver/tf2.sh中更改/home/tf2server/hlserver/tf2.sh为你的服务器启动shell脚本所在的目录。现在要做的就是告诉systemd刷新*.service文件并添加进启动项:
# systemctl daemon-reload
# systemctl enable tf2server.service
然后,你的服务器就会在系统启动时自动开启了。
使用init
注意: 大部分现代系统都应该会使用systemd而不是system init脚本了。只有当你不愿意使用systemd的时候才按照这一段落的指令去做。
此例子Debian LSB init脚本能用来自动重启服务器。注意screen
会被使用。此脚本会命名为tf2-server并且要放入目录/etc/init.d。然后运行:
$ update-rc.d tf2-server defaults
这将确保每次重启时正确地启动服务器。
#!/bin/sh ### BEGIN INIT INFO # Provides: tf2server # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Team Fortress 2 server # Description: Starts a Team Fortress 2 server ### END INIT INFO NAME="Team Fortress 2" USER="tf2server" SCREENREF="tf2" BINARYPATH="/home/tf2server/hlserver/tf2" BINARYNAME="srcds_run" PIDFILE="tf2server.pid" OPTS="-game tf +sv_pure 1 +maxplayers 32 +ip 0.0.0.0 +map mvm_decoy -autoupdate -steam_dir /home/tf2server/hlserver/ -steamcmd_script /home/tf2server/hlserver/tf2_ds.txt +sv_shutdown_timeout_minutes 5" cd "$BINARYPATH" running() { if [ -n "`pgrep -f $BINARYNAME`" ]; then return 0 else return 1 fi } start() { if ! running; then echo -n "Starting the $NAME server... " start-stop-daemon --start --chuid $USER --user $USER --chdir $BINARYPATH --exec "/usr/bin/screen" -- -dmS $SCREENREF $BINARYPATH/$BINARYNAME $OPTS pgrep -f $BINARYNAME > $PIDFILE if [ -s $PIDFILE ]; then echo "Done" else echo "Failed" rm $PIDFILE fi else echo "The $NAME server is already started." fi } stop() { if running; then echo -n "Stopping the $NAME server... " kill `cat $PIDFILE` while running; do sleep 1 done rm $PIDFILE echo "Done" else echo "The $NAME server is already stopped." fi } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) if running; then echo "The $NAME server is started." else echo "The $NAME server is stopped." fi ;; *) echo "Usage: $0 (start|stop|restart|status)" exit 1 esac exit 0
使用Upstart
像上述所说,使用systemd是比较推荐的。但假如你就是要用upstart脚本,粘贴以下内容到/etc/init/tf2-server.conf
description "TF2 Server" author "TF2 Wiki" start on runlevel [2345] stop on starting rc RUNLEVEL=[016] pre-start script cd /home/tf2-server/hlserver su -c "screen -dmS tf2 ./srcds_run -game tf +sv_pure 1 +maxplayers 32 +ip 0.0.0.0 +map mvm_decoy -autoupdate -steam_dir /home/tf2-server/hlserver/ -steamcmd_script /home/tf2-server/hlserver/tf2_ds.txt +sv_shutdown_timeout_minutes 5" tf2server while [ -z "$(pidof srcds_linux)" ]; do sleep 1 done end script script while [ -n "$(pidof srcds_linux)" ]; do sleep 1 done end script post-stop script fuser -k /home/tf2-server/hlserver/tf2/srcds_run while [ -n "$(pidof srcds_linux)" ]; do sleep 1 done end script
疑难解答
- [S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
- » 保存以忽略。Steam代码找不到Steam客户端。
- dlopen failed trying to load: /home/ubuntu/.steam/sdk32/steamclient.so
- » TF2服务器不能定位32-bit库。修复办法为运行:
$ ln -s ~/hlserver/tf2/bin ~/.steam/sdk32
。在大多数发行版系统,仅输入$ ln
将会回报错误。
- Could not load: replay_srv.so
- » 搜索你的包管理工具,找libtinfo5:i386,libncurses5:i386和libcurl3-gnutls:i386的软件包,使用
sudo apt-get install
或者yum install
等软件包命令来安装它们。
- Segmentation fault (core dumped)
- » 这表示你的专用服务器崩溃了。为了解决问题,在tf2/srcds_run文件添加
-debug
。这将会生成名为debug.log的文件,包含了崩溃的细节信息。
- 我的服务器在服务器浏览器的局域网栏显示不出来又或者是我在服务器玩的时候没办法打开装备配置。
- » 你还能在开发者控制台使用
connect <ip-address>
的办法连接吗? - » 在启动时,服务器有报告以下内容吗?
* Unable to load Steam support library.(无法载入Steam支持库)* * This server will operate in LAN mode only.(服务器仅在LAN模式运行)*
- » 当你连接服务器时,服务器有没有写出以下内容?
NULL ISteamGameServer in ConnectClient. Steam authentication may fail. … Cannot verify load for invalid steam ID […]
- » 假如有,那这些问题都有共同的解决方法: 确保在你的目录下的文件
steam_appid.txt
包含了数字232250
。查看上面的运行服务器。
- 我的服务器启动时没有自动更新。
- » 启动服务器时,你的服务器有没有输出过以下内容?
ERROR: -autoupdate requires -steam_dir and -steamcmd_script. WARNING: Failed to locate steam binary. WARNING: Could not locate steam binary:, ignoring.
- » 有的话,你要把
srcds_run
指向你的SteamCMD目录,使用-steam_dir
参数指向SteamCMD目录并使用-steamcmd_script
参数指向你的SteamCMD更新脚本。查看上面的其他命令行选项。
- 服务器更新时卡在 0/0 。
- » 更新时,控制台有没有输出以下内容?
force_install_dir /home/your/server/directory app_update 232250 validate Initial App state (0x4) installed App state (0x4) installed, progress: 0.00 (0 / 0) Success! App '232250' already up to date.
- » 有的话,从更新命令移除"validate"。
- 我的服务器不能用rcon或者拒绝UDP广播日志
- » 你是否有IPv6或者其他网络协议?有的话,服务器在处理这些时将会面临危机,你必须手动控制监听的IP:
- » 要控制的话,在启动参数使用
+ip 0.0.0.0
并且在server.cfg添加rcon_address 0.0.0.0
- » 注意:
rcon_address
并不是rcon的专用项,没有它,UDP日志记录将失败。
- steamclient.so error - 64bit
dlopen failed trying to load:
~/.steam/sdk32/steamclient.so
with error:
~/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory
- » 保存以忽略。这只是Steam代码找不到Steam客户端。假如你想修复,使用:
cp ~/hlserver/linux32/steamclient.so ~/.steam/sdk32/
- 服务器启动失败,显示 ./srcds_run line 324 18491 Segmentation fault $HL_CMD
- » 运行以下两条命令:
yum install libcurl.i686
ln -s /usr/lib/libcurl.so.4 /usr/lib/libcurl-gnutls.so.4