FreeBSD — настройка bacula с SSL шифрованием трафика

Сначала чуть данных из wiki
Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее управлять резервным копированием, восстановлением, и проверкой данных по сети для компьютеров и операционных систем различных типов.
Итак, это то что мне нужно! Более подробно рассмотрим из чего состоит bacula, это даст больше понимания о том как она работает.
Director (DIR) — осуществляет централизованный контроль и администрирование всего комплекса задач. Планирование и управление заданиями на резервное копирование (Job). Обслуживание Каталога (Catalog) — центральной БД для хранения метаданных.
File Daemon (FD) — сервис, выполняющий непосредственное копирование, восстановление и проверку данных по запросу Director. File Daemon должен быть установлен на каждой клиентской машине. File Daemon обменивается информацией с Director и Storage Daemon.
Storage Daemon (SD) — читает и пишет данные на физический носитель: диск, ленту, DVD, USB.
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 в реальном времени.

Вот как выглядит работа настроенной системы:
Bacula applications

Что такого уникального я опишу в данной статье? Зачем она вообще нужна? Такие вопросы лезли мне в голову когда я брался это писать.
Хочу написать, в первую очередь для себя! Дело в том что данную систему я настраивал уже 3 раза и каждый раз рассчитывал на то что «нагуглю» рецепт и спокойненько настрою, тем более что в голове уже есть понимание что к чему. Но каждый раз было одно и тоже — все рецепты в сети оказывались для меня непригодны по разным причинам.
Сразу скажу, эта заметка не подходит для тех кто будет настраивать систему первый раз не имея понимания «что это и как его едят». Делаю для себя чтоб в следующий раз заюзать по принципу «Ctrl + C, Ctrl + V» потом минимально подправил и «поехали». Тут нету разжеванных опций и подробных описаний, за этим либо в google либо на официальный сайт в документацию.

Чего мы хотим?
Я хочу не так много — бекапить сервера через сеть Интернет с шифрованием трафика. Просто звучит, но чтоб настроить придется поработать 🙂

Что нужно подготовить перед тем как взяться за настройку? Многое … пойдем по порядку.
1. Определим кто есть кто! Сразу оговорюсь что все сервера у меня под FreeBSD. Но для Linux статья вполне сойдет, только обратите внимание на пути к директориям/файлам. Также отмечу, что у меня 2 физических сервера, поэтому на одном будет DIR + SD, а второй будет FD (его будем бэкапить). В дальнейшем данное решение абсолютно просто масштабируется. Я опишу это в конце заметки.

dir1.domain.ua — директор, тут же будет расположен каталог (БД mysql)
sd1.domain.ua — сторадж, тут будут храниться бэкапы в виде файлов (pools) на HDD
fd1.domain.ua — клиент, это та машина которую мы будем бэкапить

Эти имена должны правильно резолвиться на любой из данных ПК. Это можно реализовать либо создав соответствующие записи в DNS в виде host A либо просто прописать в /etc/hosts

Например на каждой машине прописать в /etc/hosts

111.111.111.111 dir1.domain.ua sd1.domain.ua
111.111.222.222 fd1.domain.ua

Проверить с помощью ping связь между собой для каждого хоста.

2. Определиться какие части системы на каких хостах (серверах) будут установлены. У меня будет так:
111.111.111.111 — директор (DIR) + БД MySQL (Catalog) + сторадж демон (SD) + консоль управления (Console)
111.111.222.222 — клиент (FD)

3. Настроить фаервол. Если он есть то необходимо открыть порты на вход/выход для хостов:
Console -> DIR:9101
DIR -> SD:9103
DIR -> FD:9102
FD -> SD:9103

4. На директоре установить и настроить MySQL. Я писал об этом ранее, вполне подойдет и для этой задачи.

5. Сгенерить необходимые SSL сертификаты. Этот процесс я также описывал ранее.
Важно! В процессе генерации не забываем прописывать корректно параметр Common Name (eg, YOUR name) Прописывать туда нужно FQDN сервера для которого данный сертификат генерится. Например в процессе генерации запроса на сертификат для сервера fd1.domain.ua параметр Common Name будет fd1.domain.ua Это очень важно!

6. Скопировать сертификаты на хосты. Создаем директорию /usr/local/etc/bacula-ssl и копируем (rsync, scp) туда сертификаты таким образом:
DIR, SD — ca.crt, dir1.crt, dir1.key, sd1.crt, sd1.key
FD — ca.crt, fd1.crt, fd1.key

