Программирование, радиоэлектроника,
саморазвитие и частичка из моей жизни здесь...

Установка Firebird Server Classic 1.5 на Linux Ubuntu 12 (64-бита)

Натуральный логотип UbuntuВ данной заметке расскажу как установить классический, уже устаревший сервер баз данных Firebird 1.5 на 64-битной операционной системе Linux.

Сейчас уже доступна версия Firebird 2.x, тем не менее бывает что есть старое программное обеспечение, написанное и оптимизированное под версию 1.5 и миграция на 2-ю ветку сервера может стать очень сложным и не дешевым удовольствием.

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

Содержание:

  1. Предистория
  2. Установка Firebird
  3. Проверяем все ли работает
  4. В завершение

Предыстория

Так случилось, что я столкнулся проблемой установки старой версии сервера баз данных на новую операционную систему (ОС). В компании работало программное обеспечение, которое разрабатывалось для версии Firebird 1.5.

Чтобы перейти на новую версию Firebird нужно переписывать и тестировать большую часть программного кода. Программистов партнера-разработчика бросает в дрожь только от одной мысли о переходе на Firebird 2.х, да и сама компания "жмет" денег на оборудование и ресурсы, часто доходит до маразма.

Пришлось искать выход из ситуации самостоятельно, что является далеко не редкостью. Будем устанавливать классическую версию Firebird 1.5 на свежей ОС GNU/Linux Ubuntu 12, 64-битная сборка (чтобы на сервере получить доступ к 8ГБ ОЗУ).

Установка Firebird

Предполагается что у вас уже установлена GNU/Linux Ubuntu версии 12 и выше, также твой сервер должен имеет выход в интернет.

Переходим в режим Бога (root):

$ sudo -i
password:

Обновим список доступных пакетов и сделаем апгрейд установленного программного обеспечения:

apt-get update
apt-get dist-upgrade

Установим набор библиотек для поддержки 32-битных программ в 64-битной среде, а также добавим необходимые утилиты и инструменты для компиляции сервера баз данных из исходного кода.

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

apt-get install libstdc++5
apt-get install openbsd-inetd
apt-get install lib32ncurses5
apt-get install ia32-libs

Переходим к компиляции Firebird 1.5 Classic из исходных кодов. Переходим на страничку загрузки пакетов и исходных кодов: http://www.firebirdsql.org/en/firebird-1-5/#Linux

С помощью Wget или другой программы закачки, скачиваем архив: FirebirdCS-1.5.6.5026-0.i686.tar.gz (Classic for Linux, compressed tarball). Это текущая версия на момент написания этой статьи, в любом случае качаем самый свежий архив.

Следующие команды выполнят распаковку архива и полную установку сервера FirebirdCS-1.5.6.5026:

tar xzvf FirebirdCS-1.5.6.5026-0.i686.tar.gz
cd FirebirdCS-1.5.6.5026-0.i686
./install.sh

По окончании сборки будет задан запрос на смену имени суперпользователя для БД. В целях безопасности настоятельно рекомендую сменить логин и пароль по умолчанию (SYSDBA, masterkey) на что-то другое, сложное к перебору.

Теперь, когда установка прошла успешно и без ошибок, необходимо прописать пути поиска бинарных файлов и утилит  сервера БД, например чтобы можно было вызывать gbak (бекап/восстановление БД из консоли) и gfix(ремонт БД) без указания полного пути.

Для этого откроем в редакторе файл с настройками профиля:

nano /etc/profile

Добавляем в конец файла строчку:

PATH=$PATH:/opt/firebird/bin

Для выхода из редактора и сохранения изменений нажимаем CTRL+X, потом Y и ENTER. Чтобы изменения в консоли вступили в силу нужно перелогиниться.

На этом установка закончена.

Проверяем все ли работает

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

reboot

Проверяем слушает ли сервер Firebird порт 3050:

netstat -na | grep 3050

Если строчка, приведенная ниже, присутствует - значит все в порядке, сервер готов принимать соединения:

tcp  0  0 0.0.0.0:3050 0.0.0.0:*  LISTEN

Подключаемся с помощью Telnet к порту 3050 и проверяем ответит-ли нам сервер БД:

telnet localhost 3050

Если все работает то должны увидеть следующее:

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Создадим тестовую пустую базу данных (логин и пароль по умолчанию). Для этого запустим интерактивную консоль ISQL:

isql -user SYSDBA -pass masterkey

Теперь выполним следующий SQL-запрос:

CREATE DATABASE '/tmp/TEST.FDB' page_size 8192;

