igNix.ru
Опубликовано igNix.ru (http://www.ignix.ru)

Главная > Версия для печати > Версия для печати

Демоны

Ваша оценка: Нет Средняя: 5 (10 голосов)

Bacula


Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее централизованно управлять резервным копированием, восстановлением, и проверкой данных по сети. Bacula также может работать на единственном сервере или, распределёно на нескольких, может записывать резервные копии на различные типы носителей, включая ленты, ленточные библиотеки, диски. Предлагает широкие возможности для управления хранилищами данных, облегчает поиск и восстановление потерянных или повреждённых файлов. Благодаря модульной структуре, Bacula легко масштабируемая система и может работать как в маленьких так и в крупных сетях. Дает возможность управления через CLI, GUI и веб-интерфейс.

Содержание:

  • Введение
  • Планирование
  • Установка
    • База данных
  • Настройка
    • Director (DIR)
    • Storage Daemon (SD)
    • Console
    • File Daemon (FD)
  • Запуск
    • Сохранение данных
    • Восстановление
    • Гибридный метод
    • Переменные
  • Управление
    • Webacula
    • BAT, tray-monitor
  • FAQ
  • Книги

Введение

Bacula разделена на несколько отдельных модулей это придает ей гибкости в работе:

  • Director (DIR) (порт 9101) — директор осуществляет централизованный контроль и администрирование всего комплекса задач. Планирование и управление заданиями на резервное копирование (Job). Обслуживание Каталога (Catalog) — центральной БД для хранения метаданных.
  • Storage Daemon (SD) (порт 9103) — сервер хранения читает и пишет данные на физический носитель: диск, ленту, DVD, USB.
  • File Daemon (FD) (порт 9102) — клиент выполняющий непосредственное копирование, восстановление и проверку данных по запросу Director. File Daemon должен быть установлен на нужной клиентской машине и он обменивается информацией с Director и Storage Daemon.
  • Console — консоль управления для администратора. Поддерживает списки ACL для разных пользователей консоли. Типы консолей: TTY, wxWidgets (GUI) для Linux, Unix, Win32, GNOME (GUI), несколько веб-интерфейсов, Qt4.
  • Catalog database — база данных для хранения метаданных SQL: MySQL, PostgreSQL, или SQLite.
  • Tray Monitor — апплет GNOME/KDE/Win32 GUI для показа активности Director, File daemons, Storage daemon в реальном времени.

Планирование

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

Оборудование
  • thor.kmps.local - FreeBSD 8.2 amd64. ISC-DHCP, Web, NUT, Bacula и т.п. [DIR, SD, FD]
  • srv1.kmps.local - Windows 2003, AD, сетевые директории, DNS, SEP, WSUS, Bacula и т.п. [FD]
  • srv2.kmps.local - Windows 2003 БД 1С, Гарант, Консультант+, Bacula и т.п. [FD]

Как я сказал Bacula может быть распределена в сети и при грамотном ведении хозяйства и бюджета наша задача выглядит примерно так.

Примечание: чтобы не усложнять схему я специально убрал из неё трей-монитор, командную консоль, и БД каталога тк их можно поставить на другие машины. Пример

К слову сказать готовые ленты желательно переносить в другое здание (или помещение) тк от чрезвычайных случаев никто не застрахован. И вот еще я как и все вы живем в России обычно бюджет фирм на ИТ небольшой и приходиться выкручиваться самому так, что реальная схема часто выглядит так.

Схема резервного копирования

Для начала вам понадобится нарисовать простую таблицу примерно такого вида.

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

Типы резервного копирования

Дополнительно опишем типы резервного копирования их плюсы и минусы:

  1. Полное копирование (Full backup) - производится копирование данных в полном объеме. Самый надежный способ копирования. В случае выхода из строя свежей копии данные можно восстановить из предыдущих копий. Эффективный и быстрый метод восстановления. Недостаток - требует носителей большого объема и длительного времени выполнения.
  2. Дифференциальное копирование (Differential backup) - копируются файлы, изменившиеся после последнего Full backup. Данные копируются "нарастающим итогом", так что последняя копия всегда будет содержать все изменения с момента последнего Full backup. Выполняется быстрее чем Full backup, при повреждении одной из копий не приводит к потере всех данных за последующий и предыдущий период (при наличии живого Full backup). Так или иначе требуется регулярный Full backup и бывает что последняя копия (при длительной работе) по размеру изменений приближается к Full backup.
  3. Инкрементное копирование (Incremental backup) - выполняется копирование только информации, измененной после выполнения предыдущего Incremental backup. Это самый быстрый метод резервирования и занимает меньше всего объема, но и самый ненадежный метод. В случае повреждения одной из копий все последующие становятся шлаком. И соответственно при повреждении Full backup все становиться негодным. Восстановление данных занимает продолжительное время.

Предпочтителен Full backup но это"дорого" обходиться. Если данные не очень ценны или ресурсов мало то используйте Incremental backup. Differential backup это компромисс, но бывает что последняя копия приближается объему полного копирования так что следите за ним =). Есть еще и другие типы копирования такие как VirtualFull и Base вы можете познакомиться с ними сами.

Установка

Установка стандартна так что следуйте за белым кроликом...

# make search name=bacula-server
Port:   bacula-server-5.0.3
Path:   /usr/ports/sysutils/bacula-server
Info:   The network backup solution (server)
Maint:  dan@langille.org
B-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1
R-deps: gettext-0.18.1.1 libiconv-1.13.1_1 postgresql-client-8.3.15,1
WWW:    _http://www.bacula.org/
 
# cd /usr/ports/sysutils/bacula-server
# make config
 
Options for bacula-server 5.0.3
 
[ ] SQLITE3     Use SQLite-3 database
[X] MYSQL       Use MySQL database
[ ] POSTGRESQL  Use PostgreSQL database
[ ] MTX         Install mtx for control of autochanger devices
[X] NLS         Native Language Support via gettext utilities
[X] OPENSSL     Enable OpenSSL for encrypted communication
 
# make install clean
You may use the following build options (or make config):
 
  WITH_CLIENT_ONLY=yes  if you only want the file daemon.
  WITH_MTX=yes          if you want to use mtx instead of chio for autochanger control.
  WITH_SQLITE3=yes      if you want SQLite-3 as the database (not recommended).
  WITH_OPENSSL=yes      Enable OpenSSL for encrypted communication.
~~~
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/libbac.so.5
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/bacula-sd
/usr/local/etc/rc.d/bacula-dir
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.bacula.org/
===>  Cleaning for bacula-server-5.0.3

База данных

Для работы Bacula Director ему необходима база данных для накопления и оперирования всевозможными данными о собранных резервных копиях. Такая база называется Каталог (Catalog) и храниться она в СУРБД (MySQL, Postgres). Каталогов может быть несколько, в зависимости от потребностей. Перед запуском, необходимо подготовить хотя бы один.
Cоздадим базу данных в MYSQL, например BACULA_DB, и пользователя имеющего полные права на эту базу данных.

# mysqladmin -uADMIN_USER -pADMIN_PASS create BACULA_DB
# mysql -uADMIN_USER -pADMIN_PASS -e"GRANT ALL ON BACULA_DB.* TO \
 BACULA_USER@localhost IDENTIFIED BY 'BACULA_USER_PASS'" BACULA_DB

Для заполнения базы необходимыми таблицами есть готовый скрипт находящийся /usr/local/share/bacula/make_mysql_tables. В нем по умолчанию используется база данных с именем bacula. Кто использует другое имя БД для Bacula то вам необходимо внести изменение в этот скрипт и запустить его.
# /usr/local/share/bacula/make_mysql_tables -u BACULA_USER -pBACULA_USER_PASS
Creation of Bacula MySQL tables succeeded.

Настройка

Необходимо создать директорию (а лучше взять новый диск для хранения резервных копий и еще лучше это использовать ленточный накопитель) куда будем писать резервные копии, и даем доступ на запись пользователю bacula и примонтируем (в моем случае) диск для бекапов:

# mkdir /home/bacula/backup
# chown bacula:bacula /home/bacula/backup
# mount /dev/ad6s1d /home/bacula/backup

Добавим в fstab строчку про монтирование диска (в моем случае).

# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/mirror/gm0s1b              none            swap    sw              0       0
/dev/mirror/gm0s1a              /               ufs     rw              1       1
/dev/mirror/gm0s1f              /home           ufs     rw              2       2
/dev/mirror/gm0s1d              /usr            ufs     rw              2       2
/dev/mirror/gm0s1e              /var            ufs     rw              2       2
/dev/ad6s1d              /home/bacula/backup    ufs     rw              2       2
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
tmpfs                   /tmp            tmpfs   rw              0       0

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

Director (DIR)

Необходимо создать конфигурационные файлы для DIR и SD на основе шаблонов и отредактировать их в соответствии с желаемой конфигурацией.

# cd /usr/local/etc
# ll |grep bacula
-r--r--r--  1 root  wheel    949B 11 май 11:56 bacula-barcodes.samples
-rw-r-----  1 root  bacula   8,8K 11 май 11:56 bacula-dir.conf.sample
-rw-r-----  1 root  wheel    5,8K 11 май 11:56 bacula-sd.conf.sample
# cp bacula-dir.conf.sample bacula-dir.conf
# cp bacula-sd.conf.sample bacula-sd.conf

Разберем дефолтный конфигурационный файл DIR:

# cat bacula-dir.conf
 
#
# Дефолтный файл конфигурации Bacula Director 
#
# Единственное, что должно быть изменено, это добавить одну или
# несколько имен файлов или директорий в директиве Include
# набора FileSet.
#
# Для Bacula релиза 5.0.3 (04 августа 2010) - FreeBSD 8.2-RELEASE
#
# Вы также можете изменить адрес электронной почты по умолчанию
# от root до вашего адреса. См. директивы "mail" и "operator"
# в ресурсах сообщения.
#
 
Director {                            # Определим себя
  Name = thor.kmps.local-dir          # Имя
  DIRport = 9101                      # Порт который слушает DIR
  QueryFile = "/usr/local/share/bacula/query.sql"
  WorkingDirectory = "/var/db/bacula" # Рабочий каталог
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 1  # Максимальное количество
                               # параллельных заданий. Не рекомендуется
                               # одновременно записывать
                               # несколько заданий в один пул.
  Password = "SECRET"          # Пароль для анонимной консоли (фулл контрол)
  Messages = Daemon            # Набор настроек для отправки сообщений
}
 
JobDefs {                     # Дефолтное задание
  Name = "DefaultJob"         # Имя задания
  Type = Backup               # Тип (backup, restore и т.д.)
  Level = Incremental         # Уровень бэкапа (Full, Incremental, Differential и тп)
  Client = thor.kmps.local-fd # Имя клиента
  FileSet = "Full Set"        # Набора файлов для сохранения.
  Schedule = "WeeklyCycle"    # Расписание
  Storage = File              # Файловое хранилище
  Messages = Standard         # Поведение уведомлений
  Pool = File                 # Пул, куда будем писать бэкапы
  Priority = 10               # Приоритет. Давая заданиям приоритеты
                              # от 1 (max) до 10 (min), можно регулировать
                              # последовательность выполнения.
  Write Bootstrap = "/var/db/bacula/%c.bsr" # Файл хранит информацию откуда извлекать
                                            # данные при восстановлении
}
# Определим основные ночные сохранения заданий резервного копирования
# По умолчанию, работа резервного копирование будет на диске в /tmp
Job {
  Name = "BackupClient1"
  JobDefs = "DefaultJob"
}
 
#Job {
#  Name = "BackupClient2"
#  Client = thor.kmps.local2-fd
#  JobDefs = "DefaultJob"
#}
 
# Резервное копирование каталога базы данных (после ночных сохранений)
Job {
  Name = "BackupCatalog"
  JobDefs = "DefaultJob"
  Level = Full
  FileSet="Catalog"
  Schedule = "WeeklyCycleAfterBackup"
  # Это создает копию ASCII из каталога
  # Аргументы make_catalog_backup.pl являются:
  #  make_catalog_backup.pl <catalog-name>
  RunBeforeJob = "/usr/local/share/bacula/make_catalog_backup.pl MyCatalog"
  # Это удаляет копию каталога
  RunAfterJob  = "/usr/local/share/bacula/delete_catalog_backup"
  Write Bootstrap = "/var/db/bacula/%n.bsr"
  Priority = 11                   # после основного резервного копирования
}
#
# Стандартный шаблон восстановления, который может изменен консольной программой
# Только одна такая работа необходима для всех Работа/Клиентов/Хранилищ...
# [единственное я изменил путь к Where для клиента thor.kmps.local-fd
# это куда Bacula будет складывать восстановленные из архивов файлы]
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=thor.kmps.local-fd
  FileSet="Full Set"
  Storage = File
  Pool = Default
  Messages = Standard
  #Where = /tmp/bacula-restores
  Where = /home/bacula/bacula-restores
}
 
 
# Список файлов для резервного копирования
FileSet {               # Список файлов
  Name = "Full Set"     # Имя списка файлов
  Include {
    Options {
      signature = MD5   # Тип сигнатур MD5\SHA1
    }
#
# Поместить список файлов, вы можете предшествует 'File =', по одному на строку
# или включить внешний список:
#
#    File = <file-name
#
# Обратите внимание: "/" резервное копирование всего корневого раздела.
# если у вас есть другие разделы, такие как "/usr" / или "/home"
# вероятно, вы захотите, чтобы добавить их тоже.
#
# По умолчанию это определяется, чтобы указать для Bacula бинарный
# каталог, чтобы дать набор файлов для резервного копирования на
# диск во время начального тестирования.
#
    File = /usr/local/sbin
  }
#
# Если вы сохраняете корневой каталог, следующие два исключения 
# файлов могут быть полезны
#
  Exclude {                # Исключения
    File = /var/db/bacula  ##Исключаемые директории
    File = /tmp            ##
    File = /proc           ##
    File = /tmp            ##
    File = /.journal       ###Исключаемые файлы
    File = /.fsck          ###
  }
}
 
#
# Когда делать резервные копии, полную резервную копию в первое
# воскресенье месяца, дифференциальный (т.е. дополнительные к полной)
# каждые остальные воскресенья, так и инкрементный в другие дни.
Schedule {                                # Планировщик
  Name = "WeeklyCycle"                    # Имя планировщика
  Run = Full 1st sun at 23:05             # Запуск полного бекапа в..
  Run = Differential 2nd-5th sun at 23:05 # Запуск диф. бекапа в..
  Run = Incremental mon-sat at 23:05      # Запуск инк. бекапа в..
}
 
# Этот график для каталога. Он запускается после WeeklyCycle
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}
 
# Это резервное копирование каталога Bacula [изменил из-за БД имя]
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    #File = "/var/db/bacula/bacula.sql"
    File = "/var/db/bacula/BACULA_DB.sql"
  }
}
 
Client {
  Name = thor.kmps.local-fd        # Имя клиента
  Address = thor.kmps.local        # Адрес
  FDPort = 9102                    # Порт на котором клиент сидит
  Catalog = MyCatalog              # Каталог в MySQL
  Password = "SECRET"              # пароль для FileDaemon
  File Retention = 30 days         # 30 дней - период, на протяжении
                                   # которого в каталоге будет храниться 
                                   # инфа о файлах этого клиента
  Job Retention = 6 months         # 6 месяцев - тоже, но про задания
  AutoPrune = yes                  # Удаление истекших заданий/файлов
}
 
#
# Второй клиент (File Services) для резервного копирования
# Вы должны изменить имя, адрес и пароль, прежде чем использовать
#
#Client {
#  Name = thor.kmps.local2-fd
#  Address = localhost2
#  FDPort = 9102
#  Catalog = MyCatalog
#  Password = "SECRET"                 # пароль для FileDaemon 2
#  File Retention = 30 days            # 30 дней
#  Job Retention = 6 months            # 6 месяцев
#  AutoPrune = yes                     # Удаление истекших заданий/файлов
#}
 
 
# Определение устройства хранения файлов
Storage {
  Name = File                 # Имя. Используется в определениях job
# Не используйте здесь "localhost"
  Address = thor.kmps.local   # Здесь использовать полное имя
  SDPort = 9103               # Порт SD
  Password = "SECRET"         # Пароль к SD
  Device = FileStorage        # Устройство. Должно быть определено
                              # в настройках секции Device сервера хранения
  Media Type = File           # Файл, диск, лента
}
# Определение DDS ленточного устройство хранения данных
#Storage {
#  Name = DDS-4
#  Не используйте здесь "localhost"
#  Address = localhost             # Здесь использовать полное имя
#  SDPort = 9103                   # Порт SD
#  Password = "SECRET"             # пароль для Storage daemon
#  Device = DDS-4                  # должен быть таким же, как Device в Storage daemon
#  Media Type = DDS-4              # должен быть таким же, как MediaType в Storage daemon
#  Autochanger = yes               # включить для авточейнджера устройства
#}
 
# Определение 8мм устройства хранения ленты
#Storage {
#  Name = "8mmDrive"
#  Не используйте здесь "localhost"
#  Address = localhost
#  SDPort = 9103
#  Password = "SECRET"
#  Device = "Exabyte 8mm"
#  MediaType = "8mm"
#}
 
# Определение DVD накопителя
#Storage {
#  Name = "DVD"
#  Не используйте здесь "localhost"
#  Address = localhost
#  SDPort = 9103
#  Password = "SECRET"
#  Device = "DVD Writer"
#  MediaType = "DVD"
#}
 
# Службы общего каталога
Catalog {
  Name = MyCatalog
# Раскомментируйте следующую строку, если вы хотите использовать dbi драйвера
# dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport =
  dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport = 3306
  dbname = "kmps_bacula"; dbuser = "kmps_bacula"; dbpassword = "PASSWORD"
}
 
# Умеренная доставки сообщения - отправить большинство сообщений на адрес
# электронной почты и консоль
Messages {
  Name = Standard
#
# ПРИМЕЧАНИЕ! Если вы отправляете на два почтовых адреса или более 
# адресов электронной почты, необходимо будет заменить %r в поле 
# (-f части) с одиним действительным адресом электронной почты в 
# обоих mailcommand, так и operatorcommand. Что это делает, он
# устанавливает адрес электронной почты, сообщения электронной почты
# будет отображаться в поле «ОТ», который является по умолчанию 
# такое же письмо, как они его передали. Однако если вы отправляете
# сообщение на более чем один адрес, то вам придется вручную,
# установить адреса на один адрес. Например, «no-reply@mydomain.com»,
# лучше так, что стремится сказать (большинству) людей, которые
# его получат с автоматизированного источника рассылки сообщений.
 
  mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula: %t %e of %c %l\" %r"
  operatorcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula: Intervention needed for %j\" %r"
  mail = root@localhost = all, !skipped
  operator = root@localhost = mount
  console = all, !skipped, !saved
#
# ВНИМАНИЕ! Переменная указанная ниже создаст файл, который вам
# нужно будет ротировать newsyslog'ом Однако, он также будет
# держать все ваши сообщения, если они просматриваются
# с консоли.
  append = "/var/db/bacula/log" = all, !skipped
  catalog = all
}
 
#
# Доставка сообщений для демона сообщений (не работы).
Messages {
  Name = Daemon
  mailcommand = "/usr/local/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" /
-s \"Bacula daemon message\" %r"
  mail = root@localhost = all, !skipped
  console = all, !skipped, !saved
  append = "/var/db/bacula/log" = all, !skipped
}
 
# Определение пула по умолчанию
# Pool - отдельное описание для каждого набора томов (лент, DVD, файлов)
# используется при описании задания для указания пула из которого 
# должен быть взят том. В каждый пул может входить несколько томов.
 
Pool {                         # Пул
  Name = Default               # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Bacula может автоматически рециркулировать тома (Volumes)
  AutoPrune = yes              # Удалять из каталога записи о файлах и
                               # заданиях, срок хранения которых истёк в
                               # соответствии с Volume Retention, 
                               # при поиске доступного на запись тома.
  Volume Retention = 365 days  # Через один год
}
 
# Определения пула файлов
Pool {                         # Пул
  Name = File                  # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Bacula может автоматически рециркулировать тома (Volumes)
  AutoPrune = yes              # Удаление истекших томов (Volumes)
  Volume Retention = 365 days  # через один год
  Maximum Volume Bytes = 50G   # Ограничение размера тома
  Maximum Volumes = 100        # Ограничить количество томов в пуле
}
 
# Определения пула Scratch
# Scratch зарезервировано для пула запасных том - при необходимости
# система самостоятельно переводит том из него в требуемый пул
Pool {
  Name = Scratch
  Pool Type = Backup
}
 
#
# Ограниченная консоль, используемая в трей мониторе для получения
# статуса директора DIR
#
Console {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  CommandACL = status, .status
}
 
