Главная » Статьи » LineAge2 » Сервер

Установка LineAge2 Java cервера на FreeBSD

Предупреждение!
Для установки и настройки понадобится интернет и приличное количество трафика! Если для вас это создает проблему - не стоит использовать данную статью! Так же неплохо иметь достаточно мощную машинку с объемом оперативной памяти 3-4 Гб для нормальной работы геодаты.

Нам понадобятся:

1. FreeBSD 6.2 (можно и любую другую, но всё ж таки 6.2 поновее)))
2. MySQL 5.x (ну а куда же без СУБД?))
3. Sun Java 1.5 (сервер линейки без явы никуда)
4. Javavmwrapper (это всё к предыдущему пункту)
4. Screen (утилитка для запуска приложений в виртуальной консоли)
5. Subversion (для обновления исходников через SVN)

Многие пакеты не указаны, т.к. они подтянутся автоматически при сборке нужных приложений.

Так же не обязательные, но рекомендуемые приложения:

1. Midnight Commander (многие вещи удобнее делать с помощью файлового менеджера)
2. Apache 1.3 + SSL (вебсервер с возможностью доступа по защищенному протоколу SSL, дабы вы могли запустить сайт для своего сервера, а SSL - ежли вдруг решите на сайте организовать админку, никчему по незащищенному протоколу админить)))
3. PHP 4 (ну а куда без ПХП на сайте в наше-то время?))
4. PHP-extensions (расширение возможностей ПХП)
5. Pure-ftpd (если будете выкладывать какие-либо файлы для скачивания - лучше это делать с нормальным ftp-сервером, а не отдавать их через веб)

Так же неплохо при установке FreeBSD поставить X-server (Xorg), т.к. при сборке той же библиотеки GD для PHP (средство построения графики, может понадобиться для рисования, к примеру, графиков посещения на вашем сайте) она за собою потащит иксы.

И так, приступим.

1. Ставим FreeBSD c инсталляционного диска в минимальной конфигурации, ставим поддержку эмуляции Linux, доставляем, при необходимости, Xorg (более подробную информацию читайте в официальных руководствах на www.freebsd.org)
Открываем fstab:
Код:

# ee /etc/fstab

И дописываем в конец файла такую строку:
Код:

linprocfs /compat/linux/proc linprocfs rw 0 0

(Уже точно не помню какие линукс-приложения не работали в эмуляторе без подключеного linprocfs, вполне вероятно ява и заработает, но раз не помню точно - лучше прописать))))

2. Повышаем безопасность системы:

Открываем sysctl.conf
Код:

server# ee /etc/sysctl.conf

И вносим туда следующие строки:
Код:

net.inet.ip.random_id
net.inet.icmp.icmplim=10
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
net.inet.ip.fw.one_pass=0
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0

Далее поменяем хеширование паролей md5, которое стоит по умолчанию, на более стойкое к взломам blowfish.
Для начала нужно отредактировать /etc/login.conf, в котором описываются классы пользователей, заменив:
Код:

:passwd_format=md5:

на
Код:

:passwd_format=blf:

Теперь можно создать базу:
Код:

#cap_mkdb /etc/login.conf

Для того чтобы пароли пользователей теперь хешировались с помощью blowfish, нужно отредактировать /etc/auth.conf, заменив:
Код:

crypt_default=md5

на
Код:

crypt_default=blf

После этого в /etc/master.passwd пароли всех новых пользователей будут начинаться с $2, что указывает системе на использование хэшей по алгоритму blf. Для перевода всех уже созданых пользователей на blowfish требуется только поменять им пароль с помощью команды 'passwd имя_пользователя'.

3. Обновление исходников системы и сборку новых ядра-мира я намеренно рассматривать не буду, т.к. это тема отдельной статьи, кому интересно обновить систему, так сказать, "по полной" - найдет себе эту информацию у разработчиков или на соответствующих сайтах.
Так что продолжим мы с обновления коллекции портов, для чего воспользуемся программой portsnap, которая с 6-й ветки FreeBSD является частью системы.
При первом запуске:
Код:

# portsnap fetch
# portsnap extract
# portsnap update

При последующих запусках:
Код:

# portsnap fetch
# portsnap update

4. Ставим и настраиваем MySQL 5.x
Код:

# cd /usr/ports/databases/mysql50-server
# make install clean

Если всё нормально прошло - MySQL у вас установлен. Для его запуска внесите в файл /etc/rc.conf строчку
Код:

mysql_enable="YES"

и запустите его:
Код:

# ./usr/local/etc/rc.d/mysql-server.sh start

После чего для начала стоит установить пароль в MySQL на супер-пользователя root:
Код:

# mysqladmin -u root -password new_password

Теперь логинимся в MySQL:
Код:

# mysql -u root -p

И создаем базу данных для сервера линейки, а так же пользователя, из под которого сервер коннектиться к БД.
Код:

