Comment installer Firebird 3.0 et 4.0 sur 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:
- Firebird 4: https://firebirdsql.org/en/firebird-4-0/
- Firebird 3: https://firebirdsql.org/en/firebird-3-0/
Мы предполагаем, что установка выполняется от имени 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 и добавьте следующую строку:
vm.max_map_count = 256000
затем примените
sysctl -p /etc/sysctl.conf
2. Установите необходимый репозиторий для libtommath
Для CentOS 7
yum install epel-release;
Для CentOS 8
dnf install epel-release;
Для Oracle Linux 7
yum install oracle-epel-release-el7;
Для Oracle Linux 8
dnf install oracle-epel-release-el8;
Для других дистрибутивов необходимые пакеты должны быть доступны в основных репозиториях.
3. Установите пакеты и инструменты
CentOS 7 / Oracle Linux 7
yum makecache;
yum install ncurses libicu libtommath;
yum install curl tar;
CentOS 8 / Oracle Linux 8
dnf makecache;
dnf install ncurses-compat-libs libicu libtommath;
dnf install curl tar;
Debian 9/10, Ubuntu 18/20
apt-get install libncurses5 libtommath1;
apt-get install curl tar;
Open SUSE 15
zypper install libncurses5 libtommath1;
zypper install curl tar;
Версия ICU может различаться:
Debian 9
apt-get install libicu57
Debian 10
apt-get install libicu63
Ubuntu 18
apt-get install libicu60
Ubuntu 20
apt-get install libicu66
OpenSUSE 15.0
zypper install libicu60_2
В дистрибутивах, где есть libtommath1 (все вышеперечисленные, кроме CentOS7 и Oracle Linux 7), необходимо создать символическую ссылку libtommath.so.0:
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.
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 Configuration Calculator.
Более подробно об установке Firebird
Для тех, кто хочет лучше настроить установку Firebird, мы предоставляем подробное объяснение вышеуказанных шагов.
Настройка vm.max_map_count
Firebird начиная с версии 3 эффективно использует архитектуру SuperServer с интенсивным динамическим выделением памяти. В случае высокой нагрузки и высокой частоты подключений и отключений, движок может столкнуться с ограничениями фрагментации памяти в Linux, что будет показано как ошибка 11 (ENOMEM) или ошибка 12 (munmap) в firebird.log.
Ограничение фрагментации памяти контролируется параметром vm.max_map_count, который по умолчанию имеет значение 65536.
Чтобы сохранить эту настройку после перезагрузки сервера, добавьте следующую строку в /etc/sysctl.conf
vm.max_map_count = 256000
Чтобы применить ее, либо перезагрузите сервер, либо выполните команду:
sudo sysctl -p /etc/sysctl.conf
Планирование дискового пространства
В целом, мы рекомендуем выделить 3 отдельных раздела на сервере с базой данных Firebird: для временных файлов, для баз данных и для локальных резервных копий.
Раздел для временных файлов
Основные временные файлы: файлы блокировок, файлы сортировки, файлы для глобальных временных таблиц и BLOB-объектов, файлы с данными мониторинга.
По умолчанию в Linux файлы сортировки и файлы с данными для глобальных временных таблиц находятся в /tmp, файлы для данных mon$ и таблиц блокировок - в /tmp/firebird.
Как определить правильный размер раздела для временных файлов?
Потенциально, файлы сортировки и BLOB-файлы могут быть довольно большими, поэтому практическая рекомендация - иметь раздел для временных файлов для производственной системы с приличным количеством пользователей около 30-40 ГБ. Чтобы определить правильный размер более точно, мы рекомендуем следить за фактическими размерами временных файлов.
Небольшая проблема для такого мониторинга заключается в том, что файлы сортировки удаляются сразу после создания, поэтому их невозможно увидеть обычной командой “ls”. Чтобы их просмотреть, нам нужно проверить дескрипторы процесса (и они будут помечены как удаленные) следующей командой:
sudo ls -lhF /proc/`pgrep firebird`/fd
В результате этой команды мы увидим содержимое псевдо-папки /proc/…/fd/
Чтобы увидеть информацию о конкретном файле в этой папке, нужно использовать команду:
sudo stat -L /proc/`pgrep firebird`/fd/NNNNN
где NNNNN - дескриптор файла.
Вы можете использовать эту команду для архитектур SuperServer и SuperClassic, когда движок работает как единый процесс. Конечно, вместо pgrep firebird можно указать номер процесса Firebird.
Раздел для файлов баз данных
Раздел для файлов баз данных должен быть достаточным для хранения всех файлов баз данных плюс свободное место, равное размеру самой большой базы данных, плюс резерв для роста на следующие 2-3 года.
Раздел для локальных резервных копий
Как минимум, раздел для локальных резервных копий должен быть достаточным для хранения всех локальных резервных копий плюс резервная копия самой большой базы данных.
Кроме того, для выполнения восстановлений на разделе с резервными копиями мы рекомендуем иметь дополнительное свободное место, равное размеру самой большой базы данных.
Дополнительное чтение о резервных копиях
Создание пользователя firebird (необязательно)
Скрипт установки создает, если не существует, пользователя и группу с именем “firebird” для выполнения всей деятельности Firebird с использованием этого пользователя (это лучшая практика для систем Linux).
Это также означает, что файлы баз данных и папки, где находятся базы данных и резервные копии, должны иметь владельца или права доступа для этого пользователя.
Иногда имеет смысл создать пользователя и группу “firebird” перед установкой:
groupadd firebird &&
useradd -M -b /opt -s /sbin/nologin \
-g firebird -u UID firebird
Для пользователя firebird мы не создаем домашнюю папку (переключатель -M), указываем только базовую папку (-b).
Оболочка 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
apt-cache search libicu5
в OpenSUSE 15
zypper search libicu6
Детали установки Firebird
Перед установкой мы увеличили системный параметр vm.max_map_count, установили библиотеки ICU, ncurses и tommath. Затем мы проверили, что у нас есть правильные версии ncurses и tommath (libncures.so.5 и libtommath.so.0), или создали необходимые символические ссылки.
Опционально, мы могли создать пользователя и группу firebird.
После этого мы можем установить Firebird. Для этого переходим в папку, где был распакован установочный пакет, и запускаем установку:
./install.sh
нажмите Enter для подтверждения установки, и когда будет предложено, укажите пароль для SYSDBA.
Изначально Firebird будет установлен с файлом конфигурации по умолчанию. Конфигурация по умолчанию работает как архитектура SuperServer со скромными значениями: кэш (DefaultDbCachePages, также называемый Page buffers) для каждой базы данных установлен на 2048, буфер для сортировок (TempCacheLimit) - 64M (для сервера в v3 и для каждой базы данных в v4).
Чтобы просмотреть не закомментированные параметры firebird.conf, вы можете использовать следующую команду:
grep -v ^# firebird.conf | grep -v ^$
Если вы сгенерируете оптимальный файл конфигурации с помощью Firebird Configuration Calculator или измените параметры вручную, обратите внимание, что изменения будут применены после перезапуска службы Firebird (в случае SuperServer и SuperClassic, в случае Classic необходим перезапуск всех процессов Firebird).
Обратите внимание, что начиная с Firebird 3 существуют отдельные модули systemd для SuperServer, SuperClassic и Classic.