Webacula ou gérer ses sauvegardes Bacula

Bacula est un gestionnaire de sauvegarde complet. Il fournit par défaut une interface en ligne de commande pour superviser les sauvegarde passées, à venir et la restauration. Pour certaines actions, il est quand même agréable d’avoir une interface plus accessible ce que propose Webacula.

Pré requis

Pour installer convenablement Webacula sur son serveur, il faut :

  • un environnement LAMP ou assimilé (ici je ne traiterais que le cas Apache2).
  • le module bconsole
  • un accès à la base de données de bacula director
  • le framework Zend
  • sudo pour autoriser le pilotage de bconsole

D’autres éléments sont nécessaires au bon fonctionnement de l’interface web mais elles seront explicitées par la suite.

Préparation de l’environnement

Webacula est une application php qui requiert certains éléments :

  • Zend Framework
  • php-db

Nous commençons par créer un répertoire vide /var/www/webacula.
Nous téléchargeons webacula et le framework Zend :

wget http://github.com/tim4dev/webacula/tarball/v3.3.1
wget http://framework.zend.com/releases/ZendFramework-1.10.7/ZendFramework-1.10.7.tar.gz
tar xfzv tim4dev-webacula-v3.3.1-0-g32bc0e4.tar.gz
tar xfzv ZendFramework-1.10.7.tar.gz

Nous associons le framework au projet :
ln -s /var/www/webacula/ZendFramework-1.10.7/library/Zend /var/www/webacula/html/Zend

Nous pensons à installer les paquets d’accès à la base de données.
apt-get install php-bd

Accès aux données de Bacula

Webacula pour suivre et piloter les sauvegardes a besoin de 2 éléments spécifiques à Bacula :

  • la console
  • le catalogue

La console

La console bacula est un paquet autonome :

  • apt-get install bacula-console

Concernant la configuration de celui ci je vous invite à regarder le fichier /etc/bacula/bacula-console.conf.
Une configuration type serait :

#
# Bacula User Agent (or Console) Configuration File
#

Director {
 Name = director-dir #Nom du director
 DIRport = 9101
 address = 192.168.20.10 #IP director
 Password = "sWaZRqTS1VX0uTcyTZNRlI4Ax9Gj5MK1FNC92QBta0xi"
}

Nous permettons à notre utilisateur apache d’exploiter bconsole grâce à sudo :

  • apt-get install sudo
  • Dans /etc/sudoers, on ajoute la directive www-data ALL=NOPASSWD: /usr/bin/bconsole

Le catalogue

Le catalogue liste toutes les données sauvegardées, où, comment , ... Il est donc utile de lire ses informations pour avoir le détail des jobs par exemple.

Pour accéder au catalogue, si nous avons une base MySQL ou PostgreSQL cela est assez simple, on installe les paquets client php pour ces serveurs de données.
apt-get install mysql-client php5-mysql
ou bien
apt-get install postgresql-client php5-pgsql

Si on utilise sqlite, cela est plus original. Si le Director est présent sur la même machine, il est possible de se connecter directement au fichier.
Si le Director est sur une autre machine, on a alors plusieurs alternatives :

  • monter un répertoire fuse vers le director,
  • scp la base sqlite,
  • faire un .dump coté director et importer le sql sur notre machine web,
  • autre idée

Il faut dans tous les cas avoir les paquets relatifs à Sqlite :

apt-get install sqlite3 php5-sqlite

Configuration de Webacula

La configuration se passe dans le fichier /var/www/webacula/application/config.ini

Je joins une configuration utilisant sqlite :

[general]
; supported adapters : PDO_MYSQL, PDO_PGSQL, PDO_SQLITE
db.adapter = PDO_SQLITE
;db.config.host = localhost
;db.config.username = root
;db.config.password =
; une copie de la base sqlite provenant du director
db.config.dbname = "/var/www/webacula/catalog/bacula.db"
; pour Sqlite db.config.dbname = "/chemin/complet/du/catalogue/bacula.db"