7. Установить порты (напомню что я настраиваю на FreeBSD):
dir1.domain.ua (он же sd1.domain.ua) — bacula-server с опциями MYSQL, NLS, OPENSSL
fd1.domain.ua — bacula-client с опциями NLS, OPENSSL
И добавить в rc.conf опции для автозагрузки
На сервере dir1.domain.ua

# <= Bacula => #
bacula_dir_enable="YES"
bacula_sd_enable="YES"

На сервере fd1.domain.ua

# <= Bacula => #
bacula_fd_enable="YES"

8. На сервере dir1.domain.ua настроить в MySQL базу данных для bacula. Для этого есть готовые скрипты, которые нужно выполнить от рута:

root@dir1# /usr/local/share/bacula/grant_mysql_privileges
root@dir1# /usr/local/share/bacula/create_mysql_database
Creation of bacula database succeeded.
root@dir1# /usr/local/share/bacula/make_mysql_tables
Creation of Bacula MySQL tables succeeded.
root@dir1#

9. Создать на сервере хранения директорию для бэкапов и дать права :

root@dir1# mkdir -p /home/bacula/pools

И дать права бакуле туда писать/читать:

root@dir1# chown bacula:bacula /home/bacula

10. Ну и собственно сами конфиги, начнем с простого — файл-сервер (FD), это у нас хост fd1.domain.ua
Ранее мы на этом серваке установили bacula-client и настроили его автозапуск.
Также напомню что на сервере уже должны быть сертификаты, у меня они расположены в /usr/local/etc/bacula-ssl:

root@fd1:~# ls -l /usr/local/etc/bacula-ssl/
total 16
-rw-r--r--  1 root  bacula  1655 23 окт 15:38 ca.crt
-rw-r--r--  1 root  bacula  4632 23 окт 15:43 fd1.crt
-rw-r--r--  1 root  bacula  1679 23 окт 15:42 fd1.key
root@fd1:~#

Теперь настроим конфиг:

root@fd1:~# cat /usr/local/etc/bacula/bacula-fd.conf |egrep -v '^#|^$'
Director {
  Name = dir1
  Password = "fd1_5XLGGiNNxLfjMxCcfgLM"
  TLS Enable = yes
  TLS Require = yes
  TLS Certificate = /usr/local/etc/bacula-ssl/fd1.crt
  TLS Key = /usr/local/etc/bacula-ssl/fd1.key
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
  TLS Verify Peer = yes
  TLS Allowed CN = "fd1.domain.ua"
  TLS Allowed CN = "sd1.domain.ua"
  TLS Allowed CN = "dir1.domain.ua"
}
FileDaemon {
  Name = fd1
  FDport = 9102
  WorkingDirectory = /var/db/bacula
  Pid Directory = /var/run
  Maximum Concurrent Jobs = 20
  FDAddress = fd1.domain.ua
  Heartbeat Interval = 30 sec
  TLS Enable = yes
  TLS Require = yes
  TLS Certificate = /usr/local/etc/bacula-ssl/fd1.crt
  TLS Key = /usr/local/etc/bacula-ssl/fd1.key
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
}
Messages {
  Name = Standard
  director = dir1 = all, !skipped, !restored
}
root@fd1:~#

Ну вот, первая ласточка пошла 🙂 УРА! Перегрузите сервис (или запустите) стандартными средствами:

root@fd1:~# service bacula-fd restart

Настройку FD можно считать завершенной! Идем дальше …

11. Дальше чуть сложнее но тоже осилим! Настройка сервера хранения бэкапов (SD) — это у нас хост sd1.domain.ua Напомню что у меня DIR и SD на одном сервере, если у вас на разных, предварительно нужно на SD-сервер скопировать необходимые сертификаты ca.crt, sd1.crt и ключ sd1.key

root@dir1:~# cat /usr/local/etc/bacula/bacula-sd.conf |egrep -v '^#|^$'
Storage {
  Name = sd1
  SDPort = 9103
  WorkingDirectory = "/var/db/bacula"
  Pid Directory = "/var/run"
  Maximum Concurrent Jobs = 20
  SDAddress = sd1.domain.ua
  Heartbeat Interval = 30 sec
  TLS Enable = yes
  TLS Require = yes
  TLS Verify Peer = no
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
  TLS Key = /usr/local/etc/bacula-ssl/sd1.key
  TLS Certificate = /usr/local/etc/bacula-ssl/sd1.crt
}
Director {
  Name = dir1
  Password = "sd1_ho6a&teSuA@CC2HnEEgu"
  TLS Enable = yes
  TLS Require = yes
  TLS Verify Peer = yes
  TLS Allowed CN = "fd1.domain.ua"
  TLS Allowed CN = "dir1.domain.ua"
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
  TLS Key = /usr/local/etc/bacula-ssl/sd1.key
  TLS Certificate = /usr/local/etc/bacula-ssl/sd1.crt
}
Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /home/bacula/pools
  LabelMedia = yes;
  Random Access = Yes;
  AutomaticMount = yes;
  RemovableMedia = no;
  AlwaysOpen = no;
}
Messages {
  Name = Standard
  director = dir1 = all
}
root@dir1:~#