# Свои конфигурационные файлы
#@/usr/local/etc/client_schedule.conf
@/usr/local/etc/client_thor.conf
@/usr/local/etc/client_srv1.conf
@/usr/local/etc/client_srv2.conf

Как вы заметили, я включил несколько конфигурационных файлов клиентов в конец файла конфигурации DIR, но об этом чуть позже.

Последовательность действий

Что бы эффективно управлять системой резервного копирования, нужно как следует подумать и попрактиковаться, пока не придет понимание как эта система работает. В конфигурационном файле вы должны описать к примеру работу для одного клиента несколькими переменными такими как Job, Storage, Pool, Client, FileSet, Schedule. Каждой переменной присваивается понятное имя и далее в Job указываются необходимые имена переменных чтобы это было законченной задачей и могло работать согласно вашим указаниям. Рабочий клиент состоит из 6ти элементов:

  • Job (Работа) - это объект которому присваивают понятное имя и это совокупность вещей и указаний как, кого, что и куда будем резервировать. По его имени эту задачу можно определять, исполнять и вызывать из консоли.
  • Client (Клиент) - здесь указывается имя клиента для этой работы, сам клиент и его имя определяется отдельно.
  • FileSet (Набор файлов) - указывается набор файлов\директорий и их исключений для этой работы, сам набор файлов и его имя определяется отдельно.
  • Schedule (Планировщик) - планировщик для этой работы, в нем описываем периодичность работы и перераспределение ресурсов это когда делать полное копирование когда дифференциальное и тд. Сам планировщик и его имя определяется отдельно и вы можете для удобства завести отдельный конфиг.
  • Storage (Хранилище) - Определение устройства хранения файлов для этой работы. В этом хранилище есть секция Device (см по имени) в котором есть указание, где будем хранить резервные копии.
  • Pool (Пул) - определяем для работы нужный нам Пул это отдельное описание для каждого набора томов (лент, DVD, файлов)

Примечание: Все переменные вы можете использовать в различных комбинациях указав нужное имя в нужной работе к примеру Schedule с именем Weekly_1st можете использовать в разных работах которым необходимо одинаковое время и периодичность работ.

Свои конфигурационные файлы

Создадим дополнительные конфигурационный файлы для трех серверов и включим их в bacula-dir.conf.
Клиент THOR

# cat client_thor.conf
# Клиент Thor
# Создаем задание thor_backup-job и указываем ресурсы.
Job {
  Name = "thor_backup-job"          # Имя задания
  Type = Backup                     # Тип (backup, restore и т.д.)
  Level = Full                      # Уровень бэкапа
  Client = thor-fd                  # Имя клиента
  FileSet = "thor-fileset"          # Набора файлов для сохранения.
  Schedule = "Month-1hrs-sun"       # Расписание
  Storage = backup-disk1            # Файловое хранилище
  Messages = Daemon                 # Поведение уведомлений
  Pool = thor-pool                  # Пул, куда будем писать бэкапы
  Priority = 10                     # Приоритет. Давая заданиям приоритеты
                                    # от 1 до 10, можно регулировать
                                    # последовательность выполнения.
  Write Bootstrap = "/var/db/bacula/thor_backup-job.bsr"
}
 
# Определяем список резервируемых файлов
FileSet {
  Name = "thor-fileset"     # Имя списка
  Include {
    Options {
      signature = MD5
    }
    File = /etc             # Указываем каталоги, который будем бэкапить
    File = /home/Raven2000
  }
  Exclude {                 # Исключим пару каталогов
    File = /home/Raven2000/www/tmp
    File = /home/Raven2000/www/log
  }
}
 
# Pool - описание набора  устройств хранение
# В каждый пул будет входить несколько томов. Регулировать, в какой конкретно
# том бакула будет писать задание нельзя. Я хотел, чтобы каждое задание
# у меня писалось в отдельный файл, поэтому на каждый backup job у меня
# будет отдельный пул.
Pool {
  Name = thor-pool             # Имя пула
  Pool Type = Backup           # Тип пула
  Recycle = yes                # Автоматически менять тома.
  AutoPrune = yes              # Автоматическое удаление из БД заданий с
                               # истекшим сроком годности.
  Volume Retention = 365 days  # Срок, по истечении которого тома будут
                               # удаляться из пула.
  Maximum Volume Bytes = 50G   # Ограничение размера тома
  Maximum Volumes = 100        # Ограничить количество томов в пуле
  Label Format = "thor-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
}
 
# Определения клиентов
Client {
  Name = thor-fd              # Имя клиента
  Address = thor.kmps.local   # адрес
  FDPort = 9102               # Порт, на котором клиент нас ждет
  Catalog = "MyCatalog"       # Каталог в MySQL
  Password = "SECRET"         # Пароль к клиенту
  File Retention = 30 days    # Период, на протяжении которого в каталоге
                              # будет храниться инфа о файлах этого клиента
  Job Retention = 3 months    # То же, только о заданиях этого клиента
  AutoPrune = yes             # Удалять из каталога
                              # данные о файлах и заданиях, срок хранения
                              # которых истек.
}
 
# Определения файловых хранилищ.
Storage {
  Name = backup-disk1       # Имя хранилища будет использоваться в
                            # определениях job
  Address = thor.kmps.local # Адрес сервера хранения. Настоятельно не
                            # рекомендуется использовать localhost
  SDPort = 9103             # Порт, где file storage нас ждет
  Password = "SECRET"       # Пароль к нему
  Device = backup-disk1     # Устройство. Должно быть определено
                            # в настройках секции Device сервера хранения
  Media Type = File         # Файл, диск, лента и т.д.
}
 
# Планировщик
Schedule {
  Name = "Month-1hrs-sun"
  Run = Full 1st sun at 1:00
  Run = Differential 2nd-5th sun at 1:00
  Run = Incremental mon-sat at 1:00
}

Клиент SRV1

# cat client_srv1.conf
# Клиент SRV1
# Создаем задание srv1_backup-job и указываем ресурсы.
Job {
  Name = "srv1_backup-job"
  Type = Backup
  Level = Full
  Client = srv1-fd
  FileSet = "srv1-fileset"
  Schedule = "Month-1hrs-sun-srv1"
  Storage = File-SRV1
  Messages = Daemon
  Pool = srv1-pool
  Priority = 10
  Write Bootstrap = "/var/db/bacula/srv1_backup-job.bsr"
}
 
FileSet {
  Name = "srv1-fileset"
  Enable VSS = YES      # Использовать Volume Shadow Copy Service (VSS) для клиента Win32
                        # VSS позволяет Bacula копировать открытых файлы
  Include {
    Options {
      compression = GZIP  # Сжатие производится на стороне клиента пофайлово в один поток
      signature = MD5     # Тип сигнатур MD5\SHA1
      portable = no       # переносимый формат сохраняет не все атрибуты NTFS
      noatime = yes       # Позволяет читать файлы без изменения времён atime и ctime
      checkfilechanges = yes # Выдаётся предупреждение, если размер или время
                             # модификации файла изменяется при резервном копировании
      Ignore Case = yes   # Игнор-ть регистр букв при сопост-и шаблонов и рег-х выражений
      wildfile = "*.avi"  # Шаблон
      wildfile = "*.wmv"  # Шаблон
      wildfile = "*.mp3"  # Шаблон
      wildfile = "pagefile.sys"  # Шаблон
      wildfile = "hiberfil.sys"  # Шаблон
      wilddir = "System Volume Information"  # Шаблон
      wilddir = "TEMP"  # Шаблон
      exclude = yes # Подошедшие под шаблоны файлы исключаются из списка
    }
    File = "D:/Shared_buch"      # Что резервируем
    File = "E:/Backup/Windows"   # Что резервируем
  }
}
 
Pool {
  Name = srv1-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 100
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
  Label Format = "srv1-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
}
 
Client {
  Name = srv1-fd
  Address = srv1.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "QbTQzNv/823/spZGTu4buOxFuKT/tiBfg+ZlESr3R1lU"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}
 
Storage {
  Name = File-SRV1
  Address = thor.kmps.local
  SDPort = 9103
  Password = "SECRET"
  Device = FileStorage-srv1
  Media Type = File
}
 
Schedule {
  Name = "Month-1hrs-sun-srv1"
  Run = Full 1st sun at 3:00
  Run = Differential 2nd-5th sun at 3:00
  Run = Incremental mon-sat at 3:00
}

Клиент SRV2

# cat client_srv2.conf
# Клиент SRV2
# Создаем задание srv2_backup-job и указываем ресурсы.
Job {
  Name = "srv2_backup-job"
  Type = Backup
  Level = Full
  Client = srv2-fd
  FileSet = "srv2-fileset"
  Schedule = "Month-1hrs-sun"
  Storage = backup-disk1
  Messages = Daemon
  Pool = srv2-pool
  Priority = 10
  Write Bootstrap = "/var/db/bacula/srv2_backup-job.bsr"
}
 
FileSet {
  Name = "srv2-fileset"
  Enable VSS = YES
  Include {
    Options {
      compression = GZIP
      signature = MD5
      portable=no
      noatime = yes
      checkfilechanges = yes
      Ignore Case = yes
      wildfile = "*.avi"
      wildfile = "*.wmv"
      wildfile = "*.mp3"
      wildfile = "pagefile.sys"
      wildfile = "hiberfil.sys"
      wilddir = "System Volume Information"
      wilddir = "TEMP"
      exclude = yes
    }
    File = "D:/1SBase"
    File = "E:/Backup/Windows"
  }
}
 
Pool {
  Name = srv2-pool
  Pool Type = Backup
  Recycle = yes
  AutoPrune = yes
  Volume Retention = 365 days
  Maximum Volume Bytes = 50G
  Maximum Volumes = 100
  Recycle Oldest Volume = yes  # Удаляем старые копии при нехватке места для новых
  Label Format = "srv2-"       # Шаблон для создания имени тома при
                               # автоматическом создании метки тома
                               # требует указания Label Media в 
                               # настройках сервера хранения.
}
 
Client {
  Name = srv2-fd
  Address = srv2.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct"
  File Retention = 30 days
  Job Retention = 6 months
  AutoPrune = yes
}
 
Storage {
  Name = File-SRV2
  Address = thor.kmps.local
  SDPort = 9103
  Password = "SECRET"
  Device = FileStorage-srv2
  Media Type = File
}
 
Schedule {
  Name = "Month-1hrs-sun-srv2"
  Run = Full 1st sun at 6:00
  Run = Differential 2nd-5th sun at 6:00
  Run = Incremental mon-sat at 6:00
}


Заметка: привыкайте делать включения в основной конфигурационный файл так будет аккуратней и проще в работе и эксплуатации.
Включим ваши конфиги в конец файла bacula-dir.conf

# cat bacula-dir.conf |grep client
#@/usr/local/etc/client_schedule.conf
@/usr/local/etc/client_thor.conf
@/usr/local/etc/client_srv1.conf
@/usr/local/etc/client_srv2.conf

Протестируем конфигурационный файл

# bacula-dir -t -d /usr/local/etc/bacula-dir.conf
# bacula-dir -t -d /usr/local/etc/client_thor.conf
# bacula-dir -t -d /usr/local/etc/client_srv1.conf
# bacula-dir -t -d /usr/local/etc/client_srv2.conf

Если шибок не выдало значит все в порядке.

Storage Daemon (SD)

# vi bacula-sd.conf
#
# Дефолтный файл конфигурации Bacula Storage Daemon
#
# Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE
#
# Может потребоваться изменить имя вашего накопителя в директиве 
# «Archive Device» в устройство ресурсов. Если изменить имя и/или
# «Тип носителя» в ресурсе устройства, убедитесь, что bacula-dir.conf
# имеет соответствующие изменения.
#
 
Storage {                             # Определим себя
  Name = thor.kmps.local-sd           # Имя
  SDPort = 9103                       # Порт, где ждать директора
  WorkingDirectory = "/var/db/bacula" 
  Pid Directory = "/var/run"          # Собственно PID
  Maximum Concurrent Jobs = 20        # Дополнительные ограничения
}
 
#
# Список директоров, которым разрешается связаться с Демоном хранения (SD)
#
Director {
  Name = thor.kmps.local-dir       # Имя директора
  Password = "SECRET"              # Пароль
}
 
#
# Ограниченный директор, используемые в трей мониторе
# для получения статуса демона хранения
#
Director {
  Name = thor.kmps.local-mon       # Имя директора
  Password = "SECRET"              # Пароль
  Monitor = yes
}
 
#
# Примечание, список дополнительных шаблонов устройств смотрите в 
# каталоге <bacula-source>/examples/devices
# Или перейдите по следующей ссылке:
#  _http://bacula.svn.sourceforge.net/viewvc/bacula/trunk/bacula/examples/devices/
#
 
#
# Устройства записи, поддерживаемые данным Демоном хранения (SD)
# это жесткий диск, ленточный накопитель, dvd.
# Для подключения, устройства к директору в bacula-dir.conf
# должны иметь то же Name и MediaType.
#
 
Device {
  Name = FileStorage             # Имя 
  Media Type = File              # Укажем, что будем бекапить 
  Archive Device = /tmp          # Каталог для бекапов
  LabelMedia = yes;              # разрешить Bacula размечать тома
  Random Access = Yes;
  AutomaticMount = yes;          # когда устройство открыто, читать его
  RemovableMedia = no;
  AlwaysOpen = no;
}
#
# Авточенджер с двумя дисками
#
#Autochanger {
#  Name = Autochanger
#  Device = Drive-1
#  Device = Drive-2
#  Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
#  Changer Device = /dev/sg0
#}
 
#Device {
#  Name = Drive-1                      #
#  Drive Index = 0
#  Media Type = DLT-8000
#  Archive Device = /dev/nst0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  AutoChanger = yes
#  #
#  # Включить команду Alert, только если у вас есть MTX пакет загрузки
#  # Обратите внимание, по-видимому, в некоторых системах, tapeinfo
#  # сбрасывает контроллер SCSI. Tаким образом если вы включаете это,
#  # убедитесь, что он не сбрасывает ваш контроллер SCSI. У меня
#  # никогда не было каких-либо проблем, и smartctl, по-видимому,
#  # не вызывают таких проблем.
#  #
# Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
# Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
# Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
 
#Device {
#  Name = Drive-2                      #
#  Drive Index = 1
#  Media Type = DLT-8000
#  Archive Device = /dev/nst1
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
#  Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
#  Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
#  Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Linux или Solaris LTO-2 ленточный накопитель
#
#Device {
#  Name = LTO-2
#  Media Type = LTO-2
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 3GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
 
#
# Linux или Solaris LTO-3 ленточный накопитель
#
#Device {
#  Name = LTO-3
#  Media Type = LTO-3
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 4GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Linux или Solaris LTO-4 ленточный накопитель
#
#Device {
#  Name = LTO-4
#  Media Type = LTO-4
#  Archive Device = /dev/nrsa0
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes;
#  RemovableMedia = yes;
#  RandomAccess = no;
#  Maximum File Size = 5GB
## Changer Command = "/usr/local/share/bacula/mtx-changer %c %o %S %a %d"
## Changer Device = /dev/sg0
## AutoChanger = yes
#  # Включить команду оповещения, только если у вас есть MTX пакет загрузки
## Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
## Если у вас есть smartctl, то он имеет больше информации, чем tapeinfo
## Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# FreeBSD ленточный накопитель
#
#Device {
#  Name = DDS-4
#  Description = "DDS-4 for FreeBSD"
#  Media Type = DDS-4
#  Archive Device = /dev/nsa1
#  AutomaticMount = yes;               # когда устройство открыто, читать его
#  AlwaysOpen = yes
#  Offline On Unmount = no
#  Hardware End of Medium = no
#  BSF at EOM = yes
#  Backward Space Record = no
#  Fast Forward Space File = no
#  TWO EOF = yes
#  IIf you have smartctl, enable this, it has more info than tapeinfo
#  Alert Command = "sh -c 'smartctl -H -l error %c'"
#}
#
# Передать все сообщения директора, mount сообщения 
# также отправляются на адрес электронной почты
#
Messages {                            # Будем отправлять все сообщения DIR
  Name = Standard
  director = thor.kmps.local-dir = all
}

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

# cat bacula-sd.conf | grep -v ^#
 
Storage {
  Name = thor.kmps.local-sd
  SDPort = 9103
  WorkingDirectory = "/var/db/bacula"
  Pid Directory = "/var/run"
  Maximum Concurrent Jobs = 20
}
 
Director {
  Name = thor.kmps.local-dir
  Password = "SECRET"
}
 
Director {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  Monitor = yes
}
 
Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /home/bacula/backup
  #Archive Device = /tmp
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
 
Device {
 Name = backup-disk1
 Media Type = File
 Archive Device = /home/bacula/backup
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Device {
 Name = FileStorage-srv1
 Media Type = File
 Archive Device = /home/bacula/SRV1
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Device {
 Name = FileStorage-srv2
 Media Type = File
 Archive Device = /home/bacula/SRV2
 LabelMedia = yes;
 Random Access = Yes;
 AutomaticMount = yes;
 RemovableMedia = no;
 AlwaysOpen = no;
}
 
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all
}

Протестируем

# bacula-sd -t /usr/local/etc/bacula-sd.conf

Ничего не выдало значит все в порядке.

Console

Настроим консоль

# cd /usr/local/etc
# cp bconsole.conf.sample bconsole.conf
# cat bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
 
Director {
  Name = thor.kmps.local-dir
  DIRport = 9101
  address = localhost
  Password = "SECRET"
}

Посмотрим, что она может и отработаем несколько операций:

# /usr/local/sbin/bconsole
Connecting to Director localhost:9101
1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010)
Enter a period to cancel a command.
 
*help
  Command       Description
  =======       ===========
  add           Добавить новый том к пулу в каталоге; для 
                форматирования тома используйте команду label
  autodisplay   Выдаётся извещение о наличии новых сообщений от директора
  automount     Лента монтируется автоматически после форматирования
                командой label
  cancel        Отменить задание
  create        Создать запись Пула в БД из описания ресурса в файле  
  delete        Удалить из каталога информацию о задании, томе
                или пуле вместе со всеми зависимостями
  disable       Запретить автоматическое планирование работы задания
  enable        Разрешить автоматическое планирование работы задания
  estimate      Считает приблизительный объём сохраняемых данных до 
                сжатия, листинг дает полный список
  exit          Прекращение сессии Bconsole
  gui           Не интерактивный режим gui
  help          Печать справки по определенной команде
  label         Добавить новый том к пулу в БД и форматировать том;
                предварительно может потребоваться размонтировать ленту;
                если лента уже отформатирована, то требуется выполнить
                команды purge и relabel
  list          Список объектов из каталога БД
  llist         Полный или длинный список, как список команд
  messages      вывести накопившиеся сообщения от директора
  memory        Вывести текущее использование памяти DIR
  mount         Монтировать хранилище
  prune         Удалить из БД информацию о файлах, заданиях или томах с
                истёкшим сроком хранения и всё с нею связанное
  purge         Очистка записей из каталога о файлах, заданиях или томах
                с истёкшим сроком хранения и всё с нею связанное
  python        Команда управления Python
  quit          Прекращение сессии Bconsole
  query         Запрос каталога
  restore       Восстановить файлы
  relabel       Заново отформатировать старый том (должен быть в 
                состоянии Purged или Recycle)
  release       перемотать ленту (перед следующим использованием
                заново прочесть метку)
  reload        Перечитать заново конфигурационный файл bacula-dir.conf
  run           Запустить задание\работу
  status        Отчет о состоянии
  setdebug      Устанавить уровень отладки
  setip         Установить новый адрес клиента - если рзрешено
  show          Показать текущее значение ресурсов файла настройки
  sqlquery      Использование SQL для запроса каталога
  time          Показать текущее временя
  trace         Включение / выключение трассировки в файл
  unmount       Размонтирование хранилища
  umount        Размонтировать - для старых Unix парней, см. unmount =)
  update        Обновить информацию томов, пула или статистики 
  use           Использовать каталог xxx
  var           Подстановка переменных
  version       Показать версию DIR
  wait          Ждать завершения задания
 
В режиме ввода команд, введите точку что бы отменить командный режим
 
Вам сообщение.

Работа с Томами

Добавим новый том и отформатируем его (это при условии что вы не выставили в Pool, Label Format = "ИМЯ_ТОМА" при этом том автоматически форматируется и добавляется). Для этого выберем нужный SD (backup-disk1) укажем название Тома (как он будет сохраняться на HDD) и выберем нужный Пул.

# bconsole
Connecting to Director localhost:9101
1000 OK: thor.kmps.local-dir Version: 5.0.3 (04 August 2010)
Enter a period to cancel a command.
*label
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
The defined Storage resources are:
     1: File
     2: backup-disk1
     3: File-SRV1
     4: File-SRV2
Select Storage resource (1-4): 3
Enter new Volume name: srv1_volume
Defined Pools:
     1: Default
     2: Scratch
     3: thor-pool
     4: File
     5: srv2-pool
     6: srv1-pool