; see http://www.php.net/timezones
def.timezone = "Europe/Paris"

; Si pas de locale définie par défaut, webacula utilise l'auto détection
; locales disponibles : en, de, fr, pt_BR, ru
; locale = "fr"

; Se reporter au fichier INSTALL pour plus de détail
bacula.sudo = "/usr/bin/sudo"
bacula.bconsole = "/usr/bin/bconsole"
bacula.bconsolecmd = "-n -c /etc/bacula/bconsole.conf"

; Répertoire "tmpdir" dans le quel sera sauvé le fichier contenant la liste des fichier à restaurer.
; Ce répertoire et ses fichiers devaient être accessibles en lecture par le Director.
tmpdir = "/tmp"

; time to live data (session and temporary data tables) for restore files (sec)
; default = 1h, minimum = 600sec.
; ttl_restore_session = 3600

; for debug only (default = 0)
; debug = 1

; the text, which will be placed in the header of the page
; head_title = "webacula :: domain.tld"

; Menu principal flottant (default = 0)
; Le menu demeur visible meme si on scroll dans la page.
; They're animated, so they move up and down as you scroll the browser window up or down.
; mainmenu_floating = 1

[timeline]
gdfontpath = "/usr/share/fonts/dejavu"
fontname   = "DejaVuLGCSansMono"
fontsize   = 10

[webacula]
; supported adapters : PDO_MYSQL, PDO_PGSQL, PDO_SQLITE
db.adapter = PDO_SQLITE
;db.config.host = localhost
;db.config.username = wbuser
;db.config.password = "wbpass"
;db.config.dbname = webacula
; for Sqlite db.config.dbname = "/var/lib/sqlite/webacula.db"
db.config.dbname = "/var/www/bacula/catalog/webacula.db"

email.to_admin = root@localhost
email.from = webacula@localhost

[feed]
feed_title = "Mon serveur de sauvegarde Bacula #1"
feed_desc  = "Description du flux ici"

[layout]
; available values : "default"
path = "default"

Configuration de la base webacula

Webacula trace certains éléments internes pour son bon fonctionnement, ce qui explique les 2 configurations d’accès aux bases de données.
Un script est disponible pour générer la base sqlite adaptée :
./webacula_sqlite_create_database.sh /var/www/webacula/catalog/webacula.db

À noter : Il est conseillé de patcher ce script car l’utilisateur apache n’est pas www-data par défaut.

Configuration d’Apache

Notre service webacula est configuré, notre serveur web doit maintenant l’exécuter correctement.
Webacula fournit un fichier de configuration (/var/www/webacula/conf/webacula.conf) gérant les droits d’accès et les alias nécessaires à son bon fonctionnement.

La solution proposée est de préparer un fichier de configuration apache classique et d’inclure le fichier de configuration Webacula :
nano cat /etc/apache2/sites-available/webacula

<VirtualHost *:80>
       ServerAdmin webacula@localhost
       ServerName webacula
       DocumentRoot /var/www/webacula

       <Directory />
               Options FollowSymLinks
               AllowOverride None
       </Directory>
       <Directory /var/www/webacula/>
               Options Indexes Includes FollowSymLinks MultiViews
               AllowOverride All
               Order allow,deny
               Allow from all
       </Directory>

       Include /var/www/webacula/install/webacula.conf

       ErrorLog /var/log/apache2/webacula.log

       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       LogLevel warn

       CustomLog /var/log/apache2/access.log combined

</VirtualHost>

Avant de relancer le serveur web, il est impératif de vérifier le fichier /var/www/webacula/install/webacula.conf. La configuration par défaut cible un autre répertoire d’exécution et les droits d’accès sont limités à localhost.

Et pour finir

Un petit a2ensites webacula ; /etc/init.d/apache2 reload devrait nous donner satisfaction :

Webacula
Webacula en action

Messages

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.