Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Документация (https://forum.zone-game.info/forumdisplay.php?f=149)
-   -   Руководство по поднятию сервера AiON на Linux платформе (https://forum.zone-game.info/showthread.php?t=12447)

sotariz 07.02.2011 12:10

Руководство по поднятию сервера AiON на Linux платформе
 
Хочу предложить Вам гайд по поднятию, настройке и дальнейшем обновлении сервера AiON на Linux платформе.
Если четко придерживаться руководства, по окончанию его выполнения получите рабочий сервер команды Aion X Emu
Примечание:
1. Все действия буду описывать основываясь на собственном опыте на Mandriva Linux, в связи с этим некоторые команды могут отличаться от других Linux дистрибутивов.
2. В руководстве указываю создание отдельного раздела для сервера AiON (при установке Linux), но это не означает что вы не можете использовать это руководство не переустанавливая свою систему. Достаточно будет создать директорию для сервера ипропустить совет относящийся к созданию раздела.


1. Начнем.
Как и сказанно выше, Вам необходимо создать отдельный раздел для Вашего будущего сервера. У меня этот раздел имеет 9Гб пространства и нехватки свободного места я не ощущаю (храня на этом разделе и искодники и сами сервера) что вообщем-то и не мудренно. В дальнейшем описании я буду считать точкой монтирования /aion.
-- Файловую систему для этого раздела советую выбрать ReiserFS т.к. она позволяет обеспечить высокую производительность при работе с мелкими файлами. Прочитать о данной файловой системе можете к примеру на wikipedia
Из опыта: сравнивал видимую скорость работы на Ext4 и ReiserFS, последняя ощущается процентов на 40 быстрее.


2. Установка пакетов нужных для дальнейшей работы
-- для начала, по классике всех прочитаных мной руководств, обновим ситему если она того желает:
Примечание: выполните в терминале команду "su -" и введите пароль пользователя root или добавляйте перед следующими командами sudo
Код:

yum update
yum upgrade

-- теперь приступим к установке пакетов
Код:

urpmi subversion ant unzip mysql openJDK
Примечание: Если предварительно вы подключите дополнительные источники обновлений, то сможете скачать с них более полноценную версию java нежели openJDK

3. Создадим отдельного пользователя Linux
Делают это что бы обезопасится от взлома рута и получения полного контроля над Linux
Код:

adduser aion
passwd aion

Введите пароль для созданого пользователя.
Войдите этим пользователем в систему
-- если вы находитесь в системе от имени root при помощи "su -", то сначала выйдите рутом(exit) и потом войдите пользователем aion
login aion

4. Приступаем к скачиванию исходников
Перейдем в наш раздел для сервера
Код:

cd /aion
Выполним следующую команду
Код:

sudo svn co https://subversion.assembla.com/svn/AIONXEMU/
-- дождавшись окончания выполним команду
Код:

ls
и Вы должны будете увидеть
Код:

[root@mandriva aion]# ls
AIONXEMU/
[root@mandriva aion]#

Сейчас путь к исходникам выглядит так:
Код:

/aion/AIONXEMU/trunk/Commons(ChatServer | LoginServer | GameServer)
Для собственного удобства дальше я делал следущее
Код:

mv AIONXEMU/trunk aionxemu
rm -rf AIONXEMU/

и теперь путь выгладит так
Код:

/aion/aionxemu/Commons(ChatServer | LoginServer | GameServer)
т.е. я избавился от верхнего регистра в пути и одного лишнего перехода

5. Компилирование серверов
Переходим в папку Commons и компилируем ее первой, т.к. разработчики советуют это делать
Код:

cd /aion/aionxemu/Commons
ant

Компилируем loginserver
Код:

cd ../LoginServer
ant

Компилируем gameserver
Код:

cd ../GameServer
ant

Компилируем chatserver
Код:

cd ../ChatServer
ant

6. Устанавливаем сервер
Для начала нам необходимо создать директорию где будут лежать наши сервера
Код:

mkdir /aion/server
далее распакуем скомпилированые сервера
Код:

unzip /aion/aionxemu/LoginServer/build/ax_login.zip -d /aion/server
unzip /aion/aionxemu/GameServer/build/ax_gameserver.zip -d /aion/server
unzip /aion/aionxemu/ChatServer/build/ax_chat.zip -d /aion/server

7. Установка баз данных серверов
Вариант 1. PhpMyAdmin
Для простоты работы с БД предлагаю установить PhpMyAdmin, требуется наличие установленных иксов
Код:

urpmi phpmyadmin
Далее заходим в веб-интерфейс phpmyadmin и создаем две базы данных и импортируем данные из прилагающихся sql файлов
создадим пользователя БД aion и настроим ему права доступа к нашим базам.
Вариант 2. Вручную через терминал.
Создание БД и пользователя вручную
Войти в MySQL пользователем root
Код:

mysql -u root -p
для создания БД выполните следующие команды
Код:

MySQL> CREATE DATABASE ac_server_ls;
MySQL> CREATE DATABASE ac_server_gs;

Теперь мы должны создать поьзователя БД для вашего сервера
Код:

mysql> USE mysql
mysql> CREATE USER 'server'@'localhost' IDENTIFIED BY 'yourpassword';
Теперь мы предоставляем ему полный доступ к двум созданым БД
mysql> GRANT ALL PRIVILEGES ON ac_server_ls.* TO 'server'@'localhost';
mysql> GRANT ALL PRIVILEGES ON ac_server_gs.* TO 'server'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> \q

Примечание: доступ к БД этим пользователем мы сможем получить только с локальной машины, если вы захотите работать с БД удаленно советую создать отдельного пользователя, к примеру admin, по тому же принципу mysql> CREATE USER 'server'@'%' IDENTIFIED BY 'yourpassword'; обратите внимание что вместо localhost указан %, это означает что пользователь сможет работать с БД с любого компьютера, как локального так и удаленного. Для этого пользователя советую провести более детальную настройку прав доступа
входим нашим пользователем
Код:

mysql -u aion -p
mysql> USE ac_server_ls;
mysql> SOURCE /aion/server/loginserver/sql/aionx_ls.sql;
mysql> USE ac_server_gs;
mysql> SOURCE /aion/server/gameserver/sql/aionx_gs.sql;
mysql> SOURCE /aion/server/gameserver/sql/drops/droplist.sql;
mysql> \q

Вариант 3. Вручную 2
Импортировать базы вручную
LoginServer БД
Код:

cd /aion/server/loginserver/sql
mysql -u root -p -h localhost ac_server_ls < aionx_ls.sql

GameServer БД
Код:

cd /aion/server/gameserver/sql
mysql -u root -p -h localhost ac_server_gs < aionx_gs.sql

Импорт дроплиста в базу GameServer
Код:

cd /aion/server/gameserver/sql/drops
mysql -u root -p -h localhost ac_server_gs < droplist.sql

8. Настройка/Конфигурация серверов
Теперь вы должны отредактировать конфиги ваших серверов
Конфиг loginserver
Код:

cd /aion/server/loginserver/config/network
Тут находится файл database.properties измените его следующим образом
Код:

# This is database url
database.url = jdbc:mysql://localhost:3306/ac_server_ls
# Database user
# Default: root (not safe)
database.user = aion
# Database password
# Default: no password (not safe)
database.password = "yourpassword"

Конфиг gameserver
Код:

cd /aion/server/gameserver/config/
Здесь нужно изменить default.config и ipconfig.xml
default.config:
Код:

# ===================================
#            DATABASE
# ===================================
# This is database url
database.url = jdbc:mysql://localhost:3306/ac_server_gs?useUnicode=true&charact$
# Database user
# Default: root (not safe)
database.user = aion
# Database password
# Default: no password (not safe)
database.password = your_password
...........................................
# ===================================
#              NETWORK
# ===================================
# GameServer ID
gameserver.network.login.gsid = 1
# GameServer bind IP address (* for all available IP)
gameserver.network.client.host = *
# GameServer bind TCP port
gameserver.network.client.port = 7777
# RDC (Remote Data Call) bind IP address
gameserver.network.rdc.client.host = *
# RDC bind TCP port
gameserver.network.rdc.client.port = 732
# Online players limit
gameserver.network.client.maxplayers = 1000
# Required access level to enter gameserver
# If set to bigger than 0 only GM's are able to connect
# and normal players can't see server on serverlist
# Default = 0
gameserver.network.client.requiredlevel = 0
# LoginServer location
gameserver.network.login.address = localhost:9014
# LoginServer password for this GameServer
gameserver.network.login.password = PASSWORD

в ipconfig.xml найти строку и изменить ее - YOUR_EXTERNAL_IP_THERE на ваш внешний IP или домен
Код:

<ipconfig default="YOUR_EXTERNAL_IP_THERE">
в NETWORK вам не нужно ничего менять, но вы должны установить идентификатор GameServer (gameserver.network.login.gsid = 1) и пароль gameserver, который будет использоваться для аутентификации LoginServer'ом (network.login.password = пароль).
Если вы хотите изменить имя GameServer, установите другой идентификатор (не вы не можете использовать пользовательское имя сервера, вы должны выбрать одно из предоставленых имен)
Теперь вы должны добавить идентификатор GameServer и пароль в БД LoginServer, измените 127.0.0.1 на ваш реальный IP или используйте * для разрешения соединения с любого IP:
Код:

mysql -u server -p
mysql> USE ac_server_ls;
mysql> INSERT INTO `gameservers` (`id`, `mask`, `password`) VALUES (1, '127.0.0.1', 'password');
mysql> \q

Или через Navicat откройте БД логинсервера, зайдите в таблицу gameservers и добавьте эту запись вручную

9. Запуск Login и Game серверов + использование screen
Вариант1.
стандартный метод запуска Login и Game сервера
Запуск LoginServer
сделать скрипты исполняемыми
Код:

cd /aion/server/loginserver/
chmod +x StartLS.sh
chmod +x StartLS_loop.sh

после запустить сервер
Код:

./StartLS_loop.sh
запуск GameServer
сделать скрипты исполняемыми
Код:

cd /aion/server/gameserver/
chmod +x StartGS.sh
chmod +x StartGS_loop.sh

запустить сервер
Код:

./StartGS_loop.sh
Вариант2.
Запуск серверов с использованием screen
Войдите в консоли от имени пользователя root и установите пакет screen
Код:

urpmi screen
Теперь нам надо создать два новых файла в каталогах LS и GS
Первый скрипт для loginserver:
Код:

cd /aion/server/loginserver/
nano login.sh

и скопируйте туда следующее
Код:

java -Xms8m -Xmx32m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-login-1.0.1.jar loginserver.LoginServer
и второй:
Код:

nano startLogin
скопируйте в него это:
Код:

screen -A -m -d -S aion_loginserver_ID1 ./login.sh
Теперь мы должны сделать их исполняемыми
Код:

chmod +x login.sh
chmod +x startLogin

Первый скрипт для gameserver:
Код:

cd /aion/server/gameserver/
nano game.sh

копируем в него:
Код:

java -server -Xms128m -Xmx1536m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-game-1.0.1.jar gameserver.GameServer
и второй:
Код:

nano startGame
копируем в него это:
Код:

screen -A -m -d -S aion_gameserver_ID1 ./game.sh
Делаем скрипты исполняемыми
Код:

chmod +x game.sh
chmod +x startGame

Вариант3, автозагрузка, автообновление, автообновление по расписанию.
Создадим два скрипта - скрипт автозапуска серверов и скрипт автообновления, который будет сразу много всего (остановка_работающих_серверов(демон) + обновление_исходников + компилирование_серверов + сохранение_конфигов_"живых"_серверов + установка_обновленых_серверов + конфигурирование_новых_серверов + запуск_серверов(демон))
Скрипт1, автозапуск серверов(автозагрузка):
Создадим файл aion в папке /etc/init.d
Код:

nano /etc/init.d/aion
со следующим содержимым:
Код:

#!/bin/sh
#
# description: Start/stop Aion server
#

RUNPATH="/aion/server"
GAMEEXEC="java -server -Xms128m -Xmx1536m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-game-1.0.1.jar gameserver.GameServer"
LOGINEXEC="java -Xms8m -Xmx32m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-login-1.0.1.jar loginserver.LoginServer"

GAME_PID=$(ps ux | awk '/ae_gameserver/ && !/awk/ {print $2}')
LOGIN_PID=$(ps ux | awk '/ae_login/ && !/awk/ {print $2}')

start() {
        if [ -z "$LOGIN_PID" ]; then
                echo -n "Starting Aion X Emu Login Server..."
                cd $RUNPATH/loginserver
                screen -A -m -d -S aion.login $LOGINEXEC
                echo "OK"
        else
                echo "Aion Login Server is already started..."
        fi

        if [ -z "$GAME_PID" ]; then
                echo -n "Starting Aion X Emu Game Server..."
                cd $RUNPATH/gameserver
                screen -A -m -d -S aion.game $GAMEEXEC
                echo "OK"
        else
                echo "Aion Game Server is already started..."
        fi

        return 0
}

stop() {
        echo -n "Stoping Aion Services..."

        if [ ! -z "$LOGIN_PID" ]; then
                kill $LOGIN_PID
        fi

        if [ ! -z "$GAME_PID" ]; then
                kill $GAME_PID
        fi

        sleep 30

        echo "OK"

        return 0
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        *)
                echo $"Usage: $0 (start|stop)"
                exit 1
esac

exit $?

Сделаем его исполняемым и поставим в автозагрузку:
Код:

chmod +x /etc/init.d/aion
ln -s /etc/init.d/aion /etc/rc6.d/S99aion

Скрипт2, автообновление:
Код:

nano /aion/aion-update
с таким содержимым:
Код:

#!/bin/sh
#останавливаем демон aion
/etc/init.d/aion stop
#обновляем исходники
cd /aion/aionxemu
svn up
#компилируем сервера
cd trunk/Commons
ant
cd ../LoginServer
ant
cd ../GameServer
ant
cd ../ChatServer
ant
#создадим папки для резервного копирования (после первого запуска этот блок можно удалить/закоментировать)
mkdir /aion/server/config
mkdir /aion/server/config/loginserver
mkdir /aion/server/config/gameserver
mkdir /aion/server/config/chatserver
#удаляем резервные копии конфигов
rm -rf /aion/server/config/loginserver/config
rm -rf /aion/server/config/gameserver/config
rm -rf /aion/server/config/chatserver/config
#создаем бекап "живых" конфигов
cp -r /aion/server/loginserver/config /aion/server/config/loginserver/
cp -r /aion/server/gameserver/config /aion/server/config/gameserver/
cp -r /aion/server/chatserver/config /aion/server/config/chatserver/
#удаляем сервера
rm -rf /aion/server/loginserver
rm -rf /aion/server/gameserver
rm -rf /aion/server/chatserver
#устанавливаем скомпилированые сервера
unzip /aion/aionxemu/trunk/LoginServer/build/ax_login.zip -d /aion/server/
unzip /aion/aionxemu/trunk/GameServer/build/ax_gameserver.zip -d /aion/server/
unzip /aion/aionxemu/trunk/ChatServer/build/ax_chat.zip -d /aion/server/
#удаляем предустановленные конфиги
rm -rf /aion/server/loginserver/config
rm -rf /aion/server/gameserver/config
rm -rf /aion/server/chatserver/config
#конфигурируем сервера (возвращаем "живые" конфиги)
cp -r /aion/server/config/loginserver/config /aion/server/loginserver
cp -r /aion/server/config/gameserver/config /aion/server/gameserver
cp -r /aion/server/config/chatserver/config /aion/server/chatserver
#создаем папки для логов
mkdir /aion/server/loginserver/log
mkdir /aion/server/gameserver/log
#запускаем демон aion
/etc/init.d/aion start

Сделаем его исполняемым
Код:

chmod +x /aion/aion-update
и поставим в крон для циклического выполнения
Код:

crontab -u root -e
после открытия crontab, вставляем вот эту строчку:
Код:

* 5 * * * /aion/aion-update
10. Перезагрузка
Для верности всех наших махинаций перезагрузим машину.
Код:

reboot
после загрузки системы, входим и выполняем команду (если использовали автозагрузку)
если зашли root'ом
Код:

screen -r
если закшли обычным пользователем
Код:

sudo screen -r
если увидим строки с примерно таким содержанием:
Код:

12111.aion.login................
12090.aion.game.................

То это будет означать что автозагрузка работает.

На этой ноте соизволю откланяться. Если будут замечания/пожелания (желательна конкретика), буду рад принять к сведению, проверить и если это действенно добавить в это руководство.

За основу руководства взяты статьи:
Описание по поднятию быстрого сервера Aion на linux платформе
How To Install Aion X Emu on Linux

При копировании на другие ресурсы просьба указывать авторство и "статьи вдохновители"

ALeKsIuS 07.02.2011 12:25

Re: Руководство по поднятию сервера AiON на Linux платформе
 
Молодец! Пожалуй закреплю.

TieLay 18.02.2011 21:17

Re: Руководство по поднятию сервера AiON на Linux платформе
 
Есть только тонкость - не указано как разрешить MySQL слушать обращение из вне.
И так вот дополнение:

Открытие доступа к серверу MySQL удалённым клиентам

Обычно MySQL сервер не прослушивает TCP порт 3306. Для допуска (сторонних) TCP подключений, закомментируйте следующую строчку в файле /etc/mysql/my.cnf:
Цитата:

skip-networking
так же не забудьте добавить в /etc/hosts.allow следующие строки:
Цитата:

mysqld: ALL : ALLOW
mysqld-max: ALL : ALLOW
После чего необходимо презапустить mysqld

ruso 23.02.2011 00:03

Re: Руководство по поднятию сервера AiON на Linux платформе
 
Не работает автозапуск.
Интересует участок кода:
RUNPATH="/aion/server"
GAMEEXEC="java -server -Xms128m -Xmx1536m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-game-1.0.1.jar gameserver.GameServer"
LOGINEXEC="java -Xms8m -Xmx32m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-login-1.0.1.jar loginserver.LoginServer"

GAME_PID=$(ps ux | awk '/ae_gameserver/ && !/awk/ {print $2}')
LOGIN_PID=$(ps ux | awk '/ae_login/ && !/awk/ {print $2}')

Файлы у меня на логин серваке:
ls
ax-login-1.0.1.jar libs login.sh startLogin.bat
config log sql startLogin.sh
data login_loop.sh startLogin

Как править код если у меня вот такие вот файлики?
Не догоняю помогите....

sotariz 23.02.2011 01:48

Re: Руководство по поднятию сервера AiON на Linux платформе
 
тут не к файлам привязка
берешь *_loop.sh из него код вставляешь в соответственные значения (код "java .....")
в PIDах вместо ае_тра-та-та пишем имена jarов которые имеем (ax-login, ax-gameserver если не ошибаюсь, щаз сверять харит) без расширений и усе собсна

ruso 23.02.2011 09:13

Re: Руководство по поднятию сервера AiON на Linux платформе
 
GAMEEXEC= вставил из game_loop.sh
LOGINEXEC=вставил из login_loop.sh
а пиды:
GAME_PID=$(ps ux | awk '/ax-gameserver/ && !/awk/ {print $2}')
LOGIN_PID=$(ps ux | awk '/ax-login/ && !/awk/ {print $2}')
стали вместо ae и как бы нема - автозагрузки нет...
смотрю по screen -r

sotariz 23.02.2011 20:25

Re: Руководство по поднятию сервера AiON на Linux платформе
 
а в автозагрузку ты этот файл ставил-то? ))