Select the Pool (1-6): 6
Connecting to Storage daemon File-SRV1 at thor.kmps.local:9103 ...
Sending label command for Volume "srv1_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="srv1_volume" Device="FileStorage-srv1"
 (/home/bacula/SRV1)
Catalog record for Volume "srv1_volume", Slot 0  successfully created.
Requesting to mount FileStorage-srv1 ...
3906 File device "FileStorage-srv1" (/home/bacula/SRV1) is always mounted.
You have messages.
 
*label
The defined Storage resources are:
     1: File
     2: backup-disk1
     3: File-SRV1
     4: File-SRV2
Select Storage resource (1-4): 4
Enter new Volume name: srv2_volume
Defined Pools:
     1: Default
     2: Scratch
     3: thor-pool
     4: File
     5: srv2-pool
     6: srv1-pool
Select the Pool (1-6): 5
Connecting to Storage daemon File-SRV2 at thor.kmps.local:9103 ...
Sending label command for Volume "srv2_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="srv2_volume" Device="FileStorage-srv2"
 (/home/bacula/SRV2)
Catalog record for Volume "srv2_volume", Slot 0  successfully created.
Requesting to mount FileStorage-srv2 ...
3906 File device "FileStorage-srv2" (/home/bacula/SRV2) is always mounted.
 
*label
The defined Storage resources are:
     1: File
     2: backup-disk1
Select Storage resource (1-2): 2
Enter new Volume name: thor_volume
Defined Pools:
     1: Default
     2: File
     3: Scratch
     4: thor-pool
Select the Pool (1-4): 4
Connecting to Storage daemon backup-disk1 at thor.kmps.local:9103 ...
Sending label command for Volume "thor_volume" Slot 0 ...
3000 OK label. VolBytes=213 DVD=0 Volume="thor_volume" Device="backup-disk1"
 (/home/bacula/backup)
Catalog record for Volume "thor_vol", Slot 0  successfully created.
Requesting to mount backup-disk1 ...
3906 File device "backup-disk1" (/home/bacula/backup) is always mounted.

Как видим создался Том thor_volume

# ll /home/bacula/backup/
total 8450
-rw-r-----  1 bacula  bacula   8,2M 17 май 23:50 FileDefault
-rw-r-----  1 bacula  bacula   213B 18 май 14:59 thor_volume

File Daemon (FD)
UNIX клиент

Установим клиента на UNIX машине:

# cd /usr/ports/sysutils/bacula-client
# make config
 
Options for bacula-client 5.0.3
 
[ ] WXCONSOLE  Build with wxGTK based GUI console: deprecated
[ ] SFDAEMON   Build with staticly compiled file daemon
[X] NLS        Native Language Support via gettext utilities
[X] OPENSSL    Enable OpenSSL for encrypted communication
 
# make install clean
~~
################################################################################
 
NOTE:
Sample files are installed in /usr/local/etc:
bconsole.conf.sample, bacula-barcodes.sample, bacula-fd.conf.sample
 
  Please read this file:
 
        /usr/local/share/doc/bacula/ReleaseNotes
 
  as installed by docs port for the upgrade procedure.
 
Read the ReleaseNotes for further information.
 
################################################################################
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===>   Registering installation for bacula-client-5.0.3
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/lib/libbac.so.5
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/bacula-fd
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.bacula.org/
===>  Cleaning for bacula-client-5.0.3

Скопируем конфигурационный файл и изменим его настройки.
# cp /usr/local/etc/bacula-fd.conf.sample /usr/local/etc/bacula-fd.conf

Разберемся что внутри:

#cat/usr/local/etc/bacula-fd.conf
#
# Дефолтный файл конфигурации Bacula File Daemon
#
# Для Bacula релиза 5.0.3 (04 августа 2010) — FreeBSD 8.2-RELEASE
#
# Тут не так много, чтобы менять здесь, за исключением, возможно,
# Имени File Daemon
#
 
#
#Список директоров, которым разрешено связаться с этим File Daemon
#
 
Director {
  Name = thor.kmps.local-dir
  Password = "sIad48UBgVYD2gNAh6mRWKahMFtzjwRWNjtL8p28ma3Z"
}
 
#
# Ограничение директора, используемого в tray-monitor, 
# для получения статуса File Daemon
#
Director {
  Name = thor.kmps.local-mon
  Password = "GkSSv/HoUCX7Y7Pi5m62xRD0cnykZnzaYTinCqdhM8t3"
  Monitor = yes
}
 
#
# "Глобальные" спецификации конфигурации File daemon
#
FileDaemon {                     # Определим FD
  Name = thor.kmps.local-fd      # Имя FD
  FDport = 9102                  # Где слушать директора
  WorkingDirectory = /var/db/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20   # Максимальное кол-во заданий
}
 
# Отправить все сообщения, за исключением пропущенных файлов
# обратно Директору
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all, !skipped, !restored

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

# cat bacula-fd.conf | grep -v ^#
 
Director {
  Name = thor.kmps.local-dir
  Password = "SECRET"
}
 
Director {
  Name = thor.kmps.local-mon
  Password = "SECRET"
  Monitor = yes
}
 
FileDaemon {
  Name = thor.kmps.local-fd
  FDport = 9102
  WorkingDirectory = /var/db/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
}
 
Messages {
  Name = Standard
  director = thor.kmps.local-dir = all, !skipped, !restored
}

Проверим на наличие ошибок и добавим в rc.conf для запуска при старте ОС.

# bacula-fd -t -d /usr/local/etc/bacula-fd.conf
# echo 'bacula_fd_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/bacula-fd start
Starting bacula_fd.
# sockstat | grep bacula
root     bacula-fd  9295  3  tcp4   *:9102                *:*
bacula   bacula-sd  97221 3  tcp4   *:9103                *:*
bacula   bacula-dir 97212 4  tcp4   *:9101                *:*

Windows клиент

Загружаем программу клиент Win32_64 и запускаем установку программы там указываем следующее.

Тип установки:
Instalation Type: Automatic (так же вы можете поставить только fd без консоли и доков.)

Указываем характеристики DIR:
DIR name: thor.kmps.local-dir
DIR Password: SECRET
DIR Adress: thor.kmps.local

В конце установки предложили сохранить файл C:\srv2-fd.conf такого содержания:

# Client (File Services) to backup
Client {
  Name = srv2-fd
  Address = srv2.kmps.local
  FDPort = 9102
  Catalog = MyCatalog
  Password = "MkfdcfGqds5qFoSL/W2uBG0DqIvY5bbVDWq/ZuHN39Ct"      # password for FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}

Вы можете эту информацию с последующим изменением пароля копировать в файл конфигурации сервера DIR, где формируется работа по этому клиенту. После корректной установки FD в Windows становиться службой и в трее висит монитор клиента, где можно посмотреть статус.

Запуск

Для автоматического запуска DIR, SD и FD сервисов при запуске сервера необходимо добавить строчки в /etc/rc.conf:

# echo 'bacula_dir_enable="YES"' >> /etc/rc.conf
# echo 'bacula_sd_enable="YES"' >> /etc/rc.conf
# echo 'bacula_fd_enable="YES"' >> /etc/rc.conf

Запуск сервисов:

# /usr/local/etc/rc.d/bacula-dir.sh start
# /usr/local/etc/rc.d/bacula-sd.sh start
# /usr/local/etc/rc.d/bacula-fd start
# ps -ax | grep bacula
 2060  ??  Is     0:00,19 /usr/local/sbin/bacula-fd -u root -g wheel -v -c /usr/local/etc/bacula-fd.conf
56766  ??  Is     0:19,37 /usr/local/sbin/bacula-sd -u bacula -g bacula -v -c /usr/local/etc/bacula-sd.conf
61339  ??  Ss     0:00,14 /usr/local/sbin/bacula-dir -u bacula -g bacula -v -c /usr/local/etc/bacula-dir.conf
64965   0  S+     0:00,00 grep bacula
 
# sockstat | grep bacula
bacula   bacula-dir 61339 5  tcp4   *:9101                *:*
bacula   bacula-dir 61339 6  dgram  -> /var/run/log
bacula   bacula-sd  56766 4  tcp4   *:9103                *:*
root     bacula-fd  2060  3  tcp4   *:9102                *:*

Сохранение данных

Автоматическое сохранение данных уже настроено и поэтому вы должны следить чтобы все работы шли без ошибок, проверять оставшееся место на HDD. Если вы выполните команду run без параметров она вам выдаст все созданные задачи и вы можете выбрать и запустить нужную. Вы можете сразу запустить нужную задачу с указанным именем задачи *run job=имя-задания.

*run
A job name must be specified.
The defined Job resources are:
     1: BackupClient1
     2: BackupCatalog
     3: RestoreFiles
     4: thor_backup-job
     5: srv1_backup-job
     6: srv2_backup-job
Select Job resource (1-6): 6
Run Backup job
JobName:  srv2_backup-job
Level:    Full
Client:   srv2-fd
FileSet:  srv2-fileset
Pool:     srv2-pool (From Job resource)
Storage:  File-SRV2 (From Job resource)
When:     2011-05-20 23:56:51
Priority: 10
OK to run? (yes/mod/no): yes
Job queued. JobId=79

Проверим выполнение задачи и объем на HDD
*status dir
thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2-
Daemon started 20-май-11 23:32, 5 Jobs run since started.
Heap: heap=0 smbytes=102,439 max_bytes=237,812 bufs=365 max_bufs=395
~~~~~~~~
 
Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
    75  Full        831    717.5 M  OK       20-май-11 23:34 srv1_backup-job
    76              831    800.9 M  OK       20-май-11 23:39 RestoreFiles
    77                1    6.825 K  OK       20-май-11 23:44 RestoreFiles
    78                1    6.825 K  OK       20-май-11 23:48 RestoreFiles
    79  Full        109    29.67 M  OK       20-май-11 23:57 srv2_backup-job
====

Все в порядке как мы видим задача выполнена ему присвоен JobId=79 сохранено файлов 109 общим обьемом 29 Мб.

Восстановление

И так с имитируем следующую ситуацию потеря\удаления файла\директории. Восстановим из архива данный файл с помощью bconsole. Директория E:/SIT_v1.1 утеряна вся.
Управление при перемещении и маркировки файлов в этом режиме довольно необычны так, что привыкайте.

*restore
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
 
Сначала выберите один или несколько JobIds, которые содержат файлы
которые должны быть восстановлены. Вам будет предложен ряд методов
указания JobIds. Тогда вам будет разрешено выбрать, какие 
файлы из этих JobIds должны быть восстановлены.
 
To select the JobIds, you have the following choices:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 1
+-------+--------------------+---------------------+----------+----------+-------------+
| JobId | Client             | StartTime           | JobLevel | JobFiles | JobBytes    |
+-------+--------------------+---------------------+----------+----------+-------------+
| 79    | srv2-fd            | 2011-05-20 23:56:55 | F        | 109      | 29670528    |
| 75    | srv1-fd            | 2011-05-20 23:32:37 | F        | 831      | 717551775   |
| 74    | srv1-fd            | 2011-05-20 23:30:46 | F        | 0        | 0           |
| 73    | srv2-fd            | 2011-05-20 23:29:24 | F        | 109      | 29670528    |
| 72    | srv2-fd            | 2011-05-20 23:26:51 | F        | 109      | 29670528    |
+-------+--------------------+---------------------+----------+----------+-------------+
Для выбора JobIds, у вас есть следующие варианты [дальше лучше без перевода]:
     1: List last 20 Jobs run
     2: List Jobs where a given File is saved
     3: Enter list of comma separated JobIds to select
     4: Enter SQL list command
     5: Select the most recent backup for a client
     6: Select backup for a client before a specified time
     7: Enter a list of files to restore
     8: Enter a list of files to restore before a specified time
     9: Find the JobIds of the most recent backup for a client
    10: Find the JobIds for a backup for a client before a specified time
    11: Enter a list of directories to restore for found JobIds
    12: Select full restore to a specified Job date
    13: Cancel
Select item:  (1-13): 3
Enter JobId(s), comma separated, to restore: 79
You have selected the following JobId: 79
 
Building directory tree for JobId(s) 79 ...  ++++++++++++++++++++++++++++++++
97 files inserted into the tree.
 
Сейчас вы работаете в режиме выбора файла, где вы добавляете (mark) и
удалять (unmark) файлы, котоfрые будут восстановлены. Нет изначально
добавленных файлов, вы можете использовать ключевое слов "all" в 
командной строке чтобы отметить всё.
Введите "done ", чтобы завершить этот режим.
 
cwd is: /
$ ls
E:/
$ cd E:/
cwd is: E:/
$ ls
SIT_v1.1/
$ mark SIT_v1.1
109 files marked.
$ done
Bootstrap records written to /var/db/bacula/thor.kmps.local-dir.restore.4.bsr
 
The job will require the following
   Volume(s)                 Storage(s)                SD Device(s)
===========================================================================
    srv2_volume               File-SRV2                 FileStorage-srv2        
Volumes marked with "*" are online.
 
109 files selected to be restored.
 
Defined Clients:
     1: srv1-fd
     2: srv2-fd
     3: thor-fd
     4: thor.kmps.local-fd
Select the Client (1-4): 2
Run Restore job
JobName:         RestoreFiles
Bootstrap:       /var/db/bacula/thor.kmps.local-dir.restore.4.bsr
Where:           /home/bacula/bacula-restores
Replace:         always
FileSet:         Full Set
Backup Client:   srv2-fd
Restore Client:  srv2-fd
Storage:         File-SRV2
When:            2011-05-21 00:01:10
Catalog:         MyCatalog
Priority:        10
Plugin Options:  *None*
OK to run? (yes/mod/no): yes
Job queued. JobId=80

Посмотрим статус директора и что он сказал на эту работу:

*status dir
thor.kmps.local-dir Version: 5.0.3 (04 August 2010) amd64-portbld-freebsd8.2 freebsd 8.2-
Daemon started 20-май-11 23:32, 6 Jobs run since started.
 Heap: heap=0 smbytes=103,909 max_bytes=240,228 bufs=366 max_bufs=395
 
~~~
 
Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
~~~
    78                1    6.825 K  OK       20-май-11 23:48 RestoreFiles
    79  Full        109    29.67 M  OK       20-май-11 23:57 srv2_backup-job
    80              109    29.67 M  OK       21-май-11 00:01 RestoreFiles
====

Все в порядке данные восстановлены (JobId=80).

Проверка

Заходим на srv2.kmps.local и на диске C:\ появляется с восставленная директория.
C:\home\bacula\bacula-restores\E\SIT_v1.1
Восстановление файлов на Unix клиентах рассматривать не буду в виду аналогичной работы.

Гибридный метод

Я сторонник простых и надежных решений, а так же дублирующих систем. К примеру у меня как и у всех стоит RAID-1 на всех серверах и это хорошо. Идем дальше у меня до бакулы на серверах был отдельный раздел\слайс\жеский диск созданный специально для бекапов и туда резервные копии складывает утилита или скрипт. К примеру:

  • Windows сервера обрабатывает утилита ntbackup она сохраняет весь системный диск и складывает копии в директорию E:/Backup/Windows каждое 1й понедельник месяца.
  • Unix сервера обрабатывает утилита dump сохраняя необходимые разделы в /backup каждый 1й понедельник месяца.

Бакула дополнила существующую схема:

  • Windows сервера - копирует E:/Backup/Windows, расшаренные ресурсы и 1С.
  • Unix сервера - копирует /backup и некоторые слайсы.

Переменные

Pool

Пул это описание для набора томов. Тома это файлы, ленты и DVD. Он используется при описании задания для указания нужного тома.

  • Name - наименование пула
  • Maximum Volumes (0 - бесконечность) - ограничить количество томов в пуле
  • Pool Type - Backup остальные не реализованы, Archive, Cloned, Migration, Copy, Save
  • Storage - описывает сервер хранения, он перекрывает значение, заданное в Job и Schedule и необходимо для работы заданий миграции
  • Maximum Volume Jobs (0 - бесконечность) - по достижении указанного числа заданий, записанных на том, том переводится в состояние Used (плохо совместим с одновременной записью нескольких заданий на том)
  • Maximum Volume Files (0 - бесконечность) - по достижении указанного числа файлов, записанных на том, том переводится в состояние Used. Проверка производится только в конце задания
  • Maximum Volume Bytes (0 - бесконечность) - по достижении указанного числа байт, записанных на том, том переводится в состояние Used
  • Volume Use Duration (0 - бесконечность) - отсчитывается с момента первой записи по достижении которой том переводится в состояние Used
  • Catalog Files - заносить информацию о сохранённых файлах в каталог
  • Volume Retention - время хранения информации о заданиях и файлах на данном томе в каталоге. Отсчёт начинается с момента перехода из состояния Appendable в Full или Used. Так же не рекомендуется устанавливать меньше 2х интервалов между полным сохранением. Сами данные не стираются
  • AutoPrune - удалять из каталога записи о файлах и заданиях, срок хранения которых истёк в соответствии с Volume Retention, при поиске доступного на запись тома
  • RecyclePool - в какой пул переводить том при освобождении места по умолчанию - оставлять в текущем
  • Recycle - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то bacule ищет том, все задания и файлы которого удалены из каталога (состояние Purged) по истечению срока хранения или вручную, и использует его, переведя в состояние Recycled
  • Recycle Oldest Volume - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то она очистит самый старый том (удалит информацию из каталога в соответствии со сроками хранения Job Retention, File Retention и Volume Retention). Если на томе не осталось ничего полезного, то повторно использовать его. Не использовать, если в пуле всего 1 том
  • Recycle Current Volume - попробовать освободить смонтированный том. Не использовать, если в пуле всего 1 том
  • Purge Oldest Volume - если bacule требуется том для записи, но нет ни одного дополняемого тома в пуле (состояние Appendable), то удаляются из каталога все записи о заданиях и файлах на самом старом томе независимо от срока хранения и том повторно используется. Не рекомендуетс)
  • Cleaning Prefix - если имя тома начинается с указанной строки, то том считается чистящей лентой и запись на него не производится - для автомагазинов со штриховыми метками
  • Label Format - шаблон для создания имени тома при автоматическом создании метки тома. Требует указания Label Media в настройках сервера хранения. Имя тома может содержать буквы, цифры и '-_:.'; шаблон заключается в кавычки; шаблон может включать имена переменных - начинаются с '$', '${' или '['; переменные делятся на счётчики, переменные окружения и внутренние переменные (Year, Month, Day, Hour, Minute, Second, WeekDay, Job, Dir (имя директора), Level, Type, JobId, JobName, Storage, Client, NumVols, Pool (не рекомендуется, т.к. это может оказаться не тот пул), Catalog, MediaType); определено множество функций над переменными, но привыкать к ним не надо, т.к. в новых версиях Label Format заменена скриптом на python; если имена переменных в шаблоне не используются, то имя тома образуется из строки, к которой добавляется число томов в пуле + 1, дополненное нулями до 4 цифр ("File-" => "File-0003"); не стоит использовать NumVols, если вы предполагаете удаление томов)
  • Next Pool - имя пула назначения для задания миграции
  • Migration Time - максимальное время хранения заданий в томах для отбора при миграции типа PoolTime
  • Migration High Bytes -максимальный граница размера пула для задания миграции типа PoolOccupancy
  • Migration Low Bytes - нижняя граница размера пула для задания миграции типа PoolOccupancy
  • JobRetention - интервал хранения информации о заданиях, приоритет над описанием клиента
  • FileRetention - интервал хранения информации о файлах, приоритет над описанием клиента
  • ActionOnPurge - Truncate обнуление размера файла при очистке тома)
Консоль

Аутентификация и авторизация доступа к директору может быть 3 типов:

  • Анонимная консоль со всеми правами (пароль доступа к директору указывается в ресурсе Director настройки консоли и должен соответствовать директиве Password ресурса Director настройки директора)
  • "Именованная" консоль в настройках консоли и директора необходимо сконфигурировать ресурсы Console, в которых указывается имя консоли и пароль доступа к директору. Права доступа определяются с помощью ACL в ресурсе Console настройки директора.
  • Если имя консоли совпадает с именем клиента, то данная консоль имеет права выполнять команду SetIP, чтобы изменить значение Address соответствующего ресурса Client в настройке директора на IP консоли (необходимо при использовании динамических адресов DHCP); команда SetIP должна быть разрешена в ACL

