четверг, 14 февраля 2013 г.

Настройка доступа к Firebird/interBase Server через ODBC. Ubuntu 12.04


Вдогонку к "Настройка доступа к Microsoft SQL Server через ODBC. Ubuntu 12.04" решил описать связку Linux->Firebird/InterBase.

Устанавливаем драйвер:

Установка необходимых пакетов:

$sudo apt-get install unixodbc unixodbc-bin unixodbc-dev odbcinst firebird2.5-super libfbclient2

Создаем необходимый симилинк:
#Для i386
$sudo ln -s /usr/lib/libfbclient.so.2 /usr/lib/libfbclient.so

#Для x86_64
$sudo ln -s /usr/lib/x86_64-linux-gnu/libfbclient.so.2 /usr/lib/x86_64-linux-gnu/libfbclient.so


На момент написания статьи последней версией драйвера была 2.0.1.152.
Последнюю версию на текущий момент см. тут

Качаем драйвер и копируем его куда следует:
#Для i386

$wget http://sourceforge.net/projects/firebird/files/firebird-ODBC-driver/2.0.1-Release/OdbcFb-LIB-2.0.1.152.i686.gz
$tar zxvf OdbcFb-LIB-2.0.1.152.i686.gz
$sudo cp -f libOdbcFb.so /usr/lib/odbc/
$sudo chmod +x /usr/lib/odbc/libOdbcFb.so

