воскресенье, 17 июня 2012 г.

[OpenSim] В грид!

Полагаю, с терраформом все разобрались, ландшафт себе по вкусу создали, чего-нибудь там построили уже наверняка... Пора бы и к гриду подключиться. Сегодня я расскажу, как это сделать, что для этого нужно и что нас там, в этом самом гриде, ждет.

Значится так: мы будем рассматривать только технический аспект подключения к гриду. То, что любой открытый грид - не SL, ваши личные трудности и проблемы, точно так же как и трудности любого грида, за исключением технических, лично меня не тревожат никоим образом. В принципе, лично мне нравится буржуинский «OSGrid» потому что там есть всё то же самое, что и в современном SL. Всё - это значит всё, нет только оголтелых адептов совкового менталитета, потому что те русские, кто есть, тщательно шифруются и правильно делают. Никакого «КП», никакого «Дома-3», тишь да благодать в этом плане. А вот населения хватает как такового, скучать не приходится.

Есть и отечественный грид - «OpenSim.ru», я в самой первой статье приводил ссылки на него. Этот грид мне откровенно жалко, потому что из населения одни боты So Hyun'a, правда, живущие полной жизнью и даже лабающие на музыкальных инструментах. Такого ни у кого нет, надо полагать :D К слову сказать, мой сим Kin-Dza-Dza стоит именно в этом гриде в настоящее время, да и островов там хватает, можете сами убедиться. Он хороший, но пока что нет войса, зато недавно появились группы.

Впрочем, это дело наживное, а вы если посмотрели крайнюю ссылку, можете праведно возмутиться, дескать, чего он гонит, там подавляющее большинство симов в списке находятся в глухом OFFLINE. Да, увы, это так, на эти симы вы не сможете телепортироваться, но не потому, что они не работают, а потому, что нельзя к ним подключиться. Здесь мы плавно переходим от болтовни к техническим особенностям подключения вашего региона к какому-либо гриду в принципе.

Запомните раз и навсегда: если у вас динамический IP-адрес или же адрес все-таки статический, но провайдер решил «позаботиться» о вашей же безопасности и закупорил фаерволом все порты или, ещё хлеще, и то и другое вместе, то максимум что вы можете получить, так это строчку в этом печальном списке отъявленных «недоподключенцев». Чудес не бывает - если закрыты порты, никто никогда не сможет к вам подключиться, даже если у вас и неизменный IP-адрес, тем паче, если он, вдобавок ко всему, меняется от сессии к сессии. Севисы а-ля «DynDNS», конечно, решат проблему меняющегося адреса, но уж тогда лучше решать проблему комплексно и купить за $2/мес. (а у кого и дешевле) внешний адрес вкупе с открытыми настежь портами. Все остальные кустарные решения будут неизменно приводить к онанизму. Чудес не бывает.

В общем, будем полагать, что с адресом и портами у нас все в порядке, поэтому идем и... Правим конфиги? Увы, нет. Сперва мы сделаем полный бэкап нашего сима, а также тех предметов, которые мы хотели бы взять с собой в грид. Сейчас придётся опять погрузиться в пучины теории, но без этого никак, нужно же понимать, что происходит.

Все предметы сим хранит в так называемых «ассетах». Логически это ничто иное, как записи в базе данных. Вопрос только - в какой именно. Если симулятор запущен, как standalone, то абсолютно всё хранится в локальных базах, если же сим находится в гриде, то всё, что находится на автатаре и в инвентаре хранится в базе грида, а вот то, что находится на симе - в базе сима. Но есть один нюанс. Всё зависит от настроек конкретного грида. Что там и как, знает только гридмастер. Таким образом, ассеты сима могут храниться и в базах грида совершенно запросто. Именно поэтому идем в консоль нашего сервера и печатаем очень простую команду:
  1. Region (Kin-Dza-Dza) # save oar /home/opensim/kin-dza-dza.backup.oar
Вообще архив делать нужно постоянно и как-нибудь я напишу, как этот процесс автоматизировать. А пока выключим сервер и пойдем конфиги править, чтобы подключиться к русскому гриду.

Если помните, я упоминал о глобальных координатах в гриде, поэтому еще раз проверьте при помощи карты, что они указывают на свободное место, затем просто берем в файле OpenSim.ini закомментируем конфиг одиночного режима и раскомментируем другой, для грида.
; Include-Architecture = "config-include/Standalone.ini"
    Include-Architecture = "config-include/Grid.ini"
После запуска сервера он будет подключен уже в грид и попасть на сим можно будет только с авторизацией грида, то есть с тем логином и паролем, с которым вы зарегистрировались у них на сайте.

четверг, 7 июня 2012 г.

[OpenSim] Терраформ