Перегрузите сервис (или запустите) стандартными средствами:

root@dir1:~# service bacula-sd restart

Настройку SD можно считать завершенной! Идем дальше …

12. Настроим директор (DIR) — это основная часть системы. Тут будет много всяких параметров, углубляться не буду, для этого есть официальные доки. Вот что у меня:

root@dir1:~# cat /usr/local/etc/bacula/bacula-dir.conf |egrep -v '^#|^$'
Director {
  Name = dir1
  DIRport = 9101
  QueryFile = "/usr/local/share/bacula/query.sql"
  WorkingDirectory = "/var/db/bacula"
  PidDirectory = "/var/run"
  Maximum Concurrent Jobs = 1
  Password = "dir1_Ag@6Uzp8tHUW6PuRumc"
  Messages = Daemon
  DirAddress = dir1.domain.ua
  Heartbeat Interval = 30 sec
  TLS Enable = yes
  TLS Require = yes
  TLS Certificate = /usr/local/etc/bacula-ssl/dir1.crt
  TLS Key = /usr/local/etc/bacula-ssl/dir1.key
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
  TLS Verify Peer = yes
  TLS Allowed CN = "fd1.domain.ua"
  TLS Allowed CN = "sd1.domain.ua"
  TLS Allowed CN = "dir1.domain.ua"
}
Job {
  Name = "RestoreFiles"
  Type = Restore
  Client=fd1                
  FileSet="Full Set"                  
  Storage = sd1                      
  Pool = Default
  Messages = Standard
  Where = /tmp/bacula-restores
}
FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
    }
    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
}
Schedule {
  Name = "WeeklyCycleAfterBackup"
  Run = Full sun-sat at 23:10
}
FileSet {
  Name = "Catalog"
  Include {
    Options {
      signature = MD5
    }
    File = "/var/db/bacula/bacula.sql"
  }
}
Storage {
  Name = sd1
  Address = sd1.domain.ua                # Use ONLY a FQDN here
  SDPort = 9103
  Password = "sd1_ho6a&teSuA@CC2HnEEgu"
  Device = FileStorage
  Media Type = File
  TLS Enable = yes
  TLS Require = yes
  TLS Certificate = /usr/local/etc/bacula-ssl/fd1.crt
  TLS Key = /usr/local/etc/bacula-ssl/fd1.key
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
}
Catalog {
  Name = MyCatalog
  dbname = "BACULA_DB"; DB Address = "127.0.0.1"; dbuser = "BACULA_USER"; dbpassword = "bacula_db_password"
}
Messages {
  Name = Standard
  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 = admin@domain.ua = all, !skipped            
  operator = admin@domain.ua = mount
  console = all, !skipped, !saved
  append = "/var/log/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 = admin@domain.ua = all, !skipped            
  console = all, !skipped, !saved
  append = "/var/log/bacula.log" = all, !skipped
}
Pool {
  Name = Default
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
}
Pool {
  Name = File
  Pool Type = Backup
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 90 days          # 90 days
  Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
  Maximum Volumes = 100               # Limit number of Volumes in Pool
}
Pool {
  Name = Scratch
  Pool Type = Backup
}
Console {
  Name = mon
  Password = "console_"
  CommandACL = status, .status
}
@/usr/local/etc/bacula-fd1.conf
root@dir1:~#

Что такого необычного мы видим в этом конфиге? Да ничего особенного, все просто «как двери». В конце данного конфига включен дополнительный файл настроек, в котором прописаны уникальные настройки для fd1.

13. И наконец конфиг бэкапа для fd1, тот что /usr/local/etc/bacula-fd1.conf

