Skip to main content

Установка сервера резервного копирования Bacula на FreeBSD 10

Установка системы резервного копирования с web интерфейсом.

bacula 5

Установку производить можно как из портов так и через pkg2ng. Через pkg bacula по умолчанию работает с postgresql (проблем, однако, за собой это не повлечёт: все скрипты под postgresql имеются в /usr/local/share/bacula, webacula так же может работать с postgresql. Если не принципиально какая БД будет использоваться – лучше ставить из пакетов через pkg install bacula-server) и тянет за собой клиент, установку будем производить из портов, т.к. нам нужна поддержка MySQL.
Для начала обновим древо портов:

root@bacula:~ # portsnap fetch 
root@bacula:~ # portsnap extract

Затем установим bacula-server (client установится вместе с сервером):

root@bacula:~ # whereis bacula-server 
bacula-server: /usr/ports/sysutils/bacula-server
root@bacula:~ # cd /usr/ports/sysutils/bacula-server
root@bacula:/usr/ports/sysutils/bacula-server # make config

Выбираем поддержку MYSQL и отключаем PGSQL. После этого собираем и устанавливаем.

 

bacula 1

root@bacula:/usr/ports/sysutils/bacula-server # make && make install && make clean && rehash

После этого установим БД MySQL и создадим с помощью скриптов пользователя, базу и таблицы для bacula.

root@bacula:~ # pkg install mysql56-server 
root@bacula:~ # service mysql-server onestart
root@bacula:~ # cd /usr/local/share/bacula/
root@bacula:/usr/local/share/bacula # ./create_mysql_database
root@bacula:/usr/local/share/bacula # ./grant_mysql_privileges
root@bacula:/usr/local/share/bacula # ./create_mysql_tables

Как правило, после установки, bacula-dir, bacula-sd, bacula-fd и bconsole уже настроены для работы друг с другом. Далее привожу пример .conf файлов c с комментариями:

Bacula-dir.conf

#Описание самого директора
Director { # define myself
Name = bacula-dir
DIRport = 9101
QueryFile = "/usr/local/share/bacula/query.sql"
WorkingDirectory = /var/db/bacula
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = "rQKT6DIIQz3kKP89xIXd8h/x3CF0MW/X2bftmXJUQHW7" # Console password (нужен для управления bacula через bconsole)
Messages = Daemon
}
# JobDefs – шаблон работы для резервирования. Здесь можно задать стандартные параметры для работ чтобы их постоянно не перечислять, а в основной работе сделать ссылку на Default
JobDefs {
Name = "DefaultJob"
Type = Backup
Storage = File
Messages = Standard
Priority = 10
Write Bootstrap = "/var/db/bacula/%c.bsr"
}
# Описание хранилища для соединения с bacula-sd, который может быть как на той же машине, так и на любой другой.
Storage {
Name = File
# Do not use "localhost" here
Address = ip address хранилища (127.0.0.1 по умолчанию) # N.B. Use a fully qualified name here
SDPort = 9103
Password = "ixeZTD25RoU1MlP69jy1EjhmDsl/qwkuGkBu90GWCr3h"
Device = FileStorage
Media Type = File
}
# Каталог – доступ к BD, в которой bacula хранит метаданные.
Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "5K2SThIdAw"
DB port = 3306
}
#Описание клиента – того сервера, с которого будем снимать бекапы
Client {
Name = ns1-fd
Password = "-YqyoB1ClgUswOUR6YTvqRXHrFBUKwPrU"
Address = ip address клиента
FDPort = 9102
Catalog = MyCatalog
File Retention = 30 days # сколько дней хранить информацию о файлах в бд
Job Retention = 6 months # сколько дней хранить информацию о работах в бд
}
#описание набора файлов, которые будем бекапить
FileSet {
Name = ns1
Include {
File = /etc/bind/
Options {
signature = MD5
Compression = GZIP5
}
}
}
#расписание бекапов (полный делает субботу в 00:00, инкрементальный каждый день кроме кроме субботы в час ночи)
Schedule {
Name = ns1
Run = Level=Full Pool=ns1 sat at 00:00
Run = Level=Incremental Pool=ns1 sun-sat at 01:00
}
#Описание пула - логического объединения томов (volume). Каждый volume – отдельный файл в котором бакула хранит бекапы.
Pool {
Name = ns1
Pool Type = Backup
Maximum Volume Jobs = 1 # сколько джобов хранить в 1 томе. Рекомендуется использовать 1, чтобы для каждого задания создавался отдельный том.
Volume Retention = 30 days # через 30 дней бакула будет перезаписывать тома, начиная с самого старого. Т.е. бекапы старше 30 дней - удалятся
Recycle = yes
AutoPrune = yes
LabelFormat = ns1- # метка томов. К каждому тому из этого пула будет приписываться эта метка.
Maximum Volume Bytes = 10G # максимальный размер одного тома. Если бекап превысит это значение, создастся новый том.
}
# задание на бекап
Job {
Name = ns1
JobDefs = DefaultJob # ссылка на JobDefs
Type = Backup
Level = Full
Level = Incremental
Client = ns1-fd #далее указываем клиента, набор файлов, расписание и пул, описанные ранее
FileSet = ns1
Schedule = ns1
Storage = File
Pool = ns1
Messages = Standard
}