Ну вот, у нас есть четыре сима, настало самое время заняться их комплексным терраформированием, чтобы получить единое пространство. Как я уже говорил, я буду моделировать полуостров Крым, для чего иду в «Google Maps»:



Кстати, кое-какой терраформ можно выполнять и из консоли сервера. Для примера, давайте вместо лысых пятачков на всех четырех регионах сделаем одино большое и ровное плато. Для этого нужно из рута сервера отдать команду на терраформ:
  1. Переходим в корень:
    Region (Crimea1) # change region root
  2. Ровняем землю и поднимаем на уровень 30 метров (вода у нас по умолчанию на 20 метрах):
    Region (root) # terrain fill 30
И все, все четыре сима превращаются в одно большое пространство. Если же нужно с каким-то одним регионом проделать подобное, то... Думаю, вы уже догадались ;D



Итак, нас есть скриншот, который нужно переработать в битовую карту (RAW) террейна, понятную симулятору. Немного теории. Мы знаем, что регион имеет размеры 256х256 метров. Сетка высот кодируется raw-файлом, размерами 256х256 точек, таким образом получается, что одна точка кодирует высоту одного квадратного метра террейна. Значение точки может лежать в пределах от 0 до 255, что на практике дает нам цвет пикселя в градациях серого. Если это рассматривать в системе цветокодирования RGB, то получается, что мы имеем 4 канала цвета: R (красный), G (зеленый), B (синий) и A (прозрачный, альфа). Смотрите, как понимает значение этих каналов сервер, потому что если с красным и синим все более-менее понятно, то зеленый канал таит в себе чудеса:
  1. R (красный) Высота основания точки в метрах от 0 до 255
  2. G (зеленый) Множитель к высоте основания точки
  3. B (синий) Высота уровня воды (20 м по умолчанию)
Вычисляется окончательная высота точки по специальной формуле, описывающей взаимодействие красного и зеленого каналов карты, к счастью, несложной:
  1. Высота (канал R) * Множитель (канал G) / 128
Зачем так сделали и что хотели этим достичь, я не знаю, да и не очень хотелось бы знать. Большие знания - большие печали. Просто поступим так, как требуется, чтобы получить то, что мы хотим. Возвращаемся к нашему скриншоту и вырезаем квадрат, равный 512х512 пикселей (2х256, у нас же по два сима на одну сторону) с необходимой территорией внутри:



У меня не совсем удачно получилось вырезать с первого раза, так что снизу картинки вылезла подложка, но этим сейчас можно пренебречь, потому что мы все равно будем четко очерчивать береговую линию и, по уму, нужно спозиционировать сушу полуострова в центр квадрата, ведь по сути, полуостров станет островом в этой модели.



Ну вот, теперь у нас есть материал для терраформирования - установим значения каналов по 128, разрежем на четыре части эту картинку и... Здесь бы написать «и загрузим на сервер», да только обломитесь, девочки и мальчики. Не все так просто. Тут как в сексе - вроде бы ничего непонятного, все предельно ясно, но сноровка требуется :D Короче, разрезаем нашу картинку на четыре равные части и каждую сохраняем как 24-битную TGA, потому что дальше мы пойдем приводить их к общему знаменателю и удобоваримому виду. И вот на что обратите внимание особое - у меня не даром покрашен полуостров в серый цвет, а то место, где должно быть море - в черный. Помните теорию? Вот я таким образом явно разделил высоты.



Теперь немного пошарим по инету и скачаем вот что:
  1. «Terragen» - генератор ландшафтов.
Сегодня мы им воспользуемся для конверсии наших картинок, но вообще рекомендую ее освоить, потому что в ней можно делать весьма прикольные терраформы и потом все это барахло грузить в сим. В конце статьи, в качестве бонуса, я покажу терраформ горного участка местности с озерцами на те же четыре сима, сделанный в ней.
  1. «Bailiwick» - редактор каналов raw-файлов (требует для работы .Net 2.0).
Эта прога специально написана добрыми самаритянами, чтобы генерировать правильные файлы для SL из того шита, что в нее грузят такие деятели, как мы с вами. Так что ставим все это барахло, курим (программы под Win32, имейте в виду, если что, WINE вас спасет) и делаем четыре raw'чика для наших регионов.

А теперь внимательно следите за руками, кто прощелкает, у того дырки в земле будут! :D