root@dir1:~# cat /usr/local/etc/bacula-fd1.conf |egrep -v '^#|^$'
Job {
    Name = "www-backup"
    Type = Backup
    Level = Full
    Client = fd1
    FileSet = "www Set"
    Schedule = "WeeklyCycle_www"
    Messages = Standard
    Pool = www-pool
    Full Backup Pool = www-pool-FULL
    Differential Backup Pool = www-pool-DIFF
    Incremental Backup Pool = www-pool-INCR
    Write Bootstrap = "/var/db/bacula/www-fd1.bsr"
    Priority = 3
}
FileSet {
  Name = "www Set"
  Include {
    Options {
      signature = MD5
      compression = GZIP
      recurse = yes
      xattrsupport = yes
    }
    File = /etc
    File = /usr/local/etc
    File = /home/backup
    File = /root
    File = /usr/local/www
    File = /usr/home/user1/htdocs
    File = /usr/home/user2/htdocs
    File = /usr/home/user3/htdocs
  }
  Exclude {
    File = /usr/local/www/apache22/data/somedomain.org.ua/drupal/sites/default/files
  }
}
Schedule {
  Name = "WeeklyCycle_www"
  Run = Level=Full 1st sun at 4:05
  Run = Level=Differential 2nd-5th sun at 4:02
  Run = Level=Incremental mon-sat at 4:07
}
Client {
  Name = fd1
  Address = fd1.domain.ua
  FDPort = 9102
  Catalog = MyCatalog
  Password = "fd1_5XLGGiNNxLfjMxCcfgLM"
  File Retention = 45 days
  Job Retention = 6 months
  AutoPrune = yes
  TLS Enable = yes
  TLS Require = yes
  TLS Certificate = /usr/local/etc/bacula-ssl/fd1.crt
  TLS Key = /usr/local/etc/bacula-ssl/fd1.key
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
}
Pool {
  Name = www-pool
  Pool Type = Backup
  Recycle = yes                     # Bacula can automatically recycle Volumes
  AutoPrune = yes                   # Prune expired volumes
  Volume Retention = 65 days        # 65 days
  Recycle Oldest Volume = yes
  Maximum Volume Bytes = 4400m      # Limit Volume size to something reasonable
  Maximum Volumes = 7               # Limit number of Volumes in Pool
  Label Format = "www_pool-vol"
  Storage = sd1
}
Pool {
  Name = www-pool-FULL
  Pool Type = Backup
  Recycle = yes                     # Bacula can automatically recycle Volumes
  AutoPrune = yes                   # Prune expired volumes
  Volume Retention = 60 days        # 60 days
  Recycle Oldest Volume = yes
  Maximum Volume Bytes = 4400m      # Limit Volume size to something reasonable
  Maximum Volumes = 7               # Limit number of Volumes in Pool
  Label Format = "www_pool-FULL-vol"
  Storage = sd1
}
Pool {
  Name = www-pool-DIFF
  Pool Type = Backup
  Recycle = yes                     # Bacula can automatically recycle Volumes
  AutoPrune = yes                   # Prune expired volumes
  Volume Retention = 60 days        # 60 days
  Recycle Oldest Volume = yes
  Maximum Volume Bytes = 4400m      # Limit Volume size to something reasonable
  Maximum Volumes = 7               # Limit number of Volumes in Pool
  Label Format = "www_pool-DIFF-vol"
  Storage = sd1
}
Pool {
  Name = www-pool-INCR
  Pool Type = Backup
  Recycle = yes                     # Bacula can automatically recycle Volumes
  AutoPrune = yes                   # Prune expired volumes
  Volume Retention = 60 days        # 60 days
  Recycle Oldest Volume = yes
  Maximum Volume Bytes = 4400m      # Limit Volume size to something reasonable
  Maximum Volumes = 7               # Limit number of Volumes in Pool
  Label Format = "www_pool-INCR-vol"
  Storage = sd1
}
root@dir1:~#

Как видим, тут описано само задание на бэкап (Job), также описан FileSet — собственно те файлы/папки которые хотим бэкапить, время/день недели когда делаются бэкапы Shedule, а также пулы. Все относительно просто, для детального описания каждой опции смотрите официальную документацию.

Перегрузите сервис (или запустите) стандартными средствами:

root@dir1:~# service bacula-dir restart

Настройку DIR можно считать завершенной! Идем дальше …

14. Настроим консоль. Консоль я буду пользовать на сервере там же где и директор (dir1). Для настройки рихтуем конфиг:

root@dir1:~# cat /usr/local/etc/bacula/bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#