Права доступа для именованной консоли по умолчанию - права отсутствуют, восстанавливать можно только в место по умолчанию.

  • Name - должно быть указано в настройках консоли в ресурсе Console
  • Password - должно быть указано в настройках консоли в ресурсе Console
  • JobACL - список через запятую имён ресурсов заданий, к которым имеет доступ данная консоль можно использовать ключевое слово "all"; можно использовать несколько директив.
  • ClientACL - разрешенные клиенты
  • StorageACL - разрешенные хранялища
  • ScheduleACL - разрешенные планировщики
  • PoolACL - разрешенные пулы
  • FileSetACL - разрешенные наборы файлов
  • CatalogACL - разрешенные каталоги
  • CommandACL - разрешенный список команд, к которым имеет доступ данная консоль
  • WhereACL - куда можно восстанавливать файлы можно использовать ключевое слово "all"; "/" означает восстановление на исходное место; можно использовать несколько директив
Schedule

Описание расписания запуска заданий и переопределения ресурсов Level, Pool, Storage, Messages для задания. Используется в описании задания для указания времени автоматического запуска.

  • Name - Имя расписания
  • Run - [переназначение ресурсов] [дата и время выполнения] можно описывать несколько запусков. К примеру в начале каждого часа (0-23), каждого дня недели (Monday-Sunday), каждого дня месяца (1-31), каждой недели (first-fifth), каждого месяца (january-december), и года. Ограничивающая маска может состоять из элементов или интервалов к примеру неделя начинается в понедельник. Используются шаблоны к примеру: monday-friday, daily, first (первая неделя месяца), w02 - вторая неделя года, а w01 - это соответственно первая неделя).

Остальные переменные буду добавлять по надобности.

Управление

Webacula

Воспользуемся Webacula это PHP (Zend Framework) веб-интерфейс для мониторинга и восстановление файлов.
Основные особенности программы:

  • Полная поддержка MySQL, PostgreSQL и Sqlite баз данных.
  • Запуск Задач
  • Восстановление всех файлов или выбранных файлов из Задач по JobId
  • Восстановление последней резервной копии клиента
  • Восстановление резервной копии клиента до указанного времени
  • Показывает линию времени для Заданий
  • Монтирует и размонтирует Хранилища
  • Показывает Задания, которые выполняются с ошибками (последние 7 дней)
  • Показывает состояние вашего Тома
  • Показывает запланированные задания (на 24 часа вперед)
  • Показывает все запущенные Задания
  • Показывает законченные Задачи (выполненных за последние 24 часа)
  • Поиск Задач по нескольким условиям
  • Подробная информация о Pools, Volumes, Storages и Clients
  • Лента RSS
  • Многоязычная поддержка - стандартный gettext (*.mo) файлы. В данный момент поддерживаются языки: английский, французский, немецкий, португальский, русский.
Установка

Для начала скачаем Webacula и ZendFramework к ней. (следите за новыми версиями и сами корректируйте линки для fetch). Установим последнюю версию, распакуем и дадим нужные права.

# cd /usr/local/www/
# fetch _http://sourceforge.net/projects/webacula/files/webacula/5.5.0/webacula-5.5.tar.gz
# fetch _http://framework.zend.com/releases/ZendFramework-1.11.6/ZendFramework-1.11.6-minimal.tar.gz
 
# tar zxvf webacula-5.5.tar.gz
# mv webacula-5.5 webacula
 
# tar zxvf ZendFramework-1.11.6-minimal.tar.gz
# cd ZendFramework-1.11.6-minimal/library/
# ls
Zend
# cp -R Zend/ /usr/local/www/webacula/library/Zend/
 
# cd /usr/local/www/
# chown -R www:www webacula/
 
# rm webacula-5.5.tar.gz ZendFramework-1.11.6-minimal.tar.gz

Проверка модулей

Проверим необходимые модули

# cd /usr/local/www/webacula/install/
# php-cgi  check_system_requirements.php
sqlite3: not found
X-Powered-By: PHP/5.3.6
Content-type: text/html
 
 
Webacula check System Requirements...
 
Current MySQL version = 5.0.92  OK
Current PostgreSQL version = 8.4.7      OK
 
Current PHP version = 5.3.6     OK
 
php pdo installed.      OK
php gd installed.       OK
php xml installed.      OK
php dom installed.      OK
 
php pdo_mysql installed.        OK
Warning. PHP extension pdo_pgsql not installed.
Warning. PHP extension pdo_sqlite not installed.
php-dom, php-xml installed.     OK

Кому, что не хватает тот доставит.

Конфигурационные файлы

Отредактируем конфигурационный файл webacula:

# cat /usr/local/www/webacula/application/config.ini
[general]
db.adapter = PDO_MYSQL
db.config.host = localhost
db.config.username = BACULA_USER
db.config.password = BACULA_USER_PASS
db.config.dbname = BACULA_DB
 
def.timezone = "Europe/Moscow"
locale = "ru"
 
bacula.sudo = "/usr/local/bin/sudo"
bacula.bconsole = "/usr/local/sbin/bconsole"
bacula.bconsolecmd = "-n -c /usr/local/etc/bconsole.conf"
 
[timeline]
fontsize   = 10
 
[webacula]
email.to_admin = root@localhost
email.from = webacula@localhost
 
[feed]
feed_title = "My Bacula backup server #1"
feed_desc  = "Description feed here"
 
[layout]
path = "default"

Отредактируем конфигурационный файл DB:

# vi /usr/local/www/webacula/install/db.conf
db_name="BACULA_DB"
db_user="BACULA_USER"
db_pwd="BACULA_USER_PASS"
 
# Веб аккаунт 'root', а пароль к нему укажите ниже
#
webacula_root_pwd="WEB_WEBACULA_PASSWORD"

База в MySQL

В новой версии Webacula 5.5 таблицы Bacula и Webacula совмещены те располагаются в одной БД.
Теперь нам необходимо добавить нужные таблицы и заполнить ACL:

# cd /usr/local/www/webacula/install/MySql/
# sh ./10_make_tables.sh
Creation of webacula MySQL tables succeeded.
# sh ./20_acl_make_tables.sh
Creation of Webacula ACLs MySQL tables succeeded.

Добавим права на запуск /usr/sbin/bconsole от имени www.

# visudo
WWW_USER ALL=NOPASSWD: /usr/local/sbin/bconsole

Веб-интерфейс

Я слинковал публичный html в нужную мне директорию своего веб сервера:

# cd /home/serv/www/data/
# ll
lrwxr-xr-x  1 root  serv     20B  5 авг  2010 glpi -> /usr/local/www/glpi/
lrwxr-xr-x  1 root  serv     26B  5 авг  2010 phpMyAdmin -> /usr/local/www/phpMyAdmin/
-rw-r--r--  1 serv  serv     21B  5 авг  2010 phpinfo.php
lrwxr-xr-x  1 root  serv     27B  5 авг  2010 phpldapadmin -> /usr/local/www/phpldapadmin
lrwxr-xr-x  1 root  serv     20B 17 авг  2010 sarg -> /usr/local/www/sarg/
drwxr-xr-x  3 serv  serv    512B 12 авг  2010 sqstat
lrwxr-xr-x  1 root  serv     29B 27 май 09:17 webacula -> /usr/local/www/webacula/html/

Отредактировал .htaccess

# vi /usr/local/www/webacula/html/.htaccess
SetEnv APPLICATION_ENV development
 SetEnv APPLICATION_ENV production
 
#php_flag magic_quotes_gpc off
#php_flag register_globals off
 
RewriteEngine On
 
# edit RewriteBase if necessary
RewriteBase   /webacula
 
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Запускаем:
http://webserver.local/webacula

BAT, tray-monitor

Для мониторинга и удобной работы с бакулой есть несколько утилит доступных в Unix системах:
BAT (Bacula Admin Tool) - графический интерфейс к бакуле скриншоты

Port:   bacula-bat-5.0.3
Path:   /usr/ports/sysutils/bacula-bat
Info:   The network backup solution (GUI)
Maint:  dan@langille.org
B-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4...
R-deps: expat-2.0.1_1 fixesproto-4.1.2 fontconfig-2.8.0,1 freetype2-2.4.4...
WWW:    _http://www.bacula.org/

tray-monitor - это Bacula KDE/GNOME tray monitor applet. Она вам показывает статус работы сервера.

Заметка: в опциях bacula-client еще есть WXCONSOLE Build with wxGTK based GUI console: deprecated.

Web интерфейсы - их достаточное количество и на любой вкус список.

FAQ

В) У меня не работают встроенные задания (к примеру BackupCatalog)
О) Проверьте разрешение на чтение пользователем bacula.

# ll bacula-dir.conf
-rw-r-----  1 root  bacula   9,4K 26 май 16:12 bacula-dir.conf
# ll bacula-sd.conf
-rw-r-----  1 root  bacula   6,7K 24 май 14:05 bacula-sd.conf
# ll bconsole.conf
-rw-r-----  1 root  bacula   279B 17 май 11:52 bconsole.conf

В) В самом начале статье было упоминание о утилите ntbackup где, для чего вы ее применяете.
О) До бакулы я сохранял образ системы с помощью этой утилиты с периодичностью раз в месяц и мне не хотелось ломать установленный порядок. Так же я настроил теневое копирование с переодичностью 1 раз в 4 часа для БД и расшаренных директорий и пользователи могут откатывать нужные файлы на нужную дату и время.

В) Что делать если сервер Windows\Unix сломался и не загружаться, но есть резервные копии диска C:\ (файл ntbackup) и\или дампы ФС.
О) Попробуем описать ход работы:
а1) Запускаете Recovery Console (Консоль Восстановления) с диска ОС в нем восстанавливаете загрузочные файлы и при удачном раскладе загружаетесь. Далее вытаскиваете из архива бакулы файл ntbackup для этого клиента и заливаете на него. Далее через “Мастер восстановления” утилиты ntbackup все разворачиваете обратно.
а2) Бывает что вариант а1 не работает никак не удается загрузить систему. Есть вариант с ASR, но требуется создание аварийной дискеты в ntbackup для этой машины. Восстановите файл ntbackup на любую машину с последующим копированием этого файла на сдохший сервер (возьмите любую LiveCD сбору WinPE\Linux) и далее запускаете CD c ОС выбирается восстановление ASR вставляете дискету и выполняете работу.
а3) Disast Recove Using Bacula (bacula rescue disk)

б1) Для Unix пытайтесь загрузиться или воспользуйтесь Unix LiveCD и подмонтируйте фс с последующим разворотом архивов\файлов в нужные слайсы.

Книги

  • Bacula_PDC_backup.pdf
  • Short_Doc_Bacula.pdf
  • Unix.Backup.And.Recovery(1999)_EN.pdf

Дополнительные материалы
Ссылки: 
>>Ветка форума<<
Bacula, the Open Source, Enterprise ready, Network Backup Tool for Linux, Unix, and Windows
Webacula
Bog BOS: Сетевая система резервного копирования и восстановления данных bacula
Ваша оценка: Нет Средняя: 4.5 (28 голосов)

MySQL

ДЕМО ЧИСТО ДЛЯ КОНФИГА. СТАТЬЯ БУДЕТ ДОПИСАНА ПОЗЖЕ
===

# vi /etc/make.conf
# MySQL
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
#BUILD_OPTIMIZED=yes
#BUILD_STATIC=yes
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
#WITHOUT_INNODB=yes
WITH_ARCHIVE=yes
.endif
 
# MySQL client
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
#BUILD_OPTIMIZED=yes
#BUILD_STATIC=yes
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
.endif

Создание дампа

# mysqldump -uUser -h127.0.0.1 -p Name_DB> Name_DB.sql

Ресторинг дампа

# cat Name_DB.sql | mysql -uUser -pUser_password Name_DB

ВложениеРазмер
my.cnf2.84 КБ
Голосов пока нет

Network UPS Tools

Network UPS Tools - набор программ, которые обеспечивают интерфейс для сетевого мониторинга и управления UPS оборудованием. NUT позволяет работать нескольким серверам с одним UPS и позволяет штатно отключать необходимые серверы в случае разрядки батареи, а так же возможен мониторинг текущего состояния UPS (нагрузка/зарядка/входная мощность). В данной статье рассматривается использование ПО Network UPS Tools для обеспечения бесперебойной работы трех серверов от одного UPS с мониторингом через веб-интерфейс и снятием статистики в Cacti.

Инвентарь:

  • UPS APC Smart-UPS 2200VA USB & Serial RM 2U 230V - 1 шт.
  • серверы на Intel® SR1630HGP с Windows 2003 - 2 шт.
  • компьютер на Intel® S3000AH с FreeBSD 8.2 с подключенным UPS APC Smart-UPS 2200 - 1 шт.

Содержание:

  • Введение
  • Установка
  • Подготовка к работе
  • Конфигурационные файлы
    • ups.conf
    • upsd.conf
    • upsd.users
    • upsmon.conf
  • Запуск NUT
    • Разрешения
    • Запуск демона
    • Проверка
    • rc.conf
  • Клиенты
  • Мониторинг
    • Web интерфейс
    • Cacti
  • Тестирование
  • USB UPS
  • FAQ

Введение

Рассмотрим разные примеры подключения UPS. Их несколько видов и все они стандартные.

Простая конфигурация


Один UPS подключен к одному компьютеру. Эту конфигурацию используют большинство пользователей, но в серверной среде такая конфигурация редко встречается. Вам потребуется только upsd и upsmon.

Расширенная конфигурация


Один UPS питает несколько серверов. Только один сервер из них подключен кабелем управления к ИБП это и есть "Master" система с демонами upsd и upsmon в режиме мастера. Остальные системы это "Slave" для них необходимы только upsmon в подчиненном режиме. Все команды от мастер системы подчиненные получают по сети. Это полезно, когда у вас есть очень мощный ИБП который может "вытянуть" несколько серверов.

Конфигурация большого ящика


Некоторые системы имеют несколько источников питания. Как правило, это высокопроизводительные сервера. Некоторые с горячей заменой БП и другими причудами. В этом случае используйте несколько драйверов (по одному на UPS) один upsd и upsmon (как мастер для UPS 1 и 2)

По этой причине, каждому UPS присваивается "энергетическая ценность" - количество блоков питания для питания системой. Общий объем доступной "энергетической ценности" является (по сравнению с минимумом) необходимым для этого оборудования. Например, если у вас есть 3 источника питания и 3 ИБП, но только 2 блока должна быть запущена в любой момент времени этот минимум будет составлять 2. Это означает, что вы можете спокойно потерять один ИБП и NUT будет обрабатывать это правильно.

Причудливая конфигурация


Серия UPS подключены последовательным портом с одним "Master" сервером который раздает команды остальным и таких UPS может быть с десяток.

Установка

Подключение UPS

В состав APC Smart-UPS 2200VA входил COM кабель им мы и воспользуемся. Так же есть возможность докупить USB кабель, но с USB бывают проблемы подключения которые можно решить при некотором упорстве. Посмотрим, что нашлось:

# dmesg -a | grep sio0
sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sio0: type 16550A
sio0: [FILTER]

Посмотрим в устройствах.

% ls /dev/cuau*
/dev/cuau0      /dev/cuau0.init /dev/cuau0.lock

Наше устройство на порту cuau0.

Порт

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

# cd /usr/ports && make search name='nut-2'
Port:   nut-2.4.1_6
Path:   /usr/ports/sysutils/nut
Info:   Network UPS Tools
Maint:  itetcu@FreeBSD.org
B-deps: autoconf-2.68 autoconf-wrapper-20101119...
R-deps: expat-2.0.1_1 gettext-0.18.1.1 libiconv-1.13.1_1...
WWW:    _http://www.networkupstools.org/
 
# cd /usr/ports/sysutils/nut && make config
 
     ??????????????????????????????????????????????????????????????????????
     ?                     Options for nut 2.4.1_6                        ?
     ? ?????????????????????????????????????????????????????????????????? ?
     ? ?               [X] SERIAL  SERIAL support                       ? ?
     ? ?               [ ] USB     USB support                          ? ?
     ? ?               [ ] SNMP    SNMP support                         ? ?
     ? ?               [X] NEON    NEON XML/HTTP support                ? ?
     ? ?               [ ] PDU     Powerman PDU support                 ? ?
     ? ?               [ ] HAL     HAL support                          ? ?
     ? ?               [ ] IPV6    IPV6 support                         ? ?
     ? ?               [X] CGI     Web CGI interface                    ? ?
     ? ?????????????????????????????????????????????????????????????????? ?
     ?                       [  OK  ]       Cancel                        ?
     ??????????????????????????????????????????????????????????????????????

Уберите ненужные опции или добавьте необходимые, например отключите IPV6 и оставьте только необходимую поддержку SERIAL/USB (зависит от подключения к UPS), добавьте CGI, если вам требуется мониторить UPS через веб интерфейс. И дальше приступим к установке.

# cd /usr/ports/sysutils/nut && make install clean
~~~~~~~~~~~
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/nut_upsmon
/usr/local/etc/rc.d/nut_upslog
/usr/local/etc/rc.d/nut
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
_http://www.networkupstools.org/

Подготовка к работе

Найдем драйвер APC Smart-UPS в списке поддерживаемого оборудования NUT.

# cd /usr/local/etc/nut
# cat driver.list | grep Smart-UPS
## <manufacturer> <model name> <model extra> <driver> ##
 
"APC"   "Smart-UPS"             ""      "apcsmart"
"APC"   "Smart-UPS USB"         "USB"   "usbhid-ups"

Так же вы можете посетить веб страницу Список поддерживаемого оборудования.
Поддержка обнаружена и я могу использовать драйвера для USB и COM порта. На данный момент буду использовать драйвер "apcsmart" для COM порта.

Конфигурационные файлы

Все конфигурационные файлы находятся в директории "/usr/local/etc/nut"

  • ups.conf - настройки NUT для работы с UPS (драйвер/порт/наименование).
  • upsd.conf - настройка основного демона upsd Network UPS Tools.
  • upsd.users - контроль доступа к UPS демону (профили пользователей).
  • upsmon.conf - настройка текущего клиентского агента.

ups.conf

В этом конфигурационном файле вы указываете настройки подключения UPS.
Скопируем дефолтный конфигурационном файл.

# cd /usr/local/etc/nut
# cp ups.conf.sample ups.conf

Добавим свой UPS и настроим подключение к нему.

[APC]
driver = apcsmart
port = /dev/cuau0
cable = 940-1524C
desc = "APC Smart-UPS 2200"

cable - используется для специфичных COM кабелей которые используют к примеру фирма APC вместо стандартных. И вам это нужно указывать лишь при необходимости указанной в документациях NUT и производителя UPS см "/usr/local/share/doc/nut/cables/"

Опишим некоторые параметры для использования:

  • [ups_name] - это имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя.
  • driver - драйвер, используемый для работы с UPS.
  • port - порт, на котором висит UPS (для подключения через USB указываете значение "auto"). Для snmp-ups: имя хоста SNMP агента. Для newhidups: значение "auto" для автоматического соединения с USB UPS.
  • desc - описание устройства.
  • sdorder - необязательный элемент. При наличии нескольких UPS подключенных к этому серверу можно выключать UPS в определенном порядке. используя upsdrvctl к примеру можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1.
  • nolock - необязательный элемент, его не рекомендуется использовать в его этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой.
  • maxstartdelay - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам.
  • cable - Если драйвер UPS требует дополнительных параметров, вы можете указать их здесь. Например, для флага "cable" в данной статье я ставлю значение 940-1524C. Это индекс вашего кабеля и вы можете посмотреть его тут "/usr/local/share/doc/nut/cables". Не указывайте это значение, если ваше подключение к UPS стандартно.

upsd.conf

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

Создадим конфигурационный файл.

# cp upsd.conf.sample upsd.conf

Добавим следующие значения для прослушивания следующих IP для запросов о состоянии UPS клиентов:

LISTEN 127.0.0.1
LISTEN 192.168.0.6

Опишем параметры:

  • MAXAGE - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать другое значение только в том случае, если у вас трудности с обновлением данных. См syslog.
  • LISTEN address port - здесь указывается IP адрес и порт 3493 (по умолчанию) для прослушивания подключений.
  • MAXCONN connections - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся количество подключений, он больше не будет принимать новых входящих клиентских подключений

upsd.users

Контроль доступа для UPS демона (профили пользователей). Именно в этом файле вы указываете, кто и в какой мере будет работать с NUT.

# cp upsd.users.sample upsd.users
# cat upsd.users
[admin]
password = upsadminpass
actions = SET
instcmds = ALL
 
[monmaster]
password = upsmonmasterpass
upsmon master
 
[monslave]
password = upsmonslavepass
upsmon slave

Значения:

  • [NAME] - имя пользователя
  • password - пароль пользователя
  • actions - возможность настройки см ниже.
  • instcmds - выполняемые команды см ниже.
  • upsmon - вид подключения клиентов см ниже.

Каждый UPS монитор может определяться как один из трех возможных типов:
upsmon master - полные полномочия управлением питания подключенных к системе. UPS под управлением этого upsmon и отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех slave мониторов. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon этой системы следует определить его как master.

upsmon slave - эта система, под управлением upsmon master и она не выключается непосредственно. Операционная система будет выключена перед отключением питания master. Используйте этот режим при запуске монитора на других серверах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является master. Все остальные сервера будут slave.

upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не будет завершать работу системы.

actions - Действия пользователя с применением upsd.
- SET - изменить значения определенных переменных в UPS
- FSD - установка флага "принудительного выключения" для UPS

instcmds - разрешения пользователю на инициирование конкретных команд. Применяя "ALL" вы разрешаете использовать все команды, Существует множество команд выполните "upscmd -l" чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.

  • test.panel.start - старт теста передней панели
  • test.battery.start - старт теста батареи
  • test.battery.stop - остановка теста батареи
  • calibrate.start - запуск калибровки батареи
  • calibrate.stop - остановка калибровки батареи

upsmon.conf

Этот конфигурационный файл предоставляет основные функции в программе мониторинга UPS, например это безопасное завершений работы при сбое питания, уведомления и другие переменные. В многоуровневой схеме утилиты NUT это клиент.

# cp upsmon.conf.sample upsmon.conf
# cat upsmon.conf | grep -v ^#
MONITOR APC@localhost 1 monmaster upsmonmasterpass master
MINSUPPLIES 1
 
SHUTDOWNCMD "/sbin/shutdown -p +0"
 
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
 
NOTIFYFLAG ONLINE       SYSLOG+WALL
NOTIFYFLAG ONBATT       SYSLOG+WALL
NOTIFYFLAG LOWBATT      SYSLOG+WALL
NOTIFYFLAG SHUTDOWN     SYSLOG+WALL
 
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Мы добавили значения MONITOR в котором необходимо добавить свое значение. Формат таков:
MONITOR [system] [powervalue] [username] [password] [type]

Рассмотрим некоторые значения переменных:

  • MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но дорогие сервера, например HP NetServer LH4 могут работать с 2 из 4 БП и ему нужно ставить 2.
  • SHUTDOWNCMD - upsmon выполняет эту команду, когда системе необходимо выключить.
  • POLLFREQ - опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял” вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания.
  • POLLFREQALERT - опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.
  • HOSTSYNC - как долго upsmon будет ждать перед переходом к следующему upsmon. master upsmon использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD). И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.
  • DEADTIME - интервал ожидания перед объявлением статуса UPS как «мертвый» upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT). Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».
  • POWERDOWNFLAG - флаг файла для форсирования завершения работы UPS в master системе.
  • NOTIFYMSG - изменение сообщения, отправленные upsmon при возникновении определенных событий.
  • NOTIFYCMD - upsmon отправляет сообщение при происшествиях.
  • NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY.
  • RBWARNTIME - предупреждение замены аккумулятора в секундах.
  • NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах.
  • FINALDELAY - через сколько выполнить SHUTDOWNCMD.

Запуск NUT

Разрешения

Проверьте разрешения на директорию "/var/db/nut" текущий пользователь должен быть uucp (или другой NUT_USER) и права 0750:

# ls -ld /var/db/nut/
drwxr-x---  2 uucp  uucp  512 18 июн 22:21 /var/db/nut/
# ls -ls /var/db/nut/
total 8
0 srw-rw----  1 uucp  uucp  0 18 июн 22:21 apcsmart-APC
2 -rw-r--r--  1 uucp  uucp  5 18 июн 22:21 apcsmart-APC.pid
2 -rw-r--r--  1 uucp  uucp  5 18 июн 22:21 upsd.pid
2 -rw-r--r--  1 root  uucp  5 18 июн 22:21 upslog.pid
2 -rw-r--r--  1 root  uucp  5 18 июн 22:21 upsmon.pid

Измените разрешения на конфигурационные файлы: они должны читаться пользователем uucp (или другим пользователем NUT_USER):

# cd /usr/local/etc/nut/
# chown uucp:wheel upsd.conf upsd.users upsmon.conf
# chmod 0640 upsd.conf upsd.users upsmon.conf
# ls -l *.conf
-rw-r--r--  1 root  wheel   1106 17 авг  2010 hosts.conf
-rw-r--r--  1 uucp  wheel   3750 17 авг  2010 ups.conf
-rw-r-----  1 uucp  wheel     36  5 авг  2010 upsd.conf
-rw-r-----  1 uucp  wheel  12068 23 авг  2010 upsmon.conf
-rw-r--r--  1 root  wheel   1416 17 авг  2010 upsset.conf

Запуск демона

Запустим в ручную

# /usr/local/etc/rc.d/nut start
Network UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1)
APC command table version 2.0
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 12:51 MSD...
 
Communications with UPS APC@localhost lost
 
Detected Smart-UPS 2200 RM [JS0605026405] on /dev/cuau0
Starting nut.
Network UPS Tools upsd 2.4.1
listening on 192.168.0.6 port 3493
listening on 127.0.0.1 port 3493
Connected to UPS [APC]: apcsmart-APC
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 12:51 MSD...
 
Communications with UPS APC@localhost established

NUT запустилcя нормально, UPS подхватился и порт слушается.

Проверка

Проверим, все ли в порядке.

# ps -ax | grep nut
 1030  ??  Ss     0:06,30 /usr/local/libexec/nut/apcsmart -a APC
12400   1  S+     0:00,00 grep nut
# ps -ax | grep ups
 1032  ??  Ss     0:01,43 /usr/local/sbin/upsd
 1040  ??  Is     0:00,04 /usr/local/bin/upslog -s myups@localhost -l /var/log/ups.log -i 300
 1048  ??  Is     0:00,00 /usr/local/sbin/upsmon localhost
 1050  ??  S      0:00,46 /usr/local/sbin/upsmon localhost
12414   1  S+     0:00,00 grep ups

Все замечательно, демон работает и ведет логи.

Проверим как живет UPS

# upsc APC@localhost
battery.alarm.threshold: 0
battery.charge: 100.0
battery.charge.restart: 15
battery.date: 01/28/06
battery.packs: 000
battery.runtime: 2820
battery.runtime.low: 120
battery.voltage: 54.54
battery.voltage.nominal: 048
driver.name: apcsmart
driver.parameter.cable: 940-1524C
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/cuau0
driver.version: 2.4.1
driver.version.internal: 2.00
input.frequency: 50.00
input.quality: FF
input.sensitivity: H
input.transfer.high: 253
input.transfer.low: 208
input.transfer.reason: S
input.voltage: 224.6
input.voltage.maximum: 224.6
input.voltage.minimum: 224.6
output.voltage: 224.6
output.voltage.nominal: 230
ups.delay.shutdown: 180
ups.delay.start: 000
ups.firmware: 665.6.I
ups.id: UPS_IDEN
ups.load: 018.8
ups.mfr: APC
ups.mfr.date: 01/28/06
ups.model: Smart-UPS 2200 RM
ups.serial: JS0605026405
ups.status: OL
ups.temperature: 035.1
ups.test.interval: 1209600
ups.test.result: NO

Если кому-то нужен более краткий отчет, то выполните следующую команду.

# upsc APC@localhost ups.status
OL

  • OL - система работает на линии (on line power)
  • OB - система работает от батареи (on battery)
  • LB - система работает от севшей батареи (low battery)

Можно посмотреть общий монитор.

# upsmon
Network UPS Tools upsmon 2.4.1
UPS: APC@localhost (master) (power value 1)
Using power down flag file /etc/killpower

rc.conf

Для запуска NUT при старте FreeBSD добавляем в /etc/rc.conf следующее:

nut_enable="YES"
nut_upslog_enable="YES"
nut_upsmon_enable="YES"

Перезагрузим FreeBSD и увидим при загрузке следующее.

Network UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1)
APC command table version 2.0
Detected Smart-UPS 2200 RM [JS0605026405] on /dev/cuau0
Starting nut.
Network UPS Tools upsd 2.4.1
listening on 192.168.0.6 port 3493
listening on 127.0.0.1 port 3493
Connected to UPS [APC]: apcsmart-APC
Starting nut_upslog.
Network UPS Tools upslog 2.4.1
logging status of myups@localhost to /var/log/ups.log (300s intervals)
Starting nut_upsmon.
Network UPS Tools upsmon 2.4.1
UPS: APC@localhost (master) (power value 1)
Using power down flag file /etc/killpower

Клиенты

Подключим сервера Windows 2003 в качестве клиентов. Для этого необходимо установить и настроить необходимое ПО. Список клиентских программ смотрите тут Client projects. Мне был необходим WinNUT. Программу необходимо скачать и установить, а так же настроить его под свои параметры. После установки начинаете редактировать конфигурационный файл через WinNUT Configuration Tool

Конфигурационный файл будет представлять следующее:

MONITOR APC@192.168.0.6 1 monslave upsmonslavepass slave
MINSUPPLIES 1
NOTIFYCMD "c:\\Program Files\\WinNUT\\alertPopup.exe"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

После настройки проследите чтобы было активированная функция Install As Service и нажмите Apply and Start WinNUT. Состояние программы вы можете увидеть в строке "Status" в данном случае он запущен как сервис Running as Service, открыв логи вы можете убедиться, что все впорядке.

Мониторинг

Web интерфейс

Web-интерфейс проверки статуса UPS и изменения некоторых параметров батареи. Как вы помните при установке NUT вам было предложенно установить CGI - Web CGI interface надеюсь вы его выбрали для установки. И так вы можете посмотреть, что upsstats может нам предложить.

# man 8 upsstats.cgi

Или же следовать за мной:
upsset.conf - конфигурация Network UPS Tools для upsset.cgi.
Скопируем примеры конфигурационных файлов и отредактируем их:
# cd /usr/local/etc/nut
# cp upsset.conf.sample upsset.conf
# cp upsstats.html.sample upsstats.html
# cp upsstats-single.html.sample upsstats-single.html

Раскоментируем строчку.

# cat upsset.conf
I_HAVE_SECURED_MY_CGI_DIRECTORY

В конфигурационный файл Apache добавим следующее:

<VirtualHost *:80>
ServerName ups.kmps.local
ServerAlias ups
ServerAdmin admin@localhost
Options Indexes FollowSymlinks MultiViews +ExecCGI
AddHandler cgi-script .cgi
DocumentRoot /usr/local/www/nut/
#AccessFileName .htaccess
</VirtualHost>

Перезапустите Apache и зайдите на http://ups И при переходе на ваш адрес у вас должна отобразится страница Network UPS Tools с вкладками:

  • Statistics – здесь вы можете просмотреть статус вашего UPS, а так же посмотреть текущее состояние в графическом виде.
  • Settings – здесь вы можете настроит UPS (пользователя берете согласно содержимому upsd.users)
Statistics

Статистика и краткая характеристика:

Наглядный график с обновлением через F5 ):

Settings

Настройки доступны после ввода логина и пароля указанных в конфигурационных файлов (admin).

Обратите внимание на параметр "Minimum battery level for restart after power off (percent)" при каком заряде батареи подавать питание.

Cacti

Для сбора статистики вы можете использовать кактус для этого нужно следующее:
1. Скачать скрипт cacti-nut.0.5.tar_.gz (новая версия cacti-nut.0.6.tar_.gz) и распаковать.

Скопируйте файл scripts/ss_nut_ups_status.php в директорию cacti/scripts/
Скопируйте файл resource/nut_ups_status.xml в директорию cacti/resource/script_server/

2. Импортировать шаблон из архива

Console > Import Templates > Views [cacti_data_query_nut_ups_statistics.xml]

3. Создать данные. В разделе Console > Devices > [сервер с NUT] и на панели Associated Data Queries добавляем Data Query: NUT — UPS Statistics > Add. В добавленной строчке в столбце status должны увидеть:

Success [2 Items, 1 Row]

4. Создать график для этих данных на странице параметров устройств строка Create Graphs for this Host. Там мы есть Data Query [NUT — UPS Statistics] в строке которой расположены наши UPS. Отмечаем галочкой нужный и выбираем graph type:

  • UPS Load Capacity — уровень загруженности UPS.
  • UPS Power Signal — входящее напряжение и частота.
  • UPS Temperature — температура UPS.

Нажимаем Create и через некоторое время мы уведем такой график:

Тестирование

Обязательным составляющим будет проверка работы NUT сначала программная, а потом реальное отключения питания.
К примеру, когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг "FSD" (forced shutdown - принудительное отключение) для любых UPS, на котором она выполняется в master режиме. Данная возможность используется и для синхронизации slaves компьютеров в том случае, если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы. Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '. Это полезно, когда вы хотите инициировать shutdown перед критическим этапом. Эмулируем падение мощности:

# upsmon -c fsd

Если система корректно выключилась, то все в порядке.

Проведем практические испытания - выключим электричество на входе UPS'а и посмотрим, как отреагирует сервер и клиент. В моем случае как и было задумано, сперва штатно выключились два сервера Windows 2003 (при зарядке батареи 10%), а затем - FreeBSD (при зарядке батареи 5%)

June  19 14:04:03 thor upsmon[770]: UPS APC@localhost on battery
June  19 14:41:43 thor upsmon[770]: UPS APC@localhost battery is low
June  19 14:41:43 thor upsmon[770]: Executing automatic power-fail shutdown
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 14:41 MSD...
 
UPS APC@localhost battery is low
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 14:41 MSD...
 
Executing automatic power-fail shutdown
 
June  19 14:41:43 thor upsmon[770]: Auto logout and shutdown proceeding
 
Broadcast Message from root@thor.kmps.local
        (no tty) at 14:41 MSD...
 
Auto logout and shutdown proceeding
 
*** FINAL System shutdown message from root@thor.kmps.local ***
System going down IMMEDIATELY
 
June  19 14:41:48 thor shutdown: halt by root:
June  19 14:42:20 thor rc.shutdown: 30 second watchdog timeout expired. Shutdown terminated.

USB UPS

Подключаем UPS

# usbconfig
ugen0.1: <OHCI root HUB SiS> at usbus0, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE
ugen1.1: <OHCI root HUB SiS> at usbus1, cfg=0 md=HOST spd=FULL (12Mbps) pwr=SAVE
ugen2.1: <EHCI root HUB SiS> at usbus2, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE
ugen0.2: <Smart-UPS 1000 FW652.19.I USB FW11.03 American Power Conversion> at usbus0, cfg=0 md=HOST spd=LOW (1.5Mbps) pwr=ON

Находим точный адрес ugen0.2.

# ll /dev/ugen0.2
lrwxr-xr-x  1 root  wheel     9B 23 май 02:14 /dev/ugen0.2 -> usb/0.2.0
# ll /dev/usb/0.2.0
crw-------  1 uucp  operator    0, 106 23 май 02:14 /dev/usb/0.2.0

Далее ищем и добавляем строку с chown с нужным портом.

# vi /usr/local/etc/rc.d/nut
nut_prestart() {
        chown -h uucp /dev/usb/0.2.0
        ${nut_prefix}/libexec/nut/upsdrvctl start
}

Добавляем в конфигурационный файл NUT свой UPS.

# vi /usr/local/etc/nut/ups.conf
[APC]
driver = usbhid-ups
port = auto
desc = "APC Smart-UPS 1000"

И запускаем.

FAQ

В) Как после включения питания автоматически запускать сервера?
О) В BIOS серверов укажите включение при появление питания. А так же в веб интерфейсе NUT во вкладке настройка укажите необходимый процент"Minimum battery level for restart after power off (percent)" для подачи питания на машины.

В)Можно ли настроить nut, чтобы он выключал компы сразу, как только уровень заряда батареи достигнет какого-то определенного значения, например, при 60% заряда?
О) Можно поиграться с настройками (в веб морде)
Remaining battery runtime when UPS switches to LB (Оставшееся время работы от батареи в сек, когда ИБП переходит в LB (LB - система работает от севшей батареи (low battery)) отсюда и отключение клиентов и как следственно увеличение обьема оставшегося заряда на упсе.

ВложениеРазмер
cacti-nut.0.6.tar_.gz7.89 КБ
Дополнительные материалы
Ссылки: 
ВЕТКА ФОРУМА
Документация # cd /usr/local/share/doc/nut/
Network UPS Tools
Список поддерживаемого оборудования
Клиенты NUT
[ Cacti Plugin ]
Ваша оценка: Нет Средняя: 5 (17 голосов)

OpenLDAP, addressbook, web интерфейс и все все все

По просьбам трудящихся, из-за отсутствия простого мануала для всех начинающих, светлых администраторов UNIX, и внедрению технологий светлых в тыл компаний и корпораций использующих темные силы Микрософта - посвящается сие писание =).

Необходимо:

  • Организовать общую адресную книгу для предприятия.
  • Научится просто и эффективно управлять OpenLDAP и адресной книгой.
  • Подсадить пользователей на правильный почтовый клиент.
  • Предисловие
    • Основные термины
    • Компоненты OpenLDAP
  • Установка
    • Ставим OpenLDAP
    • Настройка OpenLDAP
    • Запуск OpenLDAP
  • Управление
    • Web интерфейс
    • Программное обеспечение
  • Адресная книга в почтовых клиентах
  • FAQ

Предисловие

На любом предприятии рано или поздно возникает вопрос о централизованном хранилище электронных адресов, принтеров и тп. Это все может реализовать с помощью OpenLDAP. В данной статье, я опишу основные параметры необходимые для работы OpenLDAP в качестве адресной книги и по дополнительным просьбам я расширю и дополню, если вам будет чего либо не хватать. Но я уверен, что вы и сами сможете расширить функционал OpenLDAP без лишних просьб, а лишь чтением манов и гуглением.

Основные термины

OpenLDAP Software - открытая реализация LDAP, разработанная проектом OpenLDAP Project. Распространяется под собственной лицензией, называемой OpenLDAP Public License. LDAP - платформенно-независимый протокол. В числе прочих есть реализации для различных модификаций BSD, а также GNU/Linux, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (2000, XP) и z/OS.

LDAP (Lightweight Directory Access Protocol) представляет средства доступа к логически иерархической БД. Каталог (БД) состоит из записей (объектов). Иерархическая совокупность объектов (вложение контейнеров) определяет дерево каталога. Правила связывания определяются набором правил, который называется схемой каталога (в схему входят также описания классов). Дерево начинается от корневого объекта (класс Top в Active Directory).

Тип объекта (класс) определяется набором атрибутов: имя, тип значения, обязательность. Строки в кодировке UTF-8. Объект может ассоциироваться с несколькими классами. Класс может быть расширением другого класса (наследование). Кроме простых объектов имеются контейнеры (группировка объектов и контейнеров), псевдонимы (символьные ссылки), переадресация клиента к другому каталогу (переход по ссылкам, chasing referrals).

Каждый объект имеет относительное отличительное имя (Relative Distinguished Name). Полное отличительное имя объекта (DN) образуется конкатенацией RDN объекта с DN объекта верхнего уровня (порядок записи - от младшего к старшему, разделитель - точка). Каждый объект имеет владельца. В качестве идентификатора аутентификации также используется DN (cn=,dc=). Имеется выделенный администратор каталога, обладающий корневыми полномочиями. Для аутентификации используется расширяемый механизм SASL.

Поиск объекта в иерархии производится с помощью составного имени с корня вниз (как в DNS). Есть возможность анонимного доступа. Права доступа - чтение и запись и поддерживается репликация LDAP сервера.

Общие имена атрибутов:

  • c - страна
  • st - регион
  • l - местность
  • o - организация
  • ou - подразделение
  • dc - domain container
  • cn - имя
  • sn - фамилия
  • mail - электронный адрес

Возможности клиента:

  • подключиться к серверу БД (запрос привязки), для аутентификации используются механизмы SASL
  • читать значения определённых атрибутов конкретного объекта
  • сравнить значения с атрибутом объекта (полезно для аутентификации сравнением хеша)
  • искать объекты по значениям атрибутов (указывается корень поддерева, максимальное количество результатов, максимальное время поиска, фильтр поиска, перечень желаемых атрибутов)
  • получить список объектов ниже по иерархии
  • отменить предыдущий запрос
  • добавить, изменить или удалить объект
  • переименовать объект

Компоненты OpenLDAP

Открытое программное обеспечение OpenLDAP состоит из нескольких основных компонентов:

  • slapd - независимый LDAP демон (сервер)
  • slurpd - независимый LDAP демон обновления и репликации
  • библиотеки реализующие протокол LDAP, утилиты, инструменты и элементарные клиенты.
    Примеры клиентов: ldapsearch, ldapadd, ldapdelete и других.

Также содержится для OpenLDAP проекта:

  • JLDAP - библиотеки классов LDAP для Java
  • JDBC-LDAP - драйвер интерфейса между Java JDBC - LDAP

Установка

Ставим OpenLDAP

Установка OpenLDAP стандартна и поэтому, вкратце пройдемся по ней:
Мы нашли две версии этого порта 2.3 и 2.4, и я остановился на 2.4 ввиду ее перспективности.

