Настройка и использование сервера Bareos на Rocky Linux

Обновлено и опубликовано Опубликовано:

Используемые термины: BareosRocky Linux, PostgreSQL.

В инструкции рассмотрим основные моменты по развертыванию системы резервного копирования на базе бесплатного программного продукта Bareos. В качестве операционной системы мы будем использовать Rocky Linux (также протестировано на CentOS 7). Bareos поддерживает работу с базами данных PostgreSQL и MySQL — однако, в последней версии (на момент написания инструкции) установка была возможна только для первой.

Предварительная настройка
    Установка и обновление пакетов
    Настройка времени
    Открытие нужных портов
    Обновление корневых сертификатов
    Настройка SELinux
Установка основных компонентов Bareos
Конфигурирование сервера баз данных
Настройка веб-интерфейса
    Установка и запуск
    Создание пользователя для доступа к веб-консоли
    Настройка https
Конфигурирование агента на удаленную систему
    Установка клиента
    Регистрация агента на сервере
Работа с заданиями
    Вводные данные по работе с задачами
    Задание резервного копирования локальных файлов
    Резервирование данных на удаленном сервере
    Применение шаблона
    Выполнение заданий по расписанию
    Дополнительные опции при настройке заданий
Работа с уведомлениями
    Отправка с локального хоста
    Отправка через почтовый релей
    Настройка задания для отправки оповещений
    Использование Zulip для отправки уведомлений
Конфигурирование носителей для хранения резервных копий
    Устройства хранения
    Создание и настройка пулов
    Настройка Director для связи с устройством хранения
    Настройка задания для работы с устройствами хранения
    Проверка настройки
Включение и настройка API
Шпаргалка по командам в bconsole
Удаление сервера резервного копирования
Примеры настройки заданий
    База данных MySQL/MariaDB
    База данных MySQL/MariaDB в docker
Анализ проблем и ошибок
    Включение отладки для заданий
    Примеры встречающихся ошибок и способы их решения

Подготовка системы

Выполним предварительные настройки.

Пакеты

Несмотря на то, что, начиная с версии 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

Подробнее процесс описан в инструкции Обновление корневых сертификатов на Linux.

Настройка SELinux

Проще всего, отключить SELinux. Но, если мы хотим его оставить, включаем политику:

setsebool -P httpd_can_network_connect on

* данное правило разрешает httpd-сервису и веб-скриптам подключение по сети.

Установка Bareos

Установка выполняется из репозитория. Однако, его нет в базовых репозиториях, поэтому сначала, выполним дополнительные действия.

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

RELEASE=21

DIST=EL_8

* в нашем примере мы будем устанавливать программный продукт версии 21 для группы релизов EL_8.

Установим репозиторий командой:

wget 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

Мы должны увидеть результат:

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:

Начальная страница веб-сервера Apache на Rocky Linux

Веб-сервер работает. Идем дальше.

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.

Мы должны увидеть:

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/ — мы должны увидеть окно авторизации. Вводим наши логин и пароль:

Страница входа в веб-интерфейс Bareos

Мы должны попасть на страницу со панели управления.

Стоит отметить, что мы могли обойтись и без командной оболочки bconsole — нужно создать файл /etc/bareos/bareos-dir.d/console/admin.conf с нужными значениями и перезапустить bareos.

3. SSL (опционально)

Хорошей идеей будет настройка доступа к веб-интерфейсу по защищенному протоколу https. Для этого нам нужно:

  1. Выделить доменное имя подключения к серверу.
  2. Получить корректных сертификат для имени, по которому мы решили обращаться к серверу.
  3. Настроить веб-сервер Apache для работы с полученным сертификатом.

В рамках данной инструкции, мы не будем рассматривать подробно каждый из пунктов.

Доменное имя

