Leya 发表于 2008-10-20 18:03:42

在FreeBSD-6.2下架设hlds linux v3651的几点体会

一.服务器端的下载
HLupdatetool方法
建立一个目录用来存放客户端,如/usr/hlds,代码:mkdir /usr/hlds
切换到这个目录,如:cd /usr/hlds
代码:wget http://www.steampowered.com/download/hldsupdatetool.bin
这是官方的HLupdatetool。
如果该文件没有运行权限,代码:chmod +x hldsupdatetool.bin
解包hldsupdatetool.bin文件,代码:./hldsupdatetool.bin
然后选“yes”
执行./steam,再执行./steam -command update -game cstrike -dir .
这样,最新的服务器就下载到当前目录了。

2. 直接下载打包的服务端,然后解压

建立目录的过程同上。
下载打包文件,如hlds_l_3651_cs_mod_full.tar.gz
在预期的安装目录解压文件,代码:
tar zxpf /打包文件所在的目录/hlds_l_3651_cs_mod_full.tar.gz
二.服务器的运行

通过方法1得到的服务端,起动脚本就在hldsupdatetool.bin所在目录下。
通过方法2得到的服务端就不一定了,取决于制作压缩包的人。大家可以在解压出来的目录里找一下,脚本的名字叫做hlds_run

切换到hlds_run所在目录后,可以用这行命令来测试一下:
./hlds_run -game cstrike -port 27015 +map de_dust2
如果不出现意外,应该是这样的输出:

Auto detecting CPU
Using AMD Optimised binary.
Auto-restarting the server on crash

Console initialized.
scandir failed:/usr/hlds/./platform/SAVE
Protocol version 47
Exe version 1.1.2.5/Stdio (cstrike)
Exe build: 20:02:44 Oct 24 2006 (3651)
STEAM Auth Server
couldn't exec language.cfg
Server IP address 210.46.78.38:27015
scandir failed:/usr/hlds/./platform/SAVE

couldn't exec listip.cfg
couldn't exec banned.cfg
Adding master server 69.28.151.162:27010
Adding master server 72.165.61.189:27010
0 fps -- host(1162) sv(908) cl( 0) gfx( 0) snd( 0) ents(109)
Connection to Steam servers successful.
VAC secure mode is activated.

这段文字会因机器而异。如cpu,server ip等等。

如果出现了 Unable to Detect CPU Frequency ,Segmentation Fault
等信息,是因为系统中没有对linux的/proc实现支持。
测试代码:/compat/linux/bin/ls -l /proc/cpuinfo
如果出现:No such file or diretctory,就确信无疑了。因为hlds是linux程序,要从这里读取cpu信息,读取不到,自然就Unable to .....了。
解决的办法比较麻烦,我是重新编译了内核(这方面比较复杂,估计以我的表达能力是是说不清楚的,大家可以查看Freebsd Handbook,或者www.freebsdchina.org的论坛,或者找人问一下。。):
在内核配置文件中加入:
options COMPAT_LINUX
options LINPROCFS
重新编译内核后,在/etc/fstab中加入一行:
linproc /compat/linux/proc linprocfs rw 0 0

然后reboot一下机器,重试一下:
./hlds_run -game cstrike -port 27015 +map de_dust2
服务器应该可以正常启动了,但是这时有可能出现:
net.cpp (860) : Assertion Failed: 0 == iRet
net.cpp (863) : Assertion Failed: 0 == iRet
括号里的数字因机器而异。
这是因为程序向系统申请了256k的socket读写缓冲,貌似有些大了,可以用下面的命令来修改系统默认的最大值:
sysctl kern.ipc.maxsockbuf=524288
为了让系统每次启动时都载入这个值,可以在/etc/sysctl.conf中加入:
kern.ipc.maxsockbuf=524288

现在,唯一剩下的负面信息就是scandir failed:/usr/hlds/./platform/SAVE,couldn't exec listip.cfg这一类了。
切换到hlds_run所在目录,也就是hlds的安装目录,执行:
mkdir valve/SAVE
mkdir platform
mkdir platform/SAVE
这三条命令不一定全用,缺哪个目录,就建哪个。
然后,切换到cstrike目录下,建立那几个cfg文件。
大功告成!现在可以用hlds_run -参数s来启动服务器了,参数想必大家都熟悉,不再赘述了。

三、心得体会

FreeBSD的兼容性虽然是有的,但是在我的机器上好像并不是那么容易得到,我遇到了以上所有的问题(+.+),解决的方法也没有一个是我自己想出来的(+.+)。我把这个过程总结在这里,希望能对大家有所帮助。

以下是我参考过的主要网站,在此表示感谢:
www.google.com
list.freebsd.org
bbs.gamearena.cn
www.opensubscriber.com
www.mail-archive.com
www.freebsdchina.org

转自:http://www.dt-club.net/forum/showthread.php?t=34160
页: [1]
查看完整版本: 在FreeBSD-6.2下架设hlds linux v3651的几点体会