Итак, берем «Terragen» и, немного поигравшись с ним, как же без этого, начинаем выполнять некие осмысленные действия. Сперва нажимаем кнопку «Import» (1) и в открывшемся окне (опять 1) выбираем первый из подготовленных загодя четырех картинок в TGA. Когда он загрузится, нажимаем кнопку «Modify» (2) И выставляем значения высот, зафиксировав их нажатием кнопки «Set Height Range». Я выбрал такие, как на скриншоте, у вас могут быть свои, определенные экспериментально. После настройки высот закройте это окошко кнопкой «Close», иначе все остальные окна будут неактивны. Затем установим необходимый уровень воды - у нас он равен 20 метрам, так как мы его не меняли на своих симах. Окно настроек воды открывается нажатием на квадратную кнопку слева с изображением волн. Значение воды также фиксируем.

Ну вот, основное сделано, теперь можно посмотреть предварительно, как все будет выглядеть. Сбоку на панельке есть большая квадратная кнопа «3D», жмем:



Там есть некое подобие левой руки 3D-камеры, можно посмотреть со всех сторон эскиз, но управление у нее абсолютно нечеловеческое. Впрочем, лучше, чем ничего. Теперь жмем кнопку «Save» (3) и сохраняем то, что у нас получилось, в формате террейна с расширением .ter.

Теперь берем другую софтину, «Bailiwick», и при минимуме телодвижений формируем RAW-файл, годный для сима. Импортируем, проверяем, что все в порядке, сохраняем уже как .raw, все. Стоит обратить внимание, что у этой программы также есть поле с указанием уровня воды. Так как он у нас стандартный, то мы ничего не делаем, если у вас свой, то нужно его перед сохранением изменить в этом поле.





В общем, это финал. Обрабатываем остальные файлы таким же макаром и выгружаем на симы в необходимом порядке. В результате должно получиться то, что мы задумали. У меня вот - полуостров Крым.



По правде сказать, по уму надо бы еще поработать над рельефом, поскольку в Крыму есть горы, озера и т.п. Но перенос рельефа - это задача, производная от той, которую мы только что решили, стало быть, дело техники. Поэтому я бы вам порекомедовал самостоятельно поработать над этим и задать высоты в своих тераформах, хотя бы ради тренировки. Ну а сейчас обещанный результат работы «Terragen'a»:



Вот и все. Можно, конечно, сказать, что заморочено как-то все, проще по-старинке, in-world при помощи старых добрых Ctrl-5... Болтуны. Уж кто этими «старыми добрыми» что-то и терраформил, такой ереси точно не скажут :D

среда, 6 июня 2012 г.

[OpenSim] Что от нас скрывают в LindenLab

Знаю-знаю, я обещал рассказать, как подключить свой сим к гриду. Но давайте рассуждать здраво - ну вот вы подключили свой сим, позвали туда своих друзей (чтобы забанить, не иначе как ;D ), а у вас на симе - лысина суши торчит из воды и вы там, посередине, криво примостили свой аватар на кубик. В общем, скажут вам друзья "Круто!" из жалости и свалят обратно в SL лясы точить. Оно вам надо?

Сегодня я расскажу, как сделать правильный терраформ, попутно открою святую тайну всех эстейт-администраторов и то, что от вас скрывают от вас в LindenLab по поводу серверов и регионов. Об этом я уже упоминал в прошлой статье, сегодня же мы своими руками проделаем такие же манипуляции, какие проделывают Линдены, когда берут свою $1000 за установку сима очередному незадачливому клиенту.

Итак, давайте сегодня создадим кластер, состоящий из четырех, стоящих рядом, регионов, на которых сделаем комплексный терраформ какого-нибудь реального рельефа Земли.

Для этого, как всегда, расчистим лабораторный стол сделаем несколько подготовительных манипуляций. В прошлый раз мы запустили свой сим с одним единственным регионом, сегодня же мы будем создавать на этом сервере совершенно иную конфигурацию, поэтому будет разумно немного вернуться назад и создать необходимые нам регионы снова прямо из консоли сервера. Для этого мы идем в папку osim, где лежат файлы сервера и ищем там еще одну папку, которая называется Regions. Как можно догадаться, здесь лежат файлы, которые описывают конфигурацию всех наших регионов, которые размещены на сервере, ведь мы уже знаем, что один сервер может обслуживать количество оных числом более единицы.

В нашем случае интересующий файл будет один с интуитивно понятным названием Regions.ini, не перепутайте ;) Если мы его откроем, то увидим переменные, которые описывают те или иные параметры. Я сейчас приведу свой файл, в принципе, там все понятно, что для чего нужно:
[Kin-Dza-Dza]
RegionUUID = 6962ac4b-d8a5-4142-99b6-7dee1f6b0474
Location = 1000,1000
InternalAddress = 0.0.0.0
InternalPort = 9000
AllowAlternatePorts = False
ExternalHostName = 191.168.0.2
Теперь вы знаете, что почти все ответы на вопросы, которые задавал нам сервер, храняться именно здесь и если что, нужно идти сюда, чтобы что-нибудь поправить или поменять. Но мы к этому еще когда-нибудь вернемся, а пока просто переименуем этот файл во что-либо иное, например:
  1. $ mv Regions.ini Regions.ini.old
