SkyFire熊猫人之谜局域网服务端部署笔记

发布于 2023-02-19  911 次阅读


上个月(2023年1月)魔兽世界国服停服后,我去亚服试玩了一会儿。

由于是试玩号,升级时间线似乎只能走8.x版本的。一切从头开始的感觉不是很好,明明不久之前还在化身巨龙牢窟和莱萨杰丝斗智斗勇的,现在斗智斗勇的对象变成了库尔提拉斯满地图的小怪,一下子有点难缓过来。

还没等玩到20级提示充钱,我就打消了转战亚服的想法。

反正只有三分钟热度,不如自己搭个服务器在自家局域网里面玩玩呢。

第一个部署的服务端版本一拍脑袋就决定是5.x了。依旧是按照惯例,写篇文章记录一下部署流程,方便之后部署其他版本时复制粘贴。

1.环境准备

既然是用于在局域网中玩,那么就拿一台Linux虚拟机来部署吧。

1.1.官方文档

在开始动手部署前,首先看一下ReadMe和部署文档。

SkyFire_548项目地址:https://github.com/ProjectSkyfire/SkyFire_548

SkyFire_548似乎有点年头的部署文档:https://wiki.projectskyfire.org/index.php?title=Installation_(Ubuntu_18.04_LTS)

1.2.环境要求

由于部署文档年久失修,环境要求决定以ReadMe里面的为准。

以下环境要求适用于使用Linux发行版的场合(从官网复制来的)。

  • 处理器 = 支持SSE2指令集
  • ACE  = 6.4.5
  • MySQL = 8.0
  • CMake = 3.21.1/3.16.3
  • OpenSSL = 1.1.1
  • GCC = 11.2.0

偷懒起见,我选择使用Ubuntu 20.04 LTS,加个PPA源就可以不用自行编译安装GCC 11.x。

2.部署流程

2.1.安装虚拟机

首先准备一台装有Ubuntu 20.04 LTS的虚拟机。我创建的虚拟机硬件资源分配如下:

  • 处理器 = 4
  • 内存 = 4GB
  • 硬盘 = 50GB

2.2.安装依赖

虚拟机安装完成后,先更新一下系统再来安装软件依赖。这里直接使用root账号操作。

apt update && apt upgrade -y

更新完成后添加包含GCC-11的PPA源。

add-apt-repository ppa:ubuntu-toolchain-r/test
apt update

然后就可以安装软件了。

apt install git clang cmake make gcc-11 g++-11 libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mysql-server p7zip libace-dev sudo screen unzip -y

软件安装好后,将几个编译器在系统中注册一下软链接。

update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100

最后再运行一下MySQL的安全配置向导。

mysql_secure_installation

2.3.创建管理员账号

服务端程序不能直接由root账号运行,因此需要创建一个管理员账号。

虽然在系统安装的时候已经创建过一个了,但是这里再创建一个,顺便将它加到sudo组里面以正常使用sudo命令。

adduser mop
usermod -aG sudo mop

2.4.部署服务端

切换到刚刚创建的管理员账号,接下来的操作都将在该账号下进行。

su - mop

在家目录下创建几个目录。

mkdir ~/SkyFire
cd ~/SkyFire/
mkdir build cmake db log src tmp

各个子目录规划的用途如下:

  • build:存放编译好的服务端
  • cmake:存放makefile文件
  • db:存放world数据库文件
  • log:存放服务端日志
  • src:存放服务端源代码
  • tmp:存放客户端文件,提取完必要的数据后删掉

目录创建完毕后,下载服务端的源代码。

cd ~/SkyFire/src/
git clone -b trunk https://github.com/ProjectSkyfire/SkyFire_548.git

编译安装走起。

cd ~/SkyFire/cmake
cmake -S ~/SkyFire/src/SkyFire_548 -B ~/SkyFire/cmake/ -DCMAKE_INSTALL_PREFIX=~/SkyFire/build -DTOOLS=1
make -j $(nproc) install

2.5.创建数据库

编译安装完成后,就可以开始创建服务端数据库了。使用数据库的root账号登录。

sudo mysql -u root -p

创建一个叫skyfire的账号,密码和账号相同。随后创建服务端用到的3个库,并将权限赋予skyfire这个账号。

CREATE USER 'skyfire'@'localhost' IDENTIFIED BY 'skyfire' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
CREATE DATABASE `world` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `characters` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON `world` . * TO 'skyfire'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `characters` . * TO 'skyfire'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `auth` . * TO 'skyfire'@'localhost' WITH GRANT OPTION;
exit;

2.6.导入数据库文件

首先导入authcharacters库的数据。

mysql -u skyfire -p auth < ~/SkyFire/src/SkyFire_548/sql/base/auth_database.sql 
mysql -u skyfire -p characters < ~/SkyFire/src/SkyFire_548/sql/base/characters_database.sql

