Howto setup Bacula



Contents

  • 1 Installation
    • 1.1 Bacula
      • 1.1.1 Package
      • 1.1.2 Configuration
        • 1.1.2.1 Server
          • 1.1.2.1.1 bacula-dir
          • 1.1.2.1.2 bacula-sd
          • 1.1.2.1.3 bacula-fd
          • 1.1.2.1.4 bconsole.conf
          • 1.1.2.1.5 read-client.conf
        • 1.1.2.2 Client
          • 1.1.2.2.1 bacula-fd.conf
      • 1.1.3 Test Run
    • 1.2 Webacula
  • 2 Firewall

Installation

Bacula

Package

Download bacula package
bacula-bat-5.0.3-2.x86_64.rpm
bacula-client-5.0.3-1.x86_64.rpm
bacula-docs-5.0.3-1.noarch.rpm
bacula-libs-5.0.3-1.x86_64.rpm
bacula-mtx-5.0.3-1.x86_64.rpm
bacula-mysql-5.0.3-1.x86_64.rpm
bacula-updatedb-5.0.3-1.x86_64.rpm
Install all package using yum
yum localinstall --nogpgcheck bacula-*.rpm 

Configuration

You should config Bacula at Server and Client

Server

At server side, we need configure several files, include one file we need to create,
bacula-dir
In bacula-dir we should define Director, Jobs, File Sets need to backup, client, storage and console.
Director
Director {                     # define myself
 Name = bacula.server-dir      # will be read at bconsole.conf ( Director ),bacula-fd.conf (Director) and bacula-sd.conf (Director)
 DIRport = 9101                # where we listen for UA connections
 QueryFile = "/usr/lib64/bacula/query.sql"
 WorkingDirectory = "/var/lib/bacula"
 PidDirectory = "/var/run"
 Maximum Concurrent Jobs = 1
 Password = "director-pass"    # bconsole.conf will using this password
 Messages = Daemon
}
Jobs Definition and Job
JobDefs {
 Name = "DefaultJob"
 Type = Backup
 Level = Incremental
 Client = package.asik.com-fd
 FileSet = "Full Set"
 Schedule = "WeeklyCycle"
 Storage = package-storage
 Messages = Standard
 Pool = Default
 Priority = 10
}
#
# Define the main nightly save backup job
#   By default, this job will back up to disk in /tmp
Job {
 Name = "BackupClient1"
 JobDefs = "DefaultJob"
 Write Bootstrap = "/var/lib/bacula/Client1.bsr"
}
Another Job Backup example
# Backup the catalog database (after the nightly save)
Job {
 Name = "BackupCatalog"
 JobDefs = "DefaultJob"
 Level = Full
 FileSet="Catalog"
 Schedule = "WeeklyCycleAfterBackup"
 # This creates an ASCII copy of the catalog
 # WARNING!!! Passing the password via the command line is insecure.
 # see comments in make_catalog_backup for details.
 # Arguments to make_catalog_backup are:
 #  make_catalog_backup <database-name> <user-name> <password> <host>
 RunBeforeJob = "/usr/lib64/bacula/make_catalog_backup bacula bacula"
 # This deletes the copy of the catalog
 RunAfterJob  = "/usr/lib64/bacula/delete_catalog_backup"
 Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr"
 Priority = 11                   # run after main backup
}
#
# Standard Restore template, to be changed by Console program
#  Only one such job is needed for all Jobs/Clients/Storage ...
#
Job {
 Name = "RestoreFiles"
 Type = Restore
 Client=package.asik.com-fd
 FileSet="Full Set"
 Storage = package-storage
 Pool = Default
 Messages = Standard
 Where = /tmp/bacula-restores
}
File Set, you can define which file need to be backup
# List of files to be backed up
FileSet {
 Name = "Full Set"
 Include {
   Options {
     signature = MD5
   }
#    
#  Put your list of files here, preceded by 'File =', one per line
#    or include an external list with:
#
#    File = <file-name
#
#  Note: / backs up everything on the root partition.
#    if you have other partitions such as /usr or /home
#    you will probably want to add them too.
#
#  By default this is defined to point to the Bacula binary
#    directory to give a reasonable FileSet to backup to
#    disk storage during initial testing.
#
   File = /usr/sbin
 }
#
# If you backup the root directory, the following two excluded
#   files can be useful
#
 Exclude {
   File = /var/lib/bacula
   File = /tmp
   File = /proc
   File = /tmp
   File = /.journal
   File = /.fsck
 }
}
Client
# Client (File Services) to backup
Client {
 Name = package.asik.com-fd
 Address = localhost
 FDPort = 9102
 Catalog = MyCatalog
 Password = "package-pass"           # password for FileDaemon
 File Retention = 30 days            # 30 days
 Job Retention = 6 months            # six months
 AutoPrune = yes                     # Prune expired Jobs/Files
}
Storage
# Definition of file storage device
Storage {
 Name = package-storage
# Do not use "localhost" here    
 Address = localhost                 # N.B. Use a fully qualified name here
 SDPort = 9103
 Password = "storage-pass" # Will be used at bacula-sd.conf as (Director) password
 Device = FileStorage                #will be read at bacula-sd.conf
 Media Type = File                   #will be read at bacula-sd.conf
}
Catalog
# Generic catalog service
Catalog {
 Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport =  
 dbname = "bacula"; dbuser = "bacula"; dbpassword = "baculapass"
}
Message
# Reasonable message delivery -- send most everything to email address
#  and to the console
Messages {
 Name = Standard
#
# NOTE! If you send to two email or more email addresses, you will need
#  to replace the %r in the from field (-f part) with a single valid
#  email address in both the mailcommand and the operatorcommand.
#  What this does is, it sets the email address that emails would display
#  in the FROM field, which is by default the same email as they're being
#  sent to.  However, if you send email to more than one address, then
#  you'll have to set the FROM address manually, to a single address. 
#  for example, a 'no-reply@mydomain.com', is better since that tends to
#  tell (most) people that its coming from an automated source.
#
 mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
 operatorcommand = "/usr/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
#
# WARNING! the following will create a file that you must cycle from
#          time to time as it will grow indefinitely. However, it will
#          also keep all your messages if they scroll off the console.
#
 append = "/var/lib/bacula/log" = all, !skipped
 catalog = all , !skipped, !saved
}
# Message delivery for daemon messages (no job).
Messages {
 Name = Daemon
 mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
 mail = root@localhost = all, !skipped
 console = all, !skipped, !saved
 append = "/var/lib/bacula/log" = all, !skipped
}
Pool
# Default pool definition
Pool {
 Name = Default
 Pool Type = Backup
 Recycle = yes                       # Bacula can automatically recycle Volumes
 AutoPrune = yes                     # Prune expired volumes
 Volume Retention = 365 days         # one year
}
# Scratch pool definition
Pool {
 Name = Scratch
 Pool Type = Backup
}
Console, bacula can access via bconsole
#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
 Name = package.asik.com-mon
 Password = "fazrie"
 CommandACL = status, .status
}
Add this line at the end of config file, this command will tell bacula server to read all client config at file read-client.conf
@/etc/bacula/read-client.conf