Director {
  Name = dir1
  DIRport = 9101
  address = dir1.domain.ua
  Password = "dir1_Ag@6Uzp8tHUW6PuRumc"

  TLS Enable = yes
  TLS Require = yes
  TLS Certificate = /usr/local/etc/bacula-ssl/dir1.crt
  TLS Key = /usr/local/etc/bacula-ssl/dir1.key
  TLS CA Certificate File = /usr/local/etc/bacula-ssl/ca.crt
}
root@dir1:~#

Настройку консоли можно считать завершенной.

15. Тестируем! Для этого на сервере dir1.domain.ua запускаем в root-овой консоли bconsole:

root@dir1:~# bconsole
Connecting to Director dir1.domain.ua:9101
1000 OK: dir1 Version: 5.2.12 (12 September 2012)
Enter a period to cancel a command.
*

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

*status all
dir1 Version: 5.2.12 (12 September 2012) i386-portbld-freebsd9.0 freebsd 9.0-RELEASE-p3
Daemon started 23-Mar-14 20:36. Jobs: run=4, running=0 mode=0,0
 Heap: heap=0 smbytes=80,026 max_bytes=113,890 bufs=296 max_bufs=327

Scheduled Jobs:
Level          Type     Pri  Scheduled          Name               Volume
===================================================================================
Incremental    Backup     3  28-Mar-14 04:07    www-backup         Vol_1
====

Running Jobs:
Console connected at 27-Mar-14 11:16
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
   379  Incr        101    6.737 M  OK       18-Mar-14 04:07 www-backup
   380  Incr         27    6.536 M  OK       19-Mar-14 04:07 www-backup
   381  Incr      1,634    18.16 M  OK       20-Mar-14 04:07 www-backup
   382  Incr         18    6.401 M  OK       21-Mar-14 04:07 www-backup
   383  Incr         17    6.402 M  OK       22-Mar-14 04:07 www-backup
   384  Diff         42    18.34 M  Error    23-Mar-14 04:02 www-backup
   385  Incr         27    12.79 M  OK       24-Mar-14 04:07 www-backup
   386  Incr      1,413    15.02 M  OK       25-Mar-14 04:07 www-backup
   387  Incr         22    6.412 M  OK       26-Mar-14 04:07 www-backup
   388  Incr         29    6.863 M  OK       27-Mar-14 04:07 www-backup

====
Connecting to Storage daemon sd1 at sd1.domain.ua:9103

sd1 Version: 5.2.12 (12 September 2012) i386-portbld-freebsd9.0 freebsd 9.0-RELEASE-p3
Daemon started 23-Mar-14 20:36. Jobs: run=4, running=0.
 Heap: heap=0 smbytes=90,823 max_bytes=224,190 bufs=93 max_bufs=113
 Sizes: boffset_t=8 size_t=4 int32_t=4 int64_t=8 mode=0,0

Running Jobs:
No Jobs running.
====

Jobs waiting to reserve a drive:
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
===================================================================
   379  Incr        101    6.755 M  OK       18-Mar-14 04:07 www-backup
   380  Incr         27    6.540 M  OK       19-Mar-14 04:07 www-backup
   381  Incr      1,634    18.39 M  OK       20-Mar-14 04:07 www-backup
   382  Incr         18    6.403 M  OK       21-Mar-14 04:07 www-backup
   383  Incr         17    6.405 M  OK       22-Mar-14 04:07 www-backup
   384  Diff         42    18.14 M  Error    23-Mar-14 04:02 www-backup
   385  Incr         27    12.80 M  OK       24-Mar-14 04:07 www-backup
   386  Incr      1,413    15.22 M  OK       25-Mar-14 04:07 www-backup
   387  Incr         22    6.416 M  OK       26-Mar-14 04:07 www-backup
   388  Incr         29    6.867 M  OK       27-Mar-14 04:07 www-backup
====

Device status:
Device "FileStorage" (/home/bacula/pools) is not open.
====

Used Volume status:
====

====

Connecting to Client fd1 at fd1.domain.ua:9102

fd1 Version: 5.2.12 (12 September 2012)  amd64-portbld-freebsd9.0 freebsd 9.0-RELEASE-p3
Daemon started 20-Mar-14 12:11. Jobs: run=7 running=0.
 Heap: heap=0 smbytes=23,861 max_bytes=372,763 bufs=73 max_bufs=215
 Sizeof: boffset_t=8 size_t=8 debug=0 trace=0
Running Jobs:
Director connected at: 27-Mar-14 11:16
No Jobs running.
====

Terminated Jobs:
 JobId  Level    Files      Bytes   Status   Finished        Name