Все, возвращаемся в osim и запускаем сервер. Так как сервер не найдет нужного конфига во время старта, он опять начнет задавать нам все те же вопросы, которые были в прошлый раз. Отвечаем безо всякого стеснения, однако, помня о том, что на этот раз мы создаем не один, а четыре региона, названия будем давать такие, чтобы потом нам было удобно между ними переключаться. В конце концов их всегда легко поменять на любые другие, когда это станет нам нужно.

Лично я буду создавать модель моего родного края - полуострова Крым, поэтому буду называть регионы Crimea1, Crimea2, Crimea3 и Crimea4. Первый регион создаем не глядя, просто отвечаем на вопросы. Единственный момент, на который нужно обратить внимание - в какой-то момент сервер спросит, хотите ли вы разместить новый регион в существующем эстейте или нет.
New region name []: Crimea1
Region UUID [8b0c7f33-0e3b-4026-9407-25392fa316c0]: 
Region Location [1000,1000]: 
Internal IP address [0.0.0.0]: 
Internal port [9000]: 
Allow alternate ports [False]: 
External host name [SYSTEMIP]: media      
14:22:18 - [REGION LOADER FILE SYSTEM]: Loading config files from ./Regions
14:22:18 - [REGION LOADER FILE SYSTEM]: Loading config file ./Regions/Regions.ini
14:22:18 - [REGION LOADER FILE SYSTEM]: Loaded config for region Crimea1
14:22:18 - [LOAD REGIONS PLUGIN]: Loading specific shared modules...
14:22:18 - [LOAD REGIONS PLUGIN]: DynamicTextureModule...
14:22:18 - [LOAD REGIONS PLUGIN]: LoadImageURLModule...
14:22:18 - [LOAD REGIONS PLUGIN]: XMLRPCModule...
14:22:18 - [LOAD REGIONS PLUGIN]: Done.
14:22:18 - [LOAD REGIONS PLUGIN]: Creating Region: Crimea1 (ThreadID: 1)
14:22:18 - [ESTATE]: Region Crimea1 is not part of an estate.
Do you wish to join region Crimea1 to an existing estate (yes/no)? [yes]: no
Все дело в том, что сервер помнит, что у нас уже есть эстейт, и хочет знать, что именно мы сейчас создаем, дополнительный парсель или совершенно отдельный сим? Если ответить «yes», то будет создан новый парсель на существующем эстейте, а так как мы убрали информацию о старом, то это будет парсель на весь существующий сим. Так что в данном случае отвечаем «no» и жмем ENTER, после чего сервер спросит, как нужно назвать вновь создаваемый эстейт (сим то бишь), а затем назначить ему владельца вместо Test User (или оставить этого). Да-да, я помню, с владельцами непросто. Но пока этим пренебрежем и вальсируем дальше.

Следом создаем остальные эстейты. Здесь нам поможет команда сервера create region. Давайте посмотрим, как правильно нужно ее отдавать:
Region (Crimea1) # help create region
create region ["region name"] 
Create a new region.

The settings for "region name" are read from <region_file.ini>. Paths
specified with <region_file.ini> are relative to your Regions
directory, unless an absolute path is given. If "region name" does not exist
in <region_file.ini>, it will be added. Without "region name", the first region found
in  will be created. If <region_file.ini> does not exist, it will be created.
Мы видим, что нужно просто задать имя нового региона и, по необходимости, имя файла, в котором будут его настройки. Здесь тоже есть один нюанс - поскольку происхоит постоянная путаница с терминологией, то не всегда очевидно, что же мы делаем и что получим в результате. Запомните - эстейт это сим, регион же может быть как симом, так и парселем. Сейчас мы создаем четыре эстейта, на которых будет расположено четыре парселя (региона), размерами по целому эстейту на каждый. Кроме того, создавая эстейт, полезно переместиться из текущего региона Crimea1, как мы видим, написано в приглашении сервера, в корневую сущность. Сделать это можно простой командой:
Region (Crimea1) # change region root                       
Currently selected region is root
Если же вы создаете несколько эстейтов, внутри которых планируется разместить несколько регионов (парселей), то для каждого эстейта лучше всего назначать свой ini-файл. Для наглядности, давайте сейчас так и поступим, создадим для каждого эстейта свой ini-файл, в данном случае это будет Crimea2-Regions.ini:
Invalid command
Region (root) # create region Crimea2 Crimea2-Regions.ini
=====================================

We are now going to ask a couple of questions about your region.

