Автоматизированное место врача от Leybasoft®
Главная » 2017 » Март » 21 » Как я устанавливал Firebird 3 на Debian 8
10:12 PM
Как я устанавливал Firebird 3 на Debian 8

В своих изысканиях я руководствовался различным материалом: раз, два, три.

Все действия выполняем из-под рута, либо через свою учетку из-под sudo.

Для FB 3.x.x на никсах, в отличие от FB 2.x.x,  "системные суперсерверы" не нужны. Поэтому xinetd можно не устанавливать. Ниже будет описан способ установки полноценного сервера. Об установке "встроенного" (embedded) сервера можно почитать тут.

 

1. Подготовка системы к установке.


Есть первый нюанс. Операционная система уже имеет в составе дистрибутива библиотеки Firebird. Как правило, это предыдущие релизы. Например, Debian 8.7.1 i386 в папке /usr/lib/i386-linux-gnu (если у вас другая разрядность, то у папки /i386-linux-gnu будет соответственно и другое название) имеет две библиотеки FB 2.5 и два симлинка (ссылки, аналоги "ярлыков" Windows).

Есть второй нюанс. После обновления репозиториев командой


# apt-get update

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

При установке программ, использующих своей работе Firebird, иногда могут возникнуть сложности с использованием клиентских библиотек "нужной" версии. Это касается программ, в которых используется т.н. статическая линковка библиотек  и создание "неправильных" ссылок на используемые клиентские библиотеки на этапе их установки. Суть проблемы в том, что программа разработчиком может быть "привязана" к системному симлинку с определенным именем, а вот сам симлинк может ссылаться на библиотеку от другой версии сервера. В результате приложение не сможет осуществить коннект к базе данных, несмотря на наличие единственного сервера FB в системе. Типичным примером такой программы под Linux является FlameRobin (суть и решение проблемы описаны здесь).


Поэтому я советую перед установкой FB3 сначала удалить все клиентские библиотеки от предыдущей, либо править симлинки вручную способом, описанным в ссылке в предыдущем абзаце.

Update(10.06.19): зеленым цветом будут обозначен аналогичный код для 64-битных систем


По умолчанию, поставленные из репов программы, сначала ищут симлинки в папке /usr/lib/i386-linux-gnu (для x64 соответственно /usr/lib/x86_64-linux-gnu), а затем в /usr/lib, если не будут найдены в предыдущей.


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

$ cd /usr/lib/i386-linux-gnu
$ ls -lH | tee [-a ~/temp/<ваше название лог-файла>.txt]


Просматриваем содержимое вывода консоли на наличие библиотек Firebird

lrwxrwxrwx 1 root root 20 Dec 13 2014 libfbclient.so.2 -> libfbclient.so.2.5.3
-rw-r--r-- 1 root root 853660 Dec 13 2014 libfbclient.so.2.5.3
lrwxrwxrwx 1 root root 19 Dec 13 2014 libfbembed.so.2.5 -> libfbembed.so.2.5.3
-rw-r--r-- 1 root root 5584332 Dec 13 2014 libfbembed.so.2.5.3


Видим две клиентских библиотеки (2-й и 4-й файлы) и два симлинка на них (соответственно 1-й и 3-й файлы). Удаляем симлинки

# unlink /usr/lib/i386-linux-gnu/libfbclient.so.2
# unlink /usr/lib/i386-linux-gnu/libfbembed.so.2.5


Клиентские библиотеки от FB2.5 можно оставить или удалить на ваше усмотрение. Я удалил во избежание:

rm -i /usr/lib/i386-linux-gnu/libfbclient.so.2.5.3 (тут с запросом подтверждения на удаление)
rm /usr/lib/libfbembed.so.2.5.3/i386-linux-gnu

Проверим на всякий случай /usr/lib
# cd /usr/lib
# cd /usr/lib # ls -lH | tee [-a /home/leyba/temp/<ваше название лог-файла>.txt]

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

Update(10.06.19): для Debain 10 выше указанные библиотеки (только версии 3.0) можно найти здесь /usr/lib64.

 

2. Собственно установка firebird.


Поставить Firebird можно установить двумя способами:

Первый способ.

Поскольку FB3 пока нет в стабильных репозиториях Дебиана, добавляем ссылки на тестовые репозитории в /etc/apt/sources.list следующим образом (забегая вперед, стоит упомянуть, что эти репозитории нужно будет удалить/закомментировать после окончания установки сервера, иначе при установке других программ и пакетов могут возникнуть проблемы). Увы, не всегда там бывает самый последний релиз. В этом недостаток этого способа. Итак, добавляем следующие ссылки:


deb-src http://ftp.ru.debian.org/debian/ testing main
deb http://ftp.ru.debian.org/debian/ testing main


Сохраняем файл и апдейтим пакеты

# apt-get update


Ставим необходимые пакеты

# apt-get install firebird3.0-utils

ставим  сервер
# apt-get install firebird3.0-server

вылезет окно с запросом пароля. В тройке изменен порядок установки пароля для SYSDBA (см. ниже), поэтому просто жмем "ОК", поскольку это окно не устанавливает пароль.

Получаем в консоли
# adduser: Warning: The home directory `/var/lib/firebird' does not belong to the user you are
# currently creating.
# Created default security3.fdb
# Job for firebird3.0.service failed. See 'systemctl status firebird3.0.service' and 'journalctl -xn' for details.
# Firebird 3.0 server not enabled or unable to start
# Not setting SYSDBA password
# Please run 'dpkg-reconfigure firebird3.0-server'
# later to set the SYSDBA password

Теперь необходимо установить пароль. Также может понадобится внести другие необходимые другие правки в конфигурационные файлы firebird.conf  и . Стопорим сервер
# service firebird3.0 stop

В Firebird 3 пароль SYSDBA  ставится вручную путем подключения isql через embedded-режим сервера (монопольное подключение, производится при отсутствии в строке коннекта названия сервера или loopback, обычно это localhost; при этом любой пароль игнорируется)
# isql-fb -user sysdba security.db
Database: security.db, User: SYSDBA
SQL>

В строке приглашении SQL> последовательно вводим две команды, завершая ввод каждой нажатием <Enter>
SQL> create or alter user SYSDBA password 'cooladmin';
SQL> commit;


Можно заодно добавить нового юзера
SQL> create user user1 password 'user1';

В тройке имена могут быть регистрозависимы, если введены в разных регистрах в кавычках, т.е.
user1 = USER1 = User1 <> "User1"

Если хотим, чтобы user1 мог создавать свои базы данных (подробности), то необходимо дать ему привилегии явно

SQL> grant create database to user user1;
SQL> commit;
SQL> quit;

Смотрим, где и что лежит.

Файлы конфигурации сервера лежат здесь /etc/firebird/3.0

Библиотеки и симлинки кладутся сюда /usr/lib/i386-linux-gnu

 

root@leyba:/usr/lib/i386-linux-gnu# ls -lH | tee
...
lrwxrwxrwx 1 root root 20 Mar 25 19:07 libfbclient.so.2 -> libfbclient.so.3.0.1
-rw-r--r-- 1 root root 1693360 Mar 25 19:07 libfbclient.so.3.0.
...


Открываем файл конфигурации, если хотим изменить какие-нибудь параметры
# nano /etc/firebird/3.0/firebird.conf

Также можно добавить алиасы в /etc/firebird/3.0/databases.conf

Теперь стартуем сервис
# service firebird3.0 start

Не забываем закомментировать ссылки на  тестовые репозитории в /etc/apt/sources.list.


И напоследок, если хотим удалить только сервер, то
# apt-get remove firebird3.0-server

если со всеми пакетами, то
# apt-get purge firebird3.0-server

 

Второй способ.

Скачиваем последний релиз отсюда
https://firebirdsql.org/en/server-packages/

Update: на момент последней правки статьи актуальным релизом была версия FB 3.0.4

Распаковываем архив куда-нибудь, например в fb_304

 

$ cd ~/fb_304

=============================================
Важное замечание: при установке на Debian 9 (и Debian 10) выявлен баг инсталлятора (CORE-5445), суть которого заключается в том, что создается некорректный симлинк на на библиотеку отсутствующую libtommath.so.0.

 

Created symlink /etc/systemd/system/multi-user.target.wants/firebird-superserver.service → /lib/systemd/system/firebird-superserver.service.
Please enter new password for SYSDBA user: <тут задается пароль>
/opt/firebird/bin/gsec: error while loading shared libraries: libtommath.so.0: cannot open shared object file: No such file or directory

Fatal error running 'systemctl --quiet start firebird-superserver.service' - exiting


Поэтому сначала необходимо установить пакет libtommath-dev
 

$ sudo apt-get install libtommath-dev


, затем создать симлинк libtommath.so.0, т.к. инсталлятор использует его

$ sudo ln -sf /usr/lib/i386-linux-gnu/libtommath.so.1.0.0 /usr/lib/i386-linux-gnu/libtommath.so.0 

для Debian 10 amd64 лучше сделать так
$ sudo ln -sf /usr/lib/x86_64-linux-gnu/libtommath.so /usr/lib/x86_64-linux-gnu/libtommath.so.0 
поскольку libtommath.so является симлинком на libtommath.so.1.1.0 (который, очевидно, и используется 64-битным Firebird)

Важное замечание 2: при установке Firebird на Debian 10 amd64 встретилась еще одна ошибка:
$ /opt/firebird/bin/gsec: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
Fatal error running 'systemctl --quiet start firebird-superserver.service' - exiting

"Лечится" установкой недостающего пакета:
$ sudo apt-get install libncurses5

Удаляем неудачный установленный  firebird (если успели поставить)
$ sudo rm -Rf /opt/firebird

либо удалить его штатных деинсталлятором
$ cd /opt/firebird/bin
$ sudo ./FirebirdUninstall.sh