======================================================================
   379  Incr        101    6.737 M  OK       18-Mar-14 04:07 www-backup
   380  Incr         27    6.536 M  OK       19-Mar-14 04:07 www-backup
   381  Incr      1,634    18.16 M  OK       20-Mar-14 04:07 www-backup
   382  Incr         18    6.401 M  OK       21-Mar-14 04:07 www-backup
   383  Incr         17    6.402 M  OK       22-Mar-14 04:07 www-backup
   384  Diff         42    18.34 M  Error    23-Mar-14 04:02 www-backup
   385  Incr         27    12.79 M  OK       24-Mar-14 04:07 www-backup
   386  Incr      1,413    15.02 M  OK       25-Mar-14 04:07 www-backup
   387  Incr         22    6.412 M  OK       26-Mar-14 04:07 www-backup
   388  Incr         29    6.863 M  OK       27-Mar-14 04:07 www-backup
====

*

Можно ради интереса запустить бэкап прямо сейчас, не дожидаясь ночного автозапуска (учтите нагрузку на сервер! Если у вас боевой сервер — лучше это делать в момент наименьшей нагрузки … вечером/ночью/рано утром):

*run job=www-backup

И через пару минут опять проверить статус, задание должно быть либо в процессе либо выполнено.

16. И пара слов про восстановление. В случай необходимости восстановить файлы идем в консоль и делаем следующее:

*restore

После чего выбрать те Job в которых находится необходимый вам файл. В случае как у меня, когда делается full бэкап раз в месяц, а каждый день либо diff либо incremental — нужно выбирать все Job-ы от full и до последнего Incremental-а. Дальше все просто, следуйте указаниям мастера восстановления.

Что делать если хотим добавить еще один FD в эту систему?
Да все проще простого:
— на новом сервере fd2 установить bacula-client и настроить также как описано выше для fd1
— на сервере dir1 копируем файлик настроек FD /usr/local/etc/bacula-fd1.conf в какойнить /usr/local/etc/bacula-fd2.conf
— генерим для fd2.domain.ua сертификат и ключ
— прописываем FileSet в новом конфиге и меняем пароль/сертификаты. По желанию можно по-другому назвать пулы или перестроить время бэкапа
Вот собственно, и все. 5 минут работы и сервак добавлен в систему. Просто? Ато!
Так же просто «перенести» SD на другую железку. Или подключить второй SD, для того чтобы разные FD бэкапить на разные SD. Система очень гибко настраивается — это дополнительный плюс.

P.S. Получилось не очень стройно, както сумбурно и не особо детально. Но статья рассчитана скорее на человека который уже имеет понимание и просто хочет «по быстрому подкинуть конфиги» и с минимальными правками стартонуть систему, а не на тех кто совсем с нуля осваивается. Можно конечно и с нуля разобраться, но придется изрядно поглядеть в официальные доки.

Debian Wheezy (7.4) — mpt-statusd: detected non-optimal RAID status

На ESX виртуалке с Debian 7 задолбали сообщеия в /var/log/messages

Mar 25 12:28:00 deb1 mpt-statusd: detected non-optimal RAID status
Mar 25 12:38:00 deb1 mpt-statusd: detected non-optimal RAID status
Mar 25 12:48:00 deb1 mpt-statusd: detected non-optimal RAID status
Mar 25 12:58:01 deb1 mpt-statusd: detected non-optimal RAID status

Какой RAID? Какой статус? Бреееееед!
Застопить проще простого:

root@deb1:~# service mpt-statusd stop
Stopping mpt-status monitor: mpt-statusd.
root@deb1:~#

И убрать с автозагрузки:

root@deb1:~# update-rc.d mpt-statusd remove
update-rc.d: using dependency based boot sequencing
root@deb1:~#

Всього найкращого!

Mysql server на FreeBSD

Очень часто в различных проэктах используется БД mysql. Я хочу показать как я инсталлирую ее на примере своего домашнего сервера под FreeBSD 9.2
Установку я делал из портов:

root@gw:~# cd /usr/ports/databases/mysql56-server
root@gw:~# make install clean

Автозапуск при старте системы нужно прописать в rc.conf

root@gw:~# echo 'mysql_enable="YES"' >> /etc/rc.conf

Основной конфигурационный файл mysql-server в FreeBSD находится тут /var/db/mysql/my.cnf
Я сгенерил свой конфиг с помощью online конфигуратора от percona (ссылка есть в шапке конфига). В конфигураторе вводил что у меня 2GB RAM и честный сервер (не виртуалка). А также указал что это будет Slave-сервер, поэтому ID = 11. Вот что получилось в итоге:

