- Установка InterBase и Firebird вручную
- Содержание
- Важные файлы
- Ручная установка
- Только клиентская часть
- 32 и 64 бита
- Совместимость клиентских частей между Firebird и InterBase
- Запуск сервиса (службы)
- Установка или обновление «поверх»
- Установка серверов «рядом» и поочередный запуск
- Одновременный запуск
- InterBase 7.5 и выше
- Firebird 2.x, поочередный и одновременный запуск
Установка InterBase и Firebird вручную
KDV, 14.09.2005, 25.11.2006, 25.09.2007, 08.05.2008, 20.05.2008, 20.01.2009, 05.09.2011, 28.02.2012, 15.11.2014, 09.11.2016.
В этой статье пойдет речь об установке InterBase и Firebird на Windows, заранее приношу извинения пользователям Unix. Тем не менее, пользователи Unix могут извлечь для себя полезную информацию из этой статьи.
Кому будет полезна эта статья:
- тем, кто хочет научиться устанавливать InterBase или Firebird в тех случаях, когда нет инсталлятора под рукой,
- тем, кто хочет восстановить «убитую» инсталляцию конкретной версии InterBase/Firebird, которая пострадала из-за установки другой версии,
- тем, кто хочет работать (одновременно или попеременно) с разными версиями этих серверов на одном компьютере,
- тем, кто хочет узнать, что же именно на самом деле происходит при установке InterBase и Firebird.
Содержание
Важные файлы
Все остальное – лишнее, то есть серверу для работы не нужно. Однако разумеется, в новых версиях серверов могут появиться какие-либо файлы, жизненно необходимые для их работы. Эти файлы можно определить экспериментально.
Ручная установка
И правда, в каталоге bin есть утилита instreg.exe . Она прописывает необходимую информацию в реестр Windows, указывая умолчательное расположение остальных файлов сервера. В версии Firebird 1.5 и выше указывать путь к корневому каталогу не нужно, утилита сама «соображает» откуда она запущена, и прописывает в реестр правильную информацию. Для InterBase путь указывать нужно, более того, для 7.5 и выше нужно указывать еще и дополнительно имя порта (instance gds_db), т. к. при помощи этого параметра обеспечивается возможность независимой установки нескольких независимых экземпляров InterBase на одном компьютере. Не надо только копировать instreg куда попало и пытаться зарегистрировать сервер оттуда.
У instreg могут быть дополнительные параметры, они не важны, и вы можете увидеть их если запустите instreg без параметров (это безопасно, instreg выводит только информацию о параметрах).
Конечно, имя сервера может быть другим. Для Firebird это fbserver (SuperServer) и fb_inet_server (Classic), главное чтобы вы поняли идею. Сразу после указанной команды вы увидите иконку сервера в TaskBar, и сервер почти готов к работе.
В отношении InterBase подобный запуск полезен тем, что в случае отсутствия файла лицензии можно увидеть ошибку «License file is missing or corrupt» (в отличие от «приложения» сервис сообщит об этом только в interbase.log , а его еще надо открыть и посмотреть). Также, в taskbar-меню запущенного как приложение InterBase можно увидеть (в Properties) установленные лицензии.
- рантаймы VC 7.1 (VS2003) и VS 6 мне на сайте microsoft.com обнаружить не удалось
Кроме сервера, возможно, вам потребуется обеспечить работу клиентских приложений на этом же компьютере. Для этого приложениям чаще всего (исторически) нужна клиентская часть – gds32.dll . Эта библиотека находится в том же подкаталоге bin. И ее ( gds32.dll ) нужно скопировать в каталог, где клиентские приложения могут ее находить. Если приложение всего одно, то gds32.dll можно положить прямо в каталог приложения. Если приложений несколько, то gds32.dll нужно поместить в PATH. Проще всего gds32.dll скопировать в системный каталог Windows ( C:\Windows , C:\WinNT , C:\WinXP или как там у вас).
У Firebird 1.5 и выше название библиотеки клиентской части отличается от остальных версий InterBase и Firebird 1.0. Вместо gds32.dll есть fbclient.dll . Этот файл можно переименовать в gds32.dll , однако при этом есть риск, что не заработают или будут работать «криво» приложения или компоненты, которые ориентируются на версию gds32.dll (например, может не работать services api). Специальная утилита instclient.exe (см. дальше) позволяет сделать из fbclient.dll файл gds32.dll с правильной версией (6.3).
Проверьте теперь работу клиентских приложений с этим сервером. Работают? Ну и хорошо. Не работают? Тогда вам придется искать ответ чуть дальше, или в другой статье.
Только клиентская часть
- позволяет проверить наличие установленной библиотеки fbclient или gds32
- позволяет удалить уже установленный в системе fbclient или gds32.
Ряд программ (компоненты IBX в Delphi, PHP, . ) требуют для работы не просто gds32.dll , но и проверяют версию этой библиотеки. Именно поэтому простое переименовывание fbclient.dll в gds32.dll для таких программ работать не будет – версия библиотеки окажется ниже 6.0 (т.к. соответствует версии Firebird, у которого нумерация версий идет с 1.0). instclient как раз и прописывает корректную версию в создаваемый gds32.dll.
Помните, что gds32.dll от всех версий InterBase требует наличия в файле services записи
то есть, клиент обращается к серверу только по имени порта, а не по номеру. Клиент Firebird не требует данной настройки начиная с версии Firebird 1.0. Теоретически можно использовать клиентскую часть от Firebird для работы с сервером InterBase, если вы не хотите редактировать файл services. Однако это крайне не рекомендуется, особенно в отношении самых последних версий InterBase и Firebird (несовместимость в протоколах).
Если устанавливать клиентскую часть InterBase стандартным инсталлятором (включая опцию Silent Install), то инсталлятор самостоятельно прописывает нужную строку. Однако, если на компьютере производятся манипуляции с поддержкой tcp, например удаление протокола и его повторная установка, то файл services при переустановке протокола будет заменен на новый, и клиент InterBase перестанет обращаться к серверу. Проблему придется исправлять повторным прописыванием указанной строки в services. Причем, если такая строка является последней в файле services, то необходимо добавить в конец файла пустую строку, иначе подсистема tcp не обнаружит эту запись.
32 и 64 бита
а не о том, что разрядность dll не та.
Еще путаница может произойти с драйверами типа ODBC. Если вы используете 64-разрядную Windows, то в настройках ODBC будут показываться по умолчанию только 64-разрядные драйверы ODBC. Соответственно, для их использования должен быть установлен 64-разрядный клиент InterBase или Firebird, и приложение тоже должно быть 64-разрядным.
Для работы 32-разрядных приложений с InterBase/Firebird должен быть установлен 32-разрядный ODBC драйвер (о вызове настроек 32-разрядных ODBC-драйверов под 64-разрядной ОС написано тут) и 32-разрядный клиент.
Как уже говорилось выше, 32-разрядный клиент может работать с сервером любой разрядности – 32-бит или 64-бит.
Проще говоря
- разрядность операционной системы определяет возможность использования сервера и клиента конкретной разрядности — на ОС 64бит можно использовать сервер и клиент 32бит или 64бит, на ОС 32бит — сервер и клиент только 32бит.
- Разрядность сервера Firebird или InterBase для клиента не имеет никакого значения
- Разрядность клиентских библиотек должна соответствовать разрядности приложения. Например, приложение 32бит — значит клиент 32бит (или ODBC 32бит + клиент 32бит, и так далее).
- Приложение с разрядностью 32бит не может работать с клиентом 64бит, и наоборот.
Совместимость клиентских частей между Firebird и InterBase
Запуск сервиса (службы)
Утилита instsvc.exe записывает, удаляет или меняет информацию о запуске сервера в базе сервисов операционной системы. После этой команды, открыв список сервисов, вы обнаружите там InterBase или Firebird. Некоторые могут спросить – а где guardian? Дело в том, что специальный сервис, который бы в случае сбоя сервера мог его перезапускать, не нужен в Windows 2000 и 2003 – эта функциональность отлично настраивается в свойствах сервиса, на закладке Recovery.
Настройте сервис так, как вам нужно – автоматический или ручной запуск, и т.п. Можете его стартовать прямо сейчас, только нужно завершить работу сервера в виде приложения (на иконке в Taskbar нажать правую кнопку, выбрать меню shutdown).
Точно так же как и instreg утилита instsvc без параметров показывает все свои возможные параметры. Кроме того, этой утилитой можно управлять запуском и остановкой сервера-сервиса.
Для Firebird требуется специальное указание instsvc, если вы инсталлируете Classic ( fb_inet_server.exe ) – ключ -с . По умолчанию регистрируется сервис суперсервера ( fbserver.exe ).
Также, Firebird 2.1 и выше имеет у instsvc опцию -n[ame instance], которая позволяет регистрировать как сервис несколько разных экземпляров серверов (как одной, так и разных версий). Без этой опции Firebird разных версий используют одно и то же имя сервиса – «Firebird Server – DefaultInstance», и в этом случае работать будет только тот сервис, который запустился первым.
У InterBase опция имени сервиса чуть иная – instance [instance_name] , где instance_name должно совпадать с именем instance, указанного при регистрации сервиса утилитой instreg (см. выше).
После установки сервиса рекомендуется проверить, установлена ли галочка Allow service interact with desktop в свойствах сервиса. Если нет, то может не работать «локальный» коннект – дело в том, что только в последних версиях Yaffil и Firebird протокол локального коннекта изменен (и например, для Classic он вообще не работает до версии Firebird 1.5.2), а ранее он был реализован через shared memory, что не позволяет «видеть» сервис сервера из другого сервиса (или иногда даже из приложения). Собственно, если вдруг с локальным коннектом есть проблемы – забудьте про него и используйте протокол tcp, например localhost:c:\dir\data.gdb. Все это уже давно описано в FAQ.
Установка или обновление «поверх»
Самое первое и главное правило – это перед подобными действиями скопировать куда-нибудь весь корневой каталог существующей установки сервера. В случае чего вы сможете удалить неудачный эксперимент, и вернуть весь каталог сервера в его исходном виде обратно. Этим вы избавите себя от необходимости переустановки сервера в случае проблем или неверных действий.
Для Firebird новые версии всегда выпускаются в двух вариантах – как инсталлятор, и как набор файлов. Инсталлятор нас в данном случае не интересует, а вот набор файлов – то что нужно. Это zip, содержащий внутри как раз корневой каталог новой версии сервера!
При его распаковке нужно быть внимательным:
- zip содержит подкаталоги, поэтому нужно распаковывать файл с опцией Use folder names, причем не сразу в каталог установки, а в какой-нибудь временный каталог, откуда нужные файлы уже можно перенести в каталог установленного сервера;
- zip содержит файл конфигурации ( firebird.conf/aliases.conf или ibconfig ) и файл базы пользователей ( security.fdb , admin.ib или isc4.gdb ). Переписав эти файлы поверх ваших текущих вы лишитесь не только сделанных настроек, но и списка пользователей сервера. Поэтому эти файлы желательно сразу удалить во временном каталоге, куда вы распаковали zip следуя указаниям в пункте 1.
Теперь можно просто весь корневой каталог новой версии скопировать поверх существующего корневого каталога установленного сервера. Если сервер в этот момент запущен, то разумеется, переписать ibserver.exe , fbserver.exe , firebird.exe или fb_inet_server.exe не удастся. Остановите сервер, и перепишите файлы.
Далее, после переписывания новых файлов имеет смысл скопировать новую gds32.dll/fbclient.dll в системный каталог, для того чтобы клиентская часть, используемая приложениями, точно соответствовала версии сервера.
Для InterBase действия немного отличаются, т. к. Borland в последнее время выпускает обновления только в виде полных дистрибутивов. Увы, даже для обновления InterBase 7.5.0 на 7.5.1 вам придется качать с embarcadero.com дистрибутив размером
60 мегабайт (обновление 7.5.1 SP1 содержит только файлы, и может быть легко установлено «поверх»).
Скачали? Теперь выясните, где в вашей текущей операционной системе находится каталог TEMP. Это можно сделать в том же самом окне cmd, откуда производился запуск insreg и других утилит. Выдайте команду
и операционная система вам покажет его расположение. Теперь, зная имя каталога, зайдите туда обычным Проводником (Explorer) и удалите все старые файлы и остатки от прошлых инсталляций другого ПО. Каталог temp нам нужен чистым (все файлы удалить не удастся, т.к. наверняка будут такие, которые открыты запущенными в данный момент приложеняими. Это не помешает).
Запустите инсталлятор – нужен ib_install.exe , то есть инсталлятор на Java. Инсталлятор install_windows.exe , находящийся в корне установки InterBase может запустить win32- или java-инсталлятор в зависимости от версии 7.1, 7.5 или 7.5.1. В дистрибутиве java-инсталлятор можно найти в папке \Disk1\InstData\Windows\VM . Если у вас ничего кроме win32-инсталлятора нет, то определять, какие файлы куда он записывает, можно только с помощью FileMon (sysinternals.com).
Запустили инсталлятор? Жмите смело Install Borland InterBase 7.5 – в этот момент инсталлятор распакует нужные файлы в temp, мы их скопируем, а саму инсталляцию производить не будем.
Итак, в TEMP у нас образовался каталог I1126692368 (у вас может быть любое другое имя). В нем находятся подкаталоги InstallerData и Windows. Нас интересует InstallerData/Disk1/InstData . Там находится файл Resource1.zip . Собственно, при других именах каталогов или файлов описываемый метод позволяет примерно на 90% обеспечить успешный результат.
Открываем файл Resource1.zip . А еще лучше его скопировать куда-нибудь, распаковать (с подкаталогами. ), а инсталлятору InterBase 7.5 сказать Cancel и закрыть его.
Теперь смотрите в каталоги, распакованные из Resource1.zip – здесь как раз все то, что нам нужно для «обновления поверх». C_\IB7.5\win32\Server . Не забудьте про admin.ib и ibconfig – лучше их сотрите в этом каталоге, чтобы случайно не переписать аналогичные файлы в вашей текущей установке.
Поскольку лицензионная информация для этого сервера не менялась, сервер остается работоспособным без необходимости его переустановки.
Еще раз обращаю внимание на необходимость копирования исходного каталога сервера перед всеми этими действиями. Только так вы сможете вернуть серверу работоспособное состояние в случае ошибки.
Установка серверов «рядом» и поочередный запуск
Изложенный выше вариант годится, если вам надо на конкретном сервере действительно обновить его версию, и все. Разумеется, речь идет об обновлении так называемых «минорных» версий, а не Firebird 1.0 «довести» до Firebird 1.5, или InterBase 7.0 обновить до InterBase 7.5.
Например, у InterBase 7.0 и 7.5 разные лицензии, и безусловно, разная функциональность. У Firebird 1.0 файл конфигурации называется ibconfig, а у FB 1.5 – firebird.conf , отличаются файлы пользователей, и тоже разная функциональность. Кроме того, может элементарно потребоваться проверка новой версии сервера – как она вообще работает, и есть ли смысл обновлять даже InterBase 7.5.0 до 7.5.1 (сразу скажу – смысл ЕСТЬ)? А если работа идет на Firebird 1.5 и хочется посмотреть на InterBase 7.5.1 на этой же машине?
В этом случае вам нужно устанавливать серверы рядом, то есть «параллельно». Стандартные инсталляторы в силу исторических причин могут «перебивать» друг друга, а даже если сервера и отличаются как Firebird 1.5 от InterBase 7.5, запустить их одновременно не получится (потому что они слушают по умолчанию один и тот же порт tcp). Так что без ручных манипуляций не обойтись.
Допустим, на сервере установлен Firebird 1.5 (или мы устанавливаем его первым, не важно). Надо установить InterBase 7.5, и работать с ними поочередно (можно и параллельно). Последовательность действий следующая:
- Останавливаем текущий сервер (как приложение или сервис), и убираем в конфигурации сервисов его старт как «автоматический» (меняем на «ручной»).
- Устанавливаем InterBase 7.5 в отдельный каталог (например, C:\IB75 ), как положено, триальную версию или полную с лицензиями.
- Останавливаем сервис InterBase, как и в пункте 1.
Теперь на компьютере 2 сервера, причем «центральной точкой входа» у них является gds32.dll , не так ли?
Значит для запуска того или иного сервера нам нужно проделывать следующие действия:
- разрегистрировать в реестре сервер, который установлен в данный момент
- это делается при помощи команды instreg remove
- зарегистрировать в реестре сервер, который нам нужен для работы
- это делается при помощи команды instreg install
- переписать правильный gds32.dll в системный каталог.
Автоматизировать данные действия можно при помощи cmd-файлов. Вот пример файлов, используемых у меня на компьютере
Как видите, параллельно сосуществуют InterBase 7.1, 7.5, 2007, 2009, Yaffil, Firebird 1.0, 1.5, 2.0, 2.5. Для всех сделаны такие же cmd-файлы. Раньше, правда, было еще хуже, т. к. в каталоге d:\intrbase\bin находятся порядка 15-ти разных версий ibserver.exe (в том числе и от IB 6.0, для технических целей). И запуск нужной версии был сделан как параметр, а файлы именовались ibserver_6010, ibserver_6016, 6505 и т.п. (в загашнике есть еще «неавтоматизированные» версии InterBase 4.0/4.1/4.2).
То есть, путем несложных манипуляций можно организовать попеременный запуск любых серверов на одном компьютере. Поскольку в данном случае надо четко видеть, какая именно версия interbase или firebird запущена, то никакая инсталляция или запуск сервера как сервиса не производится (в скрипте видите instsvc? нет). Версию сервера можно увидеть наведя мышь на иконку сервера в TaskBar.
Будьте предельно внимательны при поочередной работе с серверами. Вы можете открыть базу «не тем сервером», в результате чего или база будет обновлена до недопустимой версии ODS, или вы испортите метаданные (несовместимый blr).
Возвращаемся к gds32.dll . В примере командного файла нет команды copy, которая бы копировала правильный gds32.dll в системный каталог. Дело в том, что, как правило, на компьютере разработчика в момент смены сервера уже запущены программы, загрузившие gds32.dll . Тогда их придется выгружать, заменять файл, и загружать снова. Чтобы этого не делать, можно
- если вся работа идет в IBExpert – для каждого алиаса БД указать свою (правильный) клиентскую библиотеку (см. настройки алиаса БД);
- если выработать привычку к своим базам всегда коннектиться через localhost, а не через «локальный протокол», то смена gds32.dll может потребоваться только при серъезных отличиях между версиями. К примеру, gds32.dll от InterBase 7.5 прекрасно работает с Firebird 1.5 и 1.0, но gds32.dll от InterBase 2007 уже не работает с сервером Firebird 1.5 (выдает connection rejected by remote interface);
- конкретному приложению «подложить» рядом правильную gds32.dll .
Одновременный запуск
У InterBase и Firebird после установки есть
- каталог по умолчанию, прописываемый в реестре (instreg),
- файл конфигурации, находящийся в каталоге по умолчанию,
- именованные системные объекты (мютексы и т. п.) которые сервер использует при своей работе.
Если перечисленные 3 пункта не конфликтуют между собой у двух отдельно взятых серверов, то их можно запустить одновременно на одном компьютере. Кроме того, Firebird 1.5 и InterBase 7.5 могут быть сконфигурированы так, что две этих версии могут быть запущены одновременно, в любом количестве их воплощений.
Зачем это может понадобиться? Вариантов много. У вас может быть «старая» задача, которую нецелесообразно или сложно переводить на новый сервер, и одновременно «новая» задача, которую нужно реализовать на новой версии сервера. Могут быть две базы, к которым надо давать доступ через свой экземпляр сервера, для повышения надежности. И так далее.
Для обоих серверов (и между собой) для осуществления одновременного запуска нужно соблюдать некоторые правила.
Основное правило – это разведение серверов по разным портам tcp. Для старых серверов InterBase 6.0 и ниже изменить порт сервера можно только при помощи модификации записи gds_db в файле SERVICES. Причем для их же клиента изменить номер порта для соединения с сервером можно только таким же способом. Клиент Firebird 1.0 и выше – напротив, позволяет указать номер порта в строке коннекта с сервером. Для InterBase 7.5 придется конфигурировать SERVICES, добавляя альтернативные строки gds_db – в этой версии серверу можно указать, какое имя порта (не номер) использовать для работы. Сервер Firebird 1.5 позволяет указать номер порта tcp в конфигурационном файле. Таблица совместимости, то есть возможности одновременного запуска, выглядит так:
InterBase Firebird 1.5 | InterBase 7.5- XE7 | Firebird 2.x |
---|---|---|
InterBase firebird.conf , ищем параметр CreateInternalWindow (только в FB 1.5). Его надо установить в 0. Не забудьте, что символ # в файле конфигурации – это символ комментария. И для того, чтобы изменение параметра вступило в силу, его надо раскомментировать, то есть убрать # перед параметром. RemoteServiceName – Firebird-у как таковому уже давно (с версии 1.0) для работы клиента или сервера не требуется наличие записи gds_db в файле SERVICES операционной системы. Вы и так можете указать нужное имя порта в строке коннекта. RemoteServicePort – по умолчанию 3050. То есть, основной сервер будет слушать этот порт, а альтернативный сервер – какой-нибудь другой. Например 3100. Меняем параметр, и для всех приложений, которым надо присоединиться к этому, к имени сервера добавляем /3100. Отдельно имя сервера будет выглядеть так: и сервер будет слушать порт 3070, а не 3050 по умолчанию. RemoteAuxPort – это номер порта, по которому идут события (регистрируемые компонентами вроде IBEventAlerter). Если события используются, то порт надо указать явно. Главное – не забудьте открыть этот порт в Firewall, если таковой есть у вас на сервере (и где уже открыт порт 3050, и где будет открыт порт 3100 из предыдущего примера). Выбрать надо что-нибудь не конфликтующее с работающими приложениями. Помочь может утилита tcpview опять же с www.sysinternals.com. На этом этапе все Ok. Теперь, если речь идет об установке двух Firebird 1.5, то сложным моментом является идентичность имен сервисов и ключей в реестре, которые прописывают instreg и instsvc. Информацию instreg надо убрать (instreg remove), и придется самостоятельно создавать альтернативный сервис в базе сервиса. Сделать это можно используя примеры программ управления сервисами из командной строки и интерактивного. InterBase 7.5 и вышеС версии 7.5 появился режим запуска Muti-Instance, то есть возможность стартовать одновременно несколько экземпляров сервера на одной машине. Однако, Borland внедрил в клиентскую часть возможность добавления не номера порта к имени сервера, а добавление имени порта, что в определенном смысле усложняет конфигурирование одновременного запуска. Кроме того, при инсталляции сразу должна быть указана возможность использования режима Milti-Instance, как для первой установки так и для остальных. Подробно настройки Multi-instance описаны в OpGuide.pdf, здесь можно отметить следующее:
Firebird 2.x, поочередный и одновременный запускВ Firebird 2.x изменилась схема аутентификации пользователей. Собственно, с внешней стороны все осталось как было, но
Кроме этого, шифрование паролей в security2.fdb при включении параметра LegacyHash 0 производится MD5, а не DES, как это было во всех версиях IB/FB. По умолчанию используется совместимый способ (DES). Тем не менее, при установке вручную нет никаких проблем, так же как и с параллельной установкой и запуском серверов других версий. Использовать instreg, записывающий путь к серверу в реестр, категорически нельзя, это было описано выше. Например, вполне успешно работает одновременный запуск FB 1.5 и 2.0 в конфигурации
Теперь вы знаете практически все тонкости ручной установки InterBase и Firebird. В статье опущен ряд подробностей, например, ключи реестра, которые прописывает instreg – оставлю это в виде «домашнего задания», тем более что на www.sysinternals.com есть утилита regmon, которая очень похожа на filemon, уже упомянутый в этой статье. Также пропущен Firebird Embedded – собственно, никаких отличий от установки «только файлы» здесь нет, разве что не требуется запуск instreg. Дерзайте, пробуйте. Надеюсь, эта статья облегчит использование серверов Firebird и InterBase на вашем компьютере, а, значит, вы сможете уделить больше внимания качеству своих приложений. |