Домен можно зарегистрировать на внутреннем DNS. Для большинства компаний это самый актуальный вариант. Если наш сервер должен быть доступен из глобальной сети, то можно использовать глобальный DNS для нашего домена. Ну и самый быстрый вариант, прописать hostname в локальный файл hosts, с которого мы будем заходить на сервер. Предположим, что наш сервер резервного копирования должен быть доступен по имени bareos.dmosk.ru.

Сертификат

Получить сертификат можно тоже несколькими способами:

  • купить для нашего домена или использовать уже купленный wildcard.
  • получить бесплатно от Let's Encrypt.
  • получить от внутреннего центра сертификации, если такой имеется.

Предположим, что наш сертификат получен и его файлы размещены в каталогах /etc/pki/tls/certs. и /etc/pki/tls/certs.

Настройка Apache

Подробнее, процесс описан в инструкции Настройка Apache + SSL для работы сайта по HTTPS. Мы рассмотрим настройку кратко.

Устанавливаем модуль работы по SSL:

yum install mod_ssl

Открываем файл:

vi /etc/httpd/conf.d/ssl.conf

Находим опции и приводим их к виду:

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.dmosk.ru/bareos-webui/, где bareos.dmosk.ru — имя хоста, для которого мы получили сертификат. Мы должны подключиться к веб-интерфейсу по защищенному соединению.

Установка и настройка клиента

Рассмотрим процесс подключения клиентов, которые работают под управлением Linux Ubuntu и CentOS.

Установка клиента

Также как с сервером, на странице официального сайта мы должны ознакомиться с версиями релизов и поддерживаемых дистрибутивов. После чего создаем переменные, настраиваем репозиторий и выполняем установку пакета. В зависимости от дистрибутива операционной системы, наши действия будут отличаться.

а) на Linux Ubuntu

Задаем переменные:

RELEASE=21

DIST=xUbuntu_20.04

* для Ubuntu версии 20.04.

Скачиваем настройки для репозитория:

wget https://download.bareos.org/bareos/release/${RELEASE}/${DIST}/bareos.list -O /etc/apt/sources.list.d/bareos_${RELEASE}_${DIST}.list

* если получим ошибку Issued certificate has expired переходим к решению ниже.

Устанавливаем ключ подписи пакетов в репозитории:

wget -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.

Скачиваем настройки для репозитория:

wget 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 — пароль, который нужно будет использовать данному клиенту для подключения к серверу.

Мы получим вывод на подобие:

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.

Для нас теперь важно содержимое для экспорта, которое в нашем примере имеет вид:

Director {
  Name = bareos-dir
  Password = "[md5]23ea8b731947b6aff12b13c98bca39ae"
}

Перезапускаем сервис директора и выходим из консоли:

* reload

* exit

Переходим в консоль клиента, открываем файл:

vi /etc/bareos/bareos-fd.d/director/bareos-dir.conf

И меняем содержимое на то, что мы получили на стороне сервера:

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

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

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

Меняем значение для:

Name = "SecondJob"
Client = "ubuntu"
...
FileSet = "SecondFileset"

* в нашем примере резервная копия будет делаться для клиента ubuntu, а также меняем набор файлов на SecondFileset.

Теперь открываем файл:

vi /etc/bareos/bareos-dir.d/fileset/SecondFileset.conf

И изменим набор файлов на:

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

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

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

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

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 при описании шаблона или задания. Это удобнее, если мы хотим полностью контролировать процесс на стороне сервера.

Например:

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

Меняем значения для следующих опций:

inet_interfaces = all
...
inet_protocols = ipv4

* однако, если мы используем IPv6, то менять значение для опции inet_protocols не нужно.

После внесения настроек разрешаем автозапуск Postfix и стартуем его:

systemctl enable postfix --now

Базовая настройка готова и сообщения могут отправляться. В настройках задания или шаблона мы можем определять адрес почтового ящика, куда нужно отправлять письма:

Write Bootstrap = "|/usr/bin/bsmtp -h localhost -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" master@dmosk.ru"

* в данном примере отправка будет выполнена на ящик master@dmosk.ru.