Bacula-sd.conf

#описание bacula-sd
Storage { # definition of myself
Name = bacula-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/db/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}
#
# данные для соединения с bacula-dir
Director {
Name = bacula-dir
Password = "ixeZTD25RoU1MlP69jy1EjhmDsl/qwkuGkBu90GWCr3h"
}
# Описание устройства, на которое будем записывать бекапы.
Device {
Name = FileStorage
Media Type = File
Archive Device = /storage # путь до директории, куда будут писаться дампы
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = yes;
}

Bacula-fd.conf

Director {
Name = bacula-dir
Password = "UW6BpwsPdfNOYco5UYowbZT1ZRHU1E/jVwT9zAB26kM6"
}
FileDaemon { # this is me
Name = bacula-fd
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/db/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}

После установки добавим в rc.conf строки для запуска скриптов и запустим bacula:

root@bacula:~ # sysrc bacula_dir_enable=YES 
bacula_dir_enable: NO -> YES
root@bacula:~ # sysrc bacula_sd_enable=YES
bacula_sd_enable: NO -> YES
root@bacula:~ # sysrc bacula_fd_enable=YES
bacula_fd_enable: NO -> YES
root@bacula:~ # service bacula-dir start
root@bacula:~ # service bacula-sd start
root@bacula:~ # service bacula-fd start

Для удобной настройки и мониторинга установим webmin и webacula.
Webmin представляет из себя web интерфейс для управления сервером, который включает в себя большое количество готовых скриптов. Установку производим из репозиториев:

root@bacula:~ # pkg search webmin 
webmin-1.730
root@bacula:~ # pkg install webmin

После установки ответим на ряд вопросов (логии для доступа, пароль, порт и т.д.), добавляем webmin_enable="YES" в rc.conf и можем запускать:

root@bacula:~ # service webmin start

Далее заходим на http://bacula_ip:10000/, вводим свои логин и пароль и попадаем на страницу управления:

bacula 2

Установленные и запущенные программы как правило отображаются в списке «Службы». Однако, с bacula возникли проблемы. Для их решения необходимо перейти во вкладку «Неиспользуемые модули» и в выпадающем списке выбрать «Bacula Backup System».

Нам предложат перейти к настройке модуля. Необходимо указать данные для доступа к БД, а так же указать правильные пути к конфигурационной директории и исполняемым файлам:

bacula 3

После настройки нажимаем «Сохранить».

Возможная проблема: Failed to load the database DBI driver mysql
Решается установкой p5-Class-DBI-mysql-1.00_1

В итоге мы должны увидеть элементы управления бакулой:

bacula 4

Webacula – удобный и функциональный веб интерфейс, который работает через bconsole.

Установим apache и mod_php

root@bacula:~ # pkg install apache24-2.4.12 
root@bacula:~ # pkg install mod_php5-5.4.37,1

В конфиге апача раскомментируем mod_rewrite:

LoadModule rewrite_module libexec/apache24/mod_rewrite.so

Apache можно пока не запускать (стоит добавить apache24_enable=”YES” в rc.conf)

Скачиваем Webacula ( последняя актуальная версия на 17.02.2015 )

root@bacula:~ # cd /usr/local/www/ 
root@bacula:/usr/local/www # fetch http://sourceforge.net/projects/webacula/files/webacula/7.0.0/webacula-7.0.0.tar.gz
root@bacula:/usr/local/www # tar xvzf webacula-7.0.0.tar.gz
root@bacula:/usr/local/www # rm webacula-7.0.0.tar.gz
root@bacula:/usr/local/www # mv webacula-7.0.0.tar.gz webacula

и Zend-framework

root@bacula:/usr/local/www # pkg search zend 
ZendFramework-2.3.3
ZendFramework1-1.12.7_1
pecl-zendopcache-7.0.4
root@bacula:/usr/local/www # pkg install ZendFramework1-1.12.7_1

Затем свяжем zend-framework и webacula (можно скопировать или сделать симлинк)

root@bacula:/usr/local/www # cp -R /usr/local/share/ZendFramework/library/Zend/ /usr/local/www/webacula/library/Zend/

Добавим конфиг вебакулы в апач:

root@bacula:~ # cp /usr/local/www/webacula/install/apache/webacula.conf /usr/local/etc/apache24/Includes/webacula.conf

Правим php.ini:

root@bacula:~ # cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
memory_limit = 32M 
max_execution_time = 3600

