Table of Contents

Firebird 3 и Firebird 5 на одной Ubuntu-машине

Теперь картина полная. У тебя Firebird 3.0.10 запускается через /lib/systemd/system/firebird-superserver.service, причём путь /opt/firebird жёстко прописан в ExecStart. Значит, можно аккуратно перевести его в /opt/firebird3, а Firebird 5 развернуть отдельно в /opt/firebird5. Официальная документация подтверждает, что Firebird допускает несколько серверов на одной машине, а содержимое Linux-kit можно извлекать из buildroot.tar.gz. (Home)

Я бы делал так.

1. Остановить текущий FB3 и отключить его старый unit

sudo systemctl stop firebird-superserver.service
sudo systemctl disable firebird-superserver.service

Проверить:

sudo ss -lntp | grep 3050

Ничего не должно быть.

2. Переименовать текущую установку

sudo mv /opt/firebird /opt/firebird3

Проверить:

ls -ld /opt/firebird3

3. Распаковать Firebird 5

cd /home/denis/Downloads/0_dist/firebird
mkdir -p /tmp/fb5dist
 
tar xzf Firebird-5.0.4.1812-0-linux-x64.tar.gz -C /tmp/fb5dist

Найти внутренний архив:

find /tmp/fb5dist -name buildroot.tar.gz

У тебя должен появиться путь примерно такой:

/tmp/fb5dist/Firebird-5.0.4.1812-0-linux-x64/buildroot.tar.gz

Проверить содержимое:

tar tzf /tmp/fb5dist/Firebird-5.0.4.1812-0-linux-x64/buildroot.tar.gz | head -30

Внутри должно быть дерево /opt/firebird. Документация Firebird прямо указывает, что необходимые файлы находятся в /opt/firebird внутри buildroot.tar.gz. (Home)

4. Извлечь FB5

sudo mkdir -p /tmp/fb5root
 
sudo tar xzf \
/tmp/fb5dist/Firebird-5.0.4.1812-0-linux-x64/buildroot.tar.gz \
-C /tmp/fb5root

Теперь:

ls /tmp/fb5root/opt/firebird

Перемещаем:

sudo mv /tmp/fb5root/opt/firebird /opt/firebird5

Проверяем:

ls -ld /opt/firebird3 /opt/firebird5

Firebird 5.0.4.1812 — официальный актуальный Linux x64 build ветки 5.0. (Home)

5. Не запускай ''install.sh'' FB5

Это здесь принципиально. Стандартный install.sh рассчитан на системную установку в /opt/firebird и выполняет дополнительные системные изменения. Нам они не нужны, потому что мы сознательно делаем параллельные экземпляры. Официальная документация рекомендует install.sh для обычной установки, но отдельно подтверждает возможность ручного filesystem-copy deployment. (Home)

6. Проверить бинарники FB5

/opt/firebird5/bin/isql -z

Ожидается примерно:

ISQL Version: LI-V5.0.4...

Проверь зависимости:

ldd /opt/firebird5/bin/firebird | grep "not found"
ldd /opt/firebird5/bin/isql | grep "not found"

Если вывода нет — хорошо.

7. Создать новый service для FB3

sudo nano /etc/systemd/system/firebird3.service

Содержимое:

[Unit]
Description=Firebird 3 Database Server
After=network.target
Conflicts=firebird5.service
 
[Service]
User=firebird
Group=firebird
Type=forking
Environment=FIREBIRD=/opt/firebird3
ExecStart=/opt/firebird3/bin/fbguard -daemon -forever
StandardError=journal
 
[Install]
WantedBy=multi-user.target

8. Создать service для FB5

sudo nano /etc/systemd/system/firebird5.service

Содержимое:

[Unit]
Description=Firebird 5 Database Server
After=network.target
Conflicts=firebird3.service
 
[Service]
User=firebird
Group=firebird
Type=forking
Environment=FIREBIRD=/opt/firebird5
ExecStart=/opt/firebird5/bin/fbguard -daemon -forever
StandardError=journal
 
[Install]
WantedBy=multi-user.target

Здесь важно Conflicts=: systemd не позволит обоим сервисам работать одновременно.

9. Перечитать конфигурацию systemd

sudo systemctl daemon-reload

10. Проверить, что FB3 после переноса запускается

sudo systemctl start firebird3

Проверяем:

systemctl status firebird3 --no-pager
sudo ss -lntp | grep 3050

И подключаемся именно клиентом FB3:

/opt/firebird3/bin/isql -z

Если нужна база:

/opt/firebird3/bin/isql \
  -user SYSDBA \
  -password masterkey \
  localhost:/путь/к/базе.fdb

11. Проверить переключение на FB5

sudo systemctl stop firebird3
sudo systemctl start firebird5

Проверить:

systemctl status firebird5 --no-pager
sudo ss -lntp | grep 3050

И:

/opt/firebird5/bin/isql -z

12. Переключение теперь выглядит так

На Firebird 3:

sudo systemctl stop firebird5
sudo systemctl start firebird3

На Firebird 5:

sudo systemctl stop firebird3
sudo systemctl start firebird5

Из-за Conflicts= можно даже писать просто:

sudo systemctl start firebird5

если сейчас работает firebird3: systemd должен остановить конфликтующий сервис. Но я бы для ясности использовал явные stop/start.

13. Какой сервер запускать после перезагрузки

Если пока основной FB3:

sudo systemctl enable firebird3
sudo systemctl disable firebird5

Проверить:

systemctl is-enabled firebird3
systemctl is-enabled firebird5

Должно быть:

enabled
disabled

Если позже захочешь основной FB5:

sudo systemctl disable firebird3
sudo systemctl enable firebird5

14. Старый service лучше оставить выключенным

Не удаляй пока:

/lib/systemd/system/firebird-superserver.service

Просто оставь:

sudo systemctl disable firebird-superserver.service

Потому что он всё ещё содержит:

ExecStart=/opt/firebird/bin/fbguard ...

а /opt/firebird теперь уже нет.

Проверить всё:

systemctl is-enabled firebird-superserver.service
systemctl is-enabled firebird3.service
systemctl is-enabled firebird5.service

15. Очень важный момент с FB5 и SYSDBA

Поскольку мы не запускаем install.sh, нужно отдельно проверить, что находится в FB5:

ls -l /opt/firebird5/security5.fdb
ls -l /opt/firebird5/SYSDBA.password

И права:

ls -ld /opt/firebird5
ls -l /opt/firebird5/security5.fdb

Не копируй туда:

/opt/firebird3/security3.fdb

У FB3 и FB5 должны быть отдельные security databases.

16. Также не смешивай ''gbak'', ''isql'', ''gfix''

Всегда явно:

/opt/firebird3/bin/isql
/opt/firebird3/bin/gbak
/opt/firebird3/bin/gfix

или:

/opt/firebird5/bin/isql
/opt/firebird5/bin/gbak
/opt/firebird5/bin/gfix

Это особенно важно при конвертации базы FB3 → FB5.

Итог будет такой:

/opt/firebird3
    Firebird 3.0.10
    security3.fdb
    firebird.conf

/opt/firebird5
    Firebird 5.0.4
    security5.fdb
    firebird.conf

/etc/systemd/system/firebird3.service
/etc/systemd/system/firebird5.service

Оба используют 3050, но работает только один.

Перед тем как запускать FB5, я бы теперь сделал один контрольный шаг: после того как распакуешь buildroot.tar.gz в /opt/firebird5, покажи вывод

ls -la /opt/firebird5
ls -la /opt/firebird5/bin | head
ls -l /opt/firebird5/security5.fdb /opt/firebird5/SYSDBA.password 2>&1

Именно здесь может потребоваться дополнительная инициализация security5.fdb/пароля, потому что мы сознательно обходим install.sh. Всё остальное — перенос FB3 и создание двух systemd-unit — уже можно делать по инструкции выше.