# Generated by Percona Wizard (http://tools.percona.com/)
# Configuration name home generated for admin@somedomain.net.ua

[mysql]

# CLIENT #
port                           = 3306
socket                         = /tmp/mysql.sock

[mysqld]

# GENERAL #
user                           = mysql
default-storage-engine         = InnoDB
socket                         = /tmp/mysql.sock
pid-file                       = /var/db/mysql/mysql.pid

# MyISAM #
key-buffer-size                = 32M
myisam-recover                 = FORCE,BACKUP

# SAFETY #
max-allowed-packet             = 16M
max-connect-errors             = 1000000

# DATA STORAGE #
datadir                        = /var/db/mysql/

# BINARY LOGGING #
log-bin                        = /var/db/mysql/mysql-bin
binlog_format                  = mixed
expire-logs-days               = 7
sync-binlog                    = 1

# REPLICATION #
server-id                      = 11
log-slave-updates              = 1
relay-log                      = /var/db/mysql/relay-bin
slave-net-timeout              = 60
sync-master-info               = 1
sync-relay-log                 = 1
sync-relay-log-info            = 1

# CACHES AND LIMITS #
tmp-table-size                 = 32M
max-heap-table-size            = 32M
query-cache-type               = 0
query-cache-size               = 0
max-connections                = 500
thread-cache-size              = 50
open-files-limit               = 65535
table-definition-cache         = 1024
table-open-cache               = 2048

# INNODB #
innodb-flush-method            = O_DIRECT
innodb-log-files-in-group      = 2
innodb-log-file-size           = 128M
innodb-flush-log-at-trx-commit = 1
innodb-file-per-table          = 1
innodb-buffer-pool-size        = 1024M

# LOGGING #
log-error                      = /var/db/mysql/mysql-error.log
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = /var/db/mysql/mysql-slow.log

Итак, конфиг есть — запускаем mysql-server так:

root@gw:~# service mysql-server start

Убедиться что он работает можно по логам — /var/db/mysql/mysql-error.log или командой:

root@gw:~# sockstat |grep mysql
mysql    mysqld     74112 16 tcp4 6 *:3306                *:*
mysql    mysqld     74112 18 stream /tmp/mysql.sock
root@gw:~#

FreeBSD 9.x — обновление perl5.12 или perl5.14 до 5.16 … 5.18

Увидел при очередном обновлении портов что версия Perl5.14 уже считается старой и рекомендацию обновиться.
Как любой порядочный фряшник, полез читать что пишут по этому поводу в /usr/ports/UPDATING и вот что нашел:

20131120:
  AFFECTS: users of lang/perl5.12 lang/perl5.14 lang/perl5.16 and lang/perl5.18
  AUTHOR: mat@FreeBSD.org

  The THREADS option has been enabled by default in all Perl. If you're using
  binary packages you need to do :

    # pkg install -Rf perl5

  If you'
re not using binary packages, and want to switch from non threaded
  Perl to threaded Perl, you need to recompile and reinstall most ports
  depending on Perl. Supposing you have Perl 5.16, you would do:

  Portupgrade users:
    0) Fix pkgdb.db (for safety):
        pkgdb -Ff

    1) Change the option in lang/perl5.16:
        make -C /usr/ports/lang/perl5.16 config

    2) Reinstall everything that depends on Perl:
        portupgrade -fr lang/perl5.16

  Portmaster users:
    1) Change the option in lang/perl5.16:
        make -C /usr/ports/lang/perl5.16 config

    2) Reinstall everything that depends on Perl:
        portmaster -r perl5-

  Note: The installed Perl package was named perl and is now named perl5, if
        you have not updated your installation in a long time, you may need to
        use "perl-" here.

Но проделав все пункты для portupgrade ничего в результате не обновилось, вообще ничего толкового не произошло. Версия Perl осталась прежней — 5.14. Читать полностью

Puppetmaster на Debian — или как быть если я один, а их много?

Случайно узнал о весьма интересной системе управления конфигурациями которая называется puppet. Решил попробовать что это такое и насколько оно полезно в администрировании большого парка ПК с ОС Linux на борту. Скажу сразу, что система интересна, и понравится в первую очередь тем кто считает парк обслуживаемых машин слишком большим. Или тем кто просто любит все автоматизировать и не любит выполнять однотипную работу по много раз. Я отношусь и к первым и ко вторым, поэтому и решил попробовать … глядите что получилось!
Итак, для эксперимента я взял две машины. Одну из них сделал сервером (puppetmaster), а вторую — клиентом (puppet). Машины назвал соответственно:
server — сервер
client — клиент.
Машины работают в сети 192.168.0.0/24
Как настроить puppetmaster читайте далее … Читать полностью