mysql> create database l2jdb;
mysql> GRANT ALL PRIVILEGES ON l2jdb.* TO 'имя_юзера'@'localhost' IDENTIFIED BY 'пароль_юзера';

На всякий случай сменим шифрование пароля юзера мускуля на старое (снимает проблемы с использованием некоторых PHP-скриптов и утилит, работает или нет сам сервер с новым шифрованием - не помню, возможно что тоже не работает):
Код:

# mysql -u root -p
mysql> set password for 'имя_юзера'@'localhost'=old_password('пароль_юзера');

5. Ставим Javavmwrapper.
Установка - стандартная, из портов:
Код:

# cd /usr/ports/java/javavmwrapper
# make install clean

6. Ставим Java.
Можно конечно поставить яву из портов, но сборка пакета займет ОЧЕНЬ много времени, и если вам не хочется забивать себе голову компиляцией этого пакета с выкачиванием в ручную всех зависимостей с sun.com, можно установить яву с уже скомпилированного пакаджа.
Для этого качаем с сайта http://www.freebsdfoundation.org/downloads/java.shtml пакеты Diablo JDK и Diablo JRE под свою систему, ложим их, к примеру, в темповый каталог (/tmp) и устанавливаем с помощью утилиты pkg_add:
Код:

# cd /tmp
# pkg_add diablo-jdk-freebsd5.i386.1.5.0.07.01.tbz
# pkg_add diablo-jre-freebsd5.i386.1.5.0.07.01.tbz

Всё, ява установлена.

7. Ставим Screen.
Ну здесь так же стандартная установка из портов:
Код:

# cd /usr/ports/sysutils/screen
# make install clean

8. Ставим Subversion.
И вновь стандартная установка из портов:
Код:

# cd /usr/ports/devel/subversion
# make install clean

9. Ставим Apache + SSL
Опять идем в порты:
Код:

# cd /usr/ports/www/apache13-modssl
# make
# make certificate (генерируем ключики SSL)
# make install clean

Вписываем строчку в /etc/rc.conf: 'apache_enable="YES"'.

10. Ставим PHP и php-extensions.
И сновь всё из портов:
Код:

# cd /usr/ports/lang/php4
# make install clean
# cd /usr/ports/lang/php4-extensions
# make install clean

При установке extensions стоит проверить выбор компонентов FTP, GD, MYSQL, SOCKETS, ZIP, все остальные можно оставить по умолчанию.

На этом установка основных (и не очень)) приложений завершена, можно приступать к настройке сервера Lineage.
Ставить сервер и иже с ним будем в /usr/games (вы можете выбрать любой другой каталог, разницы особо нет))).

12. Закачиваем последнюю ревизию с SVN (если с SVN какие-либо проблемы или вы просто им не пользуетесь можете смело пропускать этот пункт):
Код:

# mkdir /usr/games/SVN
# svn co http://tools.assembla.com/svn/rusteamc5 /usr/games/SVN

13. Готовим сборку к запуску.
Для удобства рекомендую всё же поставить Midnight Commander, т.к. заниматься копированием/редактированием большого количества файлов из командной строки не очень удобно. Поставить его можно из пакаджей:
Код:

# pkg_add -r mc

либо из портов:
Код:

# cd /usr/ports/misc/mc
# make install clean

Запускается он командой mc.
13.1. И так, далее - создаем каталог /usr/games/l2j и копируем в него каталоги из SVN/Server с названиями gameserver и login.
13.2. Копируем в gameserver каталоги из SVN/Datapack с названиями config и data.
13.3. Копируем в gameserver/data каталоги из SVN/Geodata с названиями geodata и pathnode.
13.4. В каталогах geodata и pathnode лежат архивы с данными геодаты и патчами, их конечно же нужно распаковать, для чего стоит поставить RAR:
Код:

# cd /usr/ports/archivers/rar
# make install clean