После правки конфигурационного файла не забываем перезапустить сервис:

systemctl reload bareos-dir

Для корректной отправки почтовых сообщений нужно правильно настроить обратный адрес и домен отправки. Подробнее можно прочитать в инструкции Настройка почтового сервера для массовой рассылки сообщений.

Отправка через сторонний почтовый сервер

Команда bsmtp принимает параметры, в том числе те, с помощью которых мы укажем сторонний сервер. В настройках задания или шаблона мы можем определить ее поведение:

Write Bootstrap = "|/usr/bin/bsmtp -h mail.dmosk.local -f \"\(Bareos\) \" -s \"Bootstrap for Job %j\" master@dmosk.ru"

* в данном примере отправка будет выполнена через сервер mail.dmosk.local.

Утилита bsmtp не умеет проходить аутентификацию. Поэтому, если наш почтовый сервер требует проверку подлинности, нам не удастся ее использовать. Потребуется более сложная схема с использованием MTA. Пример такой настройки можно прочитать в инструкции Отправка почты от Postfix через почтовый сервер Яндекса. Также можно просто использовать утилиту командной строки — подробнее в инструкции Отправка почты из командной строки Linux.

Настройка отправки уведомлений

По умолчанию, нам будут приходить все сообщения, что может быть не совсем удобно для повседневного использования системы. Мы можем создать основные настройки для оповещений в каталоге /etc/bareos/bareos-dir.d/messages. Откроем на редактирование новый файл:

vi /etc/bareos/bareos-dir.d/messages/Alarms.conf

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@dmosk.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

[api]
key=a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5
email=bot_name@zulip.dmosk.ru
site=https://zulip.dmosk.ru

* где:

  • key — токен, который был сгенерирован на стороне Zulip сервера для бота.
  • email — адрес бота, от которого будет выполняться отправка.
  • site — URL-адрес до нашего сервера zulip.

Попробуем выполнить тестовую отправку:

/usr/local/bin/zulip-send postmaster@dmosk.ru --message 'Test Message'

* где postmaster@dmosk.ru — адрес учетной записи, а zulip, на который будет отправлено сообщение.

Мы должны получить сообщение в наш чат.

Теперь копируем файл .zuliprc в домашнюю директорию пользователя bareos:

cp ~/.zuliprc /var/lib/bareos/

Создаем профиль для отправки сообщений:

vi /etc/bareos/bareos-dir.d/messages/Zulip.conf

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@dmosk.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@dmosk.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

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

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 пула:

  1. Full.
  2. Differential.
  3. Incremental.
  4. Scratch.

Мы можем использовать их, оставив значения опций или отредактировав их на нужные.

3. Привязка устройства Director к устройству Storage Daemon

За устройства хранения и контроль резервного копирования отвечают разные роли Bareos, а значит нам нужно настроить привязку.

Создаем новый файл:

vi /etc/bareos/bareos-dir.d/storage/FileNew.conf

Storage {
  Name = NewStorage
  Address = bareos.dmosk.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

[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

[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: ubuntu

Select 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 способа:

  1. Задействовать плагин bpipe при описании файлсета.
  2. Запускать скрипт до резервирования, который сначала сделает дамп базы.

Мы воспользуемся вторым способом: он, довольно, понятный и не потребует установки дополнительных пакетов.

Пример задания:

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"
  }
}

Пример файлсета:

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

#!/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

[mysqldump]
user=backup
password="password"

* где user и password — логин и пароль для подключения к базе с целью создания дампа.

Задание bareos:

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"
  }
  ...
}

Файлсет:

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

И добавим строку:

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 у нас указано актуальное имя сервера:

...
Address = bareos.dmosk.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 ...

б) правильный способ: обновить корневые сертификаты. 

Подробнее процесс описан в статье Обновление корневых сертификатов на Linux.

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. Если перейти на данную страницу мы увидим исключение с текстом:

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

# Серверы # Резервное копирование # Rocky Linux
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет