Автоматизированное место врача от Leybasoft®
Главная » 2017 » Март » 30 » Некоторые настройки FlameRobin на Debian
11:09 AM
Некоторые настройки FlameRobin на Debian
Одним из безальтернативных нативных инструментов администрирования firebird с GUI-шным интерфейсом на линуксе является FlameRobin. Из репозитариев он ставится так
:~$ sudo apt-get install flamerobin

Если и сервер firebird ставится из репозиториев, то подключения из flamerobin к базам осуществляется без проблем. Однако, когда я установил Firebird 3.0.2 из архива при помощи инсталлятора, то при попытке коннекта получил ошибку
*** 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



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

FlameRobin статически слинкован с симлинком libfbclient.so.2, который в вашей системе наверняка ссылается на клиентские библиотеки от другой версии firebird. Чтобы увидеть это наглядно, делаем следующее:
:~$ ldd /usr/bin/flamerobin

...
libfbclient.so.2 => /usr/lib/i386-linux-gnu/libfbclient.so.2 (0xb655b000)
...

Видим, что flamerobin, слинкованный с libfbclient.so.2, при коннекте к базе использует симлинк /usr/lib/i386-linux-gnu/libfbclient.so.2. Теперь смотрим, куда "смотрит" этот симлинк (для удобства просмотра  или протоколирования можно вывести содержимое консоли в лог-файл - добавьте к командной строке содержимое квадратных скобок)


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

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


Увы, симлинк libfbclient.so.2 ссылается на /usr/lib/i386-linux-gnu/libfbclient.so.2.5.3, а не на /opt/firebird/lib/libfbclient.so.3.0.2

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

Смотрим содержимое папки /usr/lib
:~$ cd /usr/lib
:~$ ls -lH | tee
...
lrwxrwxrwx 1 root root 32 Mar 26 14:43 libfbclient.so -> /opt/firebird/lib/libfbclient.so
lrwxrwxrwx 1 root root 34 Mar 26 14:43 libfbclient.so.2 -> /opt/firebird/lib/libfbclient.so.2
lrwxrwxrwx 1 root root 38 Mar 26 14:43 libfbclient.so.3.0.2 -> /opt/firebird/lib/libfbclient.so.3.0.2
...

Таким образом, инсталлятор из архива "правильно" поставил симлинки на свои библиотеки, но не учел, что в подпапке /i386-linux-gnu есть симлинки с такими же именами разработчики Flamerobin поместят симлинки с таким же именами  и жестко привяжут к ним свою софтину. А потому симлинк /usr/lib/i386-linux-gnu/libfbclient.so.2 (который ссылается на libfbclient.so.2.5.3) будет "виден" программами раньше, чем симлинк /usr/lib/libfbclient.so.2 (который ссылается /opt/firebird/lib/libfbclient.so.2, а тот в свою очередь ссылается на /opt/firebird/lib/libfbclient.so.3.0.2).

Таким образом, чтобы FlameRobin при коннекте к базе "цеплял" библиотеку "нужной" нам версии сервера firebird, можно выбрать один из двух вариантов:

1. удалить "неправильные" симлинки из usr/lib/i386-linux-gnu (тогда симлинки будут браться из usr/lib)


:~$ sudo unlink /usr/lib/i386-linux-gnu/libfbclient.so.2
:~$ sudo unlink /usr/lib/i386-linux-gnu/libfbembed.so.2.5



2. удалить и пересоздать симлинки в usr/lib/i386-linux-gnu с новыми ссылками
:~$ sudo unlink /usr/lib/i386-linux-gnu/libfbclient.so.2
:~$ sudo ln -s /opt/firebird/lib/libfbclient.so.3.0.2 /usr/lib/i386-linux-gnu/libfbclient.so.2 

Первый вариант проще, второй надежнее ;)

Я выбрал второй вариант - создал новый симлинк в /usr/lib/i386-linux-gnu. Смотрим, что получилось
:~$ cd /usr/lib/i386-linux-gnu
:~$ ls -lH | tee
...
lrwxrwxrwx 1 root root 38 Apr 1 02:32 libfbclient.so.2 -> /opt/firebird/lib/libfbclient.so.3.0.2
-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
...

Таким образом, теперь libfbclient.so.2 ссылается на "правильную" версию клиентской библы /opt/firebird/lib/libfbclient.so.3.0.2

Запускаем FlameRobin




Вуаля...

Update: все вернется к исходному статусу, как только будет запущена команда обновления пакетов из репозитариев
:~$ sudo apt-get update

и придется повторять все сначала...
Категория: Firebird | Просмотров: 2282 | Добавил: leyba | Рейтинг: 0.0/0
Всего комментариев: 0
avatar