Show pageOld revisionsBacklinksBack to top This page is read only. You can view the source, but not change it. Ask your administrator if you think this is wrong. ====== 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''. ([[https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/qsg5/firebird-5-quickstartguide.html?utm_source=chatgpt.com|Home]]) Я бы делал так. ==== 1. Остановить текущий FB3 и отключить его старый unit ==== <code bash> sudo systemctl stop firebird-superserver.service sudo systemctl disable firebird-superserver.service </code> Проверить: <code bash> sudo ss -lntp | grep 3050 </code> Ничего не должно быть. ==== 2. Переименовать текущую установку ==== <code bash> sudo mv /opt/firebird /opt/firebird3 </code> Проверить: <code bash> ls -ld /opt/firebird3 </code> ==== 3. Распаковать Firebird 5 ==== <code bash> 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 </code> Найти внутренний архив: <code bash> find /tmp/fb5dist -name buildroot.tar.gz </code> У тебя должен появиться путь примерно такой: <code> /tmp/fb5dist/Firebird-5.0.4.1812-0-linux-x64/buildroot.tar.gz </code> Проверить содержимое: <code bash> tar tzf /tmp/fb5dist/Firebird-5.0.4.1812-0-linux-x64/buildroot.tar.gz | head -30 </code> Внутри должно быть дерево ''/opt/firebird''. Документация Firebird прямо указывает, что необходимые файлы находятся в ''/opt/firebird'' внутри ''buildroot.tar.gz''. ([[https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/qsg5/firebird-5-quickstartguide.html?utm_source=chatgpt.com|Home]]) ==== 4. Извлечь FB5 ==== <code bash> sudo mkdir -p /tmp/fb5root sudo tar xzf \ /tmp/fb5dist/Firebird-5.0.4.1812-0-linux-x64/buildroot.tar.gz \ -C /tmp/fb5root </code> Теперь: <code bash> ls /tmp/fb5root/opt/firebird </code> Перемещаем: <code bash> sudo mv /tmp/fb5root/opt/firebird /opt/firebird5 </code> Проверяем: <code bash> ls -ld /opt/firebird3 /opt/firebird5 </code> Firebird 5.0.4.1812 — официальный актуальный Linux x64 build ветки 5.0. ([[https://firebirdsql.org/en/firebird-5-0/?utm_source=chatgpt.com|Home]]) ==== 5. Не запускай ''install.sh'' FB5 ==== Это здесь принципиально. Стандартный ''install.sh'' рассчитан на системную установку в ''/opt/firebird'' и выполняет дополнительные системные изменения. Нам они не нужны, потому что мы сознательно делаем параллельные экземпляры. Официальная документация рекомендует ''install.sh'' для обычной установки, но отдельно подтверждает возможность ручного filesystem-copy deployment. ([[https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/qsg5/firebird-5-quickstartguide.html?utm_source=chatgpt.com|Home]]) ==== 6. Проверить бинарники FB5 ==== <code bash> /opt/firebird5/bin/isql -z </code> Ожидается примерно: <code> ISQL Version: LI-V5.0.4... </code> Проверь зависимости: <code bash> ldd /opt/firebird5/bin/firebird | grep "not found" ldd /opt/firebird5/bin/isql | grep "not found" </code> Если вывода нет — хорошо. ==== 7. Создать новый service для FB3 ==== <code bash> sudo nano /etc/systemd/system/firebird3.service </code> Содержимое: <code ini> [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 </code> ==== 8. Создать service для FB5 ==== <code bash> sudo nano /etc/systemd/system/firebird5.service </code> Содержимое: <code ini> [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 </code> Здесь важно ''Conflicts='': systemd не позволит обоим сервисам работать одновременно. ==== 9. Перечитать конфигурацию systemd ==== <code bash> sudo systemctl daemon-reload </code> ==== 10. Проверить, что FB3 после переноса запускается ==== <code bash> sudo systemctl start firebird3 </code> Проверяем: <code bash> systemctl status firebird3 --no-pager sudo ss -lntp | grep 3050 </code> И подключаемся именно клиентом FB3: <code bash> /opt/firebird3/bin/isql -z </code> Если нужна база: <code bash> /opt/firebird3/bin/isql \ -user SYSDBA \ -password masterkey \ localhost:/путь/к/базе.fdb </code> ==== 11. Проверить переключение на FB5 ==== <code bash> sudo systemctl stop firebird3 sudo systemctl start firebird5 </code> Проверить: <code bash> systemctl status firebird5 --no-pager sudo ss -lntp | grep 3050 </code> И: <code bash> /opt/firebird5/bin/isql -z </code> ==== 12. Переключение теперь выглядит так ==== На Firebird 3: <code bash> sudo systemctl stop firebird5 sudo systemctl start firebird3 </code> На Firebird 5: <code bash> sudo systemctl stop firebird3 sudo systemctl start firebird5 </code> Из-за ''Conflicts='' можно даже писать просто: <code bash> sudo systemctl start firebird5 </code> если сейчас работает ''firebird3'': systemd должен остановить конфликтующий сервис. Но я бы для ясности использовал явные ''stop/start''. ==== 13. Какой сервер запускать после перезагрузки ==== Если пока основной FB3: <code bash> sudo systemctl enable firebird3 sudo systemctl disable firebird5 </code> Проверить: <code bash> systemctl is-enabled firebird3 systemctl is-enabled firebird5 </code> Должно быть: <code> enabled disabled </code> Если позже захочешь основной FB5: <code bash> sudo systemctl disable firebird3 sudo systemctl enable firebird5 </code> ==== 14. Старый service лучше оставить выключенным ==== Не удаляй пока: <code> /lib/systemd/system/firebird-superserver.service </code> Просто оставь: <code bash> sudo systemctl disable firebird-superserver.service </code> Потому что он всё ещё содержит: <code> ExecStart=/opt/firebird/bin/fbguard ... </code> а ''/opt/firebird'' теперь уже нет. Проверить всё: <code bash> systemctl is-enabled firebird-superserver.service systemctl is-enabled firebird3.service systemctl is-enabled firebird5.service </code> ==== 15. Очень важный момент с FB5 и SYSDBA ==== Поскольку мы **не запускаем ''install.sh''**, нужно отдельно проверить, что находится в FB5: <code bash> ls -l /opt/firebird5/security5.fdb ls -l /opt/firebird5/SYSDBA.password </code> И права: <code bash> ls -ld /opt/firebird5 ls -l /opt/firebird5/security5.fdb </code> Не копируй туда: <code> /opt/firebird3/security3.fdb </code> У FB3 и FB5 должны быть отдельные security databases. ==== 16. Также не смешивай ''gbak'', ''isql'', ''gfix'' ==== Всегда явно: <code bash> /opt/firebird3/bin/isql /opt/firebird3/bin/gbak /opt/firebird3/bin/gfix </code> или: <code bash> /opt/firebird5/bin/isql /opt/firebird5/bin/gbak /opt/firebird5/bin/gfix </code> Это особенно важно при конвертации базы FB3 → FB5. Итог будет такой: <code> /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 </code> Оба используют ''3050'', но работает только один. **Перед тем как запускать FB5, я бы теперь сделал один контрольный шаг:** после того как распакуешь ''buildroot.tar.gz'' в ''/opt/firebird5'', покажи вывод <code bash> ls -la /opt/firebird5 ls -la /opt/firebird5/bin | head ls -l /opt/firebird5/security5.fdb /opt/firebird5/SYSDBA.password 2>&1 </code> Именно здесь может потребоваться дополнительная инициализация ''security5.fdb''/пароля, потому что мы сознательно обходим ''install.sh''. Всё остальное — перенос FB3 и создание двух systemd-unit — уже можно делать по инструкции выше. <WRAP center round help 60%> На 11-ом шаге возникла проблема: <code> 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$ </code> </WRAP> ---- Проблема понятна: сервис запускается от пользователя ''firebird'', а файл ''/opt/firebird5/fb_guard'' ему недоступен для записи. У тебя в FB3 этот файл как раз имел права: <code> -rw-rw---- 1 firebird firebird ... fb_guard </code> А в FB5 после ручной распаковки права остались, скорее всего, ''root:root''. Сделай так: <code bash> sudo touch /opt/firebird5/fb_guard sudo chown firebird:firebird /opt/firebird5/fb_guard sudo chmod 660 /opt/firebird5/fb_guard </code> Проверь: <code bash> ls -l /opt/firebird5/fb_guard </code> Должно быть примерно: <code> -rw-rw---- 1 firebird firebird ... /opt/firebird5/fb_guard </code> После этого попробуй снова: <code bash> sudo systemctl start firebird5 </code> И проверь: <code bash> systemctl status firebird5 --no-pager </code> Ещё сразу советую проверить права на файлы, в которые Firebird 5 тоже должен уметь писать: <code bash> sudo chown firebird:firebird /opt/firebird5/security5.fdb sudo chown firebird:firebird /opt/firebird5/firebird.log 2>/dev/null || true </code> Если ''firebird.log'' ещё не существует: <code bash> sudo touch /opt/firebird5/firebird.log sudo chown firebird:firebird /opt/firebird5/firebird.log sudo chmod 660 /opt/firebird5/firebird.log </code> И проверь каталог: <code bash> ls -ld /opt/firebird5 </code> Если сам каталог ''root:root'' с ''755'' — это нормально. Но файлы, которые сервер должен изменять, должны быть доступны пользователю ''firebird''. После запуска посмотри: <code bash> sudo ss -lntp | grep 3050 </code> и: <code bash> ps aux | grep -E 'firebird|fbguard' | grep -v grep </code> Если после исправления ''fb_guard'' появится уже другая ошибка, пришли новый вывод: <code bash> systemctl status firebird5 --no-pager tail -50 /opt/firebird5/firebird.log </code> С высокой вероятностью следующий возможный вопрос будет уже про ''security5.fdb'' или пароль ''SYSDBA''. ---- <WRAP center round help 60%> <code> 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$ </code> </WRAP> Это выглядит нормально: ''security5.fdb'' существует и принадлежит ''firebird:firebird''. Отсутствие ''/opt/firebird5/SYSDBA.password'' само по себе не проблема — этот файл обычно создаётся установщиком, а мы ''install.sh'' сознательно не запускали. Теперь задача — проверить, какой пароль у ''SYSDBA'' в этой ''security5.fdb''. Сначала попробуй стандартный: <code bash> /opt/firebird5/bin/isql \ -user SYSDBA \ -password masterkey \ localhost:employee </code> Если алиаса ''employee'' нет, можно просто запустить ''isql'' и подключиться к конкретной FB5-базе, когда она будет создана/восстановлена. Если ''masterkey'' не подходит, проще всего задать новый пароль через ''gsec'' или SQL, но для Firebird 5 предпочтительнее SQL-подход через ''ALTER USER'', если удастся войти под текущим SYSDBA. Сейчас главное — убедиться, что сам FB5 уже запускается после исправления ''fb_guard'': <code bash> sudo systemctl start firebird5 systemctl status firebird5 --no-pager sudo ss -lntp | grep 3050 </code> Если сервер стартовал, покажи вывод: <code bash> systemctl status firebird5 --no-pager tail -50 /opt/firebird5/firebird.log </code> и я подскажу следующий шаг именно для пароля ''SYSDBA''. Ещё один момент: права на ''security5.fdb'' сейчас ''644'': <code> -rw-r--r-- </code> Это не критично для запуска, но лучше сделать так же, как у FB3: <code bash> sudo chmod 660 /opt/firebird5/security5.fdb </code> И для ''fb_guard'': <code bash> sudo chmod 660 /opt/firebird5/fb_guard </code> То есть рабочие файлы сервера будут доступны владельцу и группе, но не всем остальным. ---- <WRAP center round help 60%> <code> 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> </code> </WRAP> У тебя как раз ожидаемая ситуация для ручной распаковки FB5 без ''install.sh'': ''security5.fdb'' есть, но в ней ещё не создан ''SYSDBA''. Сообщение Firebird прямо об этом и говорит. В README для security database рекомендуемый путь такой: остановить сервер, открыть базу локально через embedded-доступ, создать ''SYSDBA'', затем снова запустить сервер. ([[https://github.com/FirebirdSQL/firebird/issues/6860?utm_source=chatgpt.com|GitHub]]) Сделай так. Сначала останови FB5: <code bash> sudo systemctl stop firebird5 </code> Теперь запусти ''isql'' локально, без ''localhost'', чтобы использовалось embedded-подключение: <code bash> cd /opt/firebird5 sudo -u firebird env FIREBIRD=/opt/firebird5 \ /opt/firebird5/bin/isql -user SYSDBA employee </code> Если алиас ''employee'' существует, попадёшь в ''SQL>''. Там создай ''SYSDBA'': <code sql> CREATE USER SYSDBA PASSWORD 'СЮДА_СВОЙ_СЛОЖНЫЙ_ПАРОЛЬ'; </code> Например временно для теста: <code sql> CREATE USER SYSDBA PASSWORD 'TestFb5_2026!'; </code> Затем: <code sql> EXIT; </code> После этого запускай сервер: <code bash> sudo systemctl start firebird5 </code> И проверяй уже по сети: <code bash> /opt/firebird5/bin/isql \ -user SYSDBA \ -password 'TestFb5_2026!' \ localhost:employee </code> Если всё прошло нормально, увидишь что-то вроде: <code> Database: localhost:employee, User: SYSDBA SQL> </code> Официальная документация Firebird 5 подтверждает, что после нормальной установки ''SYSDBA'' должен существовать в ''security5.fdb'', а управление пользователями в Firebird 3+ выполняется SQL-командами ''CREATE USER'' / ''ALTER USER''. ([[https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/qsg5/firebird-5-quickstartguide.html?utm_source=chatgpt.com|Home]]) Если команда <code bash> sudo -u firebird env FIREBIRD=/opt/firebird5 \ /opt/firebird5/bin/isql -user SYSDBA employee </code> не подключится, покажи вывод: <code bash> grep -n -i employee /opt/firebird5/databases.conf </code> и: <code bash> ls -l /opt/firebird5/examples/empbuild/employee.fdb </code> Тогда дам вариант инициализации ''security5.fdb'' без алиаса ''employee''. ---- <WRAP center round help 60%> <code> 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> </code> </WRAP> Да, тут причина уже другая: embedded-подключение к алиасу ''employee'' дошло до базы, но сам пользователь Linux ''firebird'' не имеет права на запись в файл ''employee.fdb'' или каталог, где он лежит. Именно поэтому ''CREATE USER'' не выполнился — ты фактически не был подключён к базе. Для инициализации ''security5.fdb'' Firebird действительно рекомендует остановить сервер, открыть ''employee'' в embedded-режиме как ''SYSDBA'', а затем выполнить ''CREATE USER SYSDBA ...''. ([[https://github.com/FirebirdSQL/firebird/issues/6860?utm_source=chatgpt.com|GitHub]]) Сначала выйди из ''isql'': <code sql> EXIT; </code> Потом найди, куда у тебя указывает алиас ''employee'': <code bash> grep -n -A3 -B3 '^employee' /opt/firebird5/databases.conf </code> И проверь права на сам файл, например если там: <code> employee = /opt/firebird5/examples/empbuild/employee.fdb </code> то: <code bash> ls -l /opt/firebird5/examples/empbuild/employee.fdb ls -ld /opt/firebird5/examples/empbuild </code> Самый простой способ для этой разовой инициализации — дать ''firebird'' владение sample-базой: <code bash> sudo chown firebird:firebird /opt/firebird5/examples/empbuild/employee.fdb sudo chmod 660 /opt/firebird5/examples/empbuild/employee.fdb </code> И на всякий случай каталог должен позволять проход: <code bash> sudo chmod 755 /opt/firebird5/examples/empbuild </code> Убедись, что FB5 остановлен: <code bash> sudo systemctl stop firebird5 </code> Теперь снова: <code bash> sudo -u firebird env FIREBIRD=/opt/firebird5 \ /opt/firebird5/bin/isql -user SYSDBA employee </code> На этот раз ожидаем: <code> Database: employee, User: SYSDBA SQL> </code> Тогда: <code sql> CREATE USER SYSDBA PASSWORD 'masterkey'; EXIT; </code> После этого запускаем FB5: <code bash> sudo systemctl start firebird5 </code> И уже проверяем нормальную сетевую аутентификацию: <code bash> /opt/firebird5/bin/isql \ -user SYSDBA \ -password masterkey \ localhost:employee </code> Если всё в порядке, увидишь: <code> Database: localhost:employee, User: SYSDBA SQL> </code> Важный момент: в embedded-режиме пароль на этапе первоначальной инициализации не нужен; главное — подключиться как ''SYSDBA''. Firebird в таком режиме не делает обычную сетевую аутентификацию, но для ''CREATE USER'' имя пользователя должно быть ''SYSDBA''. ([[https://firebirdsql.org/file/documentation/release_notes/Firebird-3.0.5-ReleaseNotes.pdf?utm_source=chatgpt.com|Home]]) Если после ''chown'' снова будет ''no permission for read-write access'', пришли только вывод этих двух команд: <code bash> grep -n -A3 -B3 '^employee' /opt/firebird5/databases.conf namei -l /opt/firebird5/examples/empbuild/employee.fdb </code> ''namei -l'' сразу покажет права на каждый каталог по пути, и станет видно, где именно блокируется доступ. ---- <WRAP center round help 60%> У меня был вот такой скрипт для восстановления базы данных из бэкапа. сделай для каждой версии свой скрипт: <code bash> #!/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 </code> </WRAP> Да. Я бы сделал два отдельных скрипта и заодно чуть поправил исходный: последний ''16384'' лучше передавать как ''-page_size 16384''. Это штатный параметр ''gbak'' при восстановлении. ([[https://www.firebirdsql.org/file/documentation/html/en/firebirddocs/gbak/firebird-gbak.html?utm_source=chatgpt.com|Home]]) Для Firebird 3: <code sh> #!/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" </code> Для Firebird 5: <code sh> #!/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" </code> Сохрани, например, как: <code bash> ~/bin/restore_fb3.sh ~/bin/restore_fb5.sh </code> и дай права: <code bash> chmod +x ~/bin/restore_fb3.sh chmod +x ~/bin/restore_fb5.sh </code> Использование одинаковое: <code bash> restore_fb3.sh mybase.fbk </code> или: <code bash> restore_fb5.sh mybase.fbk </code> На выходе получишь: <code> mybase.fdb </code> Я также добавил кавычки вокруг ''$1'' и ''$name.fdb'', чтобы скрипт не ломался, если в пути или имени файла есть пробелы. Есть ещё важный момент именно для твоей схемы с двумя Firebird: этот вариант создаёт базу **локально через ''gbak'' конкретной версии**, но если оба сервера переключаются на одном порту, я бы сделал скрипты ещё безопаснее — чтобы ''restore_fb3.sh'' перед восстановлением проверял, что действительно запущен Firebird 3, а ''restore_fb5.sh'' — что Firebird 5. Тогда случайно восстановить FB3-бэкап не той версией будет сложнее. ---- <WRAP center round help 60%> Есть база данных с алиасом shadwes. Напиши команду для подключения через ISQL Firebird 5. </WRAP> Для Firebird 5 и алиаса ''shadwes'': <code bash> /opt/firebird5/bin/isql -user SYSDBA -password masterkey localhost:shadwes </code> Если сервер находится на другом компьютере: <code bash> /opt/firebird5/bin/isql -user SYSDBA -password masterkey 192.168.2.181/3050:shadwes </code> После успешного подключения получишь: <code> Database: localhost:shadwes, User: SYSDBA SQL> </code> Проверить, что подключился именно к серверу Firebird 5: <code sql> SELECT RDB$GET_CONTEXT('SYSTEM', 'ENGINE_VERSION') FROM RDB$DATABASE; </code> Должно вернуть версию вида ''5.0.4''. dev/firebird/fb50_with_fb30_on_ubuntu.txt Last modified: 2026/09/05 18:16by denis