Теперь картина полная. У тебя 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)
Я бы делал так.
sudo systemctl stop firebird-superserver.service sudo systemctl disable firebird-superserver.service
Проверить:
sudo ss -lntp | grep 3050
Ничего не должно быть.
sudo mv /opt/firebird /opt/firebird3
Проверить:
ls -ld /opt/firebird3
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)
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)
Это здесь принципиально. Стандартный install.sh рассчитан на системную установку в /opt/firebird и выполняет дополнительные системные изменения. Нам они не нужны, потому что мы сознательно делаем параллельные экземпляры. Официальная документация рекомендует install.sh для обычной установки, но отдельно подтверждает возможность ручного filesystem-copy deployment. (Home)
/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"
Если вывода нет — хорошо.
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
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 не позволит обоим сервисам работать одновременно.
sudo systemctl daemon-reload
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
sudo systemctl stop firebird3 sudo systemctl start firebird5
Проверить:
systemctl status firebird5 --no-pager sudo ss -lntp | grep 3050
И:
/opt/firebird5/bin/isql -z
На 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.
Если пока основной 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
Не удаляй пока:
/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
Поскольку мы не запускаем 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.
Всегда явно:
/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.