Bug 31692 - неудачные зависимости в пакетах, связанных с бакулой и неудачные настройки использования СУБД в бакуле
Summary: неудачные зависимости в пакетах, связанных с бакулой и неудачные настройки ис...
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: bacula (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Michael Shigorin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks: 30940
  Show dependency tree
 
Reported: 2016-01-09 10:25 MSK by Стас
Modified: 2017-02-18 10:07 MSK (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Стас 2016-01-09 10:25:26 MSK
Установлен сервер в режиме "офисный сервер". Обновлён.
Бакула нормально не работает, все адания по бекапу собственной базы бакулы выполняются с ошибкой скрипта создания дампа базы:
01-Jan 23:10 localhost JobId 903: shell command: run BeforeJob "/usr/share/bacula/scripts/make_catalog_backup"
01-Jan 23:10 localhost JobId 903: Error: Runscript: BeforeJob returned non-zero status=1. ERR=Child exited with code 1

Смотрю - получается, что установлены две библиотеки поддержки СУБД бакулы: bacula-sqlite и bacula-mysql. При этом реально работает база sqlite. Но скрипт не может определить реально работающую базу и пытается сдампить базу mysql.

Я попытался удалить пакет bacula-mysql, но при этом по зависимостям удаляются пакеты alterator-backup-server и alterator-distro-backup-server.  

Пакет alterator-backup-server представляет собой обёртку над пакетом alterator-bacula, а у него в зависимостях зачем-то стоят bacula-director-mysql и , /usr/share/bacula/scripts/make_mysql_tables. Ещё мне непонятно, зачем там MySQL-server-control, mysql-server, mysql-client, /usr/bin/mysql, ntfs-3g.

Пакет alterator-distro-backup-server также содержит в зависимостях bacula-director-mysql, /usr/share/bacula/scripts/create_mysql_database и /usr/share/bacula/scripts/make_mysql_tables. И опять же там есть куча *mysql*.

IMHO нужно убрать зависимости этих пакетов от bacula-director-mysql (/usr/share/bacula/scripts/make_mysql_tables, /usr/share/bacula/scripts/create_mysql_database). Возможно, и все прочие  mysql-пакеты там лишние.

Насчёт выбора бакулой базы для работы я не разбирался. Непохоже, что она использует alternatives. Возможно, порядок использования СУБД зашит в коде. Если это так, скрипт /usr/share/bacula/scripts/make_catalog_backup в пакете bacula-dir содержит ошибку.

[root@office ~]# su -s /bin/bash -l -c "/bin/bash -x /usr/share/bacula/scripts/make_catalog_backup"
+ default_db_type=postgresql
+ '[' 0 -ge 5 ']'
+ '[' -z '' ']'
++ arch
+ '[' x86_64 == x86_64 ']'
++ sed 's,.* points to /usr/lib64/libbaccats-,,'
++ sed 's,-.*$,,'
++ alternatives-list /usr/lib64/libbaccats-5.2.13.so /usr/lib64/libbaccats-mysql-5.2.13.so /usr/lib64/libbaccats-mysql.so /usr/lib64/libbaccats-sqlite3-5.2.13.so /usr/lib64/libbaccats-sqlite3.so
+ db_type=mysql
+ '[' -z mysql ']'
+ cd /var/lib/bacula
+ rm -f .sql
+ case ${db_type} in
+ BINDIR=/usr/bin
+ test 0 -gt 2
+ MYSQLPASSWORD=
+ test 0 -gt 3
+ MYSQLHOST=
+ /usr/bin/mysqldump -u -f --opt

[root@office ~]# rpm -qa | grep bacula
bacula-storage-5.2.13-alt3.M70P.1
bacula-director-sqlite3-5.2.13-alt3.M70P.1
bacula-common-5.2.13-alt3.M70P.1
bacula-director-mysql-5.2.13-alt3.M70P.1
bacula-director-common-5.2.13-alt3.M70P.1
bacula-console-5.2.13-alt3.M70P.1
alterator-bacula-0.8-alt2
alterator-bacula-functions-0.2-alt1
bacula-client-5.2.13-alt3.M70P.1

[root@office ~]# apt-get remove bacula-director-mysql
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие пакеты будут УДАЛЕНЫ:
  alterator-backup-server alterator-distro-backup-server bacula-director-mysql
Comment 1 Стас 2016-01-09 20:17:24 MSK
Я выяснил, почему установились два пакета, предоставляющие bacula-dir: bacula-director-sqlite3 и bacula-director-mysql. Причина в том, что при установке пакета bacula по зависимостям устанавливается bacula-director-sqlite3, а при установке alterator-backup-server устанавливается bacula-director-mysql.

[root@office ~]# apt-get install alterator-backup-server
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Выбрано alterator-bacula для 'alterator-backup-server'
Следующие дополнительные пакеты будут установлены:
  alterator-bacula bacula-director-mysql
Следующие пакеты будут ЗАМЕНЕНЫ:
  alterator-bacula-functions (by alterator-bacula)
Следующие НОВЫЕ пакеты будут установлены:
  alterator-bacula bacula-director-mysql
0 будет обновлено, 2 новых установлено, 1 пакетов будет заменено, 0 пакетов будет удалено и 320 не будет обновлено.
Необходимо получить 42,5kB/69,7kB архивов.
После распаковки потребуется дополнительно 139kB дискового пространства.
Продолжить? [Y/n] n   
Прервано.
[root@office ~]# apt-get install bacula
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Следующие дополнительные пакеты будут установлены:
  bacula-director-sqlite3
Следующие НОВЫЕ пакеты будут установлены:
  bacula bacula-director-sqlite3
0 будет обновлено, 2 новых установлено, 0 пакетов будет удалено и 320 не будет обновлено.
Необходимо получить 0B/38,1kB архивов.
После распаковки потребуется дополнительно 44,6kB дискового пространства.
Продолжить? [Y/n] n
Прервано.
Comment 2 Michael Shigorin 2016-01-10 13:39:38 MSK
Спасибо за обстоятельный разбор -- хорошо бы на alterator-backup-server повесить что-нибудь отдельное, этот пакет в текущем виде должен хотя бы конфликтовать с bacula-director-sqlite3.

А ещё саму bacula надо обновлять до 7.x...
Comment 3 Evgenii Terechkov 2016-09-25 07:33:17 MSK
На самом деле, даже если в системе отсутствует bacula-director-mysql, резервное копирование каталога бакулы (на sqlite3) тоже не работает:

=8<===================================================
25-Sep 08:31 dir JobId 3: shell command: run BeforeJob "/usr/share/bacula/scripts/make_catalog_backup"
25-Sep 08:31 dir JobId 3: BeforeJob: + default_db_type=postgresql
25-Sep 08:31 dir JobId 3: BeforeJob: + '[' 0 -ge 5 ']'
25-Sep 08:31 dir JobId 3: BeforeJob: + '[' -z '' ']'
25-Sep 08:31 dir JobId 3: BeforeJob: ++ arch
25-Sep 08:31 dir JobId 3: BeforeJob: + '[' x86_64 == x86_64 ']'
25-Sep 08:31 dir JobId 3: BeforeJob: ++ sed 's,-.*$,,'
25-Sep 08:31 dir JobId 3: BeforeJob: ++ alternatives-list /usr/lib64/libbaccats-5.2.13.so /usr/lib64/libbaccats-sqlite3-5.2.13.so /usr/lib64/libbaccats-sqlite3.so
25-Sep 08:31 dir JobId 3: BeforeJob: ++ sed 's,.* points to /usr/lib64/libbaccats-,,'
25-Sep 08:31 dir JobId 3: BeforeJob: + db_type=sqlite3
25-Sep 08:31 dir JobId 3: BeforeJob: + '[' -z sqlite3 ']'
25-Sep 08:31 dir JobId 3: BeforeJob: + cd /var/lib/bacula
25-Sep 08:31 dir JobId 3: BeforeJob: + rm -f .sql
25-Sep 08:31 dir JobId 3: BeforeJob: + case ${db_type} in
25-Sep 08:31 dir JobId 3: BeforeJob: + BINDIR=/usr/bin
25-Sep 08:31 dir JobId 3: BeforeJob: + echo .dump
25-Sep 08:31 dir JobId 3: BeforeJob: + /usr/bin/sqlite3 .db
=8<===================================================

т.е. скрипт ожидает (предположительно, обязательный) аргумент запуска, обозначающий имя БД, но не получая его создаёт новую пустую БП sqlite3 в файле с именем ".db" и дампит её в файл с именем ".sql".

Посмотрел, как это сделано в centos7: там резервное копирование каталога идёт скриптом make_catalog_backup.pl с указанием в конфигурации по умолчанию имени каталога MyCatalog. Код определяет тип и имя БД каталога через утилиту dbcheck и делает резервную копию. У нас этот скрипт также работает.

Думаю в новой сборе бакулы тоже сделать так. С моей т.з. требовать в alterator-backup-server пакета bacula-director-mysql и одновременно конфликтовать с bacula-director-sqlite3 это равносильно конфликту bacula-director-mysql и bacula-director-sqlite3. Что противоречит самой идее альтернатив. Т.е. не вижу патчить make_catalog_backup и делать не как у других, если make_catalog_backup.pl работает.
Comment 4 Evgenii Terechkov 2016-09-25 09:14:40 MSK
Похоже, в Сизиф ушел пакет, в котором это починено, 5.2.13-alt7.