#Для x86_64
Для 64-битной системы драйвер оказался недоработанным (косяки работы с датой и "съедались" некоторые буквы у char`в). Пришлось собирать из svn свой.
$wget https://dl.dropbox.com/u/61986139/libOdbcFb.so.tar.gz
$tar zxvf libOdbcFb.so.tar.gz
$sudo cp -f libOdbcFb.so /usr/lib/x86_64-linux-gnu/odbc/
$sudo chmod +x /usr/lib/x86_64-linux-gnu/odbc/libOdbcFb.so



Собсна, переходим к конфигурированию...

Настраиваем драйвер:

$sudo mcedit /etc/odbcinst.ini 

и  добавляем секцию для Firebird/InterBase:

#Для i386
[Firebird]
Description = Firebird/InterBase(r) driver
Driver  = /usr/lib/odbc/libOdbcFb.so
Setup  = /usr/lib/odbc/libOdbcFb.so
FileUsage = 1
UsageCount = 4

#Для x86_64
[Firebird]
Description = Firebird/InterBase(r) driver
Driver  = /usr/lib/x86_64-linux-gnu/odbc/libOdbcFb.so
Setup  = /usr/lib/x86_64-linux-gnu/odbc/libOdbcFb.so
FileUsage = 1
UsageCount = 4



Настраиваем непосредственно систему ODBC. Создаем DSN.
Сделать это можно 2-мя способами:

1. Через GUI:

Используя мастер настройки:
$ODBCCreateDataSourceQ4

Используя ODBC администратор:
$ODBCManageDataSourcesQ4


2. Путем редактированию конфигов:

$sudo mcedit /etc/odbc.ini

Добавляем в него соответствующую секцию:

#Для i386
[MixPos]
Description = Firebird/InterBase(r) driver
Driver  = Firebird

#Если сервер Выньдовый, то путь к БД пишется в таком формате
#Dbname = 192.168.10.41:d:\mixpos\data\mixdata.fdb

#Если сервер на Linux, то путь к БД пишется в таком формате
Dbname  = 192.168.10.1:/mnt/base/mixpos/mixdata.fdb

User                                = SYSDBA
Password                         = masterkey
Role                                = 
CharacterSet                   = WIN1251
ReadOnly                        = No
NoWait                           = No
Dialect                            = 3
QuotedIdentifier              = Yes
SensitiveIdentifier           = No
AutoQuotedIdentifier       = No

#Для x86_64
[MixPos]
Description = Firebird/InterBase(r) driver
Driver  = Firebird

#Если сервер Выньдовый, то путь к БД пишется в таком формате
#Dbname = 192.168.10.41:d:\mixpos\data\mixdata.fdb

#Если сервер на Linux, то путь к БД пишется в таком формате
Dbname  = 192.168.10.1:/mnt/base/mixpos/mixdata.fdb

User                                = SYSDBA
Password                         = masterkey
Role                                = 
CharacterSet                   = WIN1251
ReadOnly                        = No
NoWait                           = No
Dialect                            = 3
QuotedIdentifier              = Yes
SensitiveIdentifier           = No
AutoQuotedIdentifier       = No


где:
Description - описание драйвера.
Driver - имя раздела из файла /etc/odbcinst.ini.
Dbname - путь к  базе данных на Firebird/InterBase сервере, к которой нужно получить доступ.
User и Password - пользователь, грантованный на работу с данной БД.
Role - роль, с которой осуществляется подключение к БД.

CharacterSet - кодировка БД.


Конфигурирование завершено...


Устанавливаем параметры драйвера в систему:

$sudo odbcinst -i -d -f /etc/odbcinst.ini

Устанавливаем настройки ODBC в систему:

$sudo odbcinst -i -s -l -f /etc/odbc.ini

!!!!ВАЖНО!!!!
Если в /etc/odbc.ini вносятся какие-либо изменения, процедуру установки ностроек ODBC в систему, необходимо повторить (sudo odbcinst -i -s -l -f /etc/odbc.ini)


Проверка установленных DSN:

$odbcinst -s -q

Проверка подключения к БД:

$isql MixPos

видим что то типа:

+---------------------------------------+
| Connected!                                 |
|                                                   |
| sql-statement                             |
| help [tablename]                        |
| quit                                            |
|                                                   |
+---------------------------------------+
SQL> 
 

Чтобы удалить параметры драйвера из системы:
$sudo odbcinst -u -d -n Firebird

Чтобы удалить регистрацию DSN из системы:
$sudo odbcinst -u -s -l -n MixPos

Во избежание конфликтов, лучше удалить локальный настройки ODBC:
$rm /home/name/.odbc.ini


Все, можно работать.

8 комментариев:

  1. После sudo apt-get install unixodbc unixodbc-bin unixodbc-dev odbcinst firebird2.5-super libfbclient2
    файл libfbclient.so отсутствует.
    Поэтому шаг
    >>Создаем необходимый симилинк:
    >>#Для i386
    >>$sudo ln -s /usr/lib/libfbclient.so.2 /usr/lib/libfbclient.so
    выолнить затруднительно

    ОтветитьУдалить
    Ответы
    1. Библиотеки "/usr/lib/libfbclient.so" и не должно по-умолчанию быть. Для этого и создается симилинк

      Удалить
    2. что говорит:
      $ls -la /usr/lib | grep libfbclient

      Удалить
    3. На последнем этапе выполняю команду $isql MixPos
      И никакой реакции, просто висит.

      вот проверка ссылок
      # ls -la /usr/lib | grep libfbclient
      lrwxrwxrwx 1 root root 25 февр. 26 11:58 libfbclient -> /usr/lib/libfbclient.so.2
      lrwxrwxrwx 1 root root 25 февр. 25 15:30 libgds.so -> /usr/lib/libfbclient.so.2
      при выполнении
      $php -i | grep PDO
      PDO
      PDO support => enabled
      PDO drivers => mysql, odbc
      PDO Driver for MySQL => enabled
      PDO_ODBC
      PDO Driver for ODBC (unixODBC) => enabled
      Подскажите в каком направлении копать?

      Удалить
    4. $isql MixPos я просто не дождался )) подключение прошло. Но другая проблема осталась.К php прикрутить видимо не удалось, т.к. сайт, использующий подключение к базе файербёрда выдаёт ошибку failed to open the DB connection: could not find driver. Не подскажите как к php прикрутить драйвер?

      Удалить
    5. как подключаетесь из php?
      http://www.php.net/manual/ru/ref.pdo-firebird.php - пробовали?

      Удалить
    6. этот способ подразумевает сборку из исходников, но не умею этого делать к сожалению.
      Пытался подключится по вот такому методу: http://www.firebirdfaq.org/faq234/ но ошибка php5enmod команда не найдена.

      Удалить
  2. Здравствуйте! Могли бы Вы настроить firebird драйвер для работы с php на ubuntu server? за умеренную оплату разумеется. Моя почта o.starigin@gmail.com

    ОтветитьУдалить