bacula-sd
Define the storage
Storage {                             # definition of myself
 Name = package.asik.com-sd
 SDPort = 9103                        # Director's port      
 WorkingDirectory = "/var/lib/bacula"
 Pid Directory = "/var/run"
 Maximum Concurrent Jobs = 20
}
Define the director to be used based on Director at bacula-dir.conf
#
# List Directors who are permitted to contact Storage daemon
#
Director {
 Name = bacula.server-dir
 Password = "storage-pass"
}
#
# Restricted Director, used by tray-monitor to get the
#   status of the storage daemon
#
Director {
 Name = package.asik.com-mon
 Password = "director-pass"
 Monitor = yes
}
Define Device should be used, based on Device config at bacula-dir.conf
#
# Devices supported by this Storage daemon
# To connect, the Director's bacula-dir.conf must have the
#  same Name and MediaType. 
#
Device {
 Name = FileStorage    # read from bacula-dir.conf at Storage section  
 Media Type = File     # read from bacula-dir.conf at Storage section
 Archive Device = /home/bacula
 LabelMedia = yes;                   # lets Bacula label unlabeled media
 Random Access = Yes;
 AutomaticMount = yes;               # when device opened, read it
 RemovableMedia = no;
 AlwaysOpen = no;
}
Message
Messages {
 Name = Standard
 director = package.asik.com-dir = all
}
bacula-fd
#
# List Directors who are permitted to contact this File daemon
#
Director {
 Name = bacula.server-dir
 Password = "package-pass"
}
#
# Restricted Director, used by tray-monitor to get the
#   status of the file daemon
#
Director {
 Name = package.asik.com-mon
 Password = "fazrie"
 Monitor = yes
}
#
# "Global" File daemon configuration specifications
#
FileDaemon {                          # this is me
 Name = package.asik.com-fd
 FDport = 9102                  # where we listen for the director
 WorkingDirectory = /var/lib/bacula
 Pid Directory = /var/run
 Maximum Concurrent Jobs = 20
}
# Send all messages except skipped files back to Director
Messages {
 Name = Standard
 director = package.asik.com-dir = all, !skipped, !restored
}
bconsole.conf
#
# Bacula User Agent (or Console) Configuration File
#
Director {
 Name = bacula.server-dir   # director name at bacula-dir.conf
 DIRport = 9101             # director port
 address = localhost        # director address
 Password = "director-pass" # director password
}
read-client.conf
Make a Client Directory at /etc/bacula/, we will put all client configuration at that directory, so the read-client.conf will read all config file.
mkdir -p /etc/bacula/client
#
# Include subfiles associated with configuration of clients.
# They define the bulk of the Clients, Jobs, and FileSets.
# Remember to "reload" the Director after adding a client file.
#
@|"sh -c 'for f in /etc/bacula/client/*.conf ; do echo @${f} ; done'"