# cd /usr/ports
# make search name=openldap-server
Port:   openldap-server-2.3.43
Path:   /usr/ports/net/openldap23-server
Info:   Open source LDAP server implementation
Maint:  delphij@FreeBSD.org
B-deps: db44-4.4.20.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.3.43
R-deps: db44-4.4.20.4 libltdl-1.5.26 openldap-client-2.3.43
WWW:    <a href="http://www.OpenLDAP.org/</p>
<p>Port:" title="http://www.OpenLDAP.org/</p>
<p>Port:">http://www.OpenLDAP.org/</p>
<p>Port:</p></a>   openldap-server-2.4.17
Path:   /usr/ports/net/openldap24-server
Info:   Open source LDAP server implementation
Maint:  delphij@FreeBSD.org
B-deps: db46-4.6.21.4 libltdl-1.5.26 libtool-1.5.26 openldap-client-2.4.17
R-deps: db46-4.6.21.4 libltdl-1.5.26 openldap-client-2.4.17
WWW:    http://www.OpenLDAP.org/

Сконфигурируем и выберем необходимые модули:

# cd /usr/ports/net/openldap24-server/ && make config
 
     ---------------------------------------------------------------------¬
     ¦                Options for openldap-server 2.4.17                  ¦
     ¦ -----------------------------------------------------------------¬ ¦
     ¦ ¦ [ ] SASL              With (Cyrus) SASL2 support               ¦ ¦
     ¦ ¦ [ ] DYNACL            Run-time loadable ACL (experimental)     ¦ ¦
     ¦ ¦ [ ] ACI               Per-object ACI (experimental)            ¦ ¦
     ¦ ¦ [ ] DNSSRV            With Dnssrv backend                      ¦ ¦
     ¦ ¦ [ ] PASSWD            With Passwd backend                      ¦ ¦
     ¦ ¦ [ ] PERL              With Perl backend                        ¦ ¦
     ¦ ¦ [ ] RELAY             With Relay backend                       ¦ ¦
     ¦ ¦ [ ] SHELL             With Shell backend (disables threading)  ¦ ¦
     ¦ ¦ [ ] SOCK              With Sock backend                        ¦ ¦
     ¦ ¦ [ ] ODBC              With SQL backend                         ¦ ¦
     ¦ ¦ [ ] RLOOKUPS          With reverse lookups of client hostnames ¦ ¦
     ¦ ¦ [ ] SLP               With SLPv2 (RFC 2608) support            ¦ ¦
     ¦ ¦ [ ] SLAPI             With Netscape SLAPI plugin API           ¦ ¦
     ¦ ¦ [X] TCP_WRAPPERS      With tcp wrapper support                 ¦ ¦
     ¦ ¦ [X] BDB               With BerkeleyDB support                  ¦ ¦
     ¦ ¦ [ ] ACCESSLOG         With In-Directory Access Logging overlay ¦ ¦
     ¦ ¦ [ ] AUDITLOG          With Audit Logging overlay               ¦ ¦
     ¦ ¦ [ ] COLLECT           With Collect overy Services overlay      ¦ ¦
     ¦ ¦ [ ] CONSTRAINT        With Attribute Constraint overlay        ¦ ¦
     ¦ ¦ [ ] DDS               With Dynamic Directory Services overlay  ¦ ¦
     ¦ ¦ [ ] DEREF             With Dereference overlay                 ¦ ¦
     ¦ ¦ [ ] DYNGROUP          With Dynamic Group overlay               ¦ ¦
     ¦ ¦ [ ] DYNLIST           With Dynamic List overlay                ¦ ¦
     ¦ ¦ [ ] LASTMOD           With Last Modification overlay           ¦ ¦
     ¦ ¦ [ ] MEMBEROF          With Reverse Group Membership overlay    ¦ ¦
     ¦ ¦ [ ] PPOLICY           With Password Policy overlay             ¦ ¦
     ¦ ¦ [ ] PROXYCACHE        With Proxy Cache overlay                 ¦ ¦
     ¦ ¦ [ ] REFINT            With Referential Integrity overlay       ¦ ¦
     ¦ ¦ [ ] RETCODE           With Return Code testing overlay         ¦ ¦
     ¦ ¦ [ ] RWM               With Rewrite/Remap overlay               ¦ ¦
     ¦ ¦ [X] SEQMOD            Sequential Modify overlay                ¦ ¦
     ¦ ¦ [X] SYNCPROV          With Syncrepl Provider overlay           ¦ ¦
     ¦ ¦ [ ] TRANSLUCENT       With Translucent Proxy overlay           ¦ ¦
     ¦ ¦ [ ] UNIQUE            With attribute Uniqueness overlay        ¦ ¦
     ¦ ¦ [ ] VALSORT           With Value Sorting overlay               ¦ ¦
     ¦ ¦ [ ] SMBPWD            With Samba Password hashes overlay       ¦ ¦
     ¦ ¦ [X] DYNAMIC_BACKENDS  Build dynamic backends                   ¦ ¦
     +-L------------------------------------------------------------------+
     ¦                       [  OK  ]       Cancel                        ¦
     L---------------------------------------------------------------------

Начнем установку:

# cd /usr/ports/net/openldap24-server/ && make install clean
~~~~~
*************************************************************
 
The OpenLDAP server package has been successfully installed.
 
In order to run the LDAP server, you need to edit
  /usr/local/etc/openldap/slapd.conf
to suit your needs and add the following lines to /etc/rc.conf:
  slapd_enable="YES"
  slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
  slapd_sockets="/var/run/openldap/ldapi"
 
Then start the server with
  /usr/local/etc/rc.d/slapd start
or reboot.
 
Try `man slapd' and the online manual at
  <a href="http://www.OpenLDAP.org/doc/<br />
for" title="http://www.OpenLDAP.org/doc/<br />
for">http://www.OpenLDAP.org/doc/<br />
for</a> more information.
 
slapd runs under a non-privileged user id (by default `ldap'),
see /usr/local/etc/rc.d/slapd for more information.
 
************************************************************
===> Installing rc.d startup script(s)
===>   Running ldconfig
/sbin/ldconfig -m /usr/local/libexec/openldap
===>   Installing ldconfig configuration file
===>   Registering installation for openldap-server-2.4.17
===> SECURITY REPORT:
      This port has installed the following files which may act as network
      servers and may therefore pose a remote security risk to the system.
/usr/local/libexec/slapd
 
      This port has installed the following startup scripts which may cause
      these network services to be started at boot time.
/usr/local/etc/rc.d/slapd
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
http://www.OpenLDAP.org/

Настройка OpenLDAP

Приступим к настройке OpenLDAP.
Внесем в /etc/rc.conf следующее:

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

По умолчанию ldap слушает все интерфейсы ldap://0.0.0.0/, но я укажу конкретно, что ему слушать это localhost и интерфейс сетевой платы. Например, вот так:
slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/"'
slapd_sockets="/var/run/openldap/ldapi"

Теперь необходимо откорректировать конфигурационный файл OpenLDAP. Скопируем дефолтный конфигурационный файл:
# cd /usr/local/etc/openldap/
# cp slapd.conf.default slapd.conf

Отредактируем slapd.conf.

# cat slapd.conf
include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema
 
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args
 
modulepath      /usr/local/libexec/openldap
moduleload      back_bdb
 
access to * by * read
 
access to attr=userPassword
  by self write
  by anonymous auth
  by * none
 
database        bdb
suffix          "dc=ampul,dc=local"
rootdn          "cn=root,dc=ampul,dc=local"
 
rootpw          {SSHA}Password
 
directory       /var/db/openldap-data
index   objectClass     eq
index   cn              eq

Пройдемся по конфигурационному файлу:
include - подключаемые схемы; в поставке OpenLDAP их довольно много. И вы подключите только те, которые будете использовать. В принципе, схемы являются частью конфигурационного файла, но для наглядности они вынесены в отдельные фрагменты. С указанием пути откуда они берутся.

modulepath и moduleload - запускаемый сервис и модуль используемого способа хранения данных.

access - для управления доступом используются списки доступа ACL. В данном примере приводятся два списка — в первом из них ограничивается доступ к атрибуту userPassword (полный доступ к нему могут иметь только сам объект либо администратор базы; для всех остальных доступ запрещён). Второе правило гласит, что всем даётся доступ на чтение любых данных (кроме ограниченного предыдущим правилом).

database - способ хранения данных используемый нами.

suffix - корнем иерархической структуры будет являться некоторый объект например dc=example,dc=com (я буду использовать для примера суффикс
dc=ampul,dc=local) у вас он соответственно будет другим. Суффикс для каталога можно взять любой.

rootdn - DN, описывающий администратора

rootpw - хешированый SSHA пароль администратора (см. slappasswd(8))

Утилита slappasswd позволяет создавать хеш пароля для дальнейшего использования в качестве значения атрибута userPassword или опции rootpw файла slapd.conf.

Параметры:
-v - многословный режим
-u - (пока по умолчанию; создавать хеш для userPassword в формате, определённом RFC 2307)
-s - пароль (если не задан здесь или с помощью ключа -T, то запрашивается в диалоге)
-T - имя файла с паролем
-h - схема ({SSHA}; метод хеширования пароля: {CRYPT}, {MD5}, {SMD5}, {SSHA}, {SHA}, {CLEARTEXT})
-c - формат (формат как в sprintf(3) для преобразования случайной строки символов из диапазона [A-Za-z0-9./]; например, "%.2s" даёт соль для стандартной функции crypt(3); "$1$%.8s" приводит к использованию функцией crypt(3) алгоритма MD5, так что результат можно использовать в /etc/shadow)

Создать хешированный пароль для пользователя root можно так:

# slappasswd -s  root
{SSHA}Password

Запуск OpenLDAP

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

# /usr/local/etc/rc.d/slapd start
# ps -ax | grep slap
35430  ??  Is     0:00,01 /usr/local/libexec/slapd -h ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://127.0.0.1/ ldap://192.168.0.2/ -u ldap -g ldap
35544  p0  S+     0:00,00 grep slap
# netstat -nap tcp | grep 389
tcp4       0      0 192.168.0.2.389        *.*                    LISTEN
tcp4       0      0 127.0.0.1.389          *.*                    LISTEN

Если вы все корректно сконфигурировали, то openldap запустится без проблем.

Сейчас нам необходимо создать корень:

# cat ampul.local.ldif
dn: dc=ampul,dc=local
objectClass: top
objectClass: dcObject
objectClass: organization
dc: ampul
o: FSI Ust-Luga Branch
 
dn: ou=addressbook,dc=ampul,dc=local
objectClass: top
objectClass: organizationalUnit
ou: addressbook

Добавим нашу схему в OpenLDAP.

# ldapadd -x -h localhost -f ampul.local.ldif -D "cn=root,dc=ampul,dc=local" -W
Enter LDAP Password: ****
adding new entry "dc=ampul,dc=local"
 
adding new entry "ou=addressbook,dc=ampul,dc=local"

Управление

Web интерфейс

Я давно подсел на web приложения потому, что я могу запускать их отовсюду и из любой системы будь то *NIX, Windows, Linux и т.п. Простота в обслуживании, обновлении, единая точка входа и управления и т.п. Для OpenLDAP есть несколько приложений которые могут помочь в администрировании OpenLDAP - мой выбор остановился на phpLDAPadmin.

  • Скриншот 1

# cd /usr/ports/
# make search name=phpLDAPadmin
Port:   phpldapadmin-1.1.0.7,1
Path:   /usr/ports/net/phpldapadmin
Info:   A set of PHP-scripts to administer LDAP over the web
Maint:  m.seaman@infracaninophile.co.uk
B-deps:
R-deps: gettext-0.17_1 libiconv-1.13 libxml2-2.7.3 openldap-client-2.4.16..
WWW:    <a href="http://phpldapadmin.sourceforge.net/</p>
<p>#" title="http://phpldapadmin.sourceforge.net/</p>
<p>#">http://phpldapadmin.sourceforge.net/</p>
<p>#</p></a> cd /usr/ports/net/phpldapadmin;make install clean
phpldapadmin-1.1.0.7,1 has been installed into:
 
    /usr/local/www/phpldapadmin
 
Please edit config.php to suit your needs.
 
To make phpLDAPadmin available through your web site, I suggest that
you add something like the following to httpd.conf:
 
    Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/"
 
    <Directory "/usr/local/www/phpldapadmin/htdocs">
        Options none
        AllowOverride none
 
        Order Deny,Allow
        Deny from all
        Allow from 127.0.0.1 .example.com
    </Directory>
 
Please note: if you are upgrading from version 0.9.7 or earlier, the
layout of the phpldapadmin-1.1.0.7,1 files has been completely reworked. You will
need to modify your apache configuration and merge the settings from
your original configuration file:
 
    /usr/local/www/phpldapadmin/config.php
 
 to
 
    /usr/local/www/phpldapadmin/config/config.php
 
===>   Registering installation for phpldapadmin-1.1.0.7,1
===>  Cleaning for phpldapadmin-1.1.0.7,1

  • Добавьте в конфигурационный файл Apache следующие строки предварительно настроив под себя
  •     Alias /phpldapadmin/ "/usr/local/www/phpldapadmin/htdocs/"
     
        <Directory "/usr/local/www/phpldapadmin/htdocs">
            Options none
            AllowOverride none
     
            Order Deny,Allow
            Deny from all
            Allow from 127.0.0.1 .example.com
        </Directory>

  • При необходимости отредактируйте конфигурационный файл phpldapadmin
    /usr/local/www/phpldapadmin/config/config.php
  • При проблемах чтения файлов установите права для Apache на директорию phpldapadmin.
    # chown -R www:www /usr/local/www/phpldapadmin/
  • Теперь в браузере указываете IP адрес или имя с сервера с приставкой phpldapadmin
    http://IP_name/phpldapadmin
    Укажите логин и пароль привилегированного лица например:
    Логин: cn=root,dc=ampul,dc=local
    Пароль: Password

Программное обеспечение

Есть несколько программных продуктов, которые позволяют управлять LDAP серверами, но они, в основном, платные. Я остановился на LDAP Admin, он быстрый, бесплатный и простой, что позволяет его использование обычному пользователю. Настроить его очень легко см скриншоты.

  • Скриншот 1
  • Скриншот 2

Адресная книга в почтовых клиентах

Mozilla Thunderbird

Thunderbird использует LDAPv3. Добавим LDAP-сервер в адресную книгу.

  • Скриншот 1

Введем корректный адрес и данные сервера OpenLDAP

  • Скриншот 1

Поиск производится при введении строки поиска в поле (ничего нажимать не надо, поиск производится по мере ввода) по cn, givenName, sn и считывает следующий список атрибутов: modifytimestamp, xmozillausehtmlmail, description, notes, custom4, custom3, custom2, custom1, birthyear, homeurl, workurl, nscpaimscreenname, countryname, company, o, departmentnumber, department, orgunit, ou, title, zip, postalcode, region, st, locality, l, streetaddress, postofficebox, carphone, cellphone, mobile, pagerphone, pager, facsimiletelephonenumber, fax, homephone, telephonenumber, xmozillasecondemail, mail, xmozillanickname, displayname, commonname, cn, surname, sn, givenname.

  • Скриншот 1

Outlook Express.

Outlook Express использует LDAPv2. Добавим LDAP-сервер в адресную книгу для этого выбираем в меню Сервис -> Учётные записи -> Добавить -> Служба каталогов -> Сервер каталогов (LDAP).
Затем изменить свойствах созданной службы каталогов во вкладке Дополнительно вставте свою Основу поиска например (ou=addressbook,dc=ampul,dc=local).
Поиск производится по нажатию кнопки "Поиск людей", вводу параметров и нажатию кнопки "Найти". Предварительно опрашивается список возможности сервера: subschemaSubentry, dsServiceName, namingContexts, defaultNamingContext, schemaNamingContext, configurationNamingContext, rootDomainNamingContext, supportedControl, supportedLDAPVersion, supportedLDAPPolicies, supportedSASLMechanisms, dnsHostName, ldapServiceName, serverName, supportedCapabilities.
По умолчанию поиск по атрибутам cn, givenName, sn, но можно искать по "имя и адрес" (cn), "электронная почта" (mail), имени (givenName), фамилии (sn), организации (o). Считывает следующий список атрибутов: display-name, cn, commonName, mail, otherMailbox, givenName, sn, surname, st, c, co, organizationName, o, ou, organizationalUnitName, URL, homePhone, facsimileTelephoneNumber, otherFacsimileTelephoneNumber, OfficeFax, mobile, otherPager, OfficePager, pager, info, title, telephoneNumber, l, homePostalAddress, postalAddress, streetAddress, street, department, comment, postalCode, physicalDeliveryOfficeName, initials, conferenceInformation, userCertificate;binary, userSMIMECertificate;binary, labeledURI, Manager, Reports, IPPhone.

Чтобы сохранять всю необходимую информацию о человеке его запись должна иметь классы: top, person, organizationalPerson, inetOrgPerson, residentialPerson.

Outlook 2003
Схема подключения Outlook 2003 к OpenLDAP см прикрепленные файлы к статье.

FAQ

В) Как в адресной книге вывести всех клиентов у которых есть электронная почта
O) Ввести в поле поиска символ "@"

В) Какой порт использует LDAP сервер
О) Стандартный TCP порт LDAP сервера - 389. Для защиты соединения может использоваться TLS (SSL) (порт 636).

В) Я использую php-5.2.10 и у меня при заходе в ПО показывает ошибку

Declaration of AJAXTree::draw_dn() should be compatible with that of
PLMTree::draw_dn()

О) Вам необходимо в файле lib/AJAXTree.php найти и заменить $level=0 на $level в функции draw_dn().
Кусок кода:
draw_dn($dn,$level,$first_child=true,$last_child=true)

В) Какой почтовый клиент может записывать информацию в адресную книгу?
О) Единственный почтовый клиент который может писать в LDAP это Evolution.

ВложениеРазмер
Схема подключения Outlook 2003 к OpenLDAP.zip251.11 КБ
Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 3.7 (52 голоса)

SMART [smartmontools]

S.M.A.R.T. (англ. Self Monitoring Analysing and Reporting Technology) — технология оценки состояния жёсткого диска встроенной аппаратурой самодиагностики, а также механизм предсказания времени выхода его из строя.
Мне было необходимо контролировать работу 4х SATA дисков на одном из серверов с заблаговременным предупреждением о проблемах. Я воспользовался замечательной утилитой smartmontools.

Содержание:

  • Установка
  • Диагностика SMART
  • Атрибуты SMART
  • Конфигурационный файл
  • Syslog и запуск
  • Заключение
  • Ссылки

Установка

# pkg_info |grep smartmontools
smartmontools-5.38_7 S.M.A.R.T. disk monitoring tools
bsd# make search name=smartmontools
Port:   smartmontools-5.38_8
Path:   /usr/ports/sysutils/smartmontools
Info:   S.M.A.R.T. disk monitoring tools
Maint:  marck@FreeBSD.org
B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.13.1
R-deps:
WWW:    _http://smartmontools.sourceforge.net
 
# cd /usr/ports/sysutils/smartmontools;make install clean
~~~~
smartmontools has been installed
 
To check the status of drives, use the following:
 
        /usr/local/sbin/smartctl -a /dev/ad0            for first ATA drive
        /usr/local/sbin/smartctl -a /dev/da0            for first SCSI drive
 
To include drive health information in your daily status reports,
add a line like the following to /etc/periodic.conf:
        daily_status_smart_devices="/dev/ad0 /dev/da0"
substituting the appropriate device names for your SMART-capable disks.
 
To enable drive monitoring, you can use /usr/local/sbin/smartd.
A sample configuration file has been installed as
/usr/local/etc/smartd.conf.sample
Copy this file to /usr/local/etc/smartd.conf and edit appropriately
 
To have smartd start at boot
        echo 'smartd_enable="YES"' >> /etc/rc.conf
===> Installing rc.d startup script(s)
===>   Compressing manual pages for smartmontools-5.38_8
===>   Registering installation for smartmontools-5.38_8
===>  Cleaning for smartmontools-5.38_8

Диагностика SMART

Сначала вы убедитесь включен ли у вас SMART в BIOS и существует ли поддержка этой технологии у нужного жесткого диска. Возьмем для примера мой жеский диск ad4. У вас наименование может быть другим смотрите свой dmesg -a.

# atacontrol cap ad4
 
Protocol              SATA revision 2.x
device model          SAMSUNG HD120IJ
serial number         S0AEJ1OA103537
firmware revision     ZL100-33
cylinders             16383
heads                 16
sectors/track         63
lba supported         234441648 sectors
lba48 supported       234441648 sectors
dma supported
overlap not supported
 
Feature                      Support  Enable    Value           Vendor
write cache                    yes      yes
read ahead                     yes      yes
Native Command Queuing (NCQ)   yes       -      31/0x1F
Tagged Command Queuing (TCQ)   no       no      31/0x1F
SMART                          yes      yes
microcode download             yes      yes
security                       yes      no
power management               yes      yes
advanced power management      no       no      0/0x00
automatic acoustic management  yes      no      0/0x00  254/0xFE


