мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
scripts:createclientsbareossrv [2024/09/19 13:07] – удалено - внешнее изменение (Дата неизвестна) 127.0.0.1scripts:createclientsbareossrv [2024/09/19 14:10] (текущий) Администратор
Строка 1: Строка 1:
 +====== Создание всех настроек для клиента Bareos на стороне Director ======
  
 +Подробно о Bareos [[manuals:bareoslto|тут]]
 +
 +<code>#!/bin/bash
 +# Запрос имени клиента, каталога, адреса и пароля
 +read -p "Введите название каталога для монтирования расположенного в //10.0.5.4/backup (например, 'Grafana_Loki'): " mount_name
 +read -p "Введите имя клиента (например, dokuwiki): " client_name
 +read -p "Введите адрес клиента (например, 10.0.0.115): " client_address
 +read -s -p "Введите сложный пароль клиента не менее 30 символов: " client_password
 +echo
 +# Формирование имени без суффикса "-fd"
 +client_base_name="${client_name%-fd}"
 +# Отдельные переменные для пулов и storage
 +storage_name="$client_base_name" # Имя storage будет такое же как и имя клиента без -fd
 +device_name="${client_base_name}Storage" # Имя устройства
 +pool_name="I_${client_name}"
 +full_pool_name="F_${client_name}"
 +differential_pool_name="D_${client_name}"
 +# Создание клиента в конфигурационном файле
 +client_config_file="/etc/bareos/bareos-dir.d/client/${client_name}-fd.conf"
 +cat <<EOL > "$client_config_file"
 +Client {
 +Name = "${client_name}-fd"
 +Address = "${client_address}"
 +Password = "${client_password}"
 +}
 +EOL
 +# Проверка успешности создания файла клиента
 +if [ $? -ne 0 ]; then
 +echo "Ошибка при создании конфигурационного файла клиента."
 +exit 1
 +fi
 +echo "Клиент ${client_name}-fd успешно добавлен в конфигурацию."
 +# Создание файла <Имя клиента>Default.conf в каталоге /etc/bareos/bareos-dir.d/jobdefs/
 +jobdefs_file="/etc/bareos/bareos-dir.d/jobdefs/${client_name}Default.conf"
 +cat <<EOL > "$jobdefs_file"
 +JobDefs {
 +Name = "${client_name}Default"
 +Type = Backup
 +Level = Incremental
 +Client = "${client_name}-fd"
 +FileSet = "LinuxAll" # ${client_name} fileset
 +Schedule = "WeeklyCycle"
 +Storage = ${storage_name}
 +Messages = Standard
 +Pool = ${pool_name}
 +Priority = 10
 +Write Bootstrap = "/var/lib/bareos/%c.bsr"
 +Full Backup Pool = $full_pool_name # write Full Backups into "Full" Pool
 +Differential Backup Pool = $differential_pool_name # write Diff Backups into "Differential" Pool
 +Incremental Backup Pool = $pool_name # write Incr Backups into "Incremental" Pool
 +Backup Format = "Tar"
 +}
 +EOL
 +# Создание файла backup-<Имя клиента>.conf в каталоге /etc/bareos/bareos-dir.d/job/
 +backup_file="/etc/bareos/bareos-dir.d/job/backup-${client_name}-fd.conf"
 +cat <<EOL > "$backup_file"
 +Job {
 +Name = "backup-${client_name}-fd"
 +JobDefs = "${client_name}Default"
 +Client = "${client_name}-fd"
 +}
 +EOL
 +# Создание пулов в каталоге /etc/bareos/bareos-dir.d/pool/
 +pool_files=("$pool_name" "$full_pool_name" "$differential_pool_name")
 +for pool in "${pool_files[@]}"; do
 +pool_file="/etc/bareos/bareos-dir.d/pool/${pool}.conf"
 +if [[ $pool == I_* ]]; then
 +pool_type="Incremental"
 +label_format="I_${client_name}-"
 +retention="30 days"
 +volume_bytes="1G"
 +elif [[ $pool == D_* ]]; then
 +pool_type="Differential"
 +label_format="D_${client_name}-"
 +retention="90 days"
 +volume_bytes="10G"
 +elif [[ $pool == F_* ]]; then
 +pool_type="Full"
 +label_format="F_${client_name}-"
 +retention="365 days"
 +volume_bytes="50G"
 +fi
 +cat <<EOL > "$pool_file"
 +Pool {
 +Name = "${pool}"
 +Pool Type = Backup
 +Recycle = yes # Bareos может автоматически перерабатывать тома
 +AutoPrune = yes # Удалять тома с истекшим сроком действия
 +Volume Retention = $retention # Как долго следует хранить резервные копии ${pool_type} ?
 +Maximum Volume Bytes = $volume_bytes # Ограничить размер тома до разумного уровня
 +Maximum Volumes = 100 # Ограничить количество томов в пуле
 +Label Format = "$label_format" # Тома будут помечены как "${pool_type}-<volume-id>"
 +}
 +EOL
 +done
 +# Создание Storage в каталоге /etc/bareos/bareos-dir.d/storage/
 +storage_file="/etc/bareos/bareos-dir.d/storage/${storage_name}.conf"
 +cat <<EOL > "$storage_file"
 +Storage {
 +Name = "${storage_name}"
 +Address = "ВАШ hostname" # Адрес хранилища замените на ваш (по сути это hostname где у вас установлен bareos-dir)
 +Password = "ВАШ СЛОЖНЫЙ ПАРОЛЬ 30 и более символов" # Замените на ваш пароль
 +Device = "${device_name}"
 +Media Type = "File"
 +}
 +EOL
 +# Создание Device в каталоге /etc/bareos/bareos-sd.d/device/
 +device_file="/etc/bareos/bareos-sd.d/device/${device_name}.conf"
 +archive_device="/mnt/backup/${client_base_name}" # Путь к хранилищу, имя клиента без суффикса "-fd"
 +# Проверка существования директории
 +if [ ! -d "$archive_device" ]; then
 +echo "Директория $archive_device не существует. Создание..."
 +sudo mkdir -p "$archive_device" # Создание директории, если она не существует
 +else
 +echo "Директория $archive_device уже существует."
 +fi
 +cat <<EOL > "$device_file"
 +Device {
 +Name = "${device_name}"
 +Media Type = "File"
 +Archive Device = "${archive_device}"
 +LabelMedia = yes; # позволяет Bareos помечать немаркированные носители
 +Random Access = yes;
 +AutomaticMount = yes; # когда устройство будет открыто, прочтите его
 +RemovableMedia = no;
 +AlwaysOpen = no;
 +Description = "Файловое устройство. Подключаемый директор должен иметь то же имя и тип носителя."
 +}
 +EOL
 +# Проверка успешности создания файлов storage и device
 +if [ $? -ne 0 ]; then
 +echo "Ошибка при создании конфигураций хранилища или устройства."
 +exit 1
 +fi
 +echo "Хранилище и устройство успешно созданы."
 +# Изменение владельца файлов
 +# Каталог, который нужно изменить
 +target_dir="/etc/bareos/bareos-dir.d/pool/"
 +# Проверка существования каталога
 +if [ ! -d "$target_dir" ]; then
 +echo "Каталог $target_dir не существует."
 +exit 1
 +fi
 +# Поиск и изменение владельца, группы и прав на файлы
 +for file in "$target_dir"*; do
 +if [ -e "$file" ]; then # Проверка, существует ли файл
 +# Получаем текущих владельца и группу
 +owner=$(stat -c '%U' "$file")
 +group=$(stat -c '%G' "$file")
 +# Проверка, является ли владелец и группа root
 +if [ "$owner" == "root" ] && [ "$group" == "root" ]; then
 +echo "Изменение владельца и группы для файла: $file"
 +sudo chown bareos:bareos "$file"
 +sudo chmod 750 "$file"
 +fi
 +fi
 +done
 +echo "Готово! Все необходимые файлы были изменены."
 +# Автомонтирование папок
 +# Формирование строки для fstab
 +remote_path="//10.0.0.175/backup/${mount_name}" # Укажите ваше удаленное хранилище
 +local_path="/mnt/backup/${client_name}"
 +options="cifs username=bareos,password=ВАШ ПАРОЛЬ,uid=ВАШ UID,gid=ВАШ GID,file_mode=0775,dir_mode=0775 0 0" # Укажите ваши данные для монтирования каталога
 +# Обработка пробелов только в первой части
 +remote_path_escaped=$(echo "$remote_path" | sed 's/ /\\ /g')
 +# Формирование окончательной строки для fstab
 +mount_entry="${remote_path_escaped} ${local_path} ${options}"
 +# Проверка, существует ли уже такая строка в fstab
 +if grep -q -F "$mount_entry" /etc/fstab; then
 +echo "Строка для монтирования уже существует в /etc/fstab."
 +else
 +# Добавление строки в /etc/fstab
 +echo "$mount_entry" | sudo tee -a /etc/fstab > /dev/null
 +# Проверка успешности добавления
 +if [ $? -eq 0 ]; then
 +echo "Строка для монтирования успешно добавлена в /etc/fstab."
 +# Перезапуск fstab и монтирование всех файловых систем
 +echo "Перезапускаем /etc/fstab..."
 +sudo mount -a
 +# Проверка успешности монтирования
 +if [ $? -eq 0 ]; then
 +echo "Все файловые системы успешно смонтированы."
 +else
 +echo "Ошибка при монтировании файловых систем."
 +fi
 +else
 +echo "Ошибка при добавлении строки в /etc/fstab."
 +fi
 +fi
 +# Вывод информации о завершении
 +echo "Конфигурация для клиента ${client_name} успешно завершена!"
 +echo "Пожалуйста, проверьте созданные файлы:"
 +echo "Клиент: $client_config_file"
 +echo "JobDefs: $jobdefs_file"
 +echo "Backup Job: $backup_file"
 +echo "Pools: "
 +for pool in "${pool_files[@]}"; do
 +echo " - /etc/bareos/bareos-dir.d/pool/${pool}.conf"
 +done
 +echo "Storage: $storage_file"
 +echo "Device: $device_file"
 +# Сервисы для перезагрузки
 +services=("bareos-dir" "bareos-sd" "bareos-fd")
 +# Перезагрузка сервисов
 +for service in "${services[@]}"; do
 +echo "Перезагрузка сервиса $service..."
 +sudo systemctl restart "$service"
 +# Проверка успешности перезагрузки
 +if [ $? -eq 0 ]; then
 +echo "Сервис $service успешно перезагружен."
 +else
 +echo "Ошибка при перезагрузке сервиса $service."
 +fi
 +done
 +echo ""
 +# Вывод статусов сервисов
 +for service in "${services[@]}"; do
 +echo "Статус сервиса $service:"
 +sudo systemctl status "$service" --no-pager
 +echo ""
 +done
 +# Конец скрипта
 +</code>
 +
 +{{tag>Bareos}}