Если возникла необходимость поставить несколько независимых серверов (например, нужен и Classic, и Super), это сделать несложно. Просто каждый сервер будет работать на своём порте. Однако штатная установка такого не предусматривает. Потому сделаем это вручную.
Основная наша задача - сделать серверы совершенно независимыми. То есть чтобы для каждого существовала своя системная служба и даже своя запись в "Установка и удаление программ". Для этого нам придётся немного "поработать руками".
Ниже описана методика, опробованная на Windows 2000 Server SP 4 Rus, Windows 2003 Server Standard Edition SP 2 Rus и на Windows 2003 Server Enterprise Edition SP 2 Rus.
Итак, сначала планируем установку. Заранее подготовим табличку, где распишем, какое имя мы дадим каждому экземпляру сервера и на какой порт его настроим. Например:
Имя сервера | Тип сервера | Порт сервера | Примечание |
---|---|---|---|
Instance_1 | Classic | 3050 | Для Смета.РУ |
Instance_2 | Super | 3051 | Для Кодос-ИКБ |
Instance_3 | Classic | 3052 | Для экспериментов |
выбираем полную установку (чего жадничать?), отказываемся от использования Guardian (а зачем он нужен? единственное его предназначение - перезапустить службу, если с ней что случится, но с этим прекрасно справляются и штатные средства), ставим запуск в качестве службы, отказываемся от её автозапуска (потом настроим), и просим скопировать клиентскую библиотеку в системный каталог, сгенерировать GDS32.DLL и установить апплет управления. Вперёд! пара секунд, копирование файлов закончено. Отказываемся от запуска службы (рано ещё). Установка завершена. Отправляемся в каталог, куда мы установили сервер, находим там конфигурационный файл и вносим в него необходимые нам изменения. Раскомментируем строку, где указан порт (RemoteServicePort = 3050), и ставим там значение 3052 вместо значения по умолчанию 3050. Если надо, устанавливаем и другие параметры. Загружаем консоль управления, апплет "Службы". Запускаем только что установленную службу (её имя будет "Firebird Server - Default Instance"), убеждаемся, что она стартовала нормально. И сразу останавливаем службу.
И вот теперь наступил момент, когда надо немножко "персонализировать" свежеустановленную копию сервера. Увы, это придётся делать вручную. Запускаем regedit -это единственный инструмент, который нам понадобится.
Сначала отправляемся в ветку
Тут перечислены все экземпляры установленных в системе серверов с указанием их местонахождения. Наш, свеженький, фигурирует под именем DefaultInstance. Переименуем его в Instance_3.
Теперь отправляемся ниже, в ветку
Это информация для деинсталляции нашего экземпляра сервера. Переименуем ветку в FBDBServer_1_5_Instance_3 и корректируем значение ключа DisplayName, чтобы можно было легко различать записи (там сейчас написано нечто типа "Firebird 1.5.0.4306 DefaultInstance", а мы напишем "Firebird 1.5.0.4306 Instance 3 port 3052 Classic").
Итак, рюшечки поправили, нам предстоит поправить записи ещё в двух местах, но теперь уже будет правка серьёзная, в которой нельзя ошибиться.
Отправляемся в
Посмотрим. Тут есть подраздел 0000 с несколькими ключами и подраздел Control с одним ключом. Нам предстоит поправить как имя самого раздела, так и значение нескольких ключей. Однако система безопасности пока нам не позволит этого сделать - недостаточно прав. Дадим их себе. Для этого щёлкнем право кнопкой на разделе HKLM\SYSTEM\CurrentControlSet\Enum\Root, выберем пункт "Разрешения", и группе пользователей "Все" дадим право "Полный доступ". Сохраним изменения. Теперь вернёмся к нашему разделу. Изменим его имя (обратите внимание - только большие латинские буквы и цифры, никаких пробелов) на LEGACY_FIREBIRDSERVERINSTANCE_3_PORT_3052
В разделе 0000 изменим значения ключей:
DeviceDesc = "Firebird Server - Instance 3 port 3052"
Service = "FirebirdServerInstance3port3052"
В разделе Control изменим (обратите внимание - никаких пробелов) значение ключа
ActiveService = "FirebirdServerInstance3port3052"
Обратите внимание - значения 0000\Service и Control\ActiveService должны совпадать! Потому после изменения значения 0000\Service можно просто его скопировать и затем вставить в Control\ActiveService.
Тут - всё. Возвращаемся к разделу HKLM\SYSTEM\CurrentControlSet\Enum\Root и отбираем у группы "Все" право "Полный доступ". Сохраним изменения.
Отправляемся в
Переименовываем раздел в FirebirdServerInstance3port3052. Обратите внимание - это значение должно совпадать с тем, что мы установили ранее для 0000\Service и Control\ActiveService! Но оно у нас уже в буфере обмена, так что опять используем вставку.
Изменяем значение ключа
DisplayName = "Firebird Server - Instance 3 port 3052"
и создаём строковый параметр с именем Description и значением
Description = "Сервер Firebird версии 1.5.0.4306, режим Classic (многопоточный), имя экземпляра Instance 3, порт 3052."
Переходим в подраздел Enum и изменяем значение ключа
0 = "LEGACY_FIREBIRDSERVERINSTANCE_3_PORT_3052\0000"
т.е. точно указываем установленное ранее имя подраздела в HKLM\SYSTEM\ CurrentControlSet\Enum\Root. Чтобы не ошибиться, лучше опять-таки воспользоваться Copy-Paste.
Теперь следует повторить всё то же для нумерованных разделов ControlSet (ControlSet001, ControlSet003…). В одном из них наши изменения уже должны появиться, а вот в другом… если разделы/ключи есть и не изменились, нужно поправить, но если их нет - не надо их создавать, оставим как есть.
А теперь… да всё собственно. Можно возвращаться назад и начинать установку следующего экземпляра сервера. Потом третьего… с той лишь разницей, что уже не нужно будет копировать клиентскую библиотеку в системный каталог и ставить апплет управления - они уже есть.
И когда, наконец, все необходимые копии сервера установлены - просто перегружаем наш сервер. Все наши установки, изменения и исправления принимаются системой. По завершении перезагрузки первым делом смотрим журнал загрузки - не было ли каких проблем, связанных с нашими серверами. Если есть - лезем regedit-ом смотреть, где ошиблись, и исправлять, после чего опять перезагрузка - и так пока системные журналы не перестанут регистрировать проблемы.
Теперь отправляемся в апплет управления службами и пробуем запустить каждый из экземпляров установленных нами сервисов. Если они не стартуют - путь известен: журнал, regedit, исправление, ребут. Если стартуют - для тех, которые нужны при загрузке, меняем запуск с "Вручную" на "Авто"… и можно даже не перегружаться. А можно и перегрузиться - ну так, для проверки.
А для совсем уж проверки рекомендую запустить ProcessExplorer (а ещё лучше - установить его вместо диспетчера задач), и, запуская сервисы, смотреть за появлением процессов сервисов, а в свойствах процесса на вкладке TCP/IP убедиться, что каждый экземпляр слушает назначенный ему в файле конфигурации порт.
Вот, собственно, и всё.
Предполагаю, что для других версий Firebird и для версий InterBase методика может быть аналогичной. Ну разве что вместо FIREBIRD кое-где в реестре может оказаться INTERBASE или INTRBASE. Впрочем, кому надо - тот разберётся.