Для выхода из интерактивного режима в консоль нужно набрать:

quit;

Пробуем подключиться к только что созданной базе данных:

isql -user SYSDBA -pass masterkey /tmp/TEST.FDB

Сделаем выборку данных из новой БД следующим запросом:

SELECT * FROM RDB$RELATIONS;

В результате на экран должно быть выведено множество данных, это означает что все связано и работает. Отсоединимся от базы и удалим тестовую БД чтобы не захламлять /tmp :

rm /tmp/TEST.FDB

В завершение

Теперь у вас есть рабочий сервер баз данных Firebird 1.5 на современной ОС Linux Ubuntu 64bit.

Полезные ресурсы:

0 2317 Linux
Комментарии к публикации (5):
mocha #1mocha
03 Апрель 2013 22:32

Спасибо за мануал. Сделал как написано (даже 3 полных инсталляции).

Вот что не совпадает:
1) "isql -user SYSDBA -pass masterkey localhost" не работает потому что isql не находит, он хранится в /opt/firebird/bin
2) если то же самое запускать из /opt/firebird/bin тогда получаем "Statement failed, SQLCODE = -902" и предупреждение что такой базы данных как localhost нет.

Остальное +/- так как вы предсказали но если пытаюсь подключиться из другого PC, тогда получаю опять sql message=-902
Если правильно понимаю - то это что-то неверно с Permissions. Пробовал по разному - не удается.

Порт открыт, firebird user/group создается автоматически, дал permision на /tmp/TEST.FDB и для root, и для firebird - но никак не работает.

Что я делаю нетак?

0
ph0en1x #2ph0en1x
04 Апрель 2013 09:34

Здравствуйте, попробуем разобраться:

Программу isql не удается найти потому что для нее не прописан глобальный путь поиска бинарных файлов. В файл /etc/profile нужно добавить строчку

PATH=$PATH:/opt/firebird/bin

После этого, чтобы изменения вступили в силу, нужно перелогиниться.

По другому пункту - действительно localhost не нужно указывать когда подключаемся локально. Внес поправки в статью.
Причиной "SQLCODE = -902" может быть неверно указанные логин или пароль, а также возможно что по какой-то причине не установились права на доступ к базе авторизации security.fdb.

Смотрим права доступа на файл:

ls -la /opt/firebird/ | grep security.fdb

В моем случае, вывод команды выглядит вот так:

-rw-rw----  1 firebird firebird  647168 Apr  4 09:29 security.fdb

Если права отличаются то установите полный доступ на этот файл для пользователя и группы firebird и после этого уже пробуйте подключиться.

0
mocha #3mocha
04 Апрель 2013 13:58

Спасибо за поддержку.
Я не очень разбираюсь в nix, поэтому и такие, наверное, глупые вопросы и проблемы.

1) проблема решена, сегодня все хорошо, хотя файл не менял и рестарт вчера делал много раз. Моя ошибка, наверное
 мой /etc/profile файл вот такой: link to pastebin

2) Для подключения использую Flamerobin из win-pc на той же подсети.
На сервере порт проверен и открыт как и писал, проверил из win-pc - тоже 3050 открыт.

permisions на security.fdb тоже все нормально:
-rw-rw---- 1 firebird firebird 643072 Apr 4 13:04 /opt/firebird/security.fdb
-rw-rw---- 1 firebird firebird 1097728 Apr 4 13:05 /tmp/TEST.FDB

Использую username SYSDBA и пароль masterkey, правильно? Что-то далаю я не правильно...

0
ph0en1x #4ph0en1x
04 Апрель 2013 16:53

На вашем Win-PC должна быть установлена клиентская бибилиотека Firebird Client.

Может быть что сервер недоступен с вашего win-PC или порт на сервере закрыт брендмауером. Для проверки, на win-PC можно использовать telnet.

Сперва проверяем доступен ли сервер по сети с win-PC:

ping xxx.xxx.xxx.xxx

где xxx.xxx.xxx.xxx - IP-адрес сервера.

Далее проверяем открыт ли на Firebird сервере порт 3050:

telnet xxx.xxx.xxx.xxx 3050

Если получим пустой экран, то это означает что подключение установлено, служба запущена. Если же этого не случилось то нужно искать причину недоступности порта 3050.

Также стоит поэкспериментировать с настройками подключения в Flamerobin.

0
modris #5modris
10 Апрель 2013 17:07

Проблема заключалась в Flamerobin. Когда регистрируешь сервер - не надо указывать порт,  тогда все хорошо. Если указал порт (3050) тогда = error.

+1