Loading... 准备环境:Ubuntu20.04 LTS 配置: 4C8G 50G+100G <!--more--> ![](https://assets.insilen.com/pic/2024/01/0118232218.png) 应AzerothCore 不支持 OpenSSL 3.x 的要求,Linux 发行版Ubuntu22.04暂时排除在外否则就要编译低版本的OpenSSL! ## 安装准备 **安装方式**:从源安装(支持,推荐) 该方法用于任何目的和支持所有操作系统。安装过程可让你更多地了解 AzerothCore 的结构 | 环境要求 | | ---------------- | | MySQL ≥ 5.7.0 | | Boost ≥ 1.74 | | OpenSSL ≥ 1.0.x | | CMake ≥ 3.16 | | Clang ≥ 10 | ### 编译环境准备 安装为编译时需要的必要组件,注意组件分2大类 主要是数据库类型,二选一 <br><br> #### 带MySQL 8.x ```shell sudo apt-get update && \ sudo apt-get install git cmake make gcc g++ clang libmysqlclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev mysql-server libboost-all-dev ``` ⚠️虽Mysql8.0 是官方推荐安装方式,但讽刺的是:Mysql8.0在Ubuntu20.04下表现出各种不稳定,仅在环境准备阶段就无法完成,如:迁移或切换DataDir数据目录,博主在这个问题上话费了大量的时间和精力,仍然在报错中。 问题主要来自`apparmor`的大量配置影响,当然mysql的`/usr/share/mysql/mysql-systemd-start`启动脚本 功不可没,强制检查`/var/lib/mysql`目录是否存在,权限是否正确等... 参考的文档包括但不限于一下: * [如何将 MySQL 数据目录移动到 Ubuntu 20.04 上的新位置 By digitalocean](https://www.digitalocean.com/community/tutorials/how-to-move-a-mysql-data-directory-to-a-new-location-on-ubuntu-20-04) * [Ubuntu 20.04 MySQL Datadir 权限(Errno 13)By AskUbuntu](https://askubuntu.com/questions/1249792/ubuntu-20-04-mysql-datadir-permissions-errno-13) * [Mysql服务器无法启动错误13 Ubuntu 20.04 By AskUbuntu](https://serverfault.com/questions/1079895/mysql-server-not-starting-error-13-ubuntu-20-04) * [Ubuntu 中修改 MySQL 数据库存储数据的位置 By CSDN](https://blog.csdn.net/u012805048/article/details/107179506) * [Linux 中改变 MySQL8 数据库存储路径 By CSDN](https://blog.csdn.net/YKenan/article/details/100624138) ... 均以失败告终 为此不得不寻求 MariaDB的方案。 不过如果对于迁移 或 **系统分区**空间足够大的情况 使用Mysql后续可能会是一个不错的选择... 未来的扩容迁移或其他个性化设置可能就比较吃力... 如果扯上企业行为甲骨文近年对社区的糟蹋和对中国区的制裁,觉得Mysql使用下来未必会好... 这些都是猜测,实践出真理。我们决赛圈见... <br><br><br><br> #### 带MariaDB的版本 **注意**目前仅支持 10.6 和 10.5 俩个版本,所以在输入命令前需要先添加对应版本的存储库 访问[官方指南](https://mariadb.org/download/?t=repo-config&d=20.04+%2522focal%2522&v=10.6&r_m=aliyun) 可直接使用下命令添加(和官方一致) ```shell sudo apt-get install apt-transport-https curl \ && sudo curl -o /etc/apt/trusted.gpg.d/mariadb_release_signing_key.asc 'https://mariadb.org/mariadb_release_signing_key.asc'\ &&sudo sh -c "echo 'deb https://mirrors.aliyun.com/mariadb/repo/10.6/ubuntu focal main' >>/etc/apt/sources.list" ``` 添加后 查询版本是否达到要求 ```shell apt update && apt list mariadb-server ``` 编译环境安装命令 ```shell sudo apt update && sudo apt full-upgrade -y \ && sudo apt install git cmake make gcc g++ clang libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server mariadb-client libmariadb-dev libmariadb-dev-compat ``` <br><br> #### MariaDB版本 优化·1 上步完成后 首选准备MariaDB的远程连接用户,用于远程管理 拥有root权限;但为了安全 这里不使用root。 ```shell mysql ``` 登录到mysql中 ```shell use mysql; ``` 切换到系统表,随后创建用户 `moon` 和密码 并且授权所有IP连接 ```shell CREATE USER 'moon'@'%' IDENTIFIED BY 'FCCMivvPqDCJggN6Vqk8k85DaVhwWrFg'; ``` 添加管理员权限(等同root) ``` GRANT ALL PRIVILEGES ON *.* TO 'moon'@'%'; ``` 用户添加成功后 退出mysql返回bash ```shell quit; ``` 开放mysql数据库远程连接 ``` nano /etc/mysql/mariadb.conf.d/50-server.cnf ``` 找到`bind-address = 127.0.0.1`修改为 ``` bind-address = 0.0.0.0 ``` 重启mysql ```shell systemctl restart mysql ``` 随后使用管理软件测试是否连接上了 <br><br> #### MariaDB版本 优化·2 迁移 数据库 数据目录 此步骤是有为专用数据盘的用户准备的,如果你的磁盘就1个默认的 那就无需操作这个步骤且还能去选择mysql版本 默认Mysql数据存储位置`/var/lib/mysql/` 此步需求迁移目标位置`/Azeroth/mysql` MariaDB的迁移非常简单粗暴 停止服务 ``` systemctl stop mysql ``` `cp`复制 `-a`是保持连接和权限 `-r`递归目录 ``` cp -ar /var/lib/mysql /Azeroth/ ``` 一般这个命令复制就会保持原有目录权限和用户过去,如果不放心可以在此授权 ``` chown -R mysql:mysql /Azeroth/mysql ``` 编辑mysql 服务器配置 ``` nano /etc/mysql/mariadb.conf.d/50-server.cnf ``` 找到 ```shell ... #datadir = /var/lib/mysql ... ``` 改为(记得去除注释 `#`) ```shell ... datadir = /Azeroth/mysql ... ``` 直接启动服务 ``` systemctl restart mysql ``` 为确保新数据目录确实在使用中,请启动 MySQL 监视器: ```shell mysql ``` 登录到mysql中 ```shell SELECT @@datadir; ``` 输出 ``` MariaDB [(none)]> SELECT @@datadir; +-----------------+ | @@datadir | +-----------------+ | /Azeroth/mysql/ | +-----------------+ 1 row in set (0.000 sec) ``` 退出 mysql ```shell quit; ``` 现在您已经验证了任何现有数据的完整性, 您可以选择删除原来的数据目录了: ``` rm -rf /var/lib/mysql ``` 也可以选择不删除,因为是新库,不会有多少占用空间 到这里 全部准备环境均完成了。准备下一步编译 ### git准备 编译所需的代码 均在github中,国内对github访问有魔法,所以这里需要为git做一些准备 #### git初次设置 因为是首次安装,之后如自己有修改保存本地版本,需要一个git用户名和邮箱(仅是本地用户可随意设置) **设置用户** ``` git config --global user.name "Moon Benjamin" git config --global user.email "your@email.com" ``` **设置代理** 假设 你的HTTP Proxy为 `127.0.0.1:1087` ``` git config --global http.proxy http://127.0.0.1:1087 git config --global https.proxy http://127.0.0.1:1087 ``` #### 拉取代码 进入你准备存放编译代码的位置 博主预设为 `/Azeroth` 目录下 ``` cd /Azeroth ``` 拉取稳定分支 包含一些稳定版本的(推荐) 如果空间有限也可以只拉一个版本,这里安装官方推荐 ``` git clone https://github.com/azerothcore/azerothcore-wotlk.git --branch master --single-branch azerothcore ``` 拉取完成后 得到一个`azerothcore`目录 这时候 所有准备工作就完成了,可以进行编译了 <br><br><br><br> ### 编译 #### 创建构建目录 为了避免更新和冲突源构建的问题,要自己创建了一个特定的构建目录,主要是避免了任何可能的问题(如果可能发生的话) ``` cd azerothcore mkdir build cd build ``` <br> <br> #### 配置编译 编译时间比较长,怕中途SSH断开导致编译终端的,请安装`screen`来开单独的命令窗口防止中断 ```shell apt install screen -y ``` 为编译起一个 备注为`install_core`的`screem`窗口 ```shell screen -S install_core ``` 如果终端断开了,重新连接后 则使用`screen -ls`查询窗口ID 然后使用`screen -r ID` 重新进入 <br> <br> 在运行 CMake 命令之前,替换`$HOME/azeroth-server/`为服务器安装路径(您要放置已编译二进制文件的位置)。 高级用户参数说明`CMake options`。 此时,您必须位于`build/`目录中。 注意:在以下命令中,变量`$HOME`是当前用户的路径,因此如果您以 `root` 身份登录,`$HOME` 将为`/root`。您可以检查环境变量的状态,如下所示: 官方推荐命令 ```shell cmake ../ -DCMAKE_INSTALL_PREFIX=$HOME/azeroth-server/ \ -DCMAKE_C_COMPILER=/usr/bin/clang \ -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ -DWITH_WARNINGS=1 \ -DTOOLS_BUILD=all \ -DSCRIPTS=static \ -DMODULES=static ``` 因为这里安装位置本就不在`root`目录下,所以需要修改为 ```shell cmake ../ -DCMAKE_INSTALL_PREFIX=/Azeroth/azeroth-server/ \ -DCMAKE_C_COMPILER=/usr/bin/clang \ -DCMAKE_CXX_COMPILER=/usr/bin/clang++ \ -DWITH_WARNINGS=1 \ -DTOOLS_BUILD=all \ -DSCRIPTS=static \ -DMODULES=static ``` 主要是修改了`DCMAKE_INSTALL_PREFIX`位置 查询可用CPU的数量 ``` nproc --all ``` 然后,替换4为你需要使用CPU数量以达到预期性能,键入: ``` make -j 4 make install ``` 开始编译,如果不出什么意外,我们设置篇见。记得在输`make install` 后保存一下输出 这个命令会返回一些重要的文件路径给你 <br> ### 服务器设置 编译完成后,您需要通过下载或解压缩来添加一些必要的文件 有些文件是可选的,但强烈推荐: | Directory | 要求 | | ----------------- | -------- | | dbc(客户端数据库) | **必须** | | maps(客户端地图) | **必须** | | vmaps(客户端) | 强力推荐 | | mmaps(客户端) | 强力推荐 | | cameras(客户端) | 推荐 | **怎么获取这些文件:** 1. 直接从Azeroth的Github仓库中获取预先收集的包 2. 从3.3.5a 客户端中提取它们 <br> #### 从Github下载 [完整数据V16](https://github.com/wowgaming/client-data/releases/) 1. 在名为Data的构建文件夹中创建一个新文件夹。博主的位置为`/Azeroth/azerothcore/RelWithDebInfo/Data` 内解压出来 2. 记住这个位置,下步需要将`DataDir`配置选项编辑到文件夹的位置 <br> #### 从客户端中提取 如果您下载了上面的文件,您可以跳过这一步 AzerothCore 需要从魔兽世界客户端提取某些文件。您需要从 3.3.5a 客户端中提取它们。 默认情况下,您将使用工具编译核心,您将获得以下可执行文件:`mapextractor`、`vmap4extractor`、`vmap4assembler`、`mmaps_generator`(`Windows` 上为 `.exe`) 你需要使用这些工具从客户端中提取。请直接参考Wiki 本文这里直接使用下载的方式 <br> #### 创建数据库以及用户 官方的这一步骤是在创建配置文件之后,但为配置文件更好整理修改。我们先创建数据库和用户 创建命令直接参考 [create_mysql.sql](https://github.com/azerothcore/azerothcore-wotlk/blob/master/data/sql/create/create_mysql.sql) 这个文件在本地文件 `/Azeroth/azerothcore/data/sql/create`也能找到 操作完成后,会得到一个账户密码均为`acore`的用户,你也可以自定义密码 对于的数据库为`acore_world`,`acore_characters`,`acore_auth` <br> #### 创建配置文件 配置文件位于编译好输出的文件夹中 `/Azeroth/azeroth-server/etc` 默认为`.dist`的副本,需要拷贝并重命名 ```shell cp authserver.conf.dist authserver.conf \ && cp worldserver.conf.dist worldserver.conf ``` `worldserver.conf`编辑内容 ``` ... LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth" WorldDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_world" CharacterDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_characters" ... DataDir = "/Azeroth/azerothcore/RelWithDebInfo/Data" #上一步Data位置 ... ``` `authserver.conf`编辑内容 ``` ... LoginDatabaseInfo = "127.0.0.1;3306;acore;acore;acore_auth" ... ``` 数据库遵循这样的结构: ``` Variablename = "MySQLIP;Port;Username;Password;database" ``` #### 填充数据库 自动数据库更新程序 默认情况下,启动`Worldserver` 和 `Authserver` 的时候将检查所有新文件并将其导入到您在配置中指定的数据库中。 这是确保您始终与核心保持同步的最简单且推荐的方法。 要编辑自动数据库更新程序,您将在`UPDATE SETTINGS`下的 `authserver.conf` 和 `worldserver.conf` 中找到必要的设置。 1. 启动授权服务器。 2. 启动世界服务器。 注意后台驻留,目前Linux还没准备对应的主流程序。所以以`screen`的方式先运行,以便排查问题 ``` screen -S authserver ``` 创建名为`authserber`的控制台 ``` /Azeroth/azeroth-server/bin/authserver ``` 运行授权服务器,看到首次运行导入了数据库 ``` screen -S worldserver ``` 创建名为`worldserver`的控制台 ``` /Azeroth/azeroth-server/bin/worldserver ``` 运行世界服务器,看到首次运行导入了数据库 数据库比较大 首次运行需要一定时间 直到 ``` AzerothCore rev. af88c2428b91 2023-02-11 17:06:58 +0000 (master branch) (Unix, RelWithDebInfo, Static) (worldserver-daemon) ready... Starting up Auction House Listing thread... Monthly quests reset for all characters. Calendar deletion of old events. Guild Daily Cap reset. AC> ``` 说明服务器开启成功 ## 运行准备 ### 公网访问设置 `Worldserver` 和 `Authserver` 配置 默认的本地主机 localhost (127.0.0.1) 的IP 设置都应该保留。 默认的 bindip (0.0.0.0) 也应该保持不变。 为 Internet 连接设置 `auth` 数据库 `realmlist` 这是您必须使用您的**互联网 IP 的地方**,以便来自互联网的客户端可以找到您的服务器。您必须从路由器/防火墙转发或打开端口 `3724 (authserver)` 和 `8085 (worldserver)`。 您需要确保您的`authserver`应用程序将传入连接定向到您的领域。 打开`acore_auth`数据库并找到`realmlist`表。您需要根据需要编辑地址字段: * LAN IP (192.168.xx) - 如果您在运行 WoW 的不同计算机上安装 AzerothCore,但所有涉及的计算机都在同一网络(路由器)上,请使用该计算机的局域网 IP。 * 127.0.0.1 - 也称为“本地主机”。如果您在运行 WoW 的同一台计算机上安装了 AzerothCore,并且只有您连接到它,请在此处和您的配置中保留此设置。 * 公共 IP 地址——如果您希望其他人连接到您的服务器,请使用您的外部 IP。访问http://www.whatismyip.com/查找您的外部 IP 地址。 * 如果您从家庭网络托管它,您可能需要设置正确的端口转发,这不在本指南的范围内。https://portforward.com有大多数路由器的指南,您的互联网服务提供商应该能够提供帮助。 * 完全限定的域名 -(mydomain.com 或 warcraft.mydomain.com)类似于外部 IP 地址,如果您希望其他人连接到您的服务器,则可以使用它,并且不需要跟踪潜在的动态 IP 的额外好处地址。 与公共 IP 地址类似,如果您从家庭网络托管,则需要设置端口转发。 ### 创建用户(GM/User) [Wiki](https://www.azerothcore.org/wiki/creating-accounts) | Level | Security Level | | ----- | ----------------- | | 0 | SEC_PLAYER | | 1 | SEC_MODERATOR | | 2 | SEC_GAMEMASTER | | 3 | SEC_ADMINISTRATOR | 创建一个管理员GM ``` account create benjamin 6BL2gXKqe22 3 -1 ``` 注意:(-1 代表所有领域) 最后修改:2024 年 01 月 18 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 78 如果觉得我的文章对你有用,请随意赞赏