Thank you for reading this post, don't forget to subscribe!
Bareos
программное обеспечение для реализации сервера резервного копирования, архивирования и восстановления данных. Является ответвлением от проекта Bacula. Первый релиз вышел в 2014 году. Название является аббревиатурой и расшифровывается как Backup Archiving Recovery Open Sourced.
Как исходит из полного названия, Bareos является бесплатным программным обеспечением с открытым исходным кодом. Мы можем скачать версию сообщества (Community Edition), а при желании, приобрести подписку. Ознакомиться с ценами, кратким обзором и документацией, а также релизами можно на официальном сайте программного продукта. Исходный код доступен для загрузки на GitHub.
С точки зрения архитектуры состоит из 6-и компонентов:
- Director — управление заданиями по созданию резервных копий и восстановления данных.
- Console — командная строка для управления сервером. Может быть установлена на компьютер администратора для удаленного управления.
- Web UI — графический веб-интерфейс.
- Catalog — база данных с информацией об агентах, заданиях, статусах резервного копирования и хранимых данных.
- File Daemon — сбор данных о файлах на клиентских системах, которые необходимо резервировать или восстанавливать.
- Storage Daemon — выполнение операций чтения/записи с устройствами хранения.
Клиент Bareos может быть установлен на большинство популярных операционных систем — Linux (Debian, Ubuntu, Red Hat), FreeBSD, Windows, Mac OS, Solaris и другие. Серверные компоненты могут быть развернуты, в основном, на Linux и FreeBSD — установка может быть выполнена из исходников или репозитория (не входит в стандартный набор и требует дополнительной настройки). Также можно развернуть серверную или клиентскую часть в виде контейнера Docker (но официального образа нет).
Функции и возможности:
- Шифрование хранимых данных.
- Использование шаблонов для задач.
- Передача данных по защищенному соединению TLS.
- Полное, дифференциальное и инкрементальное копирование.
- Поддержка различных типов носителей (от ленточных до распределенных файловых систем).
Также некоторые возможности расширяются за счет плагинов.
Подготовка системы
Выполним предварительные настройки.
Пакеты
Несмотря на то, что, начиная с версии 8 в CentOS и Rocky Linux используется пакетный менеджер dnf, мы будем использовать команду yum для обратной совместимости с CentOS 7.
Обновим список пакетов в репозиториях:
yum makecache
На свежеустановленной системе также рекомендуется выполнить обновление пакетов:
yum update
Установим пакет:
yum install wget
* данный пакет позволяет загружать файлы по протоколам http и ftp.
Время
Для корректного отображения времени создания резервных копий и работы расписания, настроим часовой пояс и синхронизацию времени.
Установим сервис, запустим его и разрешим автозапуск:
yum install chrony
systemctl enable chronyd --now
Для настройки часового пояса вводим:
timedatectl set-timezone Europe/Moscow
Настройка брандмауэра
Нам нужно разрешить следующие порты:
- 80 и 443 — для веб-интерфейса.
- 9101 — для Bareos Director: управление заданиями (служба bareos-dir).
- 9102 — File Daemon: сбор данных с клиентов (служба bareos-fd).
- 9103 — Storage Daemon: работа с накопителями для хранения резервных копий (служба bareos-sd).
Выполняем команды:
firewall-cmd --permanent --add-port={80,443}/tcp
firewall-cmd --permanent --add-port={9101,9102,9103}/tcp
firewall-cmd --reload
Корневые сертификаты
Репозиторий Bareos работает по https с сертификатом от Let's Encrypt. Если наши корневые сертификаты будут неактуальны, мы получим ошибку Issued certificate has expired.
Нам нужно выполнить две команды:
yum install ca-certificates
update-ca-trust
Настройка SELinux
Проще всего, отключить SELinux. Но, если мы хотим его оставить, включаем политику:
setsebool -P httpd_can_network_connect on
* данное правило разрешает httpd-сервису и веб-скриптам подключение по сети.
Установка Bareos
Установка выполняется из репозитория. Однако, его нет в базовых репозиториях, поэтому сначала, выполним дополнительные действия.
На странице официального сайта мы должны ознакомиться с версиями релизов и поддерживаемых дистрибутивов. На момент обновления инструкции, последний релиз был 21. Для удобства работы, создаем переменные:
RELEASE=21
DIST=EL_8
* в нашем примере мы будем устанавливать программный продукт версии 21 для группы релизов EL_8.
Установим репозиторий командой:
w g e t https://download.bareos.org/bareos/release/${RELEASE}/${DIST}/bareos.repo -O /etc/yum.repos.d/bareos_${RELEASE}_${DIST}.repo
* данной командой мы скачаем готовые настройки репозитория в локальный каталог /etc/yum.repos.d.
Можно устанавливать bareos:
yum install bareos bareos-database-postgresql
* мы установим сам пакет bareos и набор файлов для его работы с postgresql.
На все запросы принять GPG key отвечаем утвердительно:
Is this ok [y/N]: y
Установка завершена. Разрешим автозапуск следующих сервисов:
systemctl enable bareos-dir bareos-fd bareos-sd
Развертывание и настройка сервера баз данных
На момент обновления инструкции в последней версии 21 была прекращена поддержка базы MySQL/MariaDB — осталась только postgresql. Выполним установку его серверной части:
yum install postgresql-server postgresql-contrib
Проинициализируем базу:
postgresql-setup initdb
Разрешим автозапуск и запустим сервис:
systemctl enable postgresql --now
Выполним скрипты для подготовки базы данных, которые шли в комплекте с установленным пакетом bareos-database-postgresql:
su - postgres -c /usr/lib/bareos/scripts/create_bareos_database
1 2 3 4 5 6 7 |
Мы должны увидеть результат: Creating postgresql database CREATE DATABASE ALTER DATABASE Database encoding OK Creating of bareos database succeeded. |
su - postgres -c /usr/lib/bareos/scripts/make_bareos_tables
su - postgres -c /usr/lib/bareos/scripts/grant_bareos_privileges
* в соответствии с названиями скриптов, первый создает базу, второй создает таблицы и третий — настраивает привилегии для созданных объектов.
Стартуем сервисы:
systemctl start bareos-dir bareos-fd bareos-sd
Посмотрим состояние командой:
systemctl status bareos-dir bareos-fd bareos-sd
Запускаем веб-интерфейс
Разобьем процесс на несколько этапов.
1. Установка и запуск веб-сервера
Устанавливаем компонент для обеспечения веб-интерфейса:
yum install bareos-webui
Откроем файл:
vi /etc/php.ini
Добавим строку:
date.timezone = "Europe/Moscow"
* где Europe/Moscow — часовой пояс, который нужно заменить на нужный вам.
Запускаем веб-сервер:
systemctl enable httpd --now
Перезапускаем компонент Director:
systemctl restart bareos-dir
Открываем браузер и переходим по адресу http://<IP-адрес сервера> — мы должны увидеть стартовую страницу Apache:
Веб-сервер работает. Идем дальше.
2. Создание доступа и вход
Создаем учетную запись для доступа к UI. Для этого входим в консоль управления bareos:
bconsole
И вводим команду:
* configure add console name=admin password=my_password profile=webui-admin tlsenable=no
* где:
- admin — имя учетной записи для входа;
- my_password — пароль.
- profile — профиль с политиками доступа. Хранятся в каталоге /etc/bareos/bareos-dir.d/profile. По умолчанию создается 3 профиля:
- webui-admin — расширенный доступ к системе.
- operator — доступы для работы с заданиями.
- webui-readonly — только просмотр статусов и конфигурации.
- tlsenable — наше подключение к сервису Director должно работать не по защищенному каналу. В противном случае, мы получим ошибку Sorry, cannot authenticate. Wrong username, password or SSL/TLS handshake failed.
Мы должны увидеть:
1 2 3 4 5 6 7 |
Created resource config file "/etc/bareos/bareos-dir.d/console/admin.conf": Console { Name = "admin" Password = "my_password" Profile = webui-admin TlsEnable = no } |
Перезапускаем bareos и выходим из консоли:
* reload
* exit
Открываем браузер и переходим по адресу http://<IP-адрес сервера>/bareos-webui/ — мы должны увидеть окно авторизации. Вводим наши логин и пароль:
Мы должны попасть на страницу со панели управления.
Стоит отметить, что мы могли обойтись и без командной оболочки bconsole — нужно создать файл /etc/bareos/bareos-dir.d/console/admin.conf с нужными значениями и перезапустить bareos.
3. SSL (опционально)
Хорошей идеей будет настройка доступа к веб-интерфейсу по защищенному протоколу https. Для этого нам нужно:
- Выделить доменное имя подключения к серверу.
- Получить корректных сертификат для имени, по которому мы решили обращаться к серверу.
- Настроить веб-сервер Apache для работы с полученным сертификатом.
В рамках данной инструкции, мы не будем рассматривать подробно каждый из пунктов.
Доменное имя
Домен можно зарегистрировать на внутреннем DNS. Для большинства компаний это самый актуальный вариант. Если наш сервер должен быть доступен из глобальной сети, то можно использовать глобальный DNS для нашего домена. Ну и самый быстрый вариант, прописать hostname в локальный файл hosts, с которого мы будем заходить на сервер. Предположим, что наш сервер резервного копирования должен быть доступен по имени bareos.test.ru.
Сертификат
Получить сертификат можно тоже несколькими способами:
- купить для нашего домена или использовать уже купленный wildcard.
- получить бесплатно от Let's Encrypt.
- получить от внутреннего центра сертификации, если такой имеется.
Предположим, что наш сертификат получен и его файлы размещены в каталогах /etc/pki/tls/certs. и /etc/pki/tls/certs.
Настройка Apache
Мы рассмотрим настройку кратко.
Устанавливаем модуль работы по SSL:
yum install mod_ssl
Открываем файл:
vi /etc/httpd/conf.d/ssl.conf
Находим опции и приводим их к виду:
1 2 3 4 5 |
SSLCertificateFile /etc/pki/tls/certs/bareos.crt ... SSLCertificateKeyFile /etc/pki/tls/private/bareos.key ... SSLCertificateChainFile /etc/pki/tls/certs/bareos-chain.crt |
* где SSLCertificateFile и SSLCertificateKeyFile — пути до файлов ключей с нашим сертификатом. SSLCertificateChainFile — при необходимости, путь до цепочки сертификатов (нужно использовать, если внутри файла SSLCertificateFile нет информации о всех сертификационных центрах).
Проверяем корректность настроек в Apache:
apachectl configtest
Если видим:
Syntax OK
Перечитываем конфигурацию apache:
apachectl graceful
Открываем браузер и переходим по адресу https://bareos.test.ru/bareos-webui/, где bareos.test.ru — имя хоста, для которого мы получили сертификат. Мы должны подключиться к веб-интерфейсу по защищенному соединению.
Установка и настройка клиента
Рассмотрим процесс подключения клиентов, которые работают под управлением Linux Ubuntu и CentOS.
Установка клиента
Также как с сервером, на странице официального сайта мы должны ознакомиться с версиями релизов и поддерживаемых дистрибутивов. После чего создаем переменные, настраиваем репозиторий и выполняем установку пакета. В зависимости от дистрибутива операционной системы, наши действия будут отличаться.
а) на Linux Ubuntu
Задаем переменные:
RELEASE=21
DIST=xUbuntu_20.04
* для Ubuntu версии 20.04.
Скачиваем настройки для репозитория:
w g e t https://download.bareos.org/bareos/release/${RELEASE}/${DIST}/bareos.list -O /etc/apt/sources.list.d/bareos_${RELEASE}_${DIST}.list
* если получим ошибку Issued certificate has expired переходим к решению ниже.
Устанавливаем ключ подписи пакетов в репозитории:
w g e t -q http://download.bareos.org/bareos/release/${RELEASE}/${DIST}/Release.key -O- | apt-key add -
Обновляем список пакетов:
apt update
Устанавливаем пакет для bareos-fd:
apt install bareos-filedaemon
Разрешаем автозапуск сервиса:
systemctl enable bareos-filedaemon
Настраиваем брандмауэр (открываем порт 9102/tcp):
iptables -I INPUT -p tcp --dport 9102 -j ACCEPT
apt-get install iptables-persistent
netfilter-persistent save
б) на Linux CentOS
Задаем переменные:
RELEASE=21
DIST=CentOS_7
* для CentOS версии 7.
Скачиваем настройки для репозитория:
w g e t https://download.bareos.org/bareos/release/${RELEASE}/${DIST}/bareos.repo -O /etc/yum.repos.d/bareos_${RELEASE}_${DIST}.repo
* если получим ошибку Issued certificate has expired переходим к решению ниже.
Устанавливаем пакет для bareos-fd:
yum install bareos-fd
На все запросы принять ключ отвечаем утвердительно.
Разрешаем автозапуск сервиса:
systemctl enable bareos-fd
Настраиваем брандмауэр (открываем порт 9102/tcp):
firewall-cmd --permanent --add-port=9102/tcp
firewall-cmd --reload
Добавление клиента на сервер
Подключаемся к серверу и заходим в консоль bareos:
bconsole
И добавляем нового клиента:
* configure add client name=client_name address=192.168.0.22 password=client_password
* где client_name — произвольное имя, по которому нам будет удобно идентифицировать клиента; 192.168.0.22 — IP-адрес компьютера-клиента; client_password — пароль, который нужно будет использовать данному клиенту для подключения к серверу.
Мы получим вывод на подобие:
1 2 3 4 5 6 7 8 9 10 11 12 |
Exported resource file "/etc/bareos/bareos-dir-export/client/client_name/bareos-fd.d/director/bareos-dir.conf": Director { Name = bareos-dir Password = "[md5]23ea8b731947b6aff12b13c98bca39ae" } Created resource config file "/etc/bareos/bareos-dir.d/client/client_name.conf": Client { Name = "client_name" Address = "192.168.0.22" Password = "client_password" } You have messages. |
Для нас теперь важно содержимое для экспорта, которое в нашем примере имеет вид:
1 2 3 4 |
Director { Name = bareos-dir Password = "[md5]23ea8b731947b6aff12b13c98bca39ae" } |
Перезапускаем сервис директора и выходим из консоли:
* reload
* exit
Переходим в консоль клиента, открываем файл:
vi /etc/bareos/bareos-fd.d/director/bareos-dir.conf
И меняем содержимое на то, что мы получили на стороне сервера:
1 2 3 4 |
Director { Name = bareos-dir Password = "[md5]23ea8b731947b6aff12b13c98bca39ae" } |
На клиенте перезапускаем файловую службу. Команды немного отличаются в зависимости от дистрибутива системы.
а) на Ubuntu:
systemctl restart bareos-filedaemon
б) на CentOS:
systemctl restart bareos-fd
Заходим на веб-интерфейс в раздел «Клиенты» — мы должны увидеть добавленных клиентов:
* нас не должно смущать отсутствие значков и версий для клиентов — они появятся после выполнения первых заданий на них.
Работа с заданиями
Bareos предлагает довольно большое количество настроек для создания заданий. Это могут быть задачи резервного копирования, восстановления, проверки. Также задачи могут подразделяться, например, для резервного копирования — полный бэкап, дифференциальный, инкрементальный. Мы можем настраивать полноценные задания или применять шаблоны. Попробуем в этом всем разобраться пошагово.
0. Вводная часть
Опишем общие моменты для наших заданий.
Мы будем работать в каталогах:
- /etc/bareos/bareos-dir.d/job — хранение файлов с описанием заданий.
- /etc/bareos/bareos-dir.d/fileset — списки файлов для резервного копирования или восстановления.
- /etc/bareos/bareos-dir.d/jobdefs — .каталог для хранения шаблонов.
- /etc/bareos/bareos-dir.d/schedule — расписания для автоматического выполнения заданий.
Уровни резервирования и восстановления:
- Full. Полная копия файлов, указанных в задании. Удобен для восстановления, но занимает много места.
- Differential. Копия всех файлов, которые были изменены с момента последней копии Full. Для восстановления требуется 1 копия Differential и сделанная перед этим Full. Занимает намного меньше места, по сравнению с Full, но менее удобное восстановление.
- Incremental. Копия всех файлов, которые были изменены с момента последней копии Differential и/или Full. Для восстановления требуются все копии Incremental, которые сделаны после Differential и/или Full. Занимает мало места, но процесс восстановления самый неудобный.
Типы заданий:
- Restore — восстановление.
- Backup — резервное копирование.
- Admin — очистка каталога от мусора.
- Migrate — задание для проверки, есть ли что-то для миграции.
- Copy — задание для проверки, есть ли что-то для копирования.
- Verify — проверка резервных копий — сравнение файлов на источнике и целевом носителе.
- Consolidate — объединяет файлы для инкрементальных и дифференциальных копий. Доступно с версии bareos 16.2.4.
Синтаксис для расписаний:
Момент выполнения | Описание | Варианты |
---|---|---|
<week-keyword> | Неделя месяца | 1st | 2nd | 3rd | 4th | 5th | first | second | third | fourth | fifth | last |
<wday-keyword> | День недели | sun | mon | tue | wed | thu | fri | sat | sunday | monday | tuesday | wednesday | thursday | friday | saturday |
<week-of-year-keyword> | Неделя года | w00 | w01 | … w52 | w53 |
<month-keyword> | Месяц | jan | feb | mar | apr | may | jun | jul | aug | sep | oct | nov | dec | january | february | … | december |
<12hour> | Время в формате 12am/pm | 0 | 1 | 2 | … 12 |
<hour> | Время в формате 24 | 0 | 1 | 2 | … 23 |
<minute> | Минуты | 0 | 1 | 2 | … 59 |
<day> | Дни месяца | 1 | 2 | … 31 |
<time> | Время | <hour>:<minute> | <12hour>:<minute>am | <12hour>:<minute>pm |
<time-spec> | Указать на время выполнения | at <time> | hourly |
<day-range> | Диапазон дней | <day>-<day> |
<month-range> | Диапазон месяцев | <month-keyword>-<month-keyword> |
<wday-range> | Диапазон дней недели | <wday-keyword>-<wday-keyword> |
<modulo> | Чет, нечет | <day>/<day> | <week-of-year-keyword>/<week-of-year-keyword> |
<date> | Дата | <date-keyword> | <day> | <range> |
<day-spec> | Варианты для указания дней недели | <day> | <wday-keyword> | <day> | <wday-range> | <week-keyword> <wday-keyword> | <week-keyword> <wday-range> | daily |
<month-spec> | Варианты для указания месяцев | <month-keyword> | <month-range> | monthly |
* примеры взяты с официального сайта.
1. Создание простого задания резервного копирования
Для начала создадим задание резервного копирования некоторых файлов нашего сервера, которое нужно запускать вручную.
Создаем файл с описанием задания:
vi /etc/bareos/bareos-dir.d/job/FirstJob.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Job { Name = "FirstJob" Client = "bareos-fd" Description = "Job Backup" Level = Full Storage = File Pool = Full Type = Backup FileSet = "FirstFileset" Messages = Standard Priority = 5 } |
* где:
- Name — любое произвольное название для нашего задания.
- Description — произвольное описание.
- Level — глубина задания: полное (Full), разностное (Differential), инкрементальное (Incremental).
- Storage — устройство хранения файлов с резервными копиями. По умолчанию, создано только одно с названием File.
- Pool — пулы хранения информации на устройстве. Создаются с целью настройки ограничений по времени хранения и разрешения ротации. По умолчанию, создано 3 пула — Full, Differential и Incremental, каждый из которых оптимален под соответствующий Level.
- Type — тип задания. Доступны варианты Backup, Restore и Verify.
- FileSet — набор файлов для резервного копирования. Описывается в отдельном файле. Мы создадим соответствующее описание ниже.
- Messages — пресет для сбора сообщений с клиентов.
- Priority — чем ниже число, тем выше приоритет. Низкий приоритет задания может привести к выполнению его в полследнюю очередь, если в данный момент нужно выполнить другие задания.
Теперь создадим файл со списком объектов для резервирования:
vi /etc/bareos/bareos-dir.d/fileset/FirstFileset.conf
1 2 3 4 5 6 7 8 9 10 |
FileSet { Name = "FirstFileset" Description = "Backup files" Include { Options { Signature = MD5 } File = "/tmp" } } |
* где:
- Name — любое произвольное название для списка файлов.
- Description — произвольное описание.
- Include — директива для добавления файлов с дополнительными настройками.
- Options — дополнительные настройки для группы файлов, которые нужно включить в задание.
- Signature — алгоритм для расчета контрольной суммы для всех файлов в директиве Include. Возможны варианты MD5 или SHA1.
- File — путь до файла или каталога, который нужно включить в задание. Обязательно использовать двойные кавычки. Одинарные не работают.
Тестируем задание
Попробуем создать тестовый файл:
echo "test" > /tmp/backup_test_file
Открываем консоль bareos:
bconsole
Перезапускаем конфигурацию (чтобы применить наши настройки):
* reload
Запустим наше первое задание:
* run job=FirstJob
Система покажет сводную информацию и задаст вопрос, запустить ли задание — отвечаем утвердительно:
OK to run? (yes/mod/no): yes
Задание будет помещено в очередь:
Job queued. JobId=8
В веб-интерфейсе на вкладке «Задания» мы должны увидеть информацию об успешно выполненном задании:
Выходим из консоли
* exit
Попробуем удалить наш тестовый файл:
rm -f /tmp/backup_test_file
Заходим на веб-интерфейс - переходим на вкладку «Восстановление» - выбираем клиента и задание резервного копирования - справа в нее появится список файлов, которые попали в резервную копию - выбираем наш тестовый файл:
Пропишем путь до каталога, куда нужно восстановить файл и нажимаем Восстановление:
* в каталог /tmp будет восстановлен файл /tmp/backup_test_file. Полный путь будет /tmp/tmp/backup_test_file.
В списке заданий дожидаемся успешного выполнения и проверяем, что в каталоге /tmp/tmp появился нужный нам файл.
2. Задание для выполнения на агенте
Наши действия будут похожими на задание 1. Нам только нужно указать другого агента. Для начала, сделаем копии наших конфигурационных файлов:
cp /etc/bareos/bareos-dir.d/job/FirstJob.conf /etc/bareos/bareos-dir.d/job/SecondJob.conf
cp /etc/bareos/bareos-dir.d/fileset/FirstFileset.conf /etc/bareos/bareos-dir.d/fileset/SecondFileset.conf
Отредактируем файлы:
vi /etc/bareos/bareos-dir.d/job/SecondJob.conf
Меняем значение для:
1 2 3 4 |
Name = "SecondJob" Client = "ubuntu" ... FileSet = "SecondFileset" |
* в нашем примере резервная копия будет делаться для клиента ubuntu, а также меняем набор файлов на SecondFileset.
Теперь открываем файл:
vi /etc/bareos/bareos-dir.d/fileset/SecondFileset.conf
И изменим набор файлов на:
1 2 3 4 5 |
Name = "SecondFileset" ... ... File = "/tmp" File = "/etc" |
* обратите внимание, в данном примере мы перечислили 2 цели для бэкапа — каталоги /tmp и /etc.
Для проверки задания заходим в консоль, применяем настройки, запускаем задание:
bconsole
* reload
* run job=SecondJob
… и находим статус выполнения в веб-интерфейсе.
Попытка восстановления была рассмотрена в примере 1 — по аналогии можно попробовать вернуть некоторые файлы.
3. Использование шаблона
Усложним задачу — настроим шаблоны для более удобного управления заданиями.
По настройкам шаблоны ничем не отличаются от обычных заданий — они просто объединяют в себе нужные опции, чтобы не нужно было их повторять при описании заданий. Поняв это, работать с ними будет просто. Давайте приведем пример.
Создадим файл:
vi /etc/bareos/bareos-dir.d/jobdefs/DefThirdJob.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 |
JobDefs { Name = "DefThirdJob" Description = "Job Definition Backup" Level = Full Storage = File Pool = Full Type = Backup FileSet = "SettingsFileset" Messages = Standard Priority = 10 } |
* как видим, все эти настройки мы уже использовали, когда создавали первую задачу.
В шаблоне мы используем набор файлов SettingsFileset — создадим его:
vi /etc/bareos/bareos-dir.d/fileset/SettingsFileset.conf
1 2 3 4 5 6 7 8 9 10 11 |
FileSet { Name = "SettingsFileset" Description = "Backup of Setting files" Include { Options { Signature = MD5 Compression = LZ4 } File = "/etc" } } |
* мы добавили опцию Compression — позволяет архивировать наши файлы. Возможны варианты LZ4 и GZIP.
Теперь можно создать файл с заданием:
vi /etc/bareos/bareos-dir.d/job/ThirdJob.conf
1 2 3 4 5 6 |
Job { Name = "ThirdJob" Client = "CentOS" Description = "Job Backup" JobDefs = "DefThirdJob" } |
* наше задание будет привязано к шаблону DefThirdJob и выполняться для клиента CentOS.
Готово — запускаем:
bconsole
* reload
* run job=ThirdJob
… и находим статус выполнения в веб-интерфейсе.
4. Планируем задачу
Теперь сделаем так, чтобы наша задача выполнялась по расписанию.
Создаем файл:
vi /etc/bareos/bareos-dir.d/schedule/EveryDay.conf
1 2 3 4 5 |
Schedule { Name = "EveryDay" Run = daily at 21:00 Run = daily at 07:00 } |
* наше задание должно выполняться ежедневно 2 раза — в 7 утра и 9 вечера.
Привязать задачу к расписанию можно в файле самого задания или в его шаблоне:
Schedule = "EveryDay"
Перезапустим сервис:
systemctl reload bareos-dir
* обратите внимание, что в этом примере мы решили перезапустить конфигурацию без консоли bconsole.
Переходим в веб-интерфейсе на вкладку «Расписания» — мы должны увидеть наше задание:
5. Дополнительные директивы
Рассмотрим некоторые дополнительные полезные опции.
Cкрипты до и после задания
Мы можем выполнить определенные команды до или после выполнения задания. Существует 2 метода настройки — полностью на стороне Bareos или запуск скрипта на агенте.
а) Запуск скрипта. Данные способ удобнее, если на удаленной системе есть готовый скрипт или требуется сложная логика выполнения, которую не описать одной командой и нужен скрипт.
Настраиваем в шаблоне или задании:
Run Before Job = '/path/to/script.sh'
Run After Job = '/path/to/script.sh'
* запустить скрипт на сервере соответственно до и после выполнения задания.
Client Run Before Job = '/path/to/script.sh'
Client Run After Job = '/path/to/script.sh'
* запустить скрипт на клиенте соответственно до и после выполнения задания.
Важно отметить, что данная директива требует в качестве значения использовать только путь до исполняемого скрипта и не передает параметров.
б) Команда при описании задания. Данным способом мы создаем дополнительную директиву RunScript при описании шаблона или задания. Это удобнее, если мы хотим полностью контролировать процесс на стороне сервера.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Job { ... RunScript { FailJobOnError = Yes RunsOnClient = Yes RunsWhen = Before Command = "su postgres -c 'pg_dumpall > /var/tmp/postgresql_dump.sql'" } RunScript { RunsOnSuccess = Yes RunsOnClient = Yes RunsWhen = After Command = "/var/tmp/postgresql_dump.sql" } ... } |
* где:
- FailJobOnError — завершить процесс резервного копирования, если скрипт вернул ошибку.
- RunsOnSuccess — запускать только при успешном выполнении резервной копии.
- RunsOnClient — запустить на клиенте (Yes) или на сервере (No).
- RunsWhen — когда запускать. Да резервного копирования (Before) или после (After).
- Command — команда, которую нужно выполнить.
Не забываем:
systemctl reload bareos-dir
Отправка уведомлений
Отправка сообщений на почту выполняется с помощью клиента bsmtp — проприетарной консольной программы. Она принимает параметры подключения к почтовому серверу, но по умолчанию, пытается отправлять письма от локального сервера. Мы рассмотрим вариант с отправкой с сервера bareos и использовании стороннего почтового сервера. Подробнее с вариантами настройки можно ознакомиться на официальном сайте.
Отправка с сервера резервного копирования
Для возможности выполнять отправку, устанавливаем MTA, например, Postfix:
yum install postfix
Открываем конфигурационный файл:
vi /etc/postfix/main.cf
Меняем значения для следующих опций:
1 2 3 |
inet_interfaces = all ... inet_protocols = ipv4 |
* однако, если мы используем IPv6, то менять значение для опции inet_protocols не нужно.
После внесения настроек разрешаем автозапуск Postfix и стартуем его:
systemctl enable postfix --now
Базовая настройка готова и сообщения могут отправляться. В настройках задания или шаблона мы можем определять адрес почтового ящика, куда нужно отправлять письма:
1 |
Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" master@test.ru" |
* в данном примере отправка будет выполнена на ящик master@test.ru.
После правки конфигурационного файла не забываем перезапустить сервис:
systemctl reload bareos-dir
Для корректной отправки почтовых сообщений нужно правильно настроить обратный адрес и домен отправки.
Отправка через сторонний почтовый сервер
Команда bsmtp принимает параметры, в том числе те, с помощью которых мы укажем сторонний сервер. В настройках задания или шаблона мы можем определить ее поведение:
1 |
Write Bootstrap = "|/usr/bin/bsmtp -h mail.test.local -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" master@test.ru" |
* в данном примере отправка будет выполнена через сервер mail.test.local.
Утилита bsmtp не умеет проходить аутентификацию. Поэтому, если наш почтовый сервер требует проверку подлинности, нам не удастся ее использовать. Потребуется более сложная схема с использованием MTA. Также можно просто использовать утилиту командной строки
Настройка отправки уведомлений
По умолчанию, нам будут приходить все сообщения, что может быть не совсем удобно для повседневного использования системы. Мы можем создать основные настройки для оповещений в каталоге /etc/bareos/bareos-dir.d/messages. Откроем на редактирование новый файл:
vi /etc/bareos/bareos-dir.d/messages/Alarms.conf
1 2 3 4 5 6 7 |
Messages { Name = Alarms Description = "Message delivery for fail jobs" mailcommand = "/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \<%r\>\" -s \"Bareos alarm message\" %r" mail = master@test.ru = error, fatal, terminate, notsaved console = alert, !skipped } |
* в данном типе оповещений под названием Alarms мы определили адрес получателя письма, а также типы событий, на которые нужно реагировать. Обратите внимание, что для консоли мы используем все события категории alert, за исключением skipped.
Теперь в нашем шаблоне или задании мы можем использовать данный тип сообщения:
Messages = Alarms
И не забываем перезапускать демон bareos-dir:
systemctl reload bareos-dir
Отправка уведомлений в Zulip
В качестве примера также рассмотрим отправку уведомлений в Zulip. Для этого мы установим на наш сервер резервного копирования утилиту zulip-send и создадим новый профиль для отправки сообщений.
Вышеупомянутая утилита zulip-send является расширением для Python. Для его установки сначала ставим менеджер pip:
yum install python3-pip
Теперь установим расширение:
pip3 install zulip
Если в ходе установки мы получили ошибку, попробуем обновить pip:
pip3 install --upgrade pip
Создаем файл:
vi ~/.zuliprc
1 2 3 4 |
[api] key=a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5 email=bot_name@zulip.test.ru site=https://zulip.test.ru |
* где:
- key — токен, который был сгенерирован на стороне Zulip сервера для бота.
- email — адрес бота, от которого будет выполняться отправка.
- site — URL-адрес до нашего сервера zulip.
Попробуем выполнить тестовую отправку:
/usr/local/bin/zulip-send postmaster@test.ru --message 'Test Message'
* где postmaster@test.ru — адрес учетной записи, а zulip, на который будет отправлено сообщение.
Мы должны получить сообщение в наш чат.
Теперь копируем файл .zuliprc в домашнюю директорию пользователя bareos:
cp ~/.zuliprc /var/lib/bareos/
Создаем профиль для отправки сообщений:
vi /etc/bareos/bareos-dir.d/messages/Zulip.conf
1 2 3 4 5 6 7 |
Messages { Name = ZulipAlarms Description = "Message delivery for fail jobs over Zulip Chat" mailcommand = "/usr/local/bin/zulip-send %r --message 'The job with id %i has been failed with code %e.'" mail = postmaster@test.ru = error, fatal, terminate, notsaved console = alert, !skipped } |
Для отправки сообщения на канал используем команду:
mailcommand = "/usr/local/bin/zulip-send --stream %r --subject 'Bareos' --message 'The job with id %i has been failed with code %e.'"
Также нужно поменять адресата на название канала:
mail = admins = …
* в данном примере мы будем отправлять сообщения только на события с ошибками; отправка будет осуществляться на аккаунт zulip с адресом postmaster@test.ru.
** для отправки сообщений мы можем задействовать следующие переменные:
- %% — просто знак %
- %c — Имя клиента.
- %d — Имя сервера, где установлена роль директора.
- %e — код завершения задания.
- %h — адрес клиента.
- %i — идентификатор задания.
- %j — уникальное имя задания.
- %l — уровень задания.
- %n — имя задания.
- %r — получатель.
- %s — время.
- %t — тип задания.
- %v — имя тома для чтения.
- %V — имя тома для записи.
В задание или шаблоне указываем, что для отправки сообщений должен использоваться ZulipAlarms:
Messages = ZulipAlarms
Перезапускаем bareos-dir:
systemctl reload bareos-dir
Работа с устройствами хранения
По умолчанию, при установке Bareos в качестве хранилища для резервных копий используется свободное пространство корневой директории (а именно, каталог /var/lib/bareos/storage).
С точки зрения абстракции:
- Данные хранятся в пулах, которые определяют правила хранения информации (создаются в каталоге /etc/bareos/bareos-dir.d/pool).
- В пулы входят тома, которые создаются в Storage Devices (настраиваются в каталоге /etc/bareos/bareos-sd.d/device). Важно отметить, что у пулов нет жесткой привязки к Storage Devices. То есть настройки для одного и того же пула можно использовать для нескольких устройств хранения.
- Storage Devices являются каталогами файловой системы или файлами устройств.
- Устройство в сервисе Director должно быть привязано к соответствующему устройству Storage Devices.
Рассмотрим пример использования дополнительного раздела для размещения сохраненной информации.
1. Работа с устройством хранения
Данная настройка затрагивает сервис Storage Daemon.
Добавим новое устройство:
vi /etc/bareos/bareos-sd.d/device/NewStorage.conf
1 2 3 4 5 6 7 8 9 10 11 |
Device { Name = NewFileStorage Media Type = File Archive Device = /backups LabelMedia = yes Random Access = yes AutomaticMount = yes RemovableMedia = no AlwaysOpen = no Description = "New File device. A connecting Director must have the same Name and MediaType." } |
* где:
- Name — имя устройства. По нему можно будет обращаться к устройству при настройке хранилища на сервисе Director.
- Media Type — имя типа устройства. Может быть произвольным.
- Archive Device — путь до каталога или устройства хранения.
- LabelMedia — можно ли маркировать носители.
- Random Access — является ли устройство носителя с произвольным доступом. Для дисковых носителей и USB стоит выставлять Yes, для ленточных библиотек — No.
- AutomaticMount — автоматически монтировать, при подключении.
- RemovableMedia — данная опция очень плохо документирована. Но похоже, ее значение нужно выставлять в Yes для съемных носителей.
- AlwaysOpen — держать готовым для чтения и записи всегда (yes) или по необходимости (no).
- Description — произвольное описание.
Создаем каталог, который мы указали в качестве Archive Device:
mkdir /backups
И назначаем в качестве владельца пользователя bareos:
chown bareos:bareos /backups
Чтобы применить настройку, перезапускаем демон для работы с носителями:
systemctl restart bareos-sd
2. Работа с пулами
Теперь добавим, для примера, новый пул:
vi /etc/bareos/bareos-dir.d/pool/FullNew.conf
1 2 3 4 5 6 7 8 9 10 |
Pool { Name = FullNew Pool Type = Backup Recycle = yes AutoPrune = yes Volume Retention = 180 days Maximum Volume Bytes = 10G Maximum Volumes = 15 Label Format = "FullNew-" } |
* где:
- Name — произвольное имя, по которому мы будем обращаться к пулу.
- Pool Type — указываем тип пула, который должен соответствовать типам заданий: Backup, Archive, Cloned, Migration, Copy, Save.
- Recycle — можно ли автоматически чистить тома пула от устаревших данных.
- AutoPrune — можно ли удалять тома пула с устаревшей информацией.
- Volume Retention — сколько должны храниться данные, прежде чем они будут считаться устаревшими.
- Maximum Volume Bytes — максимальный размер одного тома.
- Maximum Volumes — максимальное число томов, на которые может расширяться пул.
- Label Format — префикс, с которым будут создаваться новые тома в пуле.
По умолчанию, при установке bareos создается 4 пула:
- Full.
- Differential.
- Incremental.
- Scratch.
Мы можем использовать их, оставив значения опций или отредактировав их на нужные.
3. Привязка устройства Director к устройству Storage Daemon
За устройства хранения и контроль резервного копирования отвечают разные роли Bareos, а значит нам нужно настроить привязку.
Создаем новый файл:
vi /etc/bareos/bareos-dir.d/storage/FileNew.conf
1 2 3 4 5 6 7 |
Storage { Name = NewStorage Address = bareos.test.ru Password = "hKENa9DPmJUBYKJbKN90vkwvmo72OomuYBoufpmfqFfD" Device = NewFileStorage Media Type = File } |
* где:
- Name — любое произвольное имя. По нему мы будем обращаться к устройству из задания.
- Address — адрес сервера с ролью Storage Daemon. По документации, не рекомендуется использовать localhost, даже если Director и Storage Daemon стоят на одном сервере.
- Password — пароль доступа для внутреннего шифрования при передаче данных.
- Device — имя устройства на стороне Storage Daemon. В нашем примере это созданный NewFileStorage.
- Media Type — имя типа устройства.
4. Настройка задания
Указать использование пулов и устройства хранения можно в конфигурационном файле задания или шаблона:
Storage = NewStorage
Pool = FullNew
* где NewFileStorage и FullNew, соответственно, созданные нами устройство хранения и пул на сервисе Director.
Обратите внимание, что Storage и Pool независимы. Storage, по сути, определит место расположения данных, Pool — правила хранения.
5. Применение настроек и проверка
После внесения необходимых изменений необходимо перезапустить службу Bareos Director:
systemctl reload bareos-dir
В веб-интерфейсе на странице Хранение мы должны увидеть наше новое устройство:
Теперь можно попробовать запустить наше задание, которое должно хранить данные на новом устройстве. В нашем примере, это каталог /backups — проверим, что там появился том нового пула:
ls /backups
Мы должны увидеть что-то на подобие:
FullNew-0004
Настройка API
Рассмотрим инструкцию по развертыванию Rest API в Bareos. Для его корректной работы необходимо установить python версии 3.8 и выше. На момент обновления инструкции актуальной версией была 3.9:
yum install python39
После устанавливаем приложение python:
/usr/bin/pip3.9 install bareos-restapi
Отредактируем скрипт запуска:
vi /usr/local/bin/uvicorn
Первую строчку меняем на:
#!/usr/bin/python3.9
* где python3.9 — установленная версия python.
Переходим в каталог с bareos_restapi:
cd /usr/local/lib/python3.9/site-packages/bareos_restapi
* опять же, 3.9 — версия python.
Сгенерируем секрет:
openssl rand -hex 32
Мы получим строку на 64 символа, например:
7f38df2a6688d099b0ebc9539053b28fcf06f1436e69e52152816f6c334db100
* сохраняем данную строку, которую будем использовать в качестве секрета.
Создаем конфигурационный файл:
vi api.ini
1 2 3 4 5 6 7 8 9 |
[Director] Name=bareos-dir Address=127.0.0.1 Port=9101 [JWT] secret_key = 7f38df2a6688d099b0ebc9539053b28fcf06f1436e69e52152816f6c334db100 algorithm = HS256 access_token_expire_minutes = 30 |
* где для нас важны следующие параметры:
- Name — имя для подключения к bareos director.
- Address — адрес сервера с bareos director.
- Port — порт подключения к bareos director.
- secret_key — секрет, который мы сгенерировали выше.
По умолчанию, сервис работает на порту 8000 — необходимо его открыть в брандмауэре:
firewall-cmd --permanent --add-port=8000/tcp
firewall-cmd --reload
Запустим наш веб-сервер с Rest API:
uvicorn bareos_restapi:app --host 0.0.0.0 --reload
Если мы хотим запустить API на https, добавляем опции --ssl-keyfile и --ssl-certfile, например:
uvicorn bareos_restapi:app --host 0.0.0.0 --ssl-keyfile /etc/pki/tls/private/bareos.key --ssl-certfile /etc/pki/tls/certs/bareos.crt --reload
* в данном примере мы запустим сервис, который будет слушать на всех портах.
Открываем браузер и переходим по адресу http://<IP-адрес сервера>:8000/docs — мы должны увидеть страницу с инструкцией по использованию API для Bareos.
Прервем работу сервиса комбинацией Ctrl + С, и выполним настройку автозапуска Rest API. Для этого создаем файл:
vi /etc/systemd/system/uvicorn.service
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Unit] Description=Uvicorn Bareos Rest API Service After=network.target [Service] Type=simple WorkingDirectory=/usr/local/lib/python3.9/site-packages/bareos_restapi ExecStart=/usr/local/bin/uvicorn bareos_restapi:app --host 0.0.0.0 --reload ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target |
* где 3.9 — версия python.
Перечитываем конфигурацию systemd:
systemctl daemon-reload
Разрешаем автозапуск нашего сервиса и стартуем его:
systemctl enable uvicorn --now
Посмотреть статус можно командой:
systemctl status uvicorn
Шпаргалка по командам
Рассмотрим некоторые полезные команды консоли bconsole.
1. Работа с клиентами.
Посмотреть список зарегистрированных агентов:
* list clients
Увидеть статусы клиентов:
* status client
Мы получим список клиентов и должны будем выбрать номер того, для которого хотим узнать статус:
The defined Client resources are:
1: bareos-fd
2: CentOS
3: ubuntuSelect Client (File daemon) resource (1-3): 2
Отключить клиента:
* disable client client_name
* где client_name — имя для нашего клиента, зарегистрированного в системе.
Включить отключенного клиента:
* enable client client_name
2. Работа с задачами.
Показать список заданий:
* list jobs
Запустить на выполнение созданную задачу:
* run job=job_name
* где job_name — имя задачи.
Показать запланированные задания:
* status dir
Удаление bareos
Если нам нужно уделить сервер резервного копирования, выполним необходимые действия.
Описанные в данном разделе операции приведут к полному удалению программного продукта и файлов с резервными копиями.
Останавливаем сервисы и запрещаем их автозапуск:
systemctl disable bareos-dir bareos-fd bareos-sd
systemctl stop bareos-dir bareos-fd bareos-sd
Для удаления bareos выполняем команду:
yum remove bareos-*
Для удаления томов на устройстве хранения по умолчанию вводим:
rm -rf /var/lib/bareos
Удаляем каталоги с конфигурационными файлами и логами:
rm -rf /etc/bareos /var/log/bareos
Удаляем конфигурационные файлы для юнитов systemd:
rm -f /etc/systemd/system/bareos-*
rm -f /etc/systemd/system/multi-user.target.wants/bareos-*
Удалим репозиторий и почистим кэш для yum:
rm -f /etc/yum.repos.d/bareos*
yum clean all
Примеры заданий резервного копирования
В данном разделе мы рассмотрим конкретные примеры для резервирования сервисов. Без описания подробностей и без разделения на задание и шаблон. По возможности, будут указываться ссылки на документацию.
База данных MySQL/MariaDB
В официальном источнике предлагается использовать 2 способа:
- Задействовать плагин bpipe при описании файлсета.
- Запускать скрипт до резервирования, который сначала сделает дамп базы.
Мы воспользуемся вторым способом: он, довольно, понятный и не потребует установки дополнительных пакетов.
Пример задания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Job { Name = "MySQLBackup" Client = server Level = Full FileSet="MySQLFileSet" RunScript { FailJobOnError = Yes RunsOnClient = Yes RunsWhen = Before Command = "sh -c 'mysqldump -ubackup -ppassword dbname | gzip > /var/lib/bareos/mysql_dump.sql.gz'" } RunScript { RunsOnSuccess = Yes RunsOnClient = Yes RunsWhen = After Command = "rm /var/lib/bareos/mysql_dump.sql.gz" } } |
Пример файлсета:
1 2 3 4 5 6 7 8 9 10 |
FileSet { Name = "MySQLFileSet" Include { Options { signature = MD5 compression = gzip } File = "/var/lib/bareos/mysql_dump.sql.gz" } } |
База данных MySQL/MariaDB в docker
В целом, задача похожа, но предположим, что мы хотим сделать дамп из хостовой системы, подключившись к базе данных удаленно.
На стороне агента создаем скрипт:
vi /scripts/bareos_backup_mariadb_before.sh
1 2 3 4 5 |
#!/bin/bash PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin docker_mysql_ip=`docker inspect -f "{{ range.NetworkSettings.Networks }}{{ .IPAddress }}{{ end }}" container_name_mariadb` mysqldump -h${docker_mysql_ip} dbname | gzip > /var/lib/bareos/mysql_dump.sql.gz |
Также на стороне клиента создадим:
vi /root/.my.cnf
1 2 3 |
[mysqldump] user=backup password="password" |
* где user и password — логин и пароль для подключения к базе с целью создания дампа.
Задание bareos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Job { Name = "MySQLBackup" Client = server FileSet="MySQLFileSet" Client Run Before Job = '/scripts/bareos_backup_mariadb_before.sh' RunScript { RunsOnSuccess = Yes RunsOnClient = Yes RunsWhen = After Command = "rm -f /var/lib/bareos/mysql_dump.sql.gz" } ... } |
Файлсет
1 2 3 4 5 6 7 8 9 10 |
FileSet { Name = "MySQLFileSet" Include { Options { signature = MD5 compression = gzip } File = "/var/lib/bareos/mysql_dump.sql.gz" } } |
Анализ и устранение проблем
Для резервного копирования очень важно уметь отслеживать и устранять ошибки. Мы рассмотрим процесс дебага при выполнении заданий, а также пример ошибок при настройке и эксплуатации сервера.
Debug при выполнении заданий
В консоли веб-интерфейса, а также логах сервера мы не сможем найти достаточно информации об ошибках, которые возникают в ходе выполнения заданий.
Чтобы получить нужную для процесса отслеживания ошибок информацию, мы должны включить трейс для клиента. Это делается в консоли bconsole, например:
* setdebug client=client_name level=200 trace=1
* в данном примере мы запустим логирование на клиенте client_name с уровнем детализации 200.
В ответ мы получим что-то на подобие:
2000 OK setdebug=200 trace=1 hangup=0 timestamp=0 tracefile=/var/lib/bareos/client_name-fd.trace
Готово, теперь на агенте в файл /var/lib/bareos/client_name-fd.trace будет записываться отладочная информация. Посмотреть ее можно командой:
tail -f /var/lib/bareos/client_name-fd.trace
После отладки и устранения проблемы, не забываем выключить режим дебага:
* setdebug client=client_name level=0 trace=0
А также на клиенте можно удалить файл с логами:
rm -f /var/lib/bareos/client_name-fd.trace
Возможные ошибки
Рассмотрим примеры ошибок, с которыми столкнулся я.
1. configure error: Could not find config Resource "Profile" referenced on line 4 : Profile = webui-admin
Ошибка появляется при попытке создать учетную запись для доступа к веб-интерфейсу.
Причина: bareos не видит файлы с описанием профилей, которые устанавливаются с пакетом bareos-webui.
Решение: как правило, такое происходит, если мы не перезапустили службу директора после установки дополнительного компонента. Выполним команду:
systemctl restart bareos-dir
2. Sorry, cannot authenticate. Wrong username, password or SSL/TLS handshake failed
Ошибка появляется при попытке входа в веб-интерфейс.
Причина: с версии 18.2 bareos использует по умолчанию TLS-PSK, которая не поддерживается со стороны PHP по умолчанию.
Решение: к сожалению, мне не удалось разобраться с правильным вариантом использования TLS-PSK, поэтому, в качестве решения, предлагается не использовать шифрование между основным сервисом bareos и UI. Для этого открываем файл с настроенной учетной записью входа (в нашем примере, admin):
vi /etc/bareos/bareos-dir.d/console/admin.conf
И добавим строку:
1 2 3 4 |
Console { ... TLS Enable = No } |
Перезапустим сервис:
systemctl restart bareos-dir
Можно проверять.
3. Error: lib/bsock_tcp.cc:186 BnetHost2IpAddrs() for host "XXX" failed: ERR=Name or service not known
Ошибка появляется при выполнении задания резервного копирования.
Причина: система не может подключиться к хосту или самому себе по имени, которое указано в конфигурационном файле для storage. Возможно, было изменено имя сервера.
Решение: открываем файл:
vi /etc/bareos/bareos-dir.d/storage/File.conf
Необходимо убедиться, что в директиве Address у нас указано актуальное имя сервера:
1 2 3 |
... Address = bareos.test.ru ... |
После перезапустим сервис:
systemctl restart bareos-dir
4. Issued certificate has expired
При попытке загрузить файл с настройками репозитория мы можем получить ошибку сертификата. Пример сообщения:
ERROR: cannot verify download.bareos.org's certificate, issued by ‘/C=US/O=Let's Encrypt/CN=R3’:
Issued certificate has expired.
To connect to download.bareos.org insecurely, use `--no-check-certificate'.
Причина: наша система не доверяет сертификату, который используется репозиторием. Как правило, это наблюдается при устаревании корневых сертификатов на нашем компьютере.
Решение: мы можем решить проблемы 2 способами.
а) быстрый способ: подходит как временное решение. Мы можем сказать утилите wget не проверять сертификат — для этого добавляем опцию --no-check-certificate:
wget --no-check-certificate …
б) правильный способ: обновить корневые сертификаты.
5. Could not connect to Storage daemon on XXX:9103. ERR=No route to host
Задание зависает и выпадает с ошибкой. В сообщениях директора мы можем увидеть сообщение:
bareos-dir JobId 3: Warning: lib/bsock_tcp.cc:123 Could not connect to Storage daemon on bareos:9103. ERR=No route to host
Причина: сервер резервного копирования подключается к Storage daemon по сети. Данная ошибка говорит о том, что подключение не удалось.
Решение: открываем файл:
vi /etc/bareos/bareos-dir.d/storage/File.conf
А также остальные файлы из каталога /etc/bareos/bareos-dir.d/storage. Находим:
Address = bareos
* где bareos — имя сервера с ролью Storage daemon.
Нам нужно убедиться, что сервер из директивы Address доступен по сети.
6. DateTime::__construct()
При попытке загрузить данные в веб-интерфейсе на закладке Timeline ничего не происходит, а в консоль браузера отображается ошибка 500 при попытке загрузить данные со страницы /bareos-webui/job/getData/?data=timeline. Если перейти на данную страницу мы увидим исключение с текстом:
1 |
DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. |
Причина: по умолчанию php устанавливается без настройки временной зоны. Без данной настройки приложение не может работать корректно, так как не отрабатывает функция date_default_timezone_set.
Решение: открываем файл:
vi /etc/php.ini
Добавляем строку:
date.timezone = "Europe/Moscow"
* где Europe/Moscow — нужный часовой пояс.
Перезапускаем веб-сервер:
systemctl reload httpd