world库的文件可以在SkyFire_548项目的Release页面(https://github.com/ProjectSkyfire/SkyFire_548/releases/)下载到。下载完成后解压导入。

cd ~/SkyFire/db
wget https://github.com/ProjectSkyfire/SkyFire_548/releases/download/548-21.0/SFDB_full_548.21.0_2021_02_07.zip
unzip SFDB_full_548.21.0_2021_02_07.zip && rm SFDB_full_548.21.0_2021_02_07.zip
mysql -u skyfire -p world < ~/SkyFire/db/main_db/world/SFDB_full_548.21.0_2021_01_07.sql

2.7.修改realm地址

数据库导入完毕后,需要将realm地址改成服务端真实地址。

使用skyfire账号登录数据库。

mysql -u skyfire -p

进入auth库,进行修改。我这里将地址修改成了10.5.4.8这个IP。

USE auth;
SELECT * FROM realmlist;
UPDATE realmlist SET address = '10.5.4.8' where id = 1;
exit;

2.8.提取客户端文件

服务端的运行需要加载从对应版本客户端提取出来的地图以及数据库文件。

对应版本的build号可以在auth库的realmlist表里面看到。这里的当然是 18414

客户端的下载就只能自行找资源了。不介意英文版的话,可以到有名的https://wowdl.net/fichiers/clients下载对应版本的客户端。

把客户端上传到~/SkyFire/tmp/目录,上传完成后使用提取工具进行提取。提取时间挺长的,可以玩几局Splatoon慢慢等。

cd ~/SkyFire/tmp
~/SkyFire/build/bin/mapextractor 
~/SkyFire/build/bin/mmaps_generator 
~/SkyFire/build/bin/vmap4extractor 
mkdir vmaps
~/SkyFire/build/bin/vmap4assembler

经过漫长的等待后,将提取出来的文件复制到~/SkyFire/build/bin/目录。复制完成后就可以将整个~/SkyFire/tmp/目录删掉了。

cp -r db2/ ~/SkyFire/build/bin/
cp -r dbc/ ~/SkyFire/build/bin/
cp -r maps/ ~/SkyFire/build/bin/
cp -r vmaps/ ~/SkyFire/build/bin/
rm -rf ~/SkyFire/tmp

2.9.修改配置文件

~/SkyFire/build/etc/目录中的2个配置文件模板各复制一份为正式版配置文件。

cp ~/SkyFire/build/etc/worldserver.conf.dist ~/SkyFire/build/etc/worldserver.conf
cp ~/SkyFire/build/etc/authserver.conf.dist ~/SkyFire/build/etc/authserver.conf

首先修改worldserver.conf配置文件。

vim ~/SkyFire/build/etc/worldserver.conf

输入81G跳转到第81行,按i进入编辑模式,修改服务端日志存储位置。根据我的规划,日志将存储在~/SkyFire/log/目录。

LogsDir = "../../log"

Esc退出编辑模式,输入98G跳转到第98行,按i进入编辑模式,修改98-100行中服务端访问数据库使用的账号密码。这里使用的是先前创建的skyfire账号。

LoginDatabaseInfo = "127.0.0.1;3306;skyfire;skyfire;auth"
WorldDatabaseInfo = "127.0.0.1;3306;skyfire;skyfire;world"
CharacterDatabaseInfo = "127.0.0.1;3306;skyfire;skyfire;characters"

接下来跳转到601行,修改DBC语言地区。如果是要用简体中文的话,就改成4

DBC.Locale = 4

必须要改的地方大概就上面几处,修改好后退出编辑模式,输入:wq并回车,保存退出。

接着修改authserver.conf配置文件。

vim ~/SkyFire/build/etc/authserver.conf

跳转到第41行,修改日志存储位置。还是存储在~/SkyFire/log/目录。

LogsDir = "../../log"

跳转到第141行,修改数据库账号密码。

LoginDatabaseInfo = "127.0.0.1;3306;skyfire;skyfire;auth"

修改完成后保存退出。

2.10.运行服务端

配置文件修改完成后,可以运行下服务端试试。

首先用screen开一个窗口,运行worldserver

screen -S worldserver
cd ~/SkyFire/build/bin/
./worldserver

运行正常的话按Ctrl+A后再按D,离开窗口,再新建一个窗口运行authserver

screen -S worldserver
cd ~/SkyFire/build/bin/
./authserver

运行正常的话可以离开窗口,让authserver在后台运行。

2.11.创建GM账号

回到worldserver窗口,准备创建一个带GM权限的账号。

screen -r worldserver

在服务端命令行输入以下命令创建账号并赋予GM权限。

我创建的账号当然叫omega啦。

account create omega omega

account set gmlevel omega 3 -1

2.12.准备客户端

修改客户端文件夹下的WTF\Config.wtf文件,在其中添加以下2行,设置客户端连接的服务端地址。

SET portal "10.5.4.8"
SET realmlist "10.5.4.8"

下载连接补丁工具(https://github.com/ProjectSkyfire/SkyFire-Community-Tools/raw/master/SkyFire%20Patcher/548/Connection%20Patcher.exe),放置在客户端根目录。

按着Shift点击鼠标右键,在右键菜单中选择“在此处打开PowerShell窗口”,并在打开的PowerShell窗口中执行以下命令。

& '.\Connection Patcher.exe' '.\Wow-64.exe'

补丁工具将生成一个Wow-64_Patched.exe文件。双击运行该文件,就可以登录账号开始玩了。

3.个人吐槽

进入游戏后我意识到了一个小问题,没有中文翻译。

老外的项目,翻译文本当然得自己准备了。网上搜了一圈,5.4.8版本的中文文本暂时没搜到,就暂且先用英文玩着了。

SkyFire熊猫人之谜局域网服务端部署笔记