Теперь можно запускать установку (по умолчанию ставится суперсервер)

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

# ~/fb_304$ sudo ./install.sh

Firebird 3.0.4.33054-0.i686 Installation

Press Enter to start installation or ^C to abort
Extracting install data
Please enter new password for SYSDBA user: cooladmin
Install completed


При этом способе мы получаем версию релиза, выбранную самими. Пароль для sysdba определяется в процессе установки.

Корневой каталог установки ставится сюда /opt/firebird. При запуске утилит можно указывать в консоли либо абсолютный путь ним, либо добавить пути к бинарникам в PATH
$ sudo nano /etc/profile

пишем в конец файла
PATH=$PATH:/opt/firebird:/opt/firebird/bin

Теперь перелогиниваемся.


Для смены пароля подключаемся в embedded-режиме сервера (без указания имени сервера или loopback в строке коннекта):

leyba@leyba:~$ isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect '/opt/firebird/examples/empbuild/employee.fdb' user sysdba password '1';
Database: '/opt/firebird/examples/empbuild/employee.fdb', User: SYSDBA
SQL> create or alter user SYSDBA password '111';
SQL> commit;


Update: если при попытке коннекта вдруг получаем ошибку

Statement failed, SQLSTATE = 08006
Can not access lock files directory /tmp/firebird/

то даем права на эту папку группе и пользователю firebird (а лучше добавить сначала в группу пользователя <user>, см .ниже, и затем добавить также и его)

$ sudo chown -R firebird:firebird /tmp/firebird

и перелогиниваемся

Теперь коннектимся обычным способом с указанием нового пароля


SQL> connect 'localhost:/opt/firebird/examples/empbuild/employee.fdb' user sysdba password '111';
Database: 'localhost:/opt/firebird/examples/empbuild/employee.fdb', User: SYSDBA

SQL> quit;

 

3. Доработка напильником.


После установки сервера проделываем следующие манипуляции (добавляем sudo, если манипуляции производим не из-под root'а).

Создаем папку для базы в своей домашней папке

$ mkdir /home/leyba/db_dir

Даем права группе firebird и пользователю firebird на эту папку и рекурсивно на все вложенные папки и файлы (ключ -R в строке)
$ sudo chown -R firebird:firebird /home/leyba/db_dir

Чтобы логиниться к базе не-root юзеру, необходимо добавить учетку этого юзера в группу firebird
$ sudo adduser <user> firebird

Можно проверить, все ли правильно
$ grep firebird /etc/group

Все ОК
$ firebird:x:126:leyba

Даем права на папку и ее содержимое любому юзеру из группы firebird (кратко и на примере о правах на папки и файлы)
$ sudo chmod -R 775 /home/leyba/db_dir

Выходим из-под рута и пытаемся создать в указанной папке базу под своей учеткой от имени SYSDBA
$ isql-fb (при установке сервера из репов) или
$ isql (при установке сервера из архива)

Use CONNECT or CREATE DATABASE to specify a database

SQL> CREATE DATABASE 'localhost:/home/leyba/db_dir/sysdba_db.fdb' user sysdba password 'cooladmin' page_size 16384 DEFAULT CHARACTER SET UTF-8;
SQL> commit;

SQL> connect 'localhost:/home/leyba/db_dir/sysdba_db.fdb' user sysdba password 'cooladmin';
Database: 'localhost:/home/leyba/db_dir/sysdba_db.fdb', User: SYSDBA
SQL>quit;



Update 1: в случае запуска
- полноценного сервера правами на созданный файл базы данных обладает пользователь, от имени которого установлен сервер
- embedded сервера правами на созданный файл базы данных обладает пользователь, от имени которого запущен сервер

Update 2: некоторые приложения или компоненты (например, IBX by Tony Whyman в Лазарусе) требуют наличие переменной окружения FBLIB, которая бы указывала на клиентскую библиотеку 
libfbclient.so.3.0.1
Чтобы прописать ее для всех пользователей (удаленных и локальных), проще стразу отредактировать файл /etc/environment

$ sudo vi /etc/environment


Добавляем строку (имя файла может меняться в зависимости от версии)

FBLIB='/opt/firebird/lib/libfbclient.so.3.0.1'

сохраняем и закрываем файл, перелогиниваемся.


Для комфортной работы с базами через GUI ставим flamerobin

$ sudo apt-get install flamerobin

чтобы создать бд в нем, нужно в Database path выбрать папку и ввести там же имя БД.



Update: если ставить Firebird вторым способом (из архива), то соединение flamerobin'а с базой блокируется

*** IBPP::SQLException ***
Context: Database::Connect
Message: isc_attach_database failed

SQL Message : -923
Connection not established

Engine Code    : 335544421
Engine Message :
connection rejected by remote interface



Почему так происходит, описано здесь

 
 
Категория: Firebird | Просмотров: 7018 | Добавил: leyba | Рейтинг: 5.0/1
Всего комментариев: 0
avatar