You can press 'enter' without typing anything to use the default

the default is displayed between [ ] brackets.

=====================================

Region UUID [027a1195-f7bc-4610-9701-0f571c6d953a]: 
Region Location [1000,1000]: 1000,1001
Internal IP address [0.0.0.0]: 
Internal port [9000]: 9001
Allow alternate ports [False]: 
External host name [SYSTEMIP]: 192.168.0.2
14:39:31 - [ESTATE]: Region Crimea2 is not part of an estate.
Do you wish to join region Crimea2 to an existing estate (yes/no)? [yes]: no
New estate name [My Estate]: Crimea2
Здесь важно помнить, что нужно ему задать правильные координаты, правильный порт и правильное расположение - указать, что это новый эстейт, а не парсель в существующем эстейте. Вновь назначаем ему владельца и, вуаля!
14:42:21 - [GRID SERVICE]: Region Crimea2 (027a1195-f7bc-4610-9701-0f571c6d953a) registered successfully at 256000-256256
14:42:22 - [REGION]: Enabling logins for Crimea2
14:42:22 - [GRID SERVICE]: region Crimea2 has 1 neighbours
14:42:22 - [INTERGRID]: Informing 1 neighbours that this region is up
Обратите внимание на крайнее сообщение. Сервер нам говорит, что у нашего нового региона есть один сосед и он включен. Что ж, здесь теоретическая часть заканчивается и начинается практика - по аналогии создаем еще два региона и не забываем, что значение порта должно увеличиваться на единицу, да и координаты нужно указать таким образом, чтобы все четыре сима встали друг к дружке самым что ни на есть квадратно-гнездовым образом.



Теперь вам понятно за что Линдены дерут бабло? Если бы мы с вами были Линденами, мы бы уже положили себе в карман $4000 безо всякого зазрения совести ;) К слову сказать, точно так же поступают в LindenLab, когда вам впаривают туфту на тему «один сим - один сервер», сколько железный ящик бует тянуть вот таких виртуальных регионов, столько туда и впихнут, а в наши дни вообще оптимизация достигла перигелия - на железке запускается несколько виртуальных машин, которые через балансер... В общем, это уже совершенно другая история, которую я вам рассказывать не буду, поскольку это долго и нудно. Просто запомните - симов на одной машине можно запустить столько, сколько жадность и железо позволяет.

понедельник, 4 июня 2012 г.

[OpenSim] Сервер

Я тут думал написать статью про SLVoice, но потом решил, что сделаю это в неком будущем, когда мне в очередной раз надоест играть в пиксели, ибо сейчас это относительно волнующая тема и все желающие могут потренировать свой мозг самостоятельно. Поэтому статья будет совсем про другое, в общем-то, даже не про SL.



Сразу говорю, статья будет скучная и без картинок, поскольку сегодня речь пойдет о том, как установить и запустить opensim-server и где есть какие «воздушные ямы». В качестве анонса хочу заметить, что в настоящее время опенсимы шагнули далеко вперед в своем развитии, при определенной сноровке там запускаются и голосовое общение, и группы, и платёжные модули и даже меши. Но все по порядку. Сегодня запускаем сам симулятор.

Работать мы будем с операционной системой linux (у меня стоит Ubuntu 11.10 Server). Сам же сервер прекрасно работает и под Windows и в конце статьи я приведу ссылку на форум, где описывается его установка под эту ОС. Что же касается настройки самого симулятора, то она ничем не отличается, поскольку мы имеем дело с приложением, как таковым.

Итак, первым делом нам нужно подготовить плацдарм. Это довольно просто - нужно создать пользователя в системе, под которым будет жить и работать наш симулятор и установить необходимые библиотеки, требуемые для жизнеобеспечения самого сима.
  1. Создаем пользователя opensim:
    # adduser opensim
  2. Устанавливаем mono и его окружение:
    # apt-get -y install nant mono-gmcs libmono-microsoft8.0-cil libmono-system-runtime2.0-cil libgdiplus libmono-i18n2.0-cil libmono-oracle2.0-cil
  3. Теперь необходимо удостовериться, что mono работоспособен:
    # mono -V
    Mono JIT compiler version 2.10.5 (Debian 2.10.5-1)
    Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
            TLS:           __thread
            SIGSEGV:       altstack
            Notifications: epoll
            Architecture:  x86
            Disabled:      none
            Misc:          softdebug
            LLVM:          supported, not enabled.
            GC:            Included Boehm (with typed GC and Parallel Mark)
  4. Так как симу нужно где-то хранить свои данные, он активно использует различные базы данных. По уму, конечно, лучше использовать mysql, но сейчас мы поставим (если не стоит) упрощенный движок DB, который называется SQLite. Вообще вещь полезная и мощная, не нужно пренебрежительно относиться к слову «упрощенный», если что ;)
    # apt-get -y install sqlite
  5. Если у вас не стоит screen, то нужно его поставить, пригодиться в дальнейшем для запуска сервера как демона, потому что он сам этого не умеет, увы и ах:
    # apt-get -y install screen
