====== Bacula et dépendances ======
===== backports =====
On va installer la version 5 qui est sur le "backports".
===== mail =====
# aptitude install exim4
===== mysql =====
# aptitude install mysql-server
===== director =====
# aptitude -t lenny-backports install bacula-director-mysql
===== console =====
# aptitude -t lenny-backports bacula-console
===== sd et fd =====
# aptitude -t lenny-backports install bacula-fd bacula-sd-mysql
====== Bacula ======
===== ipv4 =====
Si on "blacklist ipv6" , alors "bacula" doit être forcé afin de ne fonctionner qu'en ipv4... sinon, les communications echouent silencieusement (les jobs ne se terminent jamais).
Exemple de conf, pour "bacula-dir.conf" :
# TJ ---------
#DirAddress = 127.0.0.1
#DIRport = 9101 # where we listen for UA connections
DirAddresses = { ipv4 = { addr = 0.0.0.0; } }
Adapter pour chaque daemon.
===== compiler bacula-sd =====
Dans la version 5.0.2 de bacula-sd, il y a un bug genant: il ne peut pas executer plusieurs "job" sur un "device"... grrrr
Donc, on doit "installer" la version 5.0.3 ... et voila comment j'ai fait.
Sur Debian Lenny/Squeeze 64 bit:
Télécharger les sources "bacula-5.0.3.tar.gz" par là: http://www.bacula.org/en/?page=downloads
Déposer l'archive dans **''/usr/local/src''** ...
$ cd /usr/local/src
...
$ tar xvzf bacula-5.0.3.tar.gz
$ cd bacula-5.0.3
Pré-requis qui m'ont été nécessaire:
# aptitude install gcc make g++
# aptitude -t testing install libsqlite3-dev
On va compiler en "static" avec "sqlite": mais on ne s'interesse vraiment qu'a **''bacula-sd''** , et pas aux autres...
$ ./configure --with-sqlite3 --enable-build-dird=no --enable-static --disable-libtool CFLAGS="-O2" CXXFLAGS="-O2"
$ make
Mais on n'installe pas!!!
Ce qui nous interesse est simplement là: /usr/local/src/bacula-5.0.3/src/stored/bacula-sd
$ su
# /etc/init.d/bacula-sd stop
# mv /usr/sbin/bacula-sd /usr/sbin/DPKG-bacula-sd
# ln -s /usr/local/src/bacula-5.0.3/src/stored/bacula-sd /usr/sbin/.
# /etc/init.d/bacula-sd start
Et voila.
Le risque, c'est qu'au prochain upgrade, on est besoin de recréer le lien symbolique, a moins que le bug soit corrigé!
=== Oups ===
Pour "Ubuntu 6.06.2 LTS", j'ai ça:
...
Compiling bscan.c
make[1]: *** No rule to make target `../cats/libbacsql.a', needed by `bscan'. Stop.
make[1]: Leaving directory `/home/thierry/tmp/bacula-5.0.3/src/stored'
...
Que faire ?
Je renonce a "sqlite" et remplace par "mysql", avec en passant:
# aptitude install libmysqlclient15-dev
Note: "bacula-sd" n'a pas besoin de base de données... donc, je m'en fous.
====== Webacula ======
Lien: http://webacula.sourceforge.net/
===== installation ======
==== apache ====
# aptitude install apache2 libapache2-mod-php5 php5-mysql
# aptitude install php5-gd
| :!: ne pas oublier "php5-mysql" ! |
# a2enmod rewrite
# /etc/init.d/apache2 restart
==== download ====
$ cd /usr/local/src
$ wget .... webacula-5.0.2.tar.gz
$ tar xvzf ....
etc...
==== Zend Framework ====
$ wget .... ZendFramework-1.10.8-minimal.tar.gz
Dans **''/etc/php5/apache2/php.ini''** , ajouter au parametre **''include_path''** :
; TJ
; ------------------
include_path = "/usr/local/src/ZendFramework/library"
; ------------------
Ou bien:
# cd /var/www/webacula/library
# ln -s /usr/local/src/ZendFramework/library/Zend .
# /etc/init.d/apache2 restart
==== webacula ====
FIXME : copier dans /var/www/webacula
=== bconsole ===
# adduser www-data bacula
Test:
# su -l www-data -s /bin/sh -c "/usr/bin/bconsole -n -c /etc/bacula/bconsole.conf"
=== www ===
Dans **''/etc/apache2/sites-available''**, creer le fichier **''200-webacula''** contenant:
Alias "/webacula" "/var/www/webacula/html"
RewriteEngine on
Options FollowSymLinks
AllowOverride All
Order deny,allow
Allow from 127.0.0.1
# your network
Allow from 192.168.1.0/255.255.255.0
AuthType Basic
AuthName "Webacula"
#AuthUserFile /etc/apache2/conf.d/webacula.users
AuthUserFile /var/www/webacula/passwd/.webacula.users # a creer!
Require valid-user
Activer:
# a2ensite 200-webacula
Modifier **''/etc/php5/apache2/php.ini''** pour avoir:
max_execution_time = 600
memory_limit = 256M
# apache2ctl graceful
FIXME: modifier conf de **''bacula-dir.conf''** ???
Dans **''/var/www/webacula/html/.htaccess''** , faire en sorte d'avoir (?) :
SetEnv APPLICATION_ENV production
Dans le fichier **''/var/www/webacula/application/config.ini''** modifier pour avoir:
...
db.config.username = webacula
db.config.password =
...
bacula.sudo = ""
bacula.bconsole = "/usr/bin/bconsole"
...
=== MySQL ===
Dans **''../install''** , modifier avec le fichier **''webacula_mysql_create_database.sh''** avec les parametres de son choix. Par exemple:
...
db_user="webacula"
db_password=""
...
Et puis:
# ./webacula_mysql_create_database.sh -u root -p
Enter password:
Creation of webacula database succeeded.
Et aussi:
# ./webacula_mysql_make_tables.sh -u root -p
Enter password:
Creation of webacula MySQL tables succeeded.
Completer afin que ce compte puisse aussi modifier le "catalog" bacula ( FIXME: lire ne suffit pas ? ) :
mysql> GRANT ALL ON bacula.* TO webacula@localhost;
Query OK, 0 rows affected (0.00 sec)
=== www passwd ===
Creer le fichier de mots de passe:
# mkdir passwd
# cd passwd
# htpasswd -c .webacula.users Webacula
Fournir le mot de passe pour le compte **''Webacula''**
(Ne pas utiliser "-c", pour creer d'autres comptes!)
FIXME : d'aprés la doc, y a des CRON a installer
===== En marche =====
C'est mieux que rien.
====== DataBase ======
===== MySQL =====
Lien: http://wiki.bacula.org/doku.php?id=faq#restore_takes_a_long_time_to_retrieve_sql_results_from_mysql_catalog
C'est extremement lent. Il faut peut envisager autre chose que MySQL !?
==== tmpfs ====
| :!: En fait, le changement est *insignifiant* avec MySQL ! Donc, ne pas faire ça pour ça ! |
Lien: http://www.system-linux.eu/index.php?post/2009/09/10/cr%C3%A9er-un-tmpfs%2C-un-repertoire-dans-votre-ram
J'ai mounter un fichier "tmp" pour "mysql" comme ça:
# mkdir /mnt/mysql-tmp
# chmod 0777 /mnt/mysql-tmp
Dans fstab:
tmpfs /mnt/mysql-tmp tmpfs defaults,size=512M 0 0
Et puis:
# mount -a
==== my.cnf ====
Tweaks des options de MySQL ? dans my.cnf ?
$ dpkg -S my-huge.cnf
Ce que j'ai fait:
...
tmpdir = /mnt/mysql-tmp # <--- seulement si on utilise "tmpfs"
...
skip-locking
key_buffer = 384M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
...
[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M
...
==== Index ====
Lien: http://www.bacula.org/5.0.x-manuals/en/main/main/Catalog_Maintenance.html#SECTION004592000000000000000
Ce qui a fonctionné pour moi:
$ mysql -u root -p
mysql> use bacula;
Examinons avec:
mysql> show index from File;
Mais j'y comprend que dalle en fait, et donc je fais :
mysql> CREATE INDEX file_jobid_idx on File (JobId);
mysql> CREATE INDEX file_jpf_idx on File (JobId, FilenameId, PathId);
Les perfs sont booooooostés. Je peus enfin restaurer des fichiers d'une grosse base.
==== Shrink ====
Lien: http://www.mail-archive.com/bacula-users@lists.sourceforge.net/msg11973.html
Il faut que j'essaye...
# /etc/bacula/scripts/make_catalog_backup --user= --password=
DROP de la database
# mysql --user= --password= < bacula.sql
==== Compression ====
Lien: http://edin.no-ip.com/content/bacula-backup-with-gzip-compress-on
...
Software Compression: 53.9 %
...
====== TLS ======
| :!: ** CA NE MARCHE PAS ** WORK IN PROGRESS |
Liens:
*http://www.bacula.org/5.0.x-manuals/en/main/main/Bacula_TLS_Communications.html
*http://www.opendoc.net/comment-sauvegarder-avec-bacula
*tinyca: http://tinyca.sm-zone.net/
===== easy-rsa =====
==== package ====
On va recupere "easy-rsa" dans le package "openvpn".
On est dans le cas où l'on n'installera pas le package "openvpn", on veut juste "easy-rsa" :
$ dpkg --print-architecture
amd64
Je suis dans un DomU 64bit, donc, on recupère le package "openvpn" qui va bien.
$ cd ~/tmp
$ mkdir openvpn
$ cd openvpn
$ wget http://ftp.fr.debian.org/debian/pool/main/o/openvpn/openvpn_2.1~rc11-1_amd64.deb
$ dpkg -x openvpn_2.1~rc11-1_amd64.deb ./
==== install ====
"easy-rsa" est dans **''usr/share/doc/openvpn/examples/easy-rsa/2.0/''** . Donc:
$ su
# mkdir /etc/bacula/easy-rsa
# cp -Rp usr/share/doc/openvpn/examples/easy-rsa/2.0/. /etc/bacula/easy-rsa
# cd /etc/bacula/easy-rsa/
# chown -R root: *
==== vars ====
Modifier "vars" car par defaut il contient:
# cat vars | grep -v "^#" | grep -v "^$"
export EASY_RSA="`pwd`"
export OPENSSL="openssl"
export PKCS11TOOL="pkcs11-tool"
export GREP="grep"
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
export KEY_DIR="$EASY_RSA/keys"
echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR
export PKCS11_MODULE_PATH="dummy"
export PKCS11_PIN="dummy"
export KEY_SIZE=1024
export CA_EXPIRE=3650
export KEY_EXPIRE=3650
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
Il me semble judicieux d'adapter au moins:
KEY_COUNTRY
KEY_PROVINCE
KEY_CITY
KEY_ORG
KEY_EMAIL
... et peut etre:
KEY_SIZE
CA_EXPIRE
KEY_EXPIRE
==== LA PREMIERE FOIS SEULEMENT ====
=== clean-all ===
Faire:
# . ./vars
# ./clean-all
# ./build-ca
car :
-le repertoire "./keys" va etre totalement effacé ! et c'est la que seront les futures codes!!!
-le "ca" va être créé
Un répertoire "./keys" est maintenant peuplé...
Important:
Common Name : Bacula CA
=== Generate Diffie Hellman parameters ===
# ./build-dh
=== server ===
Aussi la premiere fois, il faut dire qui est le maitre des clés (en quelques sortes):
./build-key-server bacula-server
Common Name : my-bacula-server.fqdn
En "CN", le nom fqdn. svp.
=== droits ===
Faire en sorte que "bacula" est accès aux fichiers dans "keys" (pas forcément a tous).
Donc:
# cd /etc/bacula
# chown -R :bacula easy-rsa
# cd easy-rsa
# chmod g+rxs keys
Afin d'autoriser "bacula" a lire dans le repertoire "keys" et a creer ulterieurement les fichiers avec le groupe "bacula" qui va bien.
==== clients ====
# . ./vars
# ./build-key tj-debcave
Et CN = tj-debcave
On se demerde pour envoyer les fichiers suivant:
.../keys/ca.crt
.../keys/tj-debcave.crt
.../keys/tj-debcave.key
... a la machine "tj-debcave".
==== revoke ====
# . ./vars
# ./revoke-full tj-debcave
... ...
error 23 at 0 depth lookup:certificate revoked
La dernière ligne indique simplement que le certificat génère bien une erreur, maintenant qu'il est "revoké".
Mais en pratique, avec Bacula, ca ne fonctionne pas.
C'est avec "openvpn" que ca fonctionne en combinaison avec : "crl-verify ..."
Lien: http://openvpn.net/index.php/open-source/documentation/howto.html#revoke
==== bacula-console ====
=== serveur ===
Sur le serveur, dans **''bacula-dir.conf''** :
... ...
Director { # define myself
... ...
# -- TLS --
TLS Enable = yes
TLS Require = no
TLS CA Certificate File = /etc/bacula/easy-rsa/keys/ca.crt
TLS Certificate = /etc/bacula/easy-rsa/keys/bacula.crt
TLS Key = /etc/bacula/easy-rsa/keys/bacula.key
# ------------
}
... ...
:!: "TLS Require = no" afin de toléré l'absence de chiffrement... notamment a cause de "webacula"
=== un client ===
Dans **''bconsole.conf''** :
... ...
Director {
... ...
address = bacula.fqdn
... ...
# ----------
TLS Enable = yes
TLS Require = yes
TLS CA Certificate File = /etc/bacula/keys/ca.crt
TLS Certificate = /etc/bacula/keys/tj-debcave.crt
TLS Key = /etc/bacula/keys/tj-debcave.key
# ----------
}
... ...
:!: dans "address", mettre l'adresse FQDN et non pas l'IP !!!
... sinon ca marche po
et faire gaffe aux droits d'accès aux fichiers.