Bacula

De Wiki de Jordan LE NUFF
Sauter à la navigation Sauter à la recherche
Ligne 82 : Ligne 82 :
 
:[[Fichier:Bacula-objects.png|none|thumb|300px|Bacula - Schéma de configuration]]
 
:[[Fichier:Bacula-objects.png|none|thumb|300px|Bacula - Schéma de configuration]]
  
Editer 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.
+
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 :
<pre>
+
<syntaxhighlight lang="python">
 
...
 
...
 
# Generic catalog service
 
# Generic catalog service
Ligne 93 : Ligne 98 :
 
}
 
}
 
...
 
...
</pre>
+
</syntaxhighlight>
  
Y ajouter également les lignes suivantes en fin de fichier :
+
Enfin, y ajouter également les lignes suivantes en fin de fichier :
# Include custom config files
+
<syntaxhighlight lang="python">
@/opt/bacula/etc/conf.d/dir*conf
+
# Include custom config files
 
+
@/opt/bacula/etc/conf.d/dir*conf
Créer le dossier de configuration supplémentaire avec la commande :
+
</syntaxhighlight>
mkdir /opt/bacula/etc/conf.d
 
  
 
====Configuration du Director (serveur)====
 
====Configuration du Director (serveur)====
Ligne 108 : Ligne 112 :
  
 
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 :
 
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 :
<pre>
+
<syntaxhighlight lang="python">
 
Job {
 
Job {
 
Name = "Test myclienttosave"
 
Name = "Test myclienttosave"
Ligne 181 : Ligne 185 :
 
         Maximum Volume Jobs = 1                                                 
 
         Maximum Volume Jobs = 1                                                 
 
}
 
}
</pre>
+
</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 :
 
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 :
<pre>
+
<syntaxhighlight lang="python">
 
Storage {
 
Storage {
 
Name = master
 
Name = master
Ligne 193 : Ligne 197 :
 
Media Type = File
 
Media Type = File
 
}
 
}
</pre>
+
</syntaxhighlight>
  
 
Cela permet au Director (serveur) d'envoyer ces informations au File Daemon (client) pour qu'il puisse se connecter au Storage Daemon (serveur).
 
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)====
 
====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*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 :
 
Créer un dossier de sauvegarde :
 
  mkdir -p /data/save/bacula
 
  mkdir -p /data/save/bacula
 
  
 
====Configuration du File Daemon (client)====
 
====Configuration du File Daemon (client)====

Version du 6 août 2020 à 10:26

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/123azerty456123azerty456 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 :

Putty icon.png Console SSH

Créer ensuite les tables avec la commande :

/opt/bacula/scripts/make_bacula_tables -uroot -p

Exemple de retour :

Putty icon.png Console SSH

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 :

Putty icon.png Console SSH

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 :

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 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*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
}

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*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

Configuration du File Daemon (client)

Documentation :

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 :

Putty icon.png Console SSH

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 :

Putty icon.png Console SSH

Créer un utilisateur en lançant la commande suivante puis répondre aux questions :

php bwc setupauth

Exemple de retour :

Putty icon.png Console SSH

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.