Все дальнейшие действия теперь мы будем проводить от имени пользователя opensim, поэтому логинимся в систему под ним, причем, сразу предупрежу, что в нашем случае не стоит использовать su opensim, потому что потом возникнут сложности с запуском скрина.

Что ж, осталось совесем малое - скачать и распаковать сам сервер. Скачивать его можно либо с русского сайта проекта OpenSim или же с иностранного, разницы в данном случае нет никакой. Скажу только, что хотите или нет, а придется в дальнейшем читать оба сайта. Русский потому что он на русском, а иностранный, потому что там есть жизнь.
  1. Мы залогинились заново, находимся в своей домашней директории, скачиваем симулятор:
    $ wget http://opensim.ru/server/opensim_ru_build_722.zip
    и распаковываем его:
    $ unzip opensim_ru_build_722.zip
  2. Папку с распакованными файлами лучше всего сразу переименовать во что-нибудь удобоваримое:
    $ mv opensim_ru_build_722/ osim

    Хочу обратить особое внимание на выделение красным - эти названия справедливы в настоящее время, но когда версия сервера изменится и будут выложены новые файлы, они станут другими. Понимаю, что сейчас указываю на очевидное, но безо всякого снобизма я полагаю, что среди моих читателей все же могут оказаться и блондинки с КП ;)
Собственно, все уже закончилось - сим установлен и готов к первому старту, во время которого придется ответить на несколько как простых, так и каверзных вопросов, что мы и сделаем. Следите за руками:
  1. Переходим в папку osim и, глубоко вдохнув носом, запускаем наш сервер:
    $ mono OpenSim.exe
Давайте сразу договоримся вот о чем - мы искренне и наивно полагаем, что сервер у нас стартует без ошибок и он изначально работоспособен. Если же что-то идет не так, где-то что-то жутко начинает ругаться и отваливается, то это мы разберем в индивидуальном порядке. Но для этого я хотел бы попросить вас при описании ваших трудностей как можно более полно рассказать о том, что происходит, прилагая всевозможные логи, ведь меня нет рядом с вами и я не вижу, что реально случилось.

После запуска, рано или поздно, сервер попросит вас дать ему имя:
=====================================

We are now going to ask a couple of questions about your region.

You can press 'enter' without typing anything to use the default

the default is displayed between [ ] brackets.

=====================================

New region name []: Kin-Dza-Dza
Назовите, как хотите, я свой назвал вполне предсказуемо - Kin-Dza-Dza. Если хотите, можете использовать русские буквы в кодировке UTF-8.

Дальше сервер предложит дать ему UUID вместо того, который он выбрал сам, здесь просто жмите ENTER и переходим к следующему вопросу, который стоит пометить, как каверзный:
Region UUID [f487bbdb-f591-493d-8c7d-7591f14db04b]:
Region Location [1000,1000]:
Чтобы правильно ответить на этот вопрос, стоит ознакомиться с тем, как вообще устроен грид. В данном случае нам интересно устройство координатной сетки. Как вы уже поняли, грид начинается с абстрактной точки с координатами X,Y 1000,1000. От нее симы расползаются в разные стороны до бесконечности, но при инициализации нужно точно знать место в гриде, куда вы хотите поместить свой сим. Поскольку сейчас мы будем запускать свой сим как standalone, то есть существующий в единственном экземпляре безо всякого грида, как сферический конь в вакууме, то просто нажимаем ENTER, оставляя координаты, как есть, но запоминим этот момент и потом мы к нему вернемся в статье, где я расскажу, как подключить свой сим к русскому гриду opensim.ru.