Как мы видим SMART включен. Теперь проверим данные жеского диска этой утилитой.
# /usr/local/sbin/smartctl -a /dev/ad4
smartctl version 5.38 [i386-portbld-freebsd7.2] Copyright (C) 2002-8 Bruce Allen
Home page is _http://smartmontools.sourceforge.net/
 
=== START OF INFORMATION SECTION ===
Model Family:     SAMSUNG SpinPoint P80 SD series
Device Model:     SAMSUNG HD120IJ
Serial Number:    S0AEJ1OA103537
Firmware Version: ZL100-33
User Capacity:    120 034 123 776 bytes
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   7
ATA Standard is:  ATA/ATAPI-7 T13 1532D revision 4a
Local Time is:    Wed Oct 14 13:48:08 2009 MSD
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
 
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
 
General SMART Values:
Offline data collection status:  (0x82) Offline data collection activity
                                        was completed without error.
                                        Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
                                        without error or no self-test has ever
                                        been run.
Total time to complete Offline
data collection:                 (2729) seconds.
Offline data collection
capabilities:                    (0x5b) SMART execute Offline immediate.
                                        Auto Offline data collection on/off support.
                                        Suspend Offline collection upon new
                                        command.
                                        Offline surface scan supported.
                                        Self-test supported.
                                        No Conveyance Self-test supported.
                                        Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
                                        power-saving mode.
                                        Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
                                        General Purpose Logging supported.
Short self-test routine
recommended polling time:        (   1) minutes.
Extended self-test routine
recommended polling time:        (  45) minutes.
SCT capabilities:              (0x003f) SCT Status supported.
                                        SCT Feature Control supported.
                                        SCT Data Table supported.
 
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x000f   100   100   051    Pre-fail  Always       -       0
  3 Spin_Up_Time            0x0007   100   100   025    Pre-fail  Always       -       6080
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       197
  5 Reallocated_Sector_Ct   0x0033   253   253   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x000f   253   253   051    Pre-fail  Always       -       0
  8 Seek_Time_Performance   0x0025   253   253   015    Pre-fail  Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       24004
 10 Spin_Retry_Count        0x0033   253   253   051    Pre-fail  Always       -       0
 11 Calibration_Retry_Count 0x0012   253   002   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       177
190 Airflow_Temperature_Cel 0x0022   130   067   000    Old_age   Always       -       36
194 Temperature_Celsius     0x0022   130   067   000    Old_age   Always       -       36
195 Hardware_ECC_Recovered  0x001a   100   100   000    Old_age   Always       -       16044483
196 Reallocated_Event_Count 0x0032   253   253   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0012   253   253   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   253   253   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x003e   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x000a   100   100   000    Old_age   Always       -       0
201 Soft_Read_Error_Rate    0x000a   100   100   000    Old_age   Always       -       0
202 TA_Increase_Count       0x0032   253   253   000    Old_age   Always       -       0
 
SMART Error Log Version: 1
No Errors Logged
 
SMART Self-test log structure revision number 1
No self-tests have been logged.  [To run self-tests, use: smartctl -t]
 
 
SMART Selective Self-Test Log Data Structure Revision Number (0) should be 1
SMART Selective self-test log data structure revision number 0
Warning: ATA Specification requires selective self-test log data structure revision number = 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

Атрибуты SMART

Много информации, но вам необходимо внимательно изучить таблицу Vendor Specific SMART Attributes with Thresholds.
Для разбора, что к чему изучите вот этот документ:

  • Атрибуты SMART

Главным образом на работу жесткого диска влияют несколько важных параметров в которых вы должны сразу определять проблему.

  • Raw Read Error Rate - Частота появления ошибок при чтении данных с диска. Данный параметр показывает частоту появления ошибок при операциях чтения с поверхности диска по вине аппаратной части накопителя.
  • Reallocated Sectors Count - Количество переназначенных секторов. Когда жесткий диск встречает ошибку чтения/записи/верификации он пытается переместить данные из него в специальную резервную область (spare area) и, в случае успеха, помечает сектор как "переназначенный". Также, этот процесс называют remapping, а переназначенный сектор - remap. Благодаря этой возможности, на современных жестких дисках очень редко видны [при тестировании поверхности] так называемые bad block. Однако, при большом количестве ремапов, на графике чтения с поверхности будут заметны "провалы" - резкое падение скорости чтения (до 10% и более). Поле raw value содержит общее количество переназначенных секторов.
  • UltraDMA CRC Error Count - Число ошибок, возникающих при передаче данных по внешнему интерфейсу. (Менять шлейф)

