Bacula
(10 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 77 : | Ligne 77 : | ||
===Configuration=== | ===Configuration=== | ||
− | + | Pour configurer Bacula, s'aider de la documentation officielle : https://www.bacula.org/documentation/documentation/ | |
+ | |||
+ | Pour aider à comprendre la configuration de Bacula, ce schéma, [https://www.bacula.org/9.6.x-manuals/en/main/What_is_Bacula.html#SECTION00230000000000000000 extrait de la documentation], fait une présentation synthétique des différents composants utilisés : | ||
+ | :[[Fichier:Bacula-objects.png|none|thumb|300px|Bacula - Schéma de configuration]] | ||
+ | |||
+ | Afin d'éviter un maximum de modifier les fichiers de configuration par défaut, d'une part, et afin de centraliser les fichiers de configuration personnalisés, d'autre part, un dossier <code>conf.d</code> sera créé à cet effet et les fichiers seront nommés en fonction de leur utilisation. | ||
+ | |||
+ | Ainsi, créer le dossier de configuration supplémentaire avec la commande : | ||
+ | mkdir /opt/bacula/etc/conf.d | ||
+ | |||
+ | Ensuite, éditer le fichier <code>/opt/bacula/etc/bacula-dir.conf</code> et modifier la variable ''dbpassword'' de la section ''Catalog'' pour quelle corresponde au mot de passe de l'utilisateur de la base de données créé précédemment. | ||
Exemple : | Exemple : | ||
− | < | + | <syntaxhighlight lang="python"> |
... | ... | ||
# Generic catalog service | # Generic catalog service | ||
Ligne 88 : | Ligne 98 : | ||
} | } | ||
... | ... | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | Enfin, y ajouter également les lignes suivantes en fin de fichier : | ||
+ | <syntaxhighlight lang="python"> | ||
+ | # Include custom config files | ||
+ | @/opt/bacula/etc/conf.d/dir_storage_master.conf | ||
+ | @/opt/bacula/etc/conf.d/dir_job_myclienttosave.conf | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | ====Configuration du Director (serveur)==== | ||
+ | Documentation : https://www.bacula.org/9.6.x-manuals/en/main/Configuring_Director.html | ||
+ | |||
+ | La [https://www.bacula.org/9.6.x-manuals/en/main/Configuring_Director.html#SECTION002130000000000000000 documentation à propos la ressource "Job" de Bacula] recommande de n'utiliser qu'un Job par client (à moins d'avoir un client possédant une quantité de fichiers tellement grande qu'il est plus simple de découper par parties). | ||
+ | |||
+ | Ainsi, créer un fichier <code>/opt/bacula/etc/conf.d/dir_job_myclienttosave.conf</code> correspondant à un job de sauvegarde pour la machine ''myclienttosave'' par exemple, dont le contenu est le suivant : | ||
+ | <syntaxhighlight lang="python"> | ||
+ | Job { | ||
+ | Name = "Test myclienttosave" | ||
+ | Enabled = no; | ||
+ | Client = myclienttosave | ||
+ | FileSet = "FileSetTest" | ||
+ | Schedule = "ScheduleTest" | ||
+ | Full Backup Pool = FullTest | ||
+ | Incremental Backup Pool = IncrTest | ||
+ | Differential Backup Pool = DiffTest | ||
+ | Storage = master | ||
+ | Type = Backup | ||
+ | Pool = Default | ||
+ | Messages = Standard | ||
+ | Accurate = yes; | ||
+ | # JobDefs = JobDefs-Resource-Name # Utile pour réutiliser un job "template" et surcharger ses options localement | ||
+ | # Base = job-resource-name, ... # Utile lors de sauvegarde de plusieurs machines sensiblement identiques | ||
+ | } | ||
+ | |||
+ | Client { | ||
+ | Name = myclienttosave | ||
+ | Address = myclienttosave | ||
+ | FDPort = 9102 | ||
+ | Catalog = MyCatalog | ||
+ | Password = "mygreatclientpassword" # password for FileDaemon | ||
+ | AutoPrune = yes # Prune expired Jobs/Files | ||
+ | } | ||
+ | |||
+ | FileSet { | ||
+ | Name = "FileSetTest" | ||
+ | Include { | ||
+ | Options { | ||
+ | signature = MD5 | ||
+ | compression=GZIP | ||
+ | } | ||
+ | File = /home | ||
+ | } | ||
+ | |||
+ | Exclude { | ||
+ | File = /proc | ||
+ | File = /tmp | ||
+ | File = /.journal | ||
+ | File = /.fsck | ||
+ | } | ||
+ | } | ||
+ | |||
+ | Schedule { | ||
+ | Name = "ScheduleTest" | ||
+ | Run = Full 1st sun at 23:05 | ||
+ | Run = Differential 2nd-5th sun at 23:05 | ||
+ | Run = Incremental mon-sat at 23:05 | ||
+ | } | ||
− | + | Pool { | |
− | + | Name = FullTest | |
− | + | Label Format = "FullTest" | |
+ | Pool Type = Backup | ||
+ | Recycle = yes # Bacula can automatically recycle Volumes | ||
+ | AutoPrune = yes # Prune expired volumes | ||
+ | Volume Retention = 6 months | ||
+ | Maximum Volume Jobs = 1 | ||
+ | } | ||
+ | |||
+ | Pool { | ||
+ | Name = DiffTest | ||
+ | Label Format = "DiffTest" | ||
+ | Pool Type = Backup | ||
+ | Recycle = yes | ||
+ | AutoPrune = yes | ||
+ | Volume Retention = 40 days | ||
+ | Maximum Volume Jobs = 1 | ||
+ | } | ||
+ | |||
+ | Pool { | ||
+ | Name = IncrTest | ||
+ | Label Format = "IncrTest" | ||
+ | Pool Type = Backup | ||
+ | Recycle = yes | ||
+ | AutoPrune = yes | ||
+ | Volume Retention = 10 days | ||
+ | Maximum Volume Jobs = 1 | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Créer un fichier <code>/opt/bacula/etc/conf.d/dir_storage_master.conf</code> correspondant à la définition d'un stockage ''master'' pour le Director, dont le contenu est le suivant : | ||
+ | <syntaxhighlight lang="python"> | ||
+ | Storage { | ||
+ | Name = master | ||
+ | Enabled = yes; | ||
+ | Address = myserver | ||
+ | Password = "mygreatpassword" | ||
+ | Device = local_storage | ||
+ | Media Type = File | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Cela permet au Director (serveur) d'envoyer ces informations au File Daemon (client) pour qu'il puisse se connecter au Storage Daemon (serveur). | ||
+ | |||
+ | ====Configuration du Storage Daemon (serveur)==== | ||
+ | Editer le fichier <code>/opt/bacula/etc/bacula-sd.conf</code> et y ajouter les lignes suivantes en fin de fichier : | ||
+ | <syntaxhighlight lang="python"> | ||
+ | # Include custom config files | ||
+ | @/opt/bacula/etc/conf.d/sd_device_local_storage.conf | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Créer le fichier <code>/opt/bacula/etc/conf.d/sd_device_local_storage.conf</code> et y insérer le contenu suivant : | ||
+ | <syntaxhighlight lang="python"> | ||
+ | Device { | ||
+ | Name = local_storage # Nom du device (à utiliser dans le Storage du Director) | ||
+ | Archive Device = /data/save/bacula # Localisation du device sur lequel stocker les fichiers | ||
+ | Device Type = File # Type de device (File pour le système de fichier sur seveur) | ||
+ | Media Type = File # Type de media (arbitraire, mais doit être cohérent avec les Media Type des autres Device du même type) | ||
+ | Maximum Concurrent Jobs = 5 # Littéralement | ||
+ | Random Access = yes; # Pour du Device Type = File : yes | ||
+ | Requires Mount = no; # Pour du Device Type = File : no | ||
+ | LabelMedia = yes; # lets Bacula label unlabeled media | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Créer un dossier de sauvegarde : | ||
+ | mkdir -p /data/save/bacula | ||
+ | chown bacula:disk /data/save/bacula | ||
+ | chmod 770 /data/save/bacula | ||
+ | |||
+ | ====Configuration du File Daemon (client)==== | ||
+ | Documentation : https://www.bacula.org/9.6.x-manuals/en/main/Client_File_daemon_Configur.html | ||
+ | |||
+ | Se connecter sur la machine à sauvegarder (Client) et [[#Cr.C3.A9er_le_d.C3.A9p.C3.B4t_Bacula|installer le dépôt Bacula]]. Une fois cela fait, installer le client Bacula avec la commande suivante : | ||
+ | yum install bacula-client | ||
+ | |||
+ | Cela aura pour effet d'installer également la dépendance <code>bacula-libs</code>. | ||
+ | |||
+ | Editer le fichier <code>/opt/bacula/etc/bacula-fd.conf</code> et ajouter le ''Director'' précédemment installé sur le serveur de sauvegarde avec le mot du passe du client précédemment défini : | ||
+ | <syntaxhighlight lang="python"> | ||
+ | Director { | ||
+ | Name = vmexploit02-dir | ||
+ | Password = "mygreatclientpassword" # Director password from Client section | ||
+ | } | ||
+ | </syntaxhighlight> | ||
===Lancement des services=== | ===Lancement des services=== |
Version actuelle datée du 6 août 2020 à 13:53
Sommaire
Présentation
Bacula est un logiciel de sauvegarde, de vérification et de restauration de fichiers en mode client-serveur dans un réseau, distribué en Open Source. Ses composants serveurs tournent sur Linux, Solaris ou FreeBSD. Ses composants clients existent pour de nombreuses autres plateformes, dont MacOS et Windows.
Plus d'informations sur Wikipedia : https://fr.wikipedia.org/wiki/Bacula_(logiciel)
Installation
Créer le dépôt Bacula
Importer la clé GPG :
wget https://www.bacula.org/downloads/Bacula-4096-Distribution-Verification-key.asc rpm --import Bacula-4096-Distribution-Verification-key.asc rm Bacula-4096-Distribution-Verification-key.asc
Remplir le formulaire de contact à l'adresse : https://www.bacula.org/bacula-binary-package-download/
Cela aura pour effet d'envoyer automatiquement un mail avec un lien pointant vers le dépôt Bacula avec une clé dédiée dans l'URL.
Exemple : http://bacula.org/packages/123azerty456 où 123azerty456
est la clé créée pour le compte du formulaire précédemment rempli.
Grâce à la clé obtenue, créer le fichier /etc/yum.repos.d/bacula.repo
avec le contenu suivant :
[Bacula-Community] name=CentOS - Bacula - Community baseurl=http://www.bacula.org/packages/123azerty456/rpms/9.6.5/el7/x86_64/ enabled=1 protect=0 gpgcheck=1
Reconstruire ensuite le cache de yum :
yum makecache
Installation des paquets
Si la base sur laquelle Bacula se connectera est MySQL, lancer la commande suivante pour installer le serveur Bacula :
yum install bacula-mysql
Cela aura pour effet d'installer également la dépendance bacula-libs
.
Construction de la base de données
Sans paramétrage supplémentaire, les scripts de construction de la base de données considéreront que le moteur de la base de données est MySQL.
Ainsi, pour une base de données MySQL, lancer la commande suivante pour créer la base de données bacula :
/opt/bacula/scripts/create_bacula_database -uroot -p
Remplacer -uroot par un utilisateur avec les droits suffisants si besoin est.
Exemple de retour :
[root@myserver ~]# /opt/bacula/scripts/create_bacula_database -uroot -p Enter password: Creating mysql database Creation of bacula database succeeded.
Créer ensuite les tables avec la commande :
/opt/bacula/scripts/make_bacula_tables -uroot -p
Exemple de retour :
[root@myserver ~]# /opt/bacula/scripts/make_bacula_tables -uroot -p Enter password: Making mysql tables Creation of Bacula MySQL tables succeeded.
Enfin, pour créer un utilisateur bacula et lui donner les droits sur la base précédemment créée, éditer le fichier /opt/bacula/scripts/grant_mysql_privileges
et donner à la variable db_password la valeur du mot de passe désiré. Ensuite, lancer la commande suivante :
/opt/bacula/scripts/grant_bacula_privileges
Exemple de retour :
[root@myserver ~]# /opt/bacula/scripts/grant_bacula_privileges -uroot -p Enter password: Granting mysql privileges Created MySQL database user: bacula ... Privileges for user bacula granted on database bacula.
Configuration
Pour configurer Bacula, s'aider de la documentation officielle : https://www.bacula.org/documentation/documentation/
Pour aider à comprendre la configuration de Bacula, ce schéma, extrait de la documentation, fait une présentation synthétique des différents composants utilisés :
Afin d'éviter un maximum de modifier les fichiers de configuration par défaut, d'une part, et afin de centraliser les fichiers de configuration personnalisés, d'autre part, un dossier conf.d
sera créé à cet effet et les fichiers seront nommés en fonction de leur utilisation.
Ainsi, créer le dossier de configuration supplémentaire avec la commande :
mkdir /opt/bacula/etc/conf.d
Ensuite, éditer le fichier /opt/bacula/etc/bacula-dir.conf
et modifier la variable dbpassword de la section Catalog pour quelle corresponde au mot de passe de l'utilisateur de la base de données créé précédemment.
Exemple :
...
# Generic catalog service
Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "mygreatpassword"
}
...
Enfin, y ajouter également les lignes suivantes en fin de fichier :
# Include custom config files
@/opt/bacula/etc/conf.d/dir_storage_master.conf
@/opt/bacula/etc/conf.d/dir_job_myclienttosave.conf
Configuration du Director (serveur)
Documentation : https://www.bacula.org/9.6.x-manuals/en/main/Configuring_Director.html
La documentation à propos la ressource "Job" de Bacula recommande de n'utiliser qu'un Job par client (à moins d'avoir un client possédant une quantité de fichiers tellement grande qu'il est plus simple de découper par parties).
Ainsi, créer un fichier /opt/bacula/etc/conf.d/dir_job_myclienttosave.conf
correspondant à un job de sauvegarde pour la machine myclienttosave par exemple, dont le contenu est le suivant :
Job {
Name = "Test myclienttosave"
Enabled = no;
Client = myclienttosave
FileSet = "FileSetTest"
Schedule = "ScheduleTest"
Full Backup Pool = FullTest
Incremental Backup Pool = IncrTest
Differential Backup Pool = DiffTest
Storage = master
Type = Backup
Pool = Default
Messages = Standard
Accurate = yes;
# JobDefs = JobDefs-Resource-Name # Utile pour réutiliser un job "template" et surcharger ses options localement
# Base = job-resource-name, ... # Utile lors de sauvegarde de plusieurs machines sensiblement identiques
}
Client {
Name = myclienttosave
Address = myclienttosave
FDPort = 9102
Catalog = MyCatalog
Password = "mygreatclientpassword" # password for FileDaemon
AutoPrune = yes # Prune expired Jobs/Files
}
FileSet {
Name = "FileSetTest"
Include {
Options {
signature = MD5
compression=GZIP
}
File = /home
}
Exclude {
File = /proc
File = /tmp
File = /.journal
File = /.fsck
}
}
Schedule {
Name = "ScheduleTest"
Run = Full 1st sun at 23:05
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}
Pool {
Name = FullTest
Label Format = "FullTest"
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 6 months
Maximum Volume Jobs = 1
}
Pool {
Name = DiffTest
Label Format = "DiffTest"
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 40 days
Maximum Volume Jobs = 1
}
Pool {
Name = IncrTest
Label Format = "IncrTest"
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 10 days
Maximum Volume Jobs = 1
}
Créer un fichier /opt/bacula/etc/conf.d/dir_storage_master.conf
correspondant à la définition d'un stockage master pour le Director, dont le contenu est le suivant :
Storage {
Name = master
Enabled = yes;
Address = myserver
Password = "mygreatpassword"
Device = local_storage
Media Type = File
}
Cela permet au Director (serveur) d'envoyer ces informations au File Daemon (client) pour qu'il puisse se connecter au Storage Daemon (serveur).
Configuration du Storage Daemon (serveur)
Editer le fichier /opt/bacula/etc/bacula-sd.conf
et y ajouter les lignes suivantes en fin de fichier :
# Include custom config files
@/opt/bacula/etc/conf.d/sd_device_local_storage.conf
Créer le fichier /opt/bacula/etc/conf.d/sd_device_local_storage.conf
et y insérer le contenu suivant :
Device {
Name = local_storage # Nom du device (à utiliser dans le Storage du Director)
Archive Device = /data/save/bacula # Localisation du device sur lequel stocker les fichiers
Device Type = File # Type de device (File pour le système de fichier sur seveur)
Media Type = File # Type de media (arbitraire, mais doit être cohérent avec les Media Type des autres Device du même type)
Maximum Concurrent Jobs = 5 # Littéralement
Random Access = yes; # Pour du Device Type = File : yes
Requires Mount = no; # Pour du Device Type = File : no
LabelMedia = yes; # lets Bacula label unlabeled media
}
Créer un dossier de sauvegarde :
mkdir -p /data/save/bacula chown bacula:disk /data/save/bacula chmod 770 /data/save/bacula
Configuration du File Daemon (client)
Documentation : https://www.bacula.org/9.6.x-manuals/en/main/Client_File_daemon_Configur.html
Se connecter sur la machine à sauvegarder (Client) et installer le dépôt Bacula. Une fois cela fait, installer le client Bacula avec la commande suivante :
yum install bacula-client
Cela aura pour effet d'installer également la dépendance bacula-libs
.
Editer le fichier /opt/bacula/etc/bacula-fd.conf
et ajouter le Director précédemment installé sur le serveur de sauvegarde avec le mot du passe du client précédemment défini :
Director {
Name = vmexploit02-dir
Password = "mygreatclientpassword" # Director password from Client section
}
Lancement des services
Pour lancer le service principal côté serveur (Director), qui est le coeur de la sauvegarde, lancer la commande suivante :
systemctl start bacula-dir.service
Pour lancer le service auxiliaire(Storage Daemon), qui permet de gérer différents types de stockage, lancer la commande suivante :
systemctl start bacula-sd.service
Pour lancer la service agent côté client (File Daemon), lancer la commande suivante :
systemctl start bacula-fd.service
Configuration de l'interface web
Récupération des sources
Récupérer les sources de l'interface web :
curl -O -L https://github.com/bacula-web/bacula-web/releases/download/v8.4.0/bacula-web-8.4.0.tgz
Télécharger la signature SHA512 :
wget https://github.com/bacula-web/bacula-web/releases/download/v8.4.0/sha512sum.txt
Vérifier la signature du paquet téléchargé :
cat sha512sum.txt | sha512sum -c
Exemple de retour :
Déploiement des sources
Créer le dossier hébergeant les sources web :
mkdir /data/www/bacula-web
Décompresser l'archive :
tar xvf bacula-web-8.4.0.tgz
Déplacer les sources :
mv bacula-web /data/www/bacula-web/8.4.0
Définir un lien symbolique pointant vers la version en cours :
ln -s 8.4.0 /data/www/bacula-web/current
Corriger les droits d'accès :
chown -R php-fpm:www /data/www/bacula-web chmod -R o-rwx /data/www/bacula-web
Configuration web
Créer un pool PHP-FPM (par exemple : /local/php/php-7.3.4/etc/php-fpm.d/bacula.conf
) avec le contenu suivant :
[bacula]
user = php-fpm
group = php-fpm
; Socket Unix dédié à Bacula
listen = /local/php/sockets/php7_$pool.sock
; Donner à Apache (www) les droits d'accès au socket
listen.owner = www
listen.group = www
; Définition du chemin d'accès des logs
access.log = /data/logs/$pool/$pool_php7.access.log
slowlog = /data/logs/$pool/$pool_php7.log.slow
php_admin_value[error_log] = /data/logs/$pool/$pool_php7.log
php_admin_flag[log_errors] = on
; https://www.php.net/manual/fr/errorfunc.constants.php
php_admin_value[error_reporting] = E_ALL
php_admin_value[session.save_path] = "/data/sessions/$pool/"
php_value[session.save_path] = "/data/sessions/$pool/"
; Tuning du pool php-fpm
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.status_path = /php-fpm-status
ping.path = /php-fpm-ping
Créer les dossiers contenant les logs PHP et sessions :
mkdir /data/{logs,sessions}/bacula chown -R php-fpm:www /data/{logs,sessions}/bacula chmod -R o-rwx /data/{logs,sessions}/bacula
Relancer PHP-FPM :
systemctl restart php7-fpm.service
Ajouter la section suivante dans la configuration Apache pour disposer de l'interface web de Bacula dans un sous-dossier /bacula
:
...
# Configuration Bacula
Alias /bacula /data/www/bacula-web/current
<Directory "/data/www/bacula-web/current">
Options FollowSymLinks
DirectoryIndex index.php
AllowOverride All
Require all granted
<FilesMatch \.php$>
SetHandler "proxy:unix:/local/php/sockets/php7_bacula.sock|fcgi://localhost"
</FilesMatch>
</Directory>
# Fin de configuration Bacula
...
Recharger la configuration Apache pour prise en compte des modifications :
httpd -k graceful
Paramétrage de l'interface
Copier le fichier de configuration d'exemple application/config/config.php
:
cp -p /data/www/bacula-web/current/application/config/config.php{.sample,}
Editer le fichier de configuration application/config/config.php
pour l'adapter aux besoins. Exemple :
...
$config['datetime_format'] = 'd/m/Y H:i:s';
...
// Translations
$config['language'] = 'fr_FR';
...
// MySQL bacula catalog
$config[0]['label'] = 'Backup Server';
$config[0]['host'] = 'localhost';
$config[0]['login'] = 'bacula';
$config[0]['password'] = 'mygreatpassword';
$config[0]['db_name'] = 'bacula';
$config[0]['db_type'] = 'mysql';
$config[0]['db_port'] = '3306';
...
Il est possible de tester si les prérequis à l'interface web sont respectés en lançant la commande suivante :
cd /data/www/bacula-web/current php bwc check
Exemple de retour :
[root@myserver current]# php bwc check ======================= Checking requirements ======================= PHP version Ok PHP timezone Ok Protected assets folder is writable Ok Smarty cache folder write permission Ok PHP Posix support Ok PHP PDO support Ok PHP SQLite support Ok PDO drivers (available): driver: oci driver: odbc driver: sqlite driver: mysql driver: sqlsrv PHP Gettext support Ok PHP Session support Ok
Créer un utilisateur en lançant la commande suivante puis répondre aux questions :
php bwc setupauth
Exemple de retour :
[root@myserver current]# php bwc setupauth It's now time to setup the application back-end database Please note that all informations stored in the user database will be destroyed Can we proceed ? Answer (Yes/No): Yes Let's go ! Deleting application back-end database Database file removed Ok Database created Ok Creating database schema Database schema created Ok User creation Username: myuser Email address: myaddress@mydomain.com Password : User created Ok You can now connect to your Bacula-Web instance using provided credentials
ATTENTION ! Cela va générer un fichier application/assets/protected/application.db
. Il faut s'assurer que ce dernier possède les bons droits d'accès pour l'utilisateur web.
Pour corriger les droits lancer les commandes suivantes :
chown php-fpm:www application/assets/protected/application.db chmod o-r application/assets/protected/application.db
L'interface web est prête à être utilisée.