Установка сервера FireBird 2.1 на FreeBSD 6.2

Понадобилось для одного проекта поставить FireBird версии не ниже 2.1 на довольно старенькую FreeBSD версии 6.2. В портах FreeBSD идет только версия 2.0. Админы клиента попытались, получили кучу ошибок компиляции, сдались, и пришлось думать уже мне, хоть последний раз с FreeBSD я общался лет 8 назад.

FreeBSD

Во-первых, понадобятся последние порты, чтобы быть уверенным, что инструменты для компиляции и сборки удовлетворяют требованиям разработчика(далее практически все комады выполяются от root):

# portsnap fetch && portsnap extract && portsnap update

Устанавливаем из портов последний autoconf-archive, он притащит все недостающие зависимости:

# cd /usr/ports/devel/autoconf-archive
# make depends && make && make install

Разумеется, понадобится последняя версия FireBird 2.1 (на установке subversion не останавливаюсь):

$ svn co https://firebird.svn.sourceforge.net/svnroot/firebird/firebird/branches/B2_1_Release/
$ cd B2_1_Release
$ ./autogen.sh [options]

Если запустить autogen.sh по-умолчанию, начинается свистопляска во время компиляции, хотя конфигурация проходит без замечаний:

If the result of the above commands looks okay to you, go to the directory
source in the ICU distribution to build ICU. Please remember that ICU needs
GNU make to build properly...

The Firebird2 package has been configured with the following options:

Architecture : ClassicServer
Debug : disabled
64 bit I/O for 32-bit platforms : enabled
Raw devices : enabled
Lock manager : enabled
Service name : gds_db
Service port : 3050
GPRE modules : c_cxx.cpp
Install Dir : /usr/local/firebird

Now type `make' to compile Firebird2

Во-первых, исходный код оптимизирован под Linux, на FreeBSD возникает ошибка с несоответствием количеств аргументов макроса __weak_reference, которого на Linux просто нет.

Затем получаем такое сообщение об ошибке:

/usr/bin/ld: cannot find -lgcc_eh

Проблема оказалась в версии компилятора, в поставляемом с FreeBSD 6.2 gcc 3.4.6 необходимые файлы отсутствуют в принципе.

Решение проблемы:
1. Указать требуемые параметры комиляции, например:

$ ./autogen.sh --with-gnu-ld --with-system-editline --disable-raw-devices

2. В файлах gen/Makefile.libfbclient и gen/make.defaults убрать опцию компилятора -lgcc_eh. Насколько я понял, она специфична для gcc4 и без нее используется старый метод генерации кода для обработки исключений (Exception Handlin), кототый дает менее компактный и быстрый код.

Далее собираем и устанавливаем сервер:

$ /usr/local/bin/gmake
# /usr/local/bin/gmake install

Проблема компиляции решена. Посмотрим, как у клиента будет работать.

Установка FireBird на FreeBSD обсуждается на форуме SQL.ru: FireBird на FreeBSD.

Linux

После получения первых ошибок компиляции была сделана проверка на Linux (Ubuntu 9.04 Jaunty), чтобы исключить возможность неработоспособного билда. Здесь возникли свои сложности, например сообщение о ненайденном termcap. Кроме пакета build-essential, понадобятся так же ncurses-dev и libtool:

$ sudo apt-get update
$ sudo apt-get install libtool ncurses-dev

После установки этих пакетов билд FireBird 2.1 скомпилировался и собрался без проблем, значит с ним все в порядке.

Share/Bookmark

Leave a comment

Your comment