На 11-ом шаге возникла проблема:

denis@denis-bq:~/Downloads/0_dist/firebird$ sudo systemctl start firebird5
Job for firebird5.service failed because the control process exited with error code.
See "systemctl status firebird5.service" and "journalctl -xeu firebird5.service" for details.
denis@denis-bq:~/Downloads/0_dist/firebird$ ^C
denis@denis-bq:~/Downloads/0_dist/firebird$ systemctl status firebird5.service
× firebird5.service - Firebird 5 Database Server
     Loaded: loaded (/etc/systemd/system/firebird5.service; disabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sat 2026-09-05 20:17:19 +07; 39s ago
    Process: 61578 ExecStart=/opt/firebird5/bin/fbguard -daemon -forever (code=exited, status=253)
        CPU: 2ms

сен 05 20:17:19 denis-bq systemd[1]: Starting Firebird 5 Database Server...
сен 05 20:17:19 denis-bq fbguard[61578]: Could not open /opt/firebird5/fb_guard for write
сен 05 20:17:19 denis-bq systemd[1]: firebird5.service: Control process exited, code=exited, status=253/n/a
сен 05 20:17:19 denis-bq systemd[1]: firebird5.service: Failed with result 'exit-code'.
сен 05 20:17:19 denis-bq systemd[1]: Failed to start Firebird 5 Database Server.
denis@denis-bq:~/Downloads/0_dist/firebird$ journalctl -xeu firebird5.service
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
сен 05 20:17:19 denis-bq systemd[1]: Starting Firebird 5 Database Server...
░░ Subject: A start job for unit firebird5.service has begun execution
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ A start job for unit firebird5.service has begun execution.
░░ 
░░ The job identifier is 9317.
сен 05 20:17:19 denis-bq fbguard[61578]: Could not open /opt/firebird5/fb_guard for write
сен 05 20:17:19 denis-bq systemd[1]: firebird5.service: Control process exited, code=exited, status=253/n/a
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ An ExecStart= process belonging to unit firebird5.service has exited.
░░ 
░░ The process' exit code is 'exited' and its exit status is 253.
сен 05 20:17:19 denis-bq systemd[1]: firebird5.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ The unit firebird5.service has entered the 'failed' state with result 'exit-code'.
сен 05 20:17:19 denis-bq systemd[1]: Failed to start Firebird 5 Database Server.
░░ Subject: A start job for unit firebird5.service has failed
░░ Defined-By: systemd
░░ Support: http://www.ubuntu.com/support
░░ 
░░ A start job for unit firebird5.service has finished with a failure.
░░ 
░░ The job identifier is 9317 and the job result is failed.
denis@denis-bq:~/Downloads/0_dist/firebird$ 

Проблема понятна: сервис запускается от пользователя firebird, а файл /opt/firebird5/fb_guard ему недоступен для записи.

У тебя в FB3 этот файл как раз имел права:

-rw-rw---- 1 firebird firebird ... fb_guard

А в FB5 после ручной распаковки права остались, скорее всего, root:root.

Сделай так:

sudo touch /opt/firebird5/fb_guard
sudo chown firebird:firebird /opt/firebird5/fb_guard
sudo chmod 660 /opt/firebird5/fb_guard

Проверь:

ls -l /opt/firebird5/fb_guard

Должно быть примерно:

-rw-rw---- 1 firebird firebird ... /opt/firebird5/fb_guard

После этого попробуй снова:

sudo systemctl start firebird5

И проверь:

systemctl status firebird5 --no-pager

Ещё сразу советую проверить права на файлы, в которые Firebird 5 тоже должен уметь писать:

sudo chown firebird:firebird /opt/firebird5/security5.fdb
sudo chown firebird:firebird /opt/firebird5/firebird.log 2>/dev/null || true

Если firebird.log ещё не существует:

sudo touch /opt/firebird5/firebird.log
sudo chown firebird:firebird /opt/firebird5/firebird.log
sudo chmod 660 /opt/firebird5/firebird.log

И проверь каталог:

ls -ld /opt/firebird5

Если сам каталог root:root с 755 — это нормально. Но файлы, которые сервер должен изменять, должны быть доступны пользователю firebird.

После запуска посмотри:

sudo ss -lntp | grep 3050

и:

ps aux | grep -E 'firebird|fbguard' | grep -v grep

Если после исправления fb_guard появится уже другая ошибка, пришли новый вывод:

systemctl status firebird5 --no-pager
tail -50 /opt/firebird5/firebird.log

С высокой вероятностью следующий возможный вопрос будет уже про security5.fdb или пароль SYSDBA.


denis@denis-bq:~/Downloads/0_dist/firebird$ ls -l /opt/firebird5/security5.fdb
-rw-r--r-- 1 firebird firebird 1966080 сен  5 20:24 /opt/firebird5/security5.fdb
denis@denis-bq:~/Downloads/0_dist/firebird$ ls -l /opt/firebird5/SYSDBA.password
ls: cannot access '/opt/firebird5/SYSDBA.password': No such file or directory
denis@denis-bq:~/Downloads/0_dist/firebird$ ls -ld /opt/firebird5
drwxr-xr-x 11 root root 4096 сен  5 20:22 /opt/firebird5
denis@denis-bq:~/Downloads/0_dist/firebird$ ls -l /opt/firebird5/security5.fdb
-rw-r--r-- 1 firebird firebird 1966080 сен  5 20:24 /opt/firebird5/security5.fdb
denis@denis-bq:~/Downloads/0_dist/firebird$ 

Это выглядит нормально: security5.fdb существует и принадлежит firebird:firebird. Отсутствие /opt/firebird5/SYSDBA.password само по себе не проблема — этот файл обычно создаётся установщиком, а мы install.sh сознательно не запускали.

Теперь задача — проверить, какой пароль у SYSDBA в этой security5.fdb.

Сначала попробуй стандартный:

/opt/firebird5/bin/isql \
  -user SYSDBA \
  -password masterkey \
  localhost:employee

Если алиаса employee нет, можно просто запустить isql и подключиться к конкретной FB5-базе, когда она будет создана/восстановлена.

Если masterkey не подходит, проще всего задать новый пароль через gsec или SQL, но для Firebird 5 предпочтительнее SQL-подход через ALTER USER, если удастся войти под текущим SYSDBA.

Сейчас главное — убедиться, что сам FB5 уже запускается после исправления fb_guard:

sudo systemctl start firebird5
systemctl status firebird5 --no-pager
sudo ss -lntp | grep 3050

Если сервер стартовал, покажи вывод:

systemctl status firebird5 --no-pager
tail -50 /opt/firebird5/firebird.log

и я подскажу следующий шаг именно для пароля SYSDBA.

Ещё один момент: права на security5.fdb сейчас 644:

-rw-r--r--

Это не критично для запуска, но лучше сделать так же, как у FB3:

sudo chmod 660 /opt/firebird5/security5.fdb

И для fb_guard:

sudo chmod 660 /opt/firebird5/fb_guard

То есть рабочие файлы сервера будут доступны владельцу и группе, но не всем остальным.


denis@denis-bq:~/Downloads/0_dist/firebird$ /opt/firebird5/bin/isql \
  -user SYSDBA \
  -password masterkey \
  localhost:employee
Statement failed, SQLSTATE = 28000
Install incomplete. To complete security database initialization please CREATE USER. For details read doc/README.security_database.txt.
Use CONNECT or CREATE DATABASE to specify a database
SQL> 

У тебя как раз ожидаемая ситуация для ручной распаковки FB5 без install.sh: security5.fdb есть, но в ней ещё не создан SYSDBA. Сообщение Firebird прямо об этом и говорит. В README для security database рекомендуемый путь такой: остановить сервер, открыть базу локально через embedded-доступ, создать SYSDBA, затем снова запустить сервер. (GitHub)

Сделай так.

Сначала останови FB5:

sudo systemctl stop firebird5

Теперь запусти isql локально, без localhost, чтобы использовалось embedded-подключение:

cd /opt/firebird5
 
sudo -u firebird env FIREBIRD=/opt/firebird5 \
  /opt/firebird5/bin/isql -user SYSDBA employee

Если алиас employee существует, попадёшь в SQL>.

Там создай SYSDBA:

CREATE USER SYSDBA PASSWORD 'СЮДА_СВОЙ_СЛОЖНЫЙ_ПАРОЛЬ';

Например временно для теста:

CREATE USER SYSDBA PASSWORD 'TestFb5_2026!';

Затем:

EXIT;

После этого запускай сервер:

sudo systemctl start firebird5

И проверяй уже по сети:

/opt/firebird5/bin/isql \
  -user SYSDBA \
  -password 'TestFb5_2026!' \
  localhost:employee

Если всё прошло нормально, увидишь что-то вроде:

Database: localhost:employee, User: SYSDBA
SQL>

Официальная документация Firebird 5 подтверждает, что после нормальной установки SYSDBA должен существовать в security5.fdb, а управление пользователями в Firebird 3+ выполняется SQL-командами CREATE USER / ALTER USER. (Home)

Если команда

sudo -u firebird env FIREBIRD=/opt/firebird5 \
  /opt/firebird5/bin/isql -user SYSDBA employee

не подключится, покажи вывод:

grep -n -i employee /opt/firebird5/databases.conf

и:

ls -l /opt/firebird5/examples/empbuild/employee.fdb

Тогда дам вариант инициализации security5.fdb без алиаса employee.


denis@denis-bq:~/Downloads/0_dist/firebird$ cd /opt/firebird5
denis@denis-bq:/opt/firebird5$ sudo -u firebird env FIREBIRD=/opt/firebird5 \
  /opt/firebird5/bin/isql -user SYSDBA employee
Statement failed, SQLSTATE = 28000
no permission for read-write access to database employee
Use CONNECT or CREATE DATABASE to specify a database
SQL> CREATE USER SYSDBA PASSWORD 'masterkey';
Use CONNECT or CREATE DATABASE to specify a database
SQL> 

Да, тут причина уже другая: embedded-подключение к алиасу employee дошло до базы, но сам пользователь Linux firebird не имеет права на запись в файл employee.fdb или каталог, где он лежит. Именно поэтому CREATE USER не выполнился — ты фактически не был подключён к базе. Для инициализации security5.fdb Firebird действительно рекомендует остановить сервер, открыть employee в embedded-режиме как SYSDBA, а затем выполнить CREATE USER SYSDBA …. (GitHub)

Сначала выйди из isql:

EXIT;

Потом найди, куда у тебя указывает алиас employee:

grep -n -A3 -B3 '^employee' /opt/firebird5/databases.conf

И проверь права на сам файл, например если там:

employee = /opt/firebird5/examples/empbuild/employee.fdb

то:

ls -l /opt/firebird5/examples/empbuild/employee.fdb
ls -ld /opt/firebird5/examples/empbuild

Самый простой способ для этой разовой инициализации — дать firebird владение sample-базой:

sudo chown firebird:firebird /opt/firebird5/examples/empbuild/employee.fdb
sudo chmod 660 /opt/firebird5/examples/empbuild/employee.fdb

И на всякий случай каталог должен позволять проход:

sudo chmod 755 /opt/firebird5/examples/empbuild

Убедись, что FB5 остановлен:

sudo systemctl stop firebird5

Теперь снова:

sudo -u firebird env FIREBIRD=/opt/firebird5 \
  /opt/firebird5/bin/isql -user SYSDBA employee

На этот раз ожидаем:

Database: employee, User: SYSDBA
SQL>

Тогда:

CREATE USER SYSDBA PASSWORD 'masterkey';
EXIT;

После этого запускаем FB5:

sudo systemctl start firebird5

И уже проверяем нормальную сетевую аутентификацию:

/opt/firebird5/bin/isql \
  -user SYSDBA \
  -password masterkey \
  localhost:employee

Если всё в порядке, увидишь:

Database: localhost:employee, User: SYSDBA
SQL>

Важный момент: в embedded-режиме пароль на этапе первоначальной инициализации не нужен; главное — подключиться как SYSDBA. Firebird в таком режиме не делает обычную сетевую аутентификацию, но для CREATE USER имя пользователя должно быть SYSDBA. (Home)

Если после chown снова будет no permission for read-write access, пришли только вывод этих двух команд:

grep -n -A3 -B3 '^employee' /opt/firebird5/databases.conf
namei -l /opt/firebird5/examples/empbuild/employee.fdb

namei -l сразу покажет права на каждый каталог по пути, и станет видно, где именно блокируется доступ.


У меня был вот такой скрипт для восстановления базы данных из бэкапа. сделай для каждой версии свой скрипт:

#!/bin/sh
 
 
fname=$(basename "$1")
name="${fname%.*}"
#ext="${fname##*.}"
 
/opt/firebird/bin/gbak -create -FIX_FSS_METADATA WIN1251 -v $1 $name.fdb -user sysdba -pas masterkey 16384
sudo chown firebird:firebird $name.fdb

Да. Я бы сделал два отдельных скрипта и заодно чуть поправил исходный: последний 16384 лучше передавать как -page_size 16384. Это штатный параметр gbak при восстановлении. (Home)

Для Firebird 3:

#!/bin/sh
 
fname=$(basename "$1")
name="${fname%.*}"
 
/opt/firebird3/bin/gbak \
  -create \
  -FIX_FSS_METADATA WIN1251 \
  -verbose \
  -page_size 16384 \
  "$1" \
  "$name.fdb" \
  -user SYSDBA \
  -password masterkey
 
sudo chown firebird:firebird "$name.fdb"

Для Firebird 5:

#!/bin/sh
 
fname=$(basename "$1")
name="${fname%.*}"
 
/opt/firebird5/bin/gbak \
  -create \
  -FIX_FSS_METADATA WIN1251 \
  -verbose \
  -page_size 16384 \
  "$1" \
  "$name.fdb" \
  -user SYSDBA \
  -password masterkey
 
sudo chown firebird:firebird "$name.fdb"

Сохрани, например, как:

~/bin/restore_fb3.sh
~/bin/restore_fb5.sh

и дай права:

chmod +x ~/bin/restore_fb3.sh
chmod +x ~/bin/restore_fb5.sh

Использование одинаковое:

restore_fb3.sh mybase.fbk

или:

restore_fb5.sh mybase.fbk

На выходе получишь:

mybase.fdb

Я также добавил кавычки вокруг $1 и $name.fdb, чтобы скрипт не ломался, если в пути или имени файла есть пробелы.

Есть ещё важный момент именно для твоей схемы с двумя Firebird: этот вариант создаёт базу локально через gbak конкретной версии, но если оба сервера переключаются на одном порту, я бы сделал скрипты ещё безопаснее — чтобы restore_fb3.sh перед восстановлением проверял, что действительно запущен Firebird 3, а restore_fb5.sh — что Firebird 5. Тогда случайно восстановить FB3-бэкап не той версией будет сложнее.


Есть база данных с алиасом shadwes. Напиши команду для подключения через ISQL Firebird 5.

Для Firebird 5 и алиаса shadwes:

/opt/firebird5/bin/isql -user SYSDBA -password masterkey localhost:shadwes

Если сервер находится на другом компьютере:

/opt/firebird5/bin/isql -user SYSDBA -password masterkey 192.168.2.181/3050:shadwes

После успешного подключения получишь:

Database: localhost:shadwes, User: SYSDBA
SQL>

Проверить, что подключился именно к серверу Firebird 5:

SELECT RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION')
FROM RDB$DATABASE;

Должно вернуть версию вида 5.0.4.