Правим sudo для доступа пользователя www к консоли и проверяем (возможно, придётся дать дополнительные права на чтение /usr/local/etc/bacula/bconsole.conf):

root@bacula:~ # visudo 
www ALL=(ALL) NOPASSWD: /usr/local/sbin/bconsole
root@bacula:~ # sudo -u www bconsol

Правим конфиг /usr/local/www/webacula/application/config.ini для доступа к БД, а так же TimeZone и пути до консоли, sudo, и конфига консоли:

[general]
;; supported adapters : PDO_MYSQL, PDO_PGSQL, PDO_SQLITE
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = bacula
db.config.password = 5K2SThIdAw
db.config.dbname = bacula
;; for Sqlite db.config.dbname = "/opt/bacula/working/bacula.db"
;; see http://www.php.net/timezones
; def.timezone = "UTC"
def.timezone = "Europe/Moscow"
;; if locale undefined, webacula use autodetect
;; avaliable locales : en, cs, de, fr, pt_BR, ru, it, es
locale = "ru"
;; see INSTALL file for details
bacula.sudo = "/usr/local/bin/sudo"
bacula.bconsole = "/usr/local/sbin/bconsole"
bacula.bconsolecmd = "-n -c /usr/local/etc/bacula/bconsole.conf"

Затем правим конфиг /usr/local/www/webacula/install/db.conf:

# See also application/config.ini
# bacula settings
db_name="bacula"
# for Sqlite only
db_name_sqlite="/opt/bacula/working/bacula.db"
db_user="root"
# !!! CHANGE_THIS !!!
db_pwd=""
# Webacula web interface settings
#
# Built-in superuser login is 'root'
#
# !!! CHANGE_THIS !!!
# Use
# ./password-to-hash.php <password>
# and insert the resulting hash below
webacula_root_pwd="" #Пароль вставляем любой, т.к. скрипты неправильно вставляют его в БД, и приходится вручную делать update

С помощью скрипта /usr/local/www/webacula/install/password-to-hash.php хешируем пароль и сохраняем где нибудь на ПК. Это и есть пароль для доступа к веб интерфейсу:

/usr/local/www/webacula/install # ./password-to-hash.php test_password 
$P$BmL4TN8OqixBrP3tiruO4Ta/6rfvZY.

Применяем скрипты из /usr/local/www/webacula/install/MySql для создания таблиц webacula:

root@bacula:/usr/local/www/webacula/install/MySql # ./10_make_tables.sh 
root@bacula:/usr/local/www/webacula/install/MySql # ./20_acl_make_tables.sh

Затем заходим в Mysql под рутом:

root@bacula:/usr/local/www/webacula/install/MySql # mysql -u root 
mysql> use bacula;
Database changed
mysql> select * from webacula_users;

С помощью update меняем пароль на тот, который получили при выполнении скрипта password-to-hash.php (пароль в одинарных кавычках):

mysql> update webacula_users set pwd='$P$BmL4TN8OqixBrP3tiruO4Ta/6rfvZY.' where login='root';
quit

Для проверки требований вебакулы к системе запустим скрипт:

root@bacula:/usr/local/www/webacula/install # ./check_system_requirements.php 
Webacula check System Requirements...
Current MySQL version = 5.6.23 OK
Current PostgreSQL version = 9.3.6 OK
Current Sqlite version = 3.8.8 OK
Current PHP version = 5.4.37 OK
php pdo installed. OK
php gd installed. OK
php xml installed. OK
php dom installed. OK
php pdo_mysql installed. OK
Warning. PHP extension pdo_pgsql not installed.
Warning. PHP extension pdo_sqlite not installed.
php-dom, php-xml installed. OK

Если вместо php pdo_mysql installed. OK увидим:

Warning. PHP extension pdo_mysql not installed.

Необходимо установить php5-pdo_mysql-5.4.37

Осталось только отредактировать файл /usr/local/etc/apache24/Includes/webacula.conf:

LoadModule rewrite_module modules/mod_rewrite.so
# AccessFileName .htaccess
# RewriteLog "/var/log/httpd/mod_rewrite.log"
# RewriteLogLevel 3
# SetEnv APPLICATION_ENV development
SetEnv APPLICATION_ENV production
Alias /webacula /usr/local/www/webacula/html
<Directory /usr/local/www/webacula/html>
RewriteEngine On
RewriteBase /webacula
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
php_flag magic_quotes_gpc off
php_flag register_globals off
Require all granted
Options Indexes FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from localhost
Allow from ::1
Allow from all
#
# change the settings below
#
# Allow from <your network>
</Directory>

Заходим на http://bacula_ip/webacula/ и вводим логин/пароль (пароль генерировали файлом password-to-hash.php, логин указывали в файле /usr/local/www/webacula/install/db.conf).

freebsd, bacula, backup