ruso 23.02.2011 21:49

Re: Руководство по поднятию сервера AiON на Linux платформе
 
да ставил - в инит д
cd /etc/rc6.d/
ls
README S20sendsigs S31umountnfs.sh S40umountfs S90reboot
S15wpa-ifupdown S30urandom S35networking S60umountroot S99aion

мож логи какие есть? по этому делу?

sotariz 23.02.2011 22:07

Re: Руководство по поднятию сервера AiON на Linux платформе
 
ну во-первых:
Код:

ln -s /etc/init.d/aion /etc/rc6.d/S99aion
это для мандривы годиться, но не факт что для убунты проканает. для 9 убунты это выглядит так
Цитата:

сделаем его исполняемым и поставим в автозагрузку

sudo chmod +x /etc/init.d/aion
sudo update-rc.d aion defaults 99

ruso 24.02.2011 19:42

Re: Руководство по поднятию сервера AiON на Linux платформе
 
Запустилось после:
1. Поменял название скрипта с aion на aion.sh
2. sudo update-rc.d aion.sh defaults 95

--------
Теперь другая проблема (мож скрипт не для убунты)
делаю
./aion.sh stop
пишет
Stoping Aion Services...OK
смотрю
screen -r
761.aion.game (24.02.2011 21:08:48) (Detached)
759.aion.login (24.02.2011 21:08:48) (Detached)
То есть реально не стопит (в клиенте никаких мессаг)
делаю
./aion.sh start
смотрю
There are several suitable screens on:
1289.aion.game (24.02.2011 21:56:16) (Detached)
1287.aion.login (24.02.2011 21:56:16) (Detached)
761.aion.game (24.02.2011 21:08:48) (Detached)
759.aion.login (24.02.2011 21:08:48) (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them
То есть проверки на "активность серваков" нет

PS: Просто команда aion stop, как описано в скрипте aion-update выдает
No command 'aion' found, did you mean:
Command 'ion' from package 'ion3' (multiverse)
aion: command not found


Текущее время: 05:19. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot