Цю сторінку перекладено машинним перекладом. Читайте англійський оригінал. English

Бібліотека IBSurgeon

Як встановити Firebird 3.0 та 4.0 на Linux

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

В этой статье мы описываем установку Firebird версий 3 и 4 на популярных версиях Linux: CentOS 7, Oracle Linux 7/8, Debian 9/10, Ubuntu18/20 и OpenSUSE15.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 (все вышеперечисленные, кроме CentOS7 и 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.