И снова каверзный вопрос задает нам железяка:
Internal IP address [0.0.0.0]:
Здесь кроются одни из основополагающих грабель, наступив на которые однажды, получаешь по башке еще продолжительное время. Дело в том, что «внутренний IP адрес», как можно понять эту надпись, совершенно не равняется адресу localhost'a компьютера, где запускается сервер, как и не равняется он внутреннему адресу в вашей локальной сети (к слову, для компьютера адрес локальной сети будет внешним, если этот момент не понятен, забейте, просто запомните как аксиому, а лучше запишите на клейкой бумажке и налепите по центру монитора). В данном случае этот адрес вообще не нужно трогать, оставив там предложенное значение, тогда сервер будет слушать все доступные интерфейсы, как внутрениий lo0 127.0.0.1, так и внешний изнутри eth0 192.168.0.2 (к примеру такой адрес, у вас может быть свой, не суть). Короче, просто жмите ENTER, но момент, опять же, запомните.
Internal port [9000]:
Добрались и до порта. Сейчас будет важно, не прохлопайте ушами ;) Дело в том, что для нормальной работы сервера должны быть открыты TCP и UDP порты 8895 и начиная с 9000 и выше по количеству запущенных на сервере симуляторов, ведь вы же знаете, что один сервер может поддерживать несколько симуляторов (регионов)? Так вот, на каждый сим по своему порту, причем здесь вы можете отойти от стандартных и предложить свои, но сейчас на это не нужно заморачиваться и просто опять, по привычке, нажимаем ENTER и запоминаем момент.
Allow alternate ports [False]:
External host name [SYSTEMIP]: 192.168.0.2
Опять же, на вопрос об альтернативных портах при помощи знакомой кнопки оставляем, как есть, а вот следующий вопрос про внешнее имя хоста опять коварен и каверзен до безобразия.

На самом деле здесь можно написать что угодно, все зависит от того, где мы хотим видеть наш сим и где он стоит - на локальной тачке, откуда и клиент потом вы будете запускать, на отдельной машине в вашей локалке или же должен быть виден из грида. В первом случае просто напишите localhost и, по привычке, запомните это место. Во втором случае, как у меня, пишем IP внутри сети - 192.168.0.2. Если же ваш сим должен быть виден из грида, то здесь нужно написать ваш внешний IP, который виден из «большого интернета». Но по первости я бы рекомендовал поступить без лишних жоподвижений и просто написать там localhost, потому что мне что-то подсказывает, что сим вы запускаете на своем локальном компьютере.

Похрустев немного, сервер приступит к конфигурированию эстейта и спросит, как его назвать:
New estate name [My Estate]: Pluk Planet
На самом деле здесь есть небольшая разница с терминологией, принятой в SL, поэтому поясняю - это на самом деле имя парселя, который по умолчанию будет размером на весь сим, поэтому я называю его просто и без затей «Pluk Planet».

Следующий вопрос - имя владельца, вписываем себя или оставляем дефолтного чувака Test User, абсолютно не принципиально. Дело в том, что в новой версии симулятора, что мы установили, не все радужно и просто с владельцем и это тема отдельной статьи, которую я скоро напишу. Так что не мудрствуя лукаво, вписывайте себя и опять же, запомните этот момент.
Estate owner first name [Test]: Manoul
Estate owner last name [User]: Carnell
И, о ужас! Красная надпись, ошибка, все пропало, крах устоев и ткани мироздания!
14:14:43 - [GRID SERVICE]: Region Kin-Dza-Dza (f487bbdb-f591-493d-8c7d-7591f14db04b) registered successfully at 256000-256000
14:14:43 - [GRID CONNECTOR]: Registration failed: Region overlaps another region
14:14:43 - [STARTUP]: Registration of region with grid failed, aborting startup due to Region overlaps another region   at OpenSim.Region.Framework.Scenes.Scene.RegisterRegionWithGrid () [0x00000] in :0
  at OpenSim.OpenSimBase.CreateRegion (OpenSim.Framework.RegionInfo regionInfo, Boolean portadd_flag, Boolean do_post_init, IScene& mscene) [0x00000] in :0
А давайте проанализируем ошибку? Смотрите, что он нам пишет:
«[GRID CONNECTOR]: Registration failed: Region overlaps another region»
Это означает то, что мы пытаемся занять место, которое в гриде уже занято чьим-то симом. Дело в том, что если вы ставили ту версию, ссылку на которую я дал выше, то этот вариант уже сконфигурирован на работу с русским гридом и при старте ломится там регистрироваться, но глобальные координаты мы ему оставили 1000,1000, а этот «пуп земли» уже давно и прочно занят. Но сейчас мы хотим запустить свой сим как отдельно стоящий, поэтому переходим плавно к третьей части марлезонского балета в пилотажном кубе. Это будет незабываемо, я вам обещаю ;)

Открываем конфигурационный файл сервера и двигаем в его самый-самый конец:
  1. $ vi OpenSim.ini
