Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Как установить Firebird 3.0 и 4.0 на Linux

Василий Сидоров, 24 августа 2022 г.

В этой статье мы описываем установку Firebird версий 3 и 4 на популярных версиях Linux: CentOS 7, Oracle Linux 7/8, Debian 9/10, Ubuntu 18/20 и OpenSUSE 15.0.

Чтобы получить дистрибутив Firebird для Linux, используйте tar-архив с официального сайта Firebird:

Мы предполагаем, что установка выполняется от имени root или пользователя с правами sudo, и что компьютер с Linux имеет доступ в Интернет.

Обратите внимание, что некоторые команды требуют ввода данных от пользователя. Также обратите внимание, что строки с точкой с запятой (;) в конце означают, что команду можно выполнить как однострочную.

Кроме того, мы рекомендуем прочитать Release Notes для версии Firebird, которую вы собираетесь установить.

Предварительные требования

Требования к системным библиотекам для 4.0.1 и 3.0 стали одинаковыми: статическая линковка для ncurses5 и tommath0 и динамическая для ICU.

В зависимости от дистрибутива, ncurses5 будет системной библиотекой (RH7/Debian) или доступен как пакет для обратной совместимости (RH8/Debian).

Библиотека tommath будет версии 0 или версии 1 (они бинарно совместимы). Если tommath0 отсутствует, мы создадим символическую ссылку.

Другие необходимые системные инструменты - tar и curl.

Мы устанавливаем эти пакеты явно, чтобы менеджер пакетов пометил их как управляемые вручную и не удалил их автоматически.

Быстрая установка

1. Укажите максимальное количество карт памяти.

Этот шаг необязателен, но настоятельно рекомендуется для производственных систем:

Откройте файл /etc/sysctl.conf и добавьте следующую строку:

Code
vm.max_map_count = 256000

затем примените

Code
sysctl -p /etc/sysctl.conf

2. Установите необходимый репозиторий для libtommath

Для CentOS 7

Code
yum install epel-release;

Для CentOS 8

Code
dnf install epel-release;

Для Oracle Linux 7

Code
yum install oracle-epel-release-el7;

Для Oracle Linux 8

Code
dnf install oracle-epel-release-el8;

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

3. Установите пакеты и инструменты

CentOS 7 / Oracle Linux 7

Code
yum makecache;
yum install ncurses libicu libtommath;
yum install curl tar;

CentOS 8 / Oracle Linux 8

Code
dnf makecache;
dnf install ncurses-compat-libs libicu libtommath;
dnf install curl tar;

Debian 9/10, Ubuntu 18/20

Code
apt-get install libncurses5 libtommath1;
apt-get install curl tar;

Open SUSE 15

Code
zypper install libncurses5 libtommath1;
zypper install curl tar;

Версия ICU может различаться:

Debian 9

Code
apt-get install libicu57

Debian 10

Code
apt-get install libicu63

Ubuntu 18

Code
apt-get install libicu60

Ubuntu 20

Code
apt-get install libicu66

OpenSUSE 15.0

Code
zypper install libicu60_2

В дистрибутивах, где есть libtommath1 (все вышеперечисленные, кроме CentOS 7 и Oracle Linux 7), необходимо создать символическую ссылку libtommath.so.0:

Code
TM=libtommath.so;
for LIB in `find /lib* /usr/lib* -name ${TM}.1`;
do ln -s ${TM}.1 `dirname ${LIB}`/${TM}.0;
done;
unset TM;

Скрипт установки Firebird 4.0.1 и выше может создать символическую ссылку автоматически, но для Firebird 3 её нужно создать вручную.

4. Загрузите и установите Firebird

После установки необходимых инструментов и библиотек мы можем перейти к загрузке, распаковке и запуску установочного пакета.

Мы предполагаем, что DOWNLOADLINK - это ссылка с www.firebirdsql.org для загрузки необходимого Firebird.

Code
curl -L DOWNLOADLINK | tar -zxC /tmp
cd /tmp/FIREBIRD_folder
sudo ./install.sh

Здесь DOWNLOADLINK - ссылка на tar.gz, а FIREBIRD_folder - Firebird-version.build-0.architecture

где дистрибутив будет распакован командой tar -zxC /tmp

Это всё, что нужно для быстрой установки Firebird 3 или 4 на Linux.

По желанию вы можете сгенерировать оптимальные файлы конфигурации (firebird.conf и databases.conf) с помощью Калькулятора конфигурации Firebird.

Подробнее об установке Firebird

Для тех, кто хочет лучше настроить установку Firebird, мы предоставляем подробное объяснение вышеуказанных шагов.

Настройка vm.max_map_count

Firebird начиная с версии 3 эффективно использует архитектуру SuperServer с интенсивным динамическим выделением памяти. В случае высокой нагрузки и высокой частоты подключений и отключений, движок может столкнуться с ограничениями фрагментации памяти в Linux, что будет показано как ошибка 11 (ENOMEM) или ошибка 12 (munmap) в firebird.log.

Ограничение фрагментации памяти контролируется параметром vm.max_map_count, который по умолчанию имеет значение 65536.

Чтобы сохранить эту настройку после перезагрузки сервера, добавьте следующую строку в /etc/sysctl.conf

Code
vm.max_map_count = 256000

Чтобы применить её, либо перезагрузите сервер, либо выполните команду:

Code
sudo sysctl -p /etc/sysctl.conf

Планирование дискового пространства

В целом, мы рекомендуем выделить 3 отдельных раздела на сервере с базой данных Firebird: для временных файлов, для баз данных и для локальных резервных копий.

Раздел для временных файлов

Основные временные файлы - это файлы блокировок, файлы сортировки, файлы для глобальных временных таблиц и BLOB-объектов, файлы с данными мониторинга.

По умолчанию в Linux файлы сортировки и файлы с данными для глобальных временных таблиц находятся в /tmp, файлы для данных mon$ и таблиц блокировок - в /tmp/firebird.

Как определить правильный размер раздела для временных файлов?

Потенциально файлы сортировки и BLOB-файлы могут быть довольно большими, поэтому практическая рекомендация - иметь раздел для временных файлов для производственной системы с приличным количеством пользователей около 30-40 ГБ. Чтобы определить правильный размер более точно, мы рекомендуем следить за фактическими размерами временных файлов.

Небольшая проблема для такого мониторинга заключается в том, что файлы сортировки удаляются сразу после создания, поэтому их невозможно увидеть обычной командой “ls”. Чтобы их просмотреть, нужно проверить дескрипторы процесса (и они будут помечены как удалённые) следующей командой:

Code
sudo ls -lhF /proc/`pgrep firebird`/fd

В результате этой команды мы увидим содержимое псевдо-папки /proc/…/fd/

Чтобы увидеть информацию о конкретном файле в этой папке, нужно использовать команду:

Code
sudo stat -L /proc/`pgrep firebird`/fd/NNNNN

где NNNNN - дескриптор файла.

Вы можете использовать эту команду для архитектур SuperServer и SuperClassic, когда движок работает как единый процесс. Конечно, вместо pgrep firebird можно указать номер процесса Firebird вручную.

Раздел для файлов баз данных

Раздел для файлов баз данных должен быть достаточным для хранения всех файлов баз данных плюс свободное пространство, равное размеру самой большой базы данных, плюс резерв для роста на следующие 2-3 года.

Раздел для локальных резервных копий

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

Кроме того, для выполнения восстановлений на разделе с резервными копиями мы рекомендуем иметь дополнительное свободное пространство, равное размеру самой большой базы данных.

Дополнительное чтение о резервных копиях

Создание пользователя firebird (необязательно)

Скрипт установки создаёт, если не существует, пользователя и группу с именем “firebird” для выполнения всей активности Firebird с использованием этого пользователя (это лучшая практика для систем Linux).

Это также означает, что файлы баз данных и папки, где находятся базы данных и резервные копии, должны иметь владельца или права доступа для этого пользователя.

Иногда имеет смысл создать пользователя и группу “firebird” до установки:

Code
groupadd firebird &&
useradd -M -b /opt -s /sbin/nologin \
 -g firebird -u UID firebird

Для пользователя firebird мы не создаём домашнюю папку (переключатель -M), указываем только базовую папку (-b).

Shell nologin с параметром -s предотвращает стандартный вход на сервер.

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

Firebird 3.0 и 4.0 зависят от библиотек ncurses (libncurses.so.5), ICU (без привязки к версии, и они не отображаются в выводе ldd) и tommath (libtommath.so.0).

В зависимости от дистрибутива Linux нам нужно использовать имена библиотек с версиями или без них. Практические команды для копирования и вставки показаны выше, а ниже мы их описываем.

CentOS и Oracle Linux

Версия 7 содержит необходимые пакеты по умолчанию, версия 8 требует установки ncurses-compat-libs и создания символической ссылки libtommath.so.0.

Debian, Ubuntu и OpenSUSE

В версиях Debian 9 и 10, Ubuntu 18 и 20, OpenSUSE 15 нам необходимо установить libncurses5 и libtommath1, а для определения версии ICU можно использовать поиск по неполному имени:

в Ubuntu

Code
apt-cache search libicu5

в OpenSUSE 15

Code
zypper search libicu6

Детали установки Firebird

Перед установкой мы увеличили системный параметр vm.max_map_count, установили библиотеки ICU, ncurses и tommath. Затем мы проверили, что у нас есть правильные версии ncurses и tommath (libncures.so.5 и libtommath.so.0), или создали необходимые символические ссылки.

При желании мы могли создать пользователя и группу firebird.

После этого мы можем установить Firebird. Для этого переходим в папку, куда был распакован установочный пакет, и запускаем установку:

Code
./install.sh

нажимаем Enter для подтверждения установки, и при появлении запроса указываем пароль для SYSDBA.

Изначально Firebird будет установлен с файлом конфигурации по умолчанию. Конфигурация по умолчанию работает в архитектуре SuperServer со скромными значениями: кэш (DefaultDbCachePages, также называемый Page buffers) на базу данных установлен в 2048, буфер для сортировок (TempCacheLimit) составляет 64M (для сервера в v3 и на базу данных в v4).

Чтобы просмотреть незакомментированные параметры firebird.conf, можно использовать следующую команду:

Code
grep -v ^# firebird.conf | grep -v ^$

Если вы будете генерировать оптимальный файл конфигурации с помощью Firebird Configuration Calculator или вручную изменять параметры, обратите внимание, что изменения будут применены после перезапуска службы Firebird (в случае SuperServer и SuperClassic, в случае Classic необходим перезапуск всех процессов Firebird).

Обратите внимание, что начиная с Firebird 3 существуют отдельные модули systemd для SuperServer, SuperClassic и Classic.