Client

Edit bacula config file at /etc/bacula/bacula-fd.conf
bacula-fd.conf
Password should be macth with the server
Director {
       Name            = bacula.server-dir
       Password        = Agw6a4ckidwQ493JwAVl9oTPu3R8PaJGtv3PptWb9Yh2HyryaO1kOm9KiCVLOmaB51FIk8ReEapvrg9reON7k7nDutbadcj4wA5L5ajyuyusVSwovt5Gy4EBZMFd9BxPDYm3W23LK6mtiaJiCZUufiwEq8C9lDDmE4wt3w66tP8EK7ACaFmiMsv9aOjTeSETep7NeaOrPQqhfeR8TDkqO4eBADWYTPjwE1QugpHgWNsta3i91UvVkAOJjztzBKSn
}
FileDaemon {
       Name    = messaging
       FDport  = 9102
       WorkingDirectory = /var/bacula
       Pid Directory    = /var/run
       Maximum Concurrent Jobs = 20
}
Messages {
       Name = Standard
       director = bacula.server-dir = all, !skipped, !restored
}
At the server make a client config file at /etc/bacula/client/me_the_client.conf and put this line
#/etc/bacula/cilentdef/<hostname>.conf
Client {
       Name            = messaging # client name
       Address         = messaging.asik.com # fqdn address
       FDPort          = 9102
       Catalog         = MyCatalog #DefaultCatalog <= ASYX server using this
       Password        = Agw6a4ckidwQ493JwAVl9oTPu3R8PaJGtv3PptWb9Yh2HyryaO1kOm9KiCVLOmaB51FIk8ReEapvrg9reON7k7nDutbadcj4wA5L5ajyuyusVSwovt5Gy4EBZMFd9BxPDYm3W23LK6mtiaJiCZUufiwEq8C9lDDmE4wt3w66tP8EK7ACaFmiMsv9aOjTeSETep7NeaOrPQqhfeR8TDkqO4eBADWYTPjwE1QugpHgWNsta3i91UvVkAOJjztzBKSn # director password
       File Retention  = 30 days
       Job Retention   = 6 months
       AutoPrune       = yes
}

Test Run

Start the bacula server daemon
# service bacula-dir start
# service bacula-sd start
open bacula manager using bconsole,just type bconsole on the terminal
# bconsole

Webacula

To use Webcaula we need the latest PHP , ZendFramework and MySQL, download this packages
webacula-5.0.3-1.el5.noarch.rpm
json-c-0.9-1.el5.x86_64.rpm
libedit-20090923-3.0_1.el5.rf.x86_64.rpm
php-5.3.5-1.el5.remi.1.x86_64.rpm
php-cli-5.3.5-1.el5.remi.1.x86_64.rpm
php-common-5.3.5-1.el5.remi.1.x86_64.rpm
php-devel-5.3.5-1.el5.remi.1.x86_64.rpm
php-gd-5.3.5-1.el5.remi.1.x86_64.rpm
php-pdo-5.3.5-1.el5.remi.1.x86_64.rpm
php-pear-1.9.1-6.el5.remi.noarch.rpm
php-process-5.3.5-1.el5.remi.x86_64.rpm
php-xml-5.3.5-1.el5.remi.1.x86_64.rpm
php-ZendFramework-1.11.0-1.el5.remi.noarch.rpm
t1lib-5.1.2-1.el5.rf.x86_64.rpm
ZendFramework-1.11.3-minimal.tar.gz
Install all using yum
yum localinstall --nogpgcheck *.rpm

Firewall

Bacula need several port to be open
daemon       |    port
bacula-dir        9101
bacula-fd         9102
bacula-sd         9103
in iptables
# iptables -I INPUT -p tcp -m multiport --dport 9101,9102,9103 -j ACCEPT

Comments

  1. Very straight forward. Finally an easy to follow guide with pictures. Took a bit of googling to find this page but I am glad I did. Very helpful in understanding this mishmosh setup.

    ReplyDelete

Post a Comment