Там будут вот какие строки (привожу блок целиком):
[Architecture]
    ;# {Include-Architecture} {} {Choose one of the following architectures} {config-include/Standalone.ini config-include/StandaloneHypergrid.ini config-include/Grid.ini config-include/GridHypergrid.ini config-include/SimianGrid.ini config-include/HyperSimianGrid.ini} config-include/Standalone.ini
    ;; Uncomment one of the following includes as required.  For instance, to create a standalone OpenSim,
    ;; uncomment Include-Architecture = "config-include/Standalone.ini"
    ;;
    ;; Then you will need to copy and edit the corresponding *Common.example file in config-include/
    ;; that the referenced .ini file goes on to include.
    ;;
    ;; For instance, if you chose "config-include/Standalone.ini" then you will need to copy
    ;; "config-include/StandaloneCommon.ini.example" to "config-include/StandaloneCommon.ini" before
    ;; editing it to set the database and backend services that OpenSim will use.
    ;;
    ; Include-Architecture = "config-include/Standalone.ini"
    ; Include-Architecture = "config-include/StandaloneHypergrid.ini"
    Include-Architecture = "config-include/Grid.ini"
    ; Include-Architecture = "config-include/GridHypergrid.ini"
    ; Include-Architecture = "config-include/SimianGrid.ini"
    ; Include-Architecture = "config-include/HyperSimianGrid.ini"
Нужно раскомментировать строчку Include-Architecture = "config-include/Standalone.ini" и закомментировать Include-Architecture = "config-include/Grid.ini". Думаю, по названиям файлов уже догадались, что к чему, верно? ;) Все, сохраняем файл и приводим в порядок конфиги одиночного режима. Для этого идем в папку config-include/, находим файл StandaloneCommon.ini.example и копируем его с новым именем:
  1. $ cp StandaloneCommon.ini.example StandaloneCommon.ini
Теперь можно запускать наш сим снова. Убедившись, что мы находимся в папке osim, а не остались в гнездилище конфигов, запускаем сим заново уже знакомой командой. В результате получаем приглашение в консоли сервера:
Region (Kin-Dza-Dza) #
Вы можете посмотреть весь список доступных команд самого симулятора простой и интуитивной командой help, которую нужно напечатать там же, в консоли, сейчас же я расскажу об одной, которая создаст вам пользователя, чтобы вы могли зайти клиентом на свежесозданный сим.
  1. Region (Kin-Dza-Dza) # create user Manoul Carnell MYPASSWORD MY@EMAIL
На что сервер ответит примерно следующее:
14:50:57 - [AUTHENTICATION DB]: Set password for principalID cddc6ad9-77fa-447b-beb0-a8bbdf0f98cf
14:50:57 - [GRID SERVICE]: GetDefaultRegions returning 0 regions
14:50:57 - [USER ACCOUNT SERVICE]: Unable to set home for account Manoul Carnell.
14:50:59 - [USER ACCOUNT SERVICE]: Creating default appearance items for cddc6ad9-77fa-447b-beb0-a8bbdf0f98cf
14:50:59 - [USER ACCOUNT SERVICE]: Creating default avatar entries for cddc6ad9-77fa-447b-beb0-a8bbdf0f98cf
14:50:59 - [AVATAR SERVICE]: SetAvatar for cddc6ad9-77fa-447b-beb0-a8bbdf0f98cf, attachs=0
14:51:00 - [USER ACCOUNT SERVICE]: Account Manoul Carnell created successfully
Ну что, осталось взять клиент и шагать осваивать просторы. Какой брать клиент для этого - ну уж явно не стандартный Viewer2 ;) На самом деле можно и его, просто задать ему параметр loginuri при запуске с адресом вашего сима, я просто не помню, как там точно пишется. Или любой другой клиент, тот же «Феникс». Включите отображать список доступных гридов в настройках клиента и выбирайте там. Если у вас сим на той же машине, то localhost, если же нет, то нажимайте кнопку «Grids» и добавляйте свой грид, как это сделано у меня для сима, работающего на другой машине в локальной сети:



Собственно, вот и все на сегодня. Развлекайтесь, пробуйте, ругайтесь, спрашивайте, снова пробуйте. Кстати, обещанная ссылка на установку сервера под Windows, тоже ничего сложного, а все остальное точно так же.

Ах да, чуть не забыл. Выключается сервер командой shutdown, отданой ему в консоли. Не стоит просто прибивать процесс - это дурной тон, который рано или поздно закончится весьма печально для всей организации. А вот чтобы сим не болтался под руками постоянно, нужно запустить его в скрине. Сделать это достаточно просто:
  1. $ screen -S osim -d -m mono OpenSim.exe
Сим запустится в фоновом режиме и можно смело закрывать терминал. Если же вам понадобиться что-то сделать в его консоли, просто вызовите скрин простой командой:
  1. $ screen -x osim
Отключиться от скрина с симом, оставив его в работоспособном состоянии, можно комбинацией клавиш Ctrl-A-D.

Ну а дальше я расскажу, как подключить сим к гриду, привести это все хозяйство к более-менее удобоваримому виду, разбирая тонкие настройки сервера и как подключить сервис групп и войса, но это будет в другой раз и в другой истории.