apache-itk-mpm и виртуальный хостинг

Итак, рано или поздно возникает задача в духе: «А как бы нам организовать хостинг нескольких клиентов с их сайтами так чтобы они не имели друг к другу доступа и не было проблем с доступом к файлам через web/ftp/ssh?». Тут уже обычный стандартный apache не справляется и нужно городить некую более сложную конфигурацию. К счастью, задача эта не уникальна и поэтому давным давно есть готовые решения. Одним из них есть модификация apache2 под названием apache-itk-mpm. Он позволяет запускать от имени определенного в конфигах системного пользователя некий виртуалхост апача. Тоесть получаем чтото в духе некоего изолированного контейнера для нужного пользователя или ряда оных. Туманно объяснил, но по конфигам это более понятно. Итак, поехали! Читать полностью

12.12.2012 — А что ты делал в этот день?

Ковырялся на винте в поисках мусора для удаления, сильно уж винчестер засрал. Случайно нашелся скриншот датированный 12.12.12 — я удаленно через IPMI устанавливаю FreeBSD. Клево, даже время 12:12 🙂

12-12-2012 12:12

А что вы делали в этот день? Читать полностью

BMW E21 — Руководство по ремонту

Нашел на просторах интернета пару мануалов по BMW E21 в формате pdf, спешу поделиться.
Собственно мануал по ремонту и обслуживанию автомобиля BMW 3-й серии E21 на русском языке (формат PDF, размер 43MB):
BMW E21 - Service Manual [RU]

Еще мануал на французском (спасибо Danil за определение языка). Называется BMW E21 Revue Technicue Automobile 1982 (формат PDF, размер 24MB):
BMW E21 RTA 1982

Мануал по общему ТО, на английском языке (формат PDF, размер 12MB). Оригинальное название «Maintenance and general hints»:
BMW E21 - Maintenance and General Hints

И еще случайно нашелся мануал на ремонт/обслуживание автоматической коробки передач ZF 3HP22 (формат PDF, размер 23MB). Оригинальное название «Transmission — automatic»:
BMW E21 - ZF 3HP22 Transmission Service Manual

Каталог по запчастям к кондиционеру Behr на английском языке (формат PDF, размер 12.6MB). Оригинальное название «Replacement Parts List for Behr Air Conditioner»:
BEHR AIR Conditioner for BMW E21

Надеюсь комуто пригодится.
Удачи!

«Вирус BMW» — накатила новая волна

Чтото накатило новой волной BMW зависимости. При том ни 30-ка ни 36-я уже както не прут, а поперло на более старую версию — Е21. Для тех кто не очень ориентируется — вот фотка:
BMW E21 white

Ну гляньте, разве не милашка?

BMW E21 Stanced

Ну и пара видяшек под катом 🙂 Читать полностью

The BAT! — работаем с «Invalid SSL Certificate»

Проблемы с получением почты если The BAT!-у «не нравится» SSL сертификат. Проблема в том что почту он перестает получать/отправлять совсем, ничего не спрашивая у пользователя. От такой секюрный клиент … аж гордость пропирает, блин 🙂 Притом что всякие там Kmail, Thunderbird и даже говно Outlook просто спрашивают «Хотите ли вы работать с данным сервером» и при получении положительного ответа, прекрасно работают.

Вобщем гуглил долго, но решение таки нагуглилось. Хоть и костыльное, но все же лучше чем ничего. Итак, что нужно сделать чтобы заставить The BAT получить почту с сервера c некорректным сертификатом:
1. Закрыть The BAT
2. Найти виндовым поиском файлик RootCA.ABD (см. Рис.1)
3. Переименовать его напрмер в _RootCA.ABD
4. Открыть The Bat, он ругнется на отсутствие CA сертификата и предложит его скачать и сохранить, надо нажать OK (Не «Сохранить в доверенные»!! а именно OK), так будет спрашивать каждый раз при проверке почты, но всеже можно работать. (см. Рис.2)

Рис. 1

The BAT - If SSL Error

Рис. 2

The BAT - If SSL Error

Вывод прост, бегите от этого недоклиента как от прокаженого, хоть и неприятно это говорить — даже Outlook повменяемее оказался.

Enjoy!