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 при коннекте к базе "цеплял" библиотеку "нужной" нам версии сервера 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
и придется повторять все сначала... |
|
Всего комментариев: 0 | |