Ставим под Linux популярные игровые сервера
Владимир «turbina» Ляшко (v.turbina@gmail.com)
Ролевая игра World of Warcraft и шутер Call of Duty завоевали миллионы поклонников во всем мире, но, к сожалению, чтобы поиграть на большинстве серверов, придется раскошелиться. Бесплатные сервера часто бывают перегружены или попросту недоступны из другого региона. Почему бы нам тогда не поднять свой игровой сервачок, где уже мы будем разделять и властвовать?
Содержание:
Целью проекта MaNGOS (Massive Network Game Object Server, ) является создание альтернативной реализации WoW сервера. В настоящее время доступны версии под Linux, FreeBSD и Windows. Лицензия не позволяет использовать мангос в коммерческих целях и устанавливать публичные серверы на его основе (хотя для многих это не помеха), но никто не запрещает нам настроить WoW сервер в своей домашней сети.
Существуют отдельные проекты по наполнению базы данных мангос и написанию скриптов для уникального поведения отдельных неуправляемых игроком персонажей. Кроме того, так как код MaNGOS является открытым, энтузиастами со всего мира предложено огромное количество патчей, устраняющих те или иные ошибки. Надо сказать, обилие всех этих наработок, порядок их установки и тонкости состыковки могут сбить с толку любого, поэтому статья сделана в виде пошагового руководства.
Чтобы построить сервер только из свободно распространяемых компонентов, установку будем производить в Ubuntu 8.04 LTS, хотя многое из сказанного будет актуально и для других Linux дистрибутивов. Первым делом инсталлируем пакеты, необходимые для получения git/SVN архивов и сборки приложений. Так как для хранения игрового мира используется MySQL (по умолчанию) или PostgreSQL, ставим соответствующие пакеты. Кроме этого, нужны заголовочные файлы OpenSSL и сервера БД.
$ sudo apt-get install libssl-dev mysql-server mysql-client \ libmysqlclient15-dev $ sudo apt-get install autoconf automake1.9 libtool build-essential \ subversion patch zlibc libc6 git git-core zlibc
Создаем рабочий каталог:
$ mkdir source; cd source
Теперь предстоит сделать первый выбор. Ссылки проекта ведут как минимум на две версии сервера. На момент написания этих строк в SVN (и git) была версия 0.13, которая поддерживает новую версию клиента 3.0.3 (build 9183) и старого 2.4.3. Стабильный релиз MaNGOS 0.12 поддерживает только 2.4.3 версию клиента. Будем работать с 0.13, хотя в установке особой разницы нет. Получаем исходный код:
$ svn co http://svn2.assembla.com/svn/mangos-svn-mirror/ .
Или через git:
$ git clone git://github.com/mangos/mangos.git
Теперь нам нужно скачать расширение , обеспечивающее работу скриптов, предназначенных для создания игровых объектов, персонажей и квестов:
$ mkdir mangos/src/bindings/ScriptDev2
Название каталога должно быть именно ScriptDev2, никаких scriptdev2 или Scriptdev2. Получаем копию:
$ cd mangos/src/bindings/ScriptDev2 $ svn co https://scriptdev2.svn.sourceforge.net/svnroot/scriptdev2/
Патчим:
$ git apply src/bindings/ScriptDev2/patches/\ MaNGOS-2008-12-22-ScriptDev2.patch
Или по старинке:
$ patch -p0 < src/bindings/ScriptDev2/patches/\ MaNGOS-r6765-ScriptDev2.patch
При получении файлов через git есть один каверзный момент. Если в каталоге src/bindings лежит файл .gitignore:
$ cat src/bindings/.gitignore ScriptDev2
Тогда эту строку нужно закомментировать, иначе ScriptDev2 собираться не будет. Чтобы обновить все файлы для компиляции, вводим:
$ cd ~/source/mangos $ autoreconf --install --force $ aclocal $ autoheader $ autoconf $ automake --add-missing $ automake src/bindings/ScriptDev2/Makefile
Если попытаться сконфигурировать в текущем каталоге, получим ошибку, поэтому:
$ mkdir objdir; cd objdir $ ./configure --enable-cli --enable-ra
Так мы подключили удаленное администрирование (--enable-ra) и командную консоль (--enable-cli). Чтобы не искать файлы по всем каталогам, можно использовать стандартные ключи '–-prefix', '--sysconfdir' и '--datadir'. Чтобы задействовать базу PostgreSQL, дополнительно укажи параметры "--with-mysql=no --with-postgresql=yes".
Сборка и установка стандартны:
$ make $ sudo make install
Чистим:
$ make clean $ cd .. $ rm -r objdir
Для создания баз и таблиц сервера используем заготовки, находящиеся в подкаталоге sql дистрибутива:
$ mysql -u root -p < sql/create_mysql.sql
В результате будет создана база mangos, администратором которой является пользователь mangos с паролем mangos:
$ cat sql/create_mysql.sql
…
GRANT USAGE ON *.* TO 'mangos'@'localhost' IDENTIFIED BY 'mangos' \
WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 \
MAX_UPDATES_PER_HOUR 0;
В рабочей системе желательно изменить пароль и ограничить доступ к MySQL только с локального узла (в Ubuntu и других дистрибутивах так сделано по умолчанию). Заполняем таблицы, создаем дополнительные базы:
$ mysql -u mangos -p mangos < sql/mangos.sql $ mysql -u mangos -p realmd < sql/realmd.sql $ mysql -u mangos -p characters < sql/characters.sql
И подтягиваем базу ScriptDev2:
$ mysql -u mangos -p scriptdev2 < src/bindings/ScriptDev2/sql/\ scriptdev2_structure.sql
На этом сам сервер к работе, в принципе, готов. Но подключаться к нему еще ой как рано.
Базы и таблицы созданы, но их еще нужно наполнить содержимым, то есть создать будущие поля сражений и заселить их монстрами. Вот здесь начинается самое интересное. Проектов, реализующих нужную нам функциональность, великое множество. Это , который можно назвать официальным, , , Silver DataBase (SDB, , ), немецкий , EDB и другие. Какой из них выбрать - сложный вопрос, единодушного мнения на этот счет нет и не будет. Посетить эти проекты рекомендую в любом случае, там найдешь полный список файлов, патчей, а также полуготовые сборки (100% работоспособности никто гарантировать не может, но все же это лучше, чем ничего).
Мне интересными показались первые два проекта. UDB можно назвать более стабильным (на нем и остановим свой выбор), а YTDB – более прогрессивным. Но наверняка найдутся и не согласные со мной, и они будут по-своему правы.
Получаем SVN копию UDB:
$ svn co https://unifieddb.svn.sourceforge.net/svnroot/ $ cd unifieddb
Нужный нам файл сжат архиватором RAR. В поставке Ubuntu его нет, поэтому:
$ sudo apt-get install unrar
Распаковываем архив и заполняем базу:
$ unrar e trunk/Full_DB/UDB_0.10.4_Core_6766_SD2_689.rar $ mysql -u mangos -p mangos < UDB_0.10.4_Core_6766_SD2_689.sql
Теперь обновляем базу до ревизии сервера, на момент написания этих строк в подкаталоге Updates было 7 файлов, но, поверь, это еще не предел. В некоторых советах предлагают собрать их в один файл и поставить командой «cat trunk/Updates/0.10.4_additions/* > updates.sql». Но лучше так не делать и накатывать каждое дополнение отдельно, так как в апдейтах меняется структура БД, и "одновременная" установка может вызвать ошибку. Кроме того, в updates может находиться обновление не только для базы mangos, но и для realmd, realmlist, characters. К какой из них относится конкретный файл, подскажет имя. Так файл обновления 5632_characters.sql соответствует 5632 версии базы characters.
Поэтому методично ставим обновления, ориентируясь на дату обновления, которая может использоваться в наименовании файла, или релиз. Текущий релиз сервера узнать просто:
$ svn info ~/mangos/ | grep 'Revision:' Revision: 205
При запуске сервера выдается чуть больше информации: "MaNGOS/0.13.0 (2008-12-30 02:00:26 Revision 6985 - 205)". В нашем случае используется база версии 6766 (определяем по имени UDB_0.10.4_Core_6766_SD2_689.sql). То есть ставим все апдейты позднее 30.12.2008 и версии 205/6985. Старшие обновления ставим первыми. Если при установке появилась ошибка, ничего страшного в этом нет, пропускаем этот файл.
Апгрейдим и таблицы для работы ScriptDev2. Здесь все просто:
$ mysql -u mangos -p mangos < src/bindings/ScriptDev2/sql/\ mangos_full_scripts.sql $ unrar e tags/EAI/EAI_0.0.4_323.rar $ mysql -u mangos -p scriptdev2 < EAI_0.0.4_323.sql
И, наконец, последний шаг: заносим в realmlist настройки нашего сервера (название и IP-адрес):
$ mysql -umangos -pmangos
mysql> use realmd;
Database changed
mysql> UPDATE `realmlist` SET `name` = 'My superpuper WoW server' , \
`address` = '192.168.1.158' WHERE `id` = '1';
Query OK, 1 row affected (0.01 sec)
Еще один необязательный, но весьма желательный с точки зрения безопасности шаг. Запрос:
mysql> SELECT * FROM `account` WHERE 1 LIMIT 1000;
Покажет наличие 4 учетных записей в таблице account базы realmd. Их лучше удалить и записать свою (например, admin/password):
mysql> DELETE FROM account;
mysql> INSERT INTO `account` (`username`,`sha_pass_hash`,`gmlevel`) \
VALUES ('admin',SHA1(CONCAT(UPPER(`admin`),':',UP PER(`password`))),'3');
mysql> quit;
Как вариант, для редактирования таблиц можно воспользоваться одним из интерфейсов к MySQL, вроде phpMyAdmin.
После установки у нас должно появиться три конфигурационных файла: mangosd.conf, realmd.conf и scriptdev2.conf, все они находятся в /usr/local/etc (если не использовалась директива '--sysconfdir'). В scriptdev2.conf настраивается только уровень журналирования, поэтому интерес для нас представляют первые два файла.
$ sudo nano /usr/local/etc/realmd.conf # Доступ к MySQL "hostname;port;username;password;database" # можно настроить подключение через сокет, такой режим работы # считается экспериментальным LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd" # Каталог и файл для журнала, а также PID файл LogFile = "Realmd.log" LogsDir = "/var/log" PidFile = "/var/run/realmd.pid" # Порт и адрес, на котором будут приниматься соединения RealmServerPort = 3724 BindIP = "0.0.0.0"
Настройки в mangosd.conf практически аналогичны:
$ sudo nano /usr/local/etc/mangosd.conf LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd" WorldDatabaseInfo = "127.0.0.1;3306;mangos;mangos;mangos" CharacterDatabaseInfo = "127.0.0.1;3306;mangos;mangos;characters" MaxPingTime = 30 WorldServerPort = 8085 BindIP = "0.0.0.0"
В каталоге mangos/contrib/extractor находится программа AD, применяемая для извлечения карт (две версии для Linux и Windows). Рекомендуется использовать виндовый вариант (AD.exe), он работает лучше. С одного из проектов поддержки (например, ) скачиваем архив с dbc файлами и распаковываем их в /usr/local/share/mangos/dbc.
$ cd /usr/local/share/mangos $ mkdir dbc; cd dbc $ sudo unrar e ~/dbc.rar
Копируем файлы с диска WOW в каталог с программой AD.exe, создаем подкаталог maps и запускаем распаковщик. По окончании процесса переносим заполненный каталог maps в /usr/local/share/mangos. Теперь аналогично извлекаем vmaps, копируем в корень архива WoW каталог vmap_extract_assembler_bin (из дистрибутива MaNGOS) и запускаем находящийся внутри батник makevmaps_SIMPLE.bat. В итоге получим подкаталог vmaps, который копируем на сервер в ту же папку, где и maps.
Теперь все готово к первому запуску мангоса:
$ sudo /usr/local/bin/mangos-realmd $ sudo /usr/local/bin/mangos-worldd
В процессе запуска на консоль будут выведены диагностические сообщения, следует просмотреть их на наличие ошибок. В последующем для автоматизации запуска можно написать скрипт, на указанных выше ресурсах есть готовые примеры. Да, и команды на боевом сервере нужно выполнять с повышенным приоритетом, добавив в начале "nice -n -20".
Для удобного управления сервером, аккаутами, базами и прочими компонентами существует довольно большое количество проектов. Поиск на Sourceforge выдаст не один десяток ссылок. Например, терминал , веб-интерфейсы . Очень популярен редактор квестов, мобов, объектов, предметов и всего прочего ). Сейчас активно развивается проект (MaNGOS Beta Server), благодаря ему установка сервера MaNGOS может заметно упроститься.
Установка сервера для игры в Call of Duty 4 несколько проще, здесь нет такого выбора, а значит, и путаницы, хотя немного потрудиться все-таки придется. Необходимые файлы можно скачать с одного из зеркал, ссылки на которые найдешь на странице , в ветке Download сайта или в форуме (ветка "Сервера под Linux"). Здесь ссылки на разные версии в вариантах для Windows и Linux, в обычной и Full комплектациях. Обычная версия содержит только скрипт и бинарник для индексирования диска, а вариант Full – дополнительно некоторые библиотеками и пару карт. Кроме этого, для установки своего сервера нам понадобится DVD-диск с игрой.
Создаем рабочий каталог:
$ mkdir cod4; cd cod4
В примере буду использовать обычный вариант сервера, взятый с icculus.org, качаем архив с одного из зеркал (размер чуть больше 3 Мб) и распаковываем:
$ ftp cod4-linux-server-11212007.tar.bz2 $ tar xjvf cod4-linux-server-11212007.tar.bz2
Получаем в текущем каталоге ряд файлов (cod4_lnxded, cod4_lnxded-bin, libgcc_s.so.1, libstdc++.so.6), которые при помощи "chmod +x" делаем исполняемыми.
Копируем файлы с игрового диска из каталога Setup/Data или из каталога с установленной игрой в cod4. Во втором случае получаем около 6.5 Гб файлов. Все они не нужны. Копируем только каталог main с файлами, имеющими расширение .iwd, каталоги video, Mods (переименовываем в mods), а также zone и файл localization.txt. Если есть под рукой файлы локализации, помещаем их в zone.
Все готово. Сначала устанавливаем и активируем античит систему PunkBuster.
$ ./pbsetup.run -e $ ./pbsetup.run --add-game=cod4 --add-game-path=/where/i/uploaded/cod4/ $ ./pbsetup.run -u
Кстати, файл pbsetup.run доступен не во всех версиях сервера, последний релиз можно скачать с сайта .
Самое время дать команду на старт:
$ sudo ./cod4_lnxded
Если есть файлы поддержки русского языка, добавляем в строку запуска "+set loc_language 6". Опционально указываем IP-адрес, порт, конфигурационные файлы и прочие параметры (кстати, активация Punkbuster может привести к тому, что зайти в игру нельзя (ботов она тоже убирает), если это так, просто не используем ее):
$ sudo ./cod4_lnxded +set dedicated 1 +set net_ip 192.168.1.158 \ +set net_port 28960 +exec server.cfg +map_rotate \ +set sv_punkbuster 1 +set loc_language 6
Параметр "+set dedicated 1" означает выделенный локальный сервер, "+map_rotate" - запуск непрерывной смены карт. Хотя удобнее все настройки поместить в конфиг и положить в подкаталог main. Команды netstat/sockstat должны показать активные порты:
$ sockstat | grep cod4 root cod4_lnxde 63855 24 udp4 192.168.1.158:28960 *:*
На самом деле во время игры открытых сервером портов будет больше (20500, 29900, 20510 и 28960), не забываем прописать их в разрешающие правила файервола.
INFO
- Поиск на выдаст большой список субпроектов для MaNGOS и COD.
- Об установке сервера Counter Strike под Linux читай в Хакер Спец #051.
WWW
-
Сайты проектов, связанных с MaNGOS:
-
Сайты проектов, связанных с COD:
Статья опубликована в мартовском номере журнала "Xakep" за 2009 год.
Leave a Reply