Распаковать файлы можно либо стандартными командами rar'а из командной строки, либо входя в архив прямо из Midnight Commander'a (при установленом rar'е он позволяет это делать). Архивы после распаковки можно удалить, если что - они всегда есть в каталоге SVN.
13.5. Настройки для сервера делаются так же как и на любой другой системе - правятся файлы конфигурации, лежащие в каталогах config игрового (gameserver) и логинсервера (login), не забудьте изменить в них имя и пароль пользователя для подключения к БД.

14. Создаем таблицы в базе данных.
Для создания таблиц можно создать для себя файлик по типу и подобию SVN/Datapack/tools/database_installer.bat либо изменив его под себя по типу:
Код:

#!/bin/sh
mysql -u имя_пользователя --password=пароль_пользователя -D l2jdb < ../sql/account_data.sql
mysql -u имя_пользователя --password=пароль_пользователя -D l2jdb < ../sql/armor.sql
mysql -u имя_пользователя --password=пароль_пользователя -D l2jdb < ../sql/armorsets.sql
mysql -u имя_пользователя --password=пароль_пользователя -D l2jdb < ../sql/auction.sql
mysql -u имя_пользователя --password=пароль_пользователя -D l2jdb < ../sql/auction_bid.sql
.... и так далее

и, присвоив ему права на выполнение (chmod 755 имя_файла), запустить его.
Либо можно все запросы на создание и наполнение таблиц выполнить вручную с помощью команды:
Код:

# mysql -u имя_пользователя -pпароль_пользователя l2jdb < имя_файла.sql

Сначала ставятся все файлы из каталога sql, потом из каталога sql/RT, при надобности ставятся расширения из sql/Addon (не забудьте при их установке установить и настроить сами аддоны из каталога ../optional), и последними ставятся апдейты БД из sql/updates.

15. Первый запуск
При первом запуске стоит поставить в login/config/loginserver.properties переменную AcceptNewGameServer=True, что бы ваш гейм-сервер мог без проблем зарегистрироваться на логин-сервере. После первого удачного запуска ее рекомендуется отключить (false). А так же не забыть включить в конфиге гейм-сервера геодату (по умолчанию она отключена).
Создаем в каталоге логин-сервера скрипт для его запуска с названием l2ls.sh и следующим текстом:
Код:

#!/bin/sh
while true; do
nice -n -20 /usr/local/bin/java -Xms1024m -Xmx1024m -cp javolution.jar:c3p0-0.9.1.2.jar:mysql-connector-java-5.0.6-bin.jar:l2jserver.jar net.sf.l2j.loginserver.LoginServer
sleep 10
done

Присваиваем ему права на выполнение:
Код:

chmod 755 l2ls.sh

В каталоге гейм-сервера создаем скрипт для запуска с названием l2gs.sh и таким текстом:
Код:

#!/bin/sh
while true; do
nice -n -20 /usr/local/bin/java -Xms1024m -Xmx1024m -cp bsf.jar:bsh-2.0b4.jar:commons-logging-1.1.jar:javolution.jar:jython.jar:c3p0-0.9.1.2.jar:mysql-connector-java-5.0.6-bin.jar:l2jserver.jar net.sf.l2j.gameserver.GameServer
sleep 10
done

Так же присваиваем ему права на выполнение:
Код:

chmod 755 l2gs.sh

Теперь можно попробовать в разных консолях запустить l2ls.sh и l2gs.sh (кто не знает - переключение между консолями на локальной машине - ctrl+F1,F2,F3 и тд))).
Если всё нормально, логин-сервер запустился, гейм-сервер запустился и приконнектился к логин-серверу, то продолжаем...

16. Запуск сервера в фоновом режиме.
Для запуска логин и гейм серверов в фоновом режиме будем использовать виртуальную консоль через screen.
Создадим в корневом каталоге сервера (/usr/games/l2j) скрипт с названием start такого содержания:
Код:

cd /usr/games/l2j/login/
/usr/local/bin/screen -AmdS la2_realm /usr/games/l2j/login/l2ls.sh
cd /usr/games/l2j/gameserver/
/usr/local/bin/screen -AmdS la2_world /usr/games/l2j/gameserver/l2gs.sh

И присвоим ему права на выполнение:
Код:

chmod 755 start

Теперь при запуске этого скрипта сервера у вас запустятся в фоне, не высыпая ничего на экран.
Для просмотра запущеных консолей можно воспользоваться командой
Код:

# screen -list

Должен вывестись список примерно такого типа:
Код:

There are screens on:
931.la2_realm (Detached)
933.la2_world (Detached)
2 Sockets in /tmp/screens/S-root.

Для подключения к виртуальной консоли используйте команду
Код:

# screen -r la2_realm

Что бы отключиться от виртуальной консоли нажмите 'Ctrl+a d'.
Ну что же, всё нормально, всё запускается в бэкргаунде. Пора настроить запуск сервера при старте системы.

17. Запуск сервера при старте системы.
Идем в каталог /usr/local/etc/rc.d и создаем там скрипт lineage.sh такого содержания:
Код:

#!/bin/sh
cd /usr/games/l2j/
./start

Теперь при старте системы сервера login и gameserver запустятся автоматически.

Вот и всё, настройка завершена.

6 комментария (-ев) к «Установка LineAge2 Java cервера на FreeBSD»

02.08.2009 10:57:42 0
6. Dead (killdos) [ссылка]
в NetBSD пашет. на фре тоже проблем не будет. только ява для фряхи давно уже нативная есть и иксорг полностью ставить вовсе не обязательно. и ещё, я бы запускал не в скрине, а просто в фоне с выводом лога в файл. рестарт сервера делать из крона и заодно в это время логи ротировать можно. а логи всегда можно посмотреть tail -50 /usr/local/l2j/log/login.log например. в общем способов масса, зависит от воображения. на то оно и уникс =)