Типы атрибутов:

  • Pre-failure (PF). Если атрибут имеет этот тип, то поле threshold атрибута содержит минимально допустимое значение атрибута, ниже которого не гарантируется работоспособность накопителя и резко увеличивается вероятность его выхода из строя.
  • On-line collection (OC). Указывает, что значение данного атрибута обновляется (вычисляется) во время выполнения on-line тестов S.M.A.R.T. или же во время обоих видов тестов (on-line/off-line). В противном случае, значение атрибута обновляется только при выполнении off-line тестов.
  • Performance related (PR). Указывает на то, что значение этого атрибута напрямую зависит от производительности накопителя по отдельным показателям (seek/throughput/etc. performance). Обычно обновляется после выполнения self-test`ов SMART.
  • Error rate (ER). Указывает на то, что значение атрибута отражает относительную частоту ошибок по данному параметру (raw read/write, seek, etc.).
  • Events count (EC). Указывает на то, что атрибут является счетчиком событий.
  • Self-preserve (SP). Указывает на то, что значение атрибута обновляется и сохраняется автоматически (обычно при каждом старте накопителя и при выполнении тестов SMART).

Конфигурационный файл

Приступим к созданию конфигурационного файла:

# cd /usr/local/etc/
# cp smartd.conf.sample smartd.conf
# cat smartd.conf
# cat smartd.conf
Пример файла конфигурации для smartd. См. man smartd.conf.
 
# Домашняя страница: _http://smartmontools.sourceforge.net
 
# $Id: smartd.conf,v 1.45 2006/11/12 23:39:04 dpgilbert Exp $
 
# smartd будет перечитывать конфигурационный файл, если он получает сигнал HUP 
# signal
 
# Файл предоставляет список устройств для мониторинга используемого smartd,
# с одним устройством в каждой строке. Текст после решетки (#) игнорируется,
# и вы можете использовать пробелы и табуляцию для свободного пространства.
# Вы можете использовать '\' для продолжения линии. 
 
# Вы можете определить, какие обычно жесткие дискови есть на компьютере,
# Заглянув в /proc/ide и /proc/scsi. (повеяло линусячиной =) )
 
# Переменная DEVICESCAN заставит игнорировать оставшиеся линий в этом
# конфигурационном файле: и укажет для smartd сканировать все
# ATA и SCSI устройств. DEVICESCAN может следовать любое из
# Для найденных устройств будут применены нижеперечисленные директивы.
# Для большинства пользователей рекомендуется закомментировать DEVICESCAN
# и четко вывести список устройств, которые вы хотели бы контролировать. 
#DEVICESCAN
 
# Альтернативные настройки для игнорирования температуры и включения числа
# часов, проведённых во включенном состоянии записываемых отчетов в syslog. 
#DEVICESCAN -I 194 -I 231 -I 9
 
# Альтернативные настройки отчетов с более полезным значений температуры 
# записываемого в syslog
#DEVICESCAN -R 194 -R 231 -I 9
 
# Альтернативные настройки для отчетов значения изменения
# температуры >= 5 по Цельсию и мин/макс температуры. 
#DEVICESCAN -I 194 -I 231 -I 9 -W 5
 
# Первый (primary) ATA/IDE жесткий диск. Следить за всеми атрибутами, позволяющие
# автоматически онлайново собирать данные, автоматическое автосохранение
# атрибутов, и запуском короткой самодиагностики каждый день с 2-3 утра
# , и полный тест в субботам с 3-4 утра. 
#/dev/hda -a -o on -S on -s (S/../.././02|L/../../6/03)
 
# Мониторинг SMART статуса, ATA журнала ошибок, Self-Test
# (короткой самодиагностики) журнала, а также отслеживать
# изменения всех атрибутов, за исключением атрибута 194 
#/dev/hdb -H -l error -l selftest -t -I 194
 
# Мониторинг всех атрибутов, кроме нормированной температуры (обычно 194),
# но отслеживать изменения температуры >= 4 по Цельсию, отчет температуры
# >= 45 по Цельсию, а изменения в Raw значения Reallocated_Sector_Ct (5).
# И отправлять письмо об отказах SMART или при температуре >= 55 по Цельсию. 
#/dev/hdc -a -I 194 -W 4,45,55 -R 5 -m admin@example.com
 
# Диск ATA может выглядеть как устройства SCSI в операционной системе.
# Если к SCSI ATA перевода (SAT) слой между ОС и устройство, а затем
# Это может быть помечено "-d sat 'опцией. Эта ситуация может
# стать общей с дисками SATA в SAS и FC среды. 
# /dev/sda -a -d sat
 
# Тихий тест. Рапортует лишь в случае, если SMART выдает
# ошибку. И шлёт рапорт на почту.
#/dev/hdc -H -C 0 -U 0 -m admin@example.com
 
# Первых два SCSI диска. Это будет следить за всем, что может smartd
# проверить. Начать расширенный тест по средам с 6-7 вечера и
# воскресенье 1-2.
#/dev/sda -d scsi -s L/../../3/18
#/dev/sdb -d scsi -s L/../../7/01
 
# Мониторинг 4х ATA дисков, подключенных к контроллеру 3Ware 6/7/8000 которая
# использует 3W-XXXX драйвер. Начало длинного теста по воскресеньям с 1-2,
#  2-3, 3-4 и 4-5 часов утра.
#/dev/sdc -d 3ware,0 -a -s L/../../7/01
#/dev/sdc -d 3ware,1 -a -s L/../../7/02
#/dev/sdc -d 3ware,2 -a -s L/../../7/03
#/dev/sdc -d 3ware,3 -a -s L/../../7/04
 
# Мониторинг 4х ATA дисков, подключенных к контроллеру 3Ware 9000, который
# использует 3W-9xxx драйвера (Linux, FreeBSD)
# Начало длинного теста по вторникам с 1-2 и 3-4 утра. 
#/dev/twa0 -d 3ware,0 -a -s L/../../2/01
#/dev/twa0 -d 3ware,1 -a -s L/../../2/03
 
# То же самое для Windows. Опция "-d 3ware,N 'не является необходимым,
# Диск (порт) номер, указанный в имени устройства.
# ПРИМЕЧАНИЕ: В Windows DEVICESCAN работает также для контроллеров 3Ware. 
#/dev/hdc,0 -a -s L/../../2/01
#/dev/hdc,1 -a -s L/../../2/03
 
# Мониторинг 3 ATA диски напрямую связано с HighPoint RocketRAID.
# Начало долгого теста по воскресеньям с 1-2, 2-3 и 3-4 утра. 
#/dev/sdd -d hpt,1/1 -a -s L/../../7/01
#/dev/sdd -d hpt,1/2 -a -s L/../../7/02
#/dev/sdd -d hpt,1/3 -a -s L/../../7/03
 
# Мониторинг 2х ATA дисках, подключенных к той же PMPort которые связаны с
# HighPoint RocketRAID. Начало большого теста по вторникам между 1-2 и 3-4 м. 
#/dev/sdd -d hpt,1/4/1 -a -s L/../../2/01
#/dev/sdd -d hpt,1/4/2 -a -s L/../../2/03
 
# Добавляем свои диски
/dev/ad0 -a -m admin@ampul.local -o on -S on -s (S/../.././22|L/../../6/23)
/dev/ad1 -a -m admin@ampul.local -o on -S on -s (S/../.././22|L/../../6/23)
 
# Вот список директив в этом файле конфигурации.
# См. smartd.conf и man для деталей 
#
#   -d TYPE Тип устройства: ata, scsi, marvell, removable, 3ware,N, hpt,L/M/N
#   -T TYPE допустимое отклонение: normal, permissive
#   -o VAL  Включает/выключает автоматические оффлайн тесты (on/off)
#   -S VAL  Включает/выключает автосохранение атрибутов (on/off)
#   -n MODE Не проверять. Один из режимов: never, sleep, standby, idle
#   -H      Мониторить SMART статус, уведомлять только при ошибках.
#   -l TYPE Мониторить SMART логи. Режимы: error, selftest
#   -f      Монитор отказа для любых атрибутов 'Usage'
#   -m ADD  Письмо с варнингами на ADD для -H, -l error, -l selftest, and -f
#   -M TYPE Изменение поведения отсыла е-майлов (см. ман)
#   -s REGE Запустить тест когда дата совпадает с регулярным выражением (см. ман)
#   -p      Сообщать о изменениях в 'Prefailure' атрибутах
#   -u      ообщать о изменениях в 'Usage' атрибутах
#   -t      Эквивалентно -p и -u директивам
#   -r ID   Также сообщать 'RAW' значения атрибутов ID с -p, -u или -t
#   -R ID   Следить за изменениями в атрибуте ID 'Raw' значения -p, -u or -t
#   -i ID   Игнорировать атрибут ID для -f директивы
#   -I ID   Игнорировать атрибут ID для -p, -u или -t директивы
#   -C ID   Рапортовать если счётчик `ждущих` секторов не равен нулю
#   -U ID   Рапортовать если счётчик `некорректируемых` секторов не равен нулю
#   -W D,I,C Monitor Temperature D)ifference, I)nformal limit, C)ritical limit
#   -v N,ST Mодифицировать метку для атрибута N (для нестандартных атрибутов)
#   -a      Дефолт: эквивалентно -H -f -t -l error -l selftest -C 197 -U 198
#   -F TYPE Для ошибок в прошивке. Значения: none, samsung
#   -P TYPE Предустановки для диска: use, ignore, show, showall
#    #      Комментарии: текст после него игнорируется
#    \      Продолжения строки
# Идентификатор атрибута является десятичное целое число 1 <= ID <= 255
# за исключением -C и -U, где ID = 0 выключает их.
# Все биты -d, -m и -M директивы реализуются только для устройств ATA.

Syslog и запуск

Настроим syslog:

# cat /etc/syslog.conf |grep smart
!smartd
*.*                                             /var/log/smartd.log

Создадим лог файл:

# touch /var/log/smartd.log

Перезапустим syslog:

# killall -1 syslogd

Запустим smartmontools:

# /usr/local/etc/rc.d/smartd start
Starting smartd.

Проверим работу:

# ps -ax | grep smart
  664  ??  I      0:00,02 /usr/local/sbin/smartd -p /var/run/smartd.pid --interval=400
 3790  ??  I      0:00,01 smartd
 9597  p0  S+     0:00,00 grep smart

Включим запуск демона при запуски системы и включением проверки с частотой опроса через 400 секунд:

# echo 'smartd_enable="YES"' >> /etc/rc.conf
# echo 'smartd_flags="--interval=400"' >> /etc/rc.conf

Посмотрим лог файл:

# tail -10 /var/log/smartd.log
Oct 14 14:21:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 130 to 124
Oct 14 14:26:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130
Oct 14 14:26:35 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130
Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130
Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130
Oct 14 14:30:54 bsd smartd[3790]: Device: /dev/ad6, SMART Usage Attribute: 194 Temperature_Celsius changed from 107 to 108
Oct 14 14:56:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 130 to 124
Oct 14 14:56:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 130 to 124
Oct 14 15:01:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 190 Airflow_Temperature_Cel changed from 124 to 130
Oct 14 15:01:34 bsd smartd[664]: Device: /dev/ad4, SMART Usage Attribute: 194 Temperature_Celsius changed from 124 to 130

Заключение

Ну вот и все. Теперь жеские диски контролируются. И самое главное поменьше вам писем от smartmontools ;).

Ссылки

  • Технология SMART
  • S.M.A.R.T. Self-Monitoring, Analysis and Reporting Technology

Дополнительные материалы
Ссылки: 
Ветка форума
Ваша оценка: Нет Средняя: 4.7 (3 голоса)

Sarg - парсер логов Squid

Сегодня будем разбирать логи Squid и присваивать тариф "Имеемый" человеку стоящему на первом месте в статусе "Загружено мегабайт".

Установка банальна и тривиальна.

# make search name=sarg
Port:   sarg-2.2.7.1_2
Path:   /usr/ports/www/sarg
Info:   Squid log analyzer and HTML report generator
Maint:  garga@FreeBSD.org
B-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1
R-deps: expat-2.0.1_1 fontconfig-2.8.0,1 freetype2-2.4.2 gd-2.0.35_7,1
WWW:    _http://sarg.sourceforge.net/
 
# cd /usr/ports/www/sarg
# make config
 
Options for sarg 2.2.7.1_2
[X] GD  Enable GD support
 
# make install clean

Настроим по вкусу Sarg я укажу свои настройки вы можете поэкспериментировать:

# cd /usr/local/etc/sarg/
# cp sarg.conf.default sarg.conf
# cat sarg.conf
 
# Укажем нужный язык 
language Russian_koi8
 
# Указываем путь до логов Squid
access_log /var/log/squid/access.log
 
# Включаем построение графиков
graphs yes
graph_days_bytes_bar_color orange
 
title "Squid User Access Reports"
font_face Tahoma,Verdana,Arial
header_color darkblue
header_bgcolor blanchedalmond
font_size 12px
header_font_size 12px
title_font_size 14px
text_bgcolor lavender
logo_text_color #000000
image_size 80 45
 
temporary_dir /tmp
 
# Куда складывать отчеты.
output_dir /usr/local/www/sarg/
 
# Преобразовывать IP в имя по DNS. При большом парке машин 
# или проблема с DNS рекомендую отключать эту опцию.
resolve_ip yes
 
# Сортировка юзеров в выводе по USER CONNECT BYTES TIME
topuser_sort_field BYTES reverse
user_sort_field BYTES reverse
 
date_format e
remove_temp_files yes
index yes
overwrite_report yes
topsites_num 100
index_sort_order D
max_elapsed 28800000
 
# Разнообразные типы отчетов, включим все.
report_type topusers topsites sites_users users_sites
date_time denied auth_failures site_user_time_date downloads
 
date_time_by elap
charset Koi8-r
 
show_sarg_info no
 
download_suffix "zip,arj,bzip,gz,ace,doc,iso,adt,bin,cab,com,dot,drv$,lha,lzh,md
b,mso,ppt,rtf,src,shs,sys,exe,dll,mp3,avi,mpg,mpeg"

Добавляем задачу в Cron каждую пятницу в 23.00 парсим логи и каждый месяц прибираем Squid

# SARG
0       23      *       *       5       /usr/local/bin/sarg > /dev/null 2>&1
 
# Moved Old Squid Log
0       0       1       *       *       /root/scripts/squid_log_moved  > /dev/null 2>&1

В Cron можно и так записывать >>форум<<

Скрипт очисти логов Squid:

# cat /scripts/squid_log_moved
 
#!/bin/sh
#
current_year=`date '+%Y'`
current_month=`date '+%m'`
current_date=`date '+%d'`
## Создаем директорию для логов
log_dir="/var/squid/old_logs/${current_year}/${current_month}"
mkdir -p ${log_dir} 2>/dev/null
 
## Очищаем логи SQUID
cat /var/squid/logs/access.log > /tmp/log.tmp
cat /dev/null > /var/squid/logs/access.log
gzip -c /tmp/log.tmp  > ${log_dir}/squid.log.gz
#gzip -c ${log_dir}/squid.log  > ${log_dir}/squid.log.gz
#rm -R /usr/local/www/sarg/*

В вашей директории технического сайта сделайте символическую ссылку.

% cd /home/serv/www/data
# ln -s /usr/local/www/sarg/ sarg
# ll
total 4
lrwxr-xr-x  1 root  serv    20B  5 авг 11:32 glpi -> /usr/local/www/glpi/
lrwxr-xr-x  1 root  serv    26B  5 авг 11:17 phpMyAdmin -> /usr/local/www/phpMyAdmin/
-rw-r--r--  1 serv  serv    21B  5 авг 10:51 phpinfo.php
lrwxr-xr-x  1 root  serv    27B  5 авг 12:23 phpldapadmin -> /usr/local/www/phpldapadmin
lrwxr-xr-x  1 root  serv    20B 17 авг 13:16 sarg -> /usr/local/www/sarg/
drwxr-xr-x  3 serv  serv   512B 12 авг 13:19 sqstat

Анализируем логи, заходим на технический сайт и смотрим:

# sarg
SARG: Records in file: 8717, reading: 100.00%
SARG: Отчет успешно сгенерирован в: /usr/local/www/sarg//01Feb2011-01Feb2011

Общая история:

Кто тут интернет активный? 192.168.0.56 самый работящий!

Офис должен работать и заниматься делом! Вот как тут и надо бы выписать ему премию. =)

Дополнительные материалы
Ссылки: 
Ветка форума
Ваша оценка: Нет Средняя: 5 (2 голоса)

SqStat - мониторим активные соединения proxy сервера Squid

Появилась необходимость иногда смотреть, кто в данный момент сидит в интернете через Squid и на каких сайтах. Для этого нашел следующее ПО.

SqStat - это PHP скрипт, позволяющий просматривать из web браузера активные соединения proxy сервера Squid. Для получения данных используется протокол cachemgr.

Устанавливаем:

Скачиваем и распаковываем SqStat в любую директорию хоста, где Apache может запусть этот скрипт.

# fetch _http://samm.kiev.ua/sqstat/sqstat-1.20.tar.gz
sqstat-1.20.tar.gz                            100% of   10 kB  161 kBps
# tar zxvf sqstat-1.20.tar.gz
x sqstat-1.20
x sqstat-1.20/docs
x sqstat-1.20/config.inc.php.defaults
x sqstat-1.20/sqstat.class.php
x sqstat-1.20/sqstat.php
x sqstat-1.20/sqstat.css
x sqstat-1.20/zhabascript.js
x sqstat-1.20/arrow.gif
x sqstat-1.20/docs/FAQ
x sqstat-1.20/docs/TODO
x sqstat-1.20/docs/README
x sqstat-1.20/docs/LICENSE
x sqstat-1.20/docs/CHANGES
# rm sqstat-1.20.tar.gz
# mv sqstat-1.20/ sqstat

Копируем конфигурационный файл:

# cd sqstat/
# cp config.inc.php.defaults config.inc.php
# vi config.inc.php

Редактируем конфигурационный файл:

Смотрим что внутри конфигурационного файла и при необходимости меняем значения:

<?php
/* Глобальные настройки */
 
$use_js=true; // Использование JavaScript для инструментов HTML
 
// Максимальная длина URL для отображения в колонке таблицы URI
DEFINE("SQSTAT_SHOWLEN",60);
 
 
/* Параметры прокси-сервера */
 
/* Прокси-сервер Squid IP-адрес или имя хоста */
$squidhost[0]="127.0.0.1";
/* Порт Squid прокси-сервера */
$squidport[0]=3128;
/* сachemgr_passwd в squid.conf. Оставьте пустым, чтобы отключить разрешение */
$cachemgr_passwd[0]="";
/* Преобразовывать IP адреса пользователей или показывать только номера [true|false] */
$resolveip[0]=false;
/* Раскомментируйте следующую строку, если вы хотите использовать хосты, как файл.
   See hosts.txt.dist. */
// $hosts_file[0]="hosts.txt"
/* Группа пользователей с именем хоста - "host" или пользователя - "username".
Имя пользователя работать только с squid 2.6 + */
 
$group_by[0]="host";
 
/* Вы можете указать более одного прокси-сервера в файле конфигурации, например: */
// $squidhost[1]="192.168.0.2";
// $squidport[1]=3129;
// $cachemgr_passwd[1]="secret";
// $resolveip[1]=true;
// $hosts_file[1]="otherhosts.txt"
 
?>

Дополнительно:

Создадим символическую ссылку для того чтобы Apache автоматически запускал скрипт при вхождении в директорию SqStat.
# ln -s sqstat.php index.php

Дополнительные материалы
Ссылки: 
SqStat
Ваша оценка: Нет Средняя: 3.3 (8 голосов)

ssmtp - отправляем логи на почту

Потребовалась отправка логов на нужный е-майл. Раскуривал штатный Sendmail, но выходило довольно монструозно (+ мне нужно было менять заголовки отправителя). Ставить Exim для этой мелочи тоже не хотелось. Посему остановился на утилите ssmtp. Она элементарна и проста в эксплуатации.

Установка

# cd /usr/ports/
# make search name=ssmtp
Port:   ssmtp-2.62.3
Path:   /usr/ports/mail/ssmtp
Info:   Extremely simple MTA to get mail off the system to a mail hub
Maint:  aragon@phat.za.net
B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.13.1_1
R-deps:
WWW:    _http://packages.debian.org/stable/mail/ssmtp
 
# cd /usr/ports/mail/ssmtp; make install clean
~~
===> SECURITY REPORT:
      This port has installed the following binaries which execute with
      increased privileges.
/usr/local/sbin/ssmtp
 
      If there are vulnerabilities in these programs there may be a security
      risk to the system. FreeBSD makes no guarantee about the security of
      ports included in the Ports Collection. Please type 'make deinstall'
      to deinstall the port if this is a concern.
 
      For more information, and contact details about the security
      status of this software, see the following webpage:
_http://packages.debian.org/stable/mail/ssmtp
===>  Cleaning for gmake-3.81_3
===>  Cleaning for ssmtp-2.62.3

Создадим и настроим конфигурационные файлы:

# cd /usr/local/etc/ssmtp/
# ll
total 4
-rw-r-----  1 root  ssmtp   200 Apr 22 11:53 revaliases.sample
-rw-r-----  1 root  ssmtp  1286 Apr 22 11:53 ssmtp.conf.sample
# cp ssmtp.conf.sample ssmtp.conf
# cp revaliases.sample revaliases

Настроим ssmtp.conf

Переведем основной конфигурационный файл:

# cat ssmtp.conf
 
# /etc/ssmtp.conf -- конфигурационный файл для sSMTP sendmail.
#
# Пользователь, который получает всю почту для userids < 1000
# Сделайте пустым для отключения перезаписи. Или укажите пользователя.
# А также вы можете указать нужный е-майл на который будет
# приходить почта для root.
root=postmaster
 
# Место, где идет почта. Настоящее имя машины не требуются
# MX записи. Обычно mailhosts является именем mail.domain.com
# Например если вы находитесь в domain.com ваш mailhub с таким же именем.
mailhub=mail
 
# Пример для SMTP портом 2525
# mailhub=mail.your.domain:2525
# Пример для SMTP портом 25 (Standard/RFC)
# mailhub=mail.your.domain
# Пример для SSL шифрованного соединения
# mailhub=mail.your.domain:465
 
# От кого якобы должна приходить почта?
rewriteDomain=
 
# Полное имя машины
hostname=_HOSTNAME_
 
# Установите это чтобы никогда не переписывать "From:" (если не указано) и
# использовать этот адрес в "from line" оболочки.
#FromLineOverride=YES
 
# Использовать SSL/TLS, чтобы отправить безопасные сообщения на сервер.
#UseTLS=YES
 
# Использовать SSL/TLS сертификат для аутентификации на SMTP-хосте.
#UseTLSCert=YES
 
# Используйте этот сертификат RSA.
#TLSCert=/usr/local/etc/ssmtp/ssmtp.pem
 
# Получить расширенное (* действительно * расширенную) отладочную информацию в логах
# Если вы хотите иметь отладке в конфигурационных отпарсенных файлах, переместите этот
# параметр в начало файла конфигурации и раскомментируйте
#Debug=YES

Мой тестовый конфигурационный файл:

# grep -v '^#' ssmtp.conf |grep -v ^\$
root=Raven2000@lissyara.su
mailhub=mail.ignix.ru
hostname=raven.local

Настроим revaliases

Revaliases нужен для создания псевдонимов (например как файл /etc/mail/aliases для sendmail). Переведем конфигурационный файл:

# cat revaliases
 
# sSMTP псевдонимы
#
# Формат: local_account:outgoing_address:mailhub
#
# Пример: root:your_login@your.domain:mailhub.your.domain[:port]
# где [:port] – это дополнительный номер порта, который по умолчанию 25.

Настроим соответствующим образом:

# grep -v '^#' revaliases |grep -v ^\$
root:root@raven.local:mail.ignix.ru

Система

Остановите Sendmail и приведите конфигурационные файлы к этому виду:

# cat /etc/rc.conf |grep sendmail
sendmail_enable="NONE"
 
# grep -v ^# /etc/mail/mailer.conf |grep -v ^\$
sendmail        /usr/local/sbin/ssmtp
send-mail       /usr/local/sbin/ssmtp
mailq           /usr/local/sbin/ssmtp
newaliases      /usr/local/sbin/ssmtp
hoststat        /usr/local/sbin/ssmtp
purgestat       /usr/local/sbin/ssmtp

Тестируем

Отправим письмо руту:

# mail root
Subject: test ssmtp
test ssmtp
.
EOT

Готово. Если письмо пришло то вас можно поздравить.

Проблемы

А если не пришло то это проблема =).
Для начала нам нужно обнаружить проблемное место. Для этого в конфигурационном файле ssmtp.conf Добавляем в самое начало конфига строчку:

Debug=YES

Далее необходимо смотреть как и куда отправляются письма. Для этого необходимо видеть логи почтового сервера в реальном времени (для удобства). И пробуем отправить письмо заодно смотря логи.
# tail -f /var/log/maillog
Apr 23 11:38:43 bsd sSMTP[72138]: Sent mail for root@raven.local (221 Bye) uid=0
username=root outbytes=296
Apr 23 11:38:51 bsd sSMTP[72143]: Set Root="Raven2000@lissyara.su"
Apr 23 11:38:51 bsd sSMTP[72143]: Set MailHub="mail.ignix.ru"
Apr 23 11:38:51 bsd sSMTP[72143]: Set RemotePort="25"
Apr 23 11:38:51 bsd sSMTP[72143]: Set HostName="raven.local"
Apr 23 11:38:51 bsd sSMTP[72143]: Set MailHub="mail.ignix.ru"
Apr 23 11:38:51 bsd sSMTP[72143]: via SMTP Port Number="25"
Apr 23 11:38:51 bsd sSMTP[72143]: 220 MailServer 2005
Apr 23 11:38:51 bsd sSMTP[72143]: HELO raven.local
Apr 23 11:38:52 bsd sSMTP[72143]: 250 ignix.ru
Apr 23 11:38:52 bsd sSMTP[72143]: MAIL FROM:<root@raven.local>
Apr 23 11:38:52 bsd sSMTP[72143]: 250 Ok
Apr 23 11:38:52 bsd sSMTP[72143]: RCPT TO:<Raven2000@lissyara.su>
Apr 23 11:38:52 bsd sSMTP[72143]: 250 Ok
Apr 23 11:38:52 bsd sSMTP[72143]: DATA
Apr 23 11:38:52 bsd sSMTP[72143]: 354 End data with <CR><LF>.<CR><LF>
Apr 23 11:38:52 bsd sSMTP[72143]: Received: by raven.local (sSMTP sendmail emulation);
Fri, 23 Apr 2010 11:38:51 +0400
Apr 23 11:38:52 bsd sSMTP[72143]: From: "Charlie &" <root@raven.local>
Apr 23 11:38:52 bsd sSMTP[72143]: Date: Fri, 23 Apr 2010 11:38:51 +0400
Apr 23 11:38:52 bsd sSMTP[72143]: To: Raven2000@lissyara.su
Apr 23 11:38:52 bsd sSMTP[72143]: Subject: test ssmtp2
Apr 23 11:38:52 bsd sSMTP[72143]:
Apr 23 11:38:52 bsd sSMTP[72143]: test ssmtp2
Apr 23 11:38:53 bsd sSMTP[72143]: .
Apr 23 11:38:53 bsd sSMTP[72143]: 250 Ok: queued as 50A392BC12D
Apr 23 11:38:53 bsd sSMTP[72143]: QUIT
Apr 23 11:38:53 bsd sSMTP[72143]: 221 Bye
Apr 23 11:38:53 bsd sSMTP[72143]: Sent mail for root@raven.local (221 Bye) uid=0
username=root outbytes=331

Как видим все в порядке это можно проследить по записям. У вас же могут быть несоответствия в работе которые вы заметите и устраните.

Ваша оценка: Нет Средняя: 4.8 (19 голосов)

vnstat - мониторинг сетевого трафика

VNSTAT служит для подсчёта трафика проходящего через сетевой интерфейс, и отображает статистику загрузки в разные периоды времени.

Содержание:

  • Установка
  • Настройка
  • Веб интерфейс
  • FAQ

Установка

Установим vmstat из портов:

cd /usr/ports/net/vnstat && make install clean

Полное разъяснение установки находится в "/usr/local/share/doc/vnstat/INSTALL_BSD"

Создадим конфигурационный файл:

cp /usr/local/etc/vnstat.conf.sample /usr/local/etc/vnstat.conf

Настройка

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

cat /usr/local/etc/vnstat.conf|grep Interface
Interface "rl0" #интерфейс

Cоздадим каталог для базы данных vnstat:

mkdir -p /var/db/vnstat && chmod +x /var/db/vnstat/

Сron

Добавим задание в cron чтобы наш vnstat обновлял информацию о трафике:

crontab -l | grep vnstat
*/5     *       *       *       *       /usr/local/bin/vnstat -u

Тестирование

Проверим как работает сбор информации. Введем сетевой интерфейс в работу:

vnstat -D -u -i rl0

Отобразим статистику:
vnstat
 
Database updated: Mon Sep 27 10:35:00 2010
 
   rl0 since 09/27/10
 
          rx:  1.75 MiB      tx:  294 KiB      total:  2.04 MiB
 
   monthly
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
       Sep '10      1.75 MiB |     294 KiB |    2.04 MiB |    0.01 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        --     |      --     |      --     |
 
   daily
                     rx      |     tx      |    total    |   avg. rate
     ------------------------+-------------+-------------+---------------
         today      1.75 MiB |     294 KiB |    2.04 MiB |    0.44 kbit/s
     ------------------------+-------------+-------------+---------------
     estimated        --     |      --     |      --     |

Веб интерфейс

Для того чтобы можно было смотреть статистику через веб интерфейс нужно установить vnstat PHP frontend.

Apache

Сконфигурируем Apache. Добавим Alias в файл конфигурации веб сервера:

vi /usr/local/etc/apache22/httpd.conf

в раздел добавьте:
    Alias /vnstat "/usr/local/www/vnstat/"
    <Directory "/usr/local/www/vnstat">
        Options Indexes FollowSymlinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

Vnstat PHP frontend

создаём каталог для vnstat PHP frontend

cd /usr/local/www/ ; mkdir -p /usr/local/www/vnstat

скачиваем и распаковываем vnstat PHP frontend
wget -c http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz

или
fetch http://www.sqweek.com/sqweek/files/vnstat_php_frontend-1.5.1.tar.gz

tar xzf vnstat_php_frontend-1.5.1.tar.gz

надо переместить файлы в наш каталог /vnstat
mv ./vnstat_php_frontend-1.5.1/* ./vnstat

приводим config.php к такому виду
cat ./config.php | grep -v "//"

<?php
    error_reporting(E_ALL | E_NOTICE);
 
    $locale = 'ru_RU.UTF-8';
    $language = 'ru';
 
    $iface_list = array('rl0');
 
    $iface_title['rl0'] = 'Internet';
 
    $vnstat_bin = '/usr/local/bin/vnstat';
    $data_dir = './dumps';
 
    $graph_format='svg';
 
    define('GRAPH_FONT',dirname(__FILE__).'/VeraBd.ttf');
 
    define('SVG_FONT', 'Verdana');
 
    define('DEFAULT_COLORSCHEME', 'light');
 
?>

Русификация PHP frontend

Качаем русский язык для vnstat PHP frontend и распаковываем:

cd /usr/local/www/vnstat/lang/
wget -c <a href="http://www.ignix.ru/system/files/ru.php_.tar.gz<br />
tar" title="http://www.ignix.ru/system/files/ru.php_.tar.gz<br />
tar">http://www.ignix.ru/system/files/ru.php_.tar.gz<br />
tar</a> xzf ./ru.php_.tar.gz

Готово, можно удалить архив если он мешает =)

По поводу русификации: переводил по смыслу, если что не так, говорите, подправлю.

FAQ

В: У меня ошибка в веб интерфейсе связанное с временной зоной.
О: У меня оказывается не было файла php.ini или если в нём не указана временная зона то надо сделать файл настройки php путём копирования дефолтного файла под другим именем.

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini 

добавляем свою временную зону
cat /usr/local/etc/php.ini | grep Kiev
date.timezone = Europe/Kiev

перезапустим apache
/usr/local/etc/rc.d/apache22 restart

Для того чтобы посмотреть статистику необходимо будет в строке браузера ввести
"http://<адрес сервера где установлен apache>/vnstat/"

по моему всё =)

Скриншоты:
Сводка.

По часам.

ВложениеРазмер
ru.php_.tar.gz624 байта
Дополнительные материалы
Ссылки: 
>>ВЕТКА ФОРУМА<<
Ваша оценка: Нет Средняя: 4.8 (5 голосов)

Простой вариант NAT+PF

Для организации NAT с помощью PF нам понадобится следующее:

Включить pf (packet filter)

vi /etc/rc.conf

gateway_enable="YES"		#Разрешает серверу быть шлюзом 
pf_enable="YES"			#Запуск pf 
pflog_enable="YES"		#не обязательно, возможность писать логи pf
pf_rules="/etc/pf.conf"		#Пуьт к правилам pf
pf_program="/sbin/pfctl"	#Путь к программе управления pf
pf_flags=""			#Необходимо для pfctl
defaultrouter="192.168.1.254"   #Шлюз провайдера

Можно и пересобрать ядро, с поддержкой pf
дабы pf не ругался на отсутствие ALTQ (ограничивать пропускную способность канала) или для его использования
No ALTQ support in kernel 
ALTQ related functions disabled 

добовляем в ядро и ALTQ
cp /usr/src/sys/i386/conf/GENERIC /usr/src/sys/i386/conf/ROUTER-PF
vi /usr/src/sys/i386/conf/ROUTER-PF

# pf
device		pf
device		pflog
device		pfsync
options		ALTQ
options		ALTQ_CBQ	# Class Bases Queuing (CBQ)
options		ALTQ_RED	# Random Early Detection (RED)
options		ALTQ_RIO	# RED In/Out
options		ALTQ_HFSC	# Hierarchical Packet Scheduler (HFSC)
options		ALTQ_PRIQ	# Priority Queuing (PRIQ)
options		ALTQ_NOPCC	# Required for SMP build

после установки ядра надо подредактировать правила pf
vi /etc/pf.conf

ext_if="rl1"		 	#Внешний интерфейс (смотрит к провайдеру WAN)
int_if="rl0" 			#Внутренний интерфейс (смотрит в нашу сеть LAN)
 
set skip on lo0 #пропускаем проверку на петле
scrub in all #собираем все части пакета перед отправкой
nat on $ext_if from $int_if:network to any -> ($ext_if)
 
block all #запретим все отовсюду
pass in on $int_if from any to any #разрешаем всё из локальной сети 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

Готово!

Осталось прочитать правила pf

pfctl -f /etc/pf.conf

pfctl -e #включить pf
pfctl -d #выключить pf

можно натить по ip адресам.
Для этого надо немного поредоктировать pf.conf
vi /etc/pf.conf

ext_if="rl1"		 	#Внешний интерфейс (смотрит к провайдеру WAN)
int_if="rl0" 			#Внутренний интерфейс (смотрит в нашу сеть LAN)
 
table <pf-allow-pc> file "/etc/pf-allow-pc"
set skip on lo0 #пропускаем проверку на петле
scrub in all #собираем все части пакета перед отправкой
nat on $ext_if from <pf-allow-pc> to any -> ($ext_if)
 
block all #запретим все отовсюду
pass in on $int_if from any to any #разрешаем всё из локальной сети 
pass out on $ext_if from $ext_if to any #разрешаем серверу доступ в интернет 
pass in on $ext_if proto tcp from any to $ext_if port ssh #разрешаем ssh
pass in inet proto icmp all icmp-type echoreq #разрешаем ping 

и добавить ip адреса(в строке должен быть один адрес) тех кому разрешено ходить в интернет
vi /etc/pf-allow-pc

192.168.0.2
192.168.0.3
192.168.0.5

P.S. ВАЖНО!

В случае если на сервере не запущен named то на клиентских компьютерах надо в поле DNS указать пограничный DNS сервер, или настраивать named самим

Для того, чтобы настроить named самим, надо сделать следующее:

vi /etc/rc.conf

named_enable="YES"

Затем надо указать в named.conf наш шлюз, для этого:

Надо найти строки listen-on и forwarders и добавьте адрес внутреннего интерфейса
vi /etc/namedb/named.conf

listen-on { 127.0.0.1; 192.168.1.1;};
forwarders { 127.0.0.1; 192.168.1.1;};

Ссылки:

  • О unix системах
  • Учебник FreeBSD, OpenBSD, NetBSD, DragonFly BSD
  • Настройка своего сервера имён
  • ALTQ
Ваша оценка: Нет Средняя: 5 (3 голоса)

Источник (получено 16/06/2025 - 00:55): http://www.ignix.ru/book/freebsd/daemon