Instalar y configurar Bacula en CentOS

Vamos a ver cómo instalar y configurar Bacula en CentOS.

Bacula es una solución de backup de red, de código abierto, que nos permite crear backups y reestablecer los datos salvaguardados en nuestros sistemas. Es flexible y robusto.
 

instalar y configurar bacula en CentOS
 

En este artículo:

 

 

 

 

Componentes de Bacula

 
—> Los componentes principales del servidor bacula son:

  • Bacula Director :  el software que controla las operaciones de copia de seguridad y restauración, controladas por los daemons de archivos y de almacenamiento.
  • Storage Daemon (SD) : el software que realiza las operaciones de lectura y escritura de los archivos sobre los dispositivos de almacenamiento usados en las backups.
  • Catalog : servicios que mantienen una base de datos de los archivos salvaguardado en las copias de seguridad. La base de datos es MySQL o PostgreSQL.
  • Bacula console : una interfaz de línea de comandos que nos permite interactuar y controlar el bacula director.

 

—> Para el cliente Bacula:

un cliente bacula ejecuta el componente File Daemon (FD), se trata del software que permite al servidor bacula  acceder a los archivos que serán salvaguardados.

 

 

Instalar MySQL y Bacula

 
Instalamos bacula y los paquetes del servidor MariaDB en CentOS con yum:

sudo yum install -y bacula-director bacula-storage bacula-console bacula-client mariadb-server

 

Iniciamos mySQL:

sudo systemctl start mariadb

instalar MariaDB con Bacula
 

Ahora que MariaDB está instalado y en ejecución, crearemos el usuario de la base de datos Bacula y las tablas:

 

/usr/libexec/bacula/grant_mysql_privileges
/usr/libexec/bacula/create_mysql_database -u root
/usr/libexec/bacula/make_mysql_tables -u bacula

 

ejecutamos un script de seguridad para eliminar algunos valores predeterminados peligrosos:

sudo mysql_secure_installation

 

mysql secure installation
 

nos pedirá la contraseña de root actual;si acabamos de instalar mySQL es probable que no tengamos una. Lo dejamos en blanco y pulsamos enter.
 

Después nos preguntará si queremos establecer una contraseña para root;

la establecemos y configuramos el resto de opciones:

configuracion inicial de MariaDB

 

 

Establecemos la contraseña para el usuario de la base de datos bacula:

mysql -u root -p
 
MariaDB [(none)]> UPDATE mysql.user SET Password=PASSWORD('bacula_db_password') WHERE User='bacula';
 
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit

 

password del usuario de base de datos bacula
 

Habilitamos MariaDB para que arranque de forma automática en el inicio:

sudo systemctl enable mariadb

 

Configuramos bacula para usar la biblioteca mySQL (por defecto bacula está configurado para usar PostgreSQL).

ejecutamos:

sudo alternatives --config libbaccats.so

 
Veremos el siguiente mensaje (seleccionamos la primera opción, num 1)

configurar bacula con mysql
 

Hay 3 programas que proporcionan 'libbaccats.so'.
 
Selección Comando
-----------------------------------------------
1 /usr/lib64/libbaccats-mysql.so
2 /usr/lib64/libbaccats-sqlite3.so
*+ 3 /usr/lib64/libbaccats-postgresql.so
 
Presione Intro para mantener la selección actual[+], o escriba el número de la selección: 1

 

Ya tenemos correctamente instalados los componentes del servidor bacula y del cliente bacula.

Ahora tenemos que crear los directorios de backup y restauración.
 

 

Crear los directorios de backup y restauración

 
Bacula necesita un directorio para almacenar las copias de seguridad, y un directorio donde colocar los archivos restaurados.
 

Creamos entonces estos dos directorios:

sudo mkdir -p /bacula/backup /bacula/restore

 

 

Modificamos permisos para que solo el usuario bacula y un superusuario puedan acceder a dichos directorios

sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula

 

 

Configurar Bacula Director

 
Editamos el archivo de configuración de Bacula Director:

sudo vi /etc/bacula/bacula-dir.conf

 

Configuramos el recurso Director para escuchar sobre localhost, añadiendo la línea “DirAddress”:

DirAddress = 127.0.0.1

 
De forma que el archivo de configuración quede así:

Director { # define myself
Name = bacula-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/spool/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1
Password = "@@DIR_PASSWORD@@" # Console password
Messages = Daemon
DirAddress = 127.0.0.1
}

 

 

Configuramos los jobs locales

 

Un job se usa para definir trabajos de copia de seguridad y restauración de archivos. Ahora definimos los jobs que se usarán para realizar backups de los ficheros locales:
 
Buscamos el recurso “Job” con el nombre de “BackupClient1“, y cambiamos el valor a “BackupLocalFiles

Job {
Name = "BackupLocalFiles"
JobDefs = "DefaultJob"
}

 

Ahora localizamos el recurso “Job” que se llama “RestoreFiles“, y modificamos los valores de “Name” y “Where“:

Job {
Name = "RestoreLocalFiles"
 
Type = Restore
Client=BackupServer-fd
 
FileSet="Full Set"
 
Storage = File
 
Pool = Default
 
Messages = Standard
 
Where = /bacula/restore
}

Así hemos configurado el job “RestoreLocalFiles” para restaurar ficheros en /bacula/restore, el directorio que creamos previamente.
 

 

Configurar FileSet

 
FileSet” define un conjunto de directorios que deseamos incluir o excluir de la copia de seguridad.

Encontramos esta opción con nombre “Full Set“.
 

Aquí podemos hacer varios cambios interesantes:

  • Añadir la opción para usar gzip para comprimir las backups.
  • Cambiar el Include de
    /usr/sbin

    a

    /
  • Añadir a la sección de Excludes:
    File = /bacula

 

FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }    
File = /
}
  Exclude {
    File = /var/lib/bacula
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
    File = /bacula
  }
}

 

 

Configurar la conexión del Daemon de almacenamiento

 
Hemos de definir el daemon de almacenamiento al que Bacula Director se conectará.

Reemplazamos el valor de “Address“, localhost, por la IP del servidor de backups, o un nombre FQDN.
 

Storage {
Name = File
# Do not use "localhost" here
Address = localhost, IP, o nombre FQDN  del servidor
SDPort = 9103
Password = "@@SD_PASSWORD@@"
Device = FileStorage
Media Type = File
}

 

 

Configurar la conexión del Catálogo

 

Localizamos el recurso de Catálogo, llamado “MyCatalog” y actualizamos el valor de “dbpassword” con el valor de la password que tenga el usuario bacula de la base de datos.

# Generic catalog service
Catalog {
Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:postgresql"; dbaddress = 127.0.0.1; dbport =
dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula_db_password"
}

 

 

Configurar el Pool

 

Un Pool define el conjunto de almacenamiento utilizado por bacula para escribir copias de seguridad. Podemos modificar el valor “label” para identificar correctamente nuestras backups.

Añadimos

Label Format = Local-

 

De forma que esta sección quede así:

# File Pool definition
Pool {
Name = File
Pool Type = Backup
Label Format = Local-
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
Maximum Volume Bytes = 50G # Limit Volume size to something reasonable
Maximum Volumes = 100 # Limit number of Volumes in Pool
}

 

 

Revisar la configuración de Bacula Director

 
Hecha toda la configuración, vamos a revisar que no haya fallos.

sudo bacula-dir -tc /etc/bacula/bacula-dir.conf

Si no hay errores no recibiremos ningún mensaje.

 

Si tenemos errores de configuración, veremos un mensaje de advertencia con los errores que debemos corregir:

[root@centos7 ~]# sudo bacula-dir -tc /etc/bacula/bacula-dir.conf
bacula-dir: dird.c:1015-0 Could not open Catalog "MyCatalog", database "bacula".
bacula-dir: dird.c:1020-0 mysql.c:210 Unable to connect to MySQL server.
Database=bacula User=bacula
MySQL connect failed either server not running or your authorization is incorrec t.
13-abr 11:38 bacula-dir ERROR TERMINATION
Please correct configuration file: /etc/bacula/bacula-dir.conf

 

errores de configuracion bacula

 

 

Configurar el daemon de almacenamiento

 
Casi hemos terminado de configurar nuestro servidor bacula, pero aún nos fañta configurar el daemon de almacenamiento, necesario para indicar a bacula dónde ha de guardar las copias de seguridad.

Abrimos y editamos el archivo de connfiguración del daemon de almacenamiento:

sudo vi /etc/bacula/bacula-sd.conf

 

 

Configurar los recursos de almacenamiento

 

Buscamos el recurso “Storage“. Aquí se define dónde escuchará el proceso SD (Storage Daemon / Demonio de almacenamiento) para establecer conexiones.

Añadimos el parámetro “SDAddress” , y lo asignamos a la IP de nuestro servidor de backups o nuestro nombre FQDN

Storage { # definition of myself
Name = BackupServer-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run/bacula"
Maximum Concurrent Jobs = 20
SDAddress = localhost, IP, o nombre FQDN del servidor.
}

 

 

Configurar el dispositivo de almacenamiento

 

Lo siguiente es localizar el recurso llamado “FileStorage”, y actualizar el valor de “Archive Device” para que coincida con nuestro directorio de backups:

Device {
Name = FileStorage
Media Type = File
Archive Device = /bacula/backup
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}

 

 

Verificar la configuración del demonio de almacenamiento (SD)

 

sudo bacula-sd -tc /etc/bacula/bacula-sd.conf

 

 

Configurar los passwords de los componentes Bacula

Todos los componentes de Bacula, como el Director, FD y SD, usan passwords para comunicarse.

Podemos configurar manualmente dichos passwords, pero también podemos generarlos de forma aleatoria (estos passwords no necesitamos conocerlos, y no tendremos que introducirlos en ningún otro caso).
 

 

Generar y establecer el password de Director

 
bconsole conecta a Director, así que también hemos de establecer la password.

  • DIR_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
  • sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bacula-dir.conf
  • sudo sed -i "s/@@DIR_PASSWORD@@/${DIR_PASSWORD}/" /etc/bacula/bconsole.conf

 

 

Generar y establecer el password de SD (StorageDaemon / daemon de almacenamiento)

 

  • SD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
  • sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-sd.conf
  • sudo sed -i "s/@@SD_PASSWORD@@/${SD_PASSWORD}/" /etc/bacula/bacula-dir.conf

Director conecta a SD, así que también hemos de establecer la contraseña.
 

 

Generar y establecer el password de FD (local File Daemon / daemon de archivos – el software de cliente Bacula)

 
Director conecta a FD, así que también hemos de establecer la contraseña.

  • FD_PASSWORD=`date +%s | sha256sum | base64 | head -c 33`
  • sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-dir.conf
  • sudo sed -i "s/@@FD_PASSWORD@@/${FD_PASSWORD}/" /etc/bacula/bacula-fd.conf

 

 

Iniciar componentes de Bacula

 
Ahora podemos iniciar Bacula Director, el Daemon de Almacenamiento (SD), y el daemon de archivos locales (FD):

sudo systemctl start bacula-dir
sudo systemctl start bacula-sd
sudo systemctl start bacula-fd

 

Si se inician correctamente, ya podemos habilitarlos para que inicien junto con el sistema:

 

sudo systemctl enable bacula-dir
sudo systemctl enable bacula-sd
sudo systemctl enable bacula-fd

 

Ahora ya podríamos comenzar a configurar backups de Bacula.