--- /dev/null
+%%
+%%
+
+\chapter{Installer Bacula}
+\label{_ChapterStart17}
+\index[general]{Installer Bacula }
+\index[general]{Bacula!Installer }
+\addcontentsline{toc}{section}{Installer Bacula}
+
+\section{Pr\'erequis}
+\index[general]{Pr\'erequis }
+\addcontentsline{toc}{section}{Pr\'erequis}
+
+En g\'en\'eral, il vous faudra les sources de la version courante de Bacula,
+et si vous souhaitez ex\'ecuter un client Windows, vous aurez besoin de la
+version binaire du client Bacula pour Windows. Par ailleurs, Bacula a besoin
+de certains paquetages externes (tels {\bf SQLite}, {\bf MySQL} ou {\bf
+PostgreSQL}) pour compiler correctement en accord avec les options que vous
+aurez choisies. Pour vous simplifier la t\^ache, nous avons combin\'e
+plusieurs de ces programmes dans deux paquetages {\bf depkgs} (paquetages de
+d\'ependances). Ceci peut vous simplifier la vie en vous fournissant tous les
+paquets n\'ecessaires plut\^ot que de vous contraindre \`a les trouver sur la
+Toile, les charger et installer.
+
+\section{Distribution des fichiers source}
+\index[general]{fichiers source}
+\index[general]{distrribution fichiers}
+\addcontentsline{toc}{section}{Distribution des fichiers source}
+A partir de la version 1.38.0, le code source est \'eclat\'e en quatre
+fichiers tar correspondant \`a quatre modules diff\'erents dans le CVS
+Bacula. Ces fichiers sont :
+
+\begin{description}
+\item [bacula-1.38.0.tar.gz]
+ Il s'agit de la distribution primaire de Bacula. Pour chaque nouvelle
+ version, le num\'ero de version (ici, 1.38.0) sera mise \`a jour.
+
+\item [bacula-docs-1.38.0.tar.gz]
+ Ce fichier contient une copie du r\'epertoire docs, avec les documents
+ pr\'e-construits : R\'epertoire html anglais, fichier html unique et
+ fichier pdf. Les traductions allemande et fran\c {c}aise sont en cours mais
+ ne sont pas pr\'e-construites.
+
+\item [bacula-gui-1.38.0.tar.gz]
+ Ce fichier contient les programmes graphique en dehors du coeur
+ de l'application. Actuellement, il contient bacula-web, un programme
+ PHP pour produire une vue d'ensemble des statuts de vos jobs
+ Bacula consultable dans un navigateur ; et bimagemgr, un programme
+ qui permet de graver des images de CDROMS depuis un navigateur avec
+ les volumes Bacula.
+
+\item [bacula-rescue-1.8.1.tar.gz]
+ Ce fichier contient le code du CDROM de secours Bacula. Notez
+ que le num\'ero de version de ce paquetage n'est pas li\'e \`a celui
+ de Bacula. En utilisant ce code, vous pouvez graver un CDROM contenant
+ la configuration de votre syst\`eme et une version statiquement li\'ee du
+ File Daemon. Ceci peut vous permettre de repartitionner et reformater
+ ais\'ement vos disques durs et de recharger votre syst\`eme avec Bacula
+ en cas de d\'efaillance du disque dur.
+
+\item [winbacula-1.38.0.exe]
+ Ce fichier est l'installeur 32 bits Windows pour l'installation du
+ client Windows (File Daemon) sur une machine Windows.
+ A partir de la version 1.39.20, cet exécutable contiendra aussi
+ le Director Win32 et le Storage Daemon Win32.
+\end{description}
+
+\label{upgrading1}
+
+\section{Mettre Bacula \`a jour}
+\index[general]{Mettre Bacula \`a jour }
+\index[general]{Jour!Mettre Bacula \`a }
+\addcontentsline{toc}{section}{Mettre Bacula \`a jour}
+
+Si vous faites une mise \`a jour de Bacula, vous devriez d'abord lire
+attentivement les ReleaseNotes de toutes les versions entre votre version
+install\'ee et celle vers laquelle vous souhaitez mettre \`a jour. Si la base
+de donn\'ees du catalogue a \'et\'e mise \`a jour (c'est presque toujours le cas
+à chaque nouvelle version majeure), vous devrez soit
+r\'einitialiser votre base de donn\'ees et repartir de z\'ero, soit en
+sauvegarder une copie au format ASCII avant de proc\'eder \`a sa mise \`a
+jour. Ceci est normalement fait lorsque Bacula est compil\'e et install\'e par :
+
+\begin{verbatim}
+cd <installed-scripts-dir> (default /etc/bacula)
+./update_bacula_tables
+\end{verbatim}
+
+Ce script de mise \`a jour peut aussi \^etre trouv\'e dans le r\'epertoire
+src/cats des sources de Bacula.
+
+S'il y a eu plusieurs mises \`a jour de la base de donn\'ees entre votre
+version et celle vers laquelle vous souhaitez \'evoluer, il faudra appliquer
+chaque script de mise \`a jour de base de donn\'ees. Vous pouvez trouver tous
+les anciens scripts de mise \`a jour dans le r\'epertoire {\bf upgradedb} des
+sources de Bacula. Il vous faudra \'editer ces scripts pour qu'ils
+correspondent \`a votre configuration. Le script final, s'il y en a un, sera
+dans le r\'epertoire {\bf src/cats} comme indiqu\'e dans la ReleaseNote.
+
+Si vous migrez d'une version majeure vers une autre, vous devrez remplacer
+tous vos composants ({\it daemons}) en m\^eme temps car, g\'en\'eralement, le
+protocole inter-{\it daemons} aura chang\'e. Par contre, entre deux versions
+mineures d'une m\^eme majeure (par exemple les versions 1.32.x), \`a moins
+d'un bug, le protocole inter-{\it daemons} ne changera pas. Si cela vous
+semble confus, lisez simplement les ReleaseNotes tr\`es attentivement, elles
+signaleront si les {\it daemons} doivent \^etre mis \`a jour simultan\'ement.
+
+Enfin, notez qu'il n'est g\'en\'eralement pas n\'ecessaire d'utiliser
+{\bf make uninstall} avant de proc\'eder \`a une mise \`a jour. En fait, si vous le
+faites vous effacerez probablement vos fichiers de configuration, ce qui
+pourrait \^etre d\'esastreux. La proc\'edure normale de mise \`a jour est simplement :
+\begin{verbatim}
+./configure (your options)
+make
+make install
+\end{verbatim}
+
+ En principe, aucun de vos fichiers .conf ou .sql ne devrait \^etre \'ecras\'e,
+ et vous devez exécuter les deux commandes {\bf make} et {\bf make install}.
+ {\bf make install} sans un {\bf make} préalable ne fonctionnera pas.
+
+Pour plus d'informations sur les mises \`a jour, veuillez consulter la partie
+\ilink{Upgrading Bacula Versions}{upgrading} du chapitre Astuces de ce manuel
+
+\section{Paquetage de D\'ependences}
+\label{Dependency}
+\index[general]{Paquetage de D\'ependences}
+\index[general]{Paquetage!D\'ependences}
+\addcontentsline{toc}{section}{Paquetage de D\'ependences}
+
+Comme nous l'\'evoquions plus haut, nous avons combin\'e une s\'erie de
+programmes dont Bacula peut avoir besoin dans les paquets {\bf depkgs} et {\bf
+depkgs1}. Vous pouvez, bien sur, obtenir les paquets les plus r\'ecents
+directement des auteurs. Le fichier README dans chaque paquet indique o\`u les
+trouver. Pourtant, il faut noter que nous avons test\'e la compatibilit\'e des
+paquets contenus dans les fichiers depkgs avec Bacula.
+
+Vous pouvez, bien sur, obtenir les dernieres versions de ces paquetages de
+leurs auteurs. Les r\'ef\'erences n\'ecessaires figurent dans le README de
+chaque paquet. Quoi qu'il en soit, soyez conscient du fait que nous avons
+test\'e la compatibilit\'e des paquetages des fichiers depkgs.
+
+Typiquement, un paquetage de d\'ependances sera nomm\'e {\bf
+depkgs-ddMMMyy.tar.gz} et {\bf depkgs1-ddMMMyy.tar.gz} o\`u {\bf dd} est le
+jour o\`u n'ous l'avons publi\'e, {\bf MMM} l'abbr\'eviation du mois et {\bf
+yy} l'ann\'ee. Par exemple: {\bf depkgs-07Apr02.tar.gz}. Pour installer et
+construire ce paquetage (s'il est requis), vous devez:
+
+\begin{enumerate}
+\item Cr\'eer un r\'epertoire {\bf bacula}, dans lequel vous placerez les
+ sources de Bacula et le paquetage de d\'ependances.
+\item D\'esarchiver le {\bf depkg} dans le r\'epertoire {\bf bacula}.
+\item vous d\'eplacer dans le r\'epertoire obtenu: cd bacula/depkgs
+\item ex\'ecuter make
+ \end{enumerate}
+
+La composition exacte des paquetages de d\'ependance est susceptible de
+changer de temps en temps, voici sa composition actuelle :
+
+\begin{longtable}{|l|l|l|}
+ \hline
+\multicolumn{1}{|c| }{\bf Paquets externes } & \multicolumn{1}{c| }{\bf depkgs
+} & \multicolumn{1}{c| }{\bf depkgs1 } \\
+ \hline
+{SQLite } & \multicolumn{1}{c| }{X } & \multicolumn{1}{c| }{- } \\
+ \hline
+{SQLite3 } & \multicolumn{1}{c| }{X } & \multicolumn{1}{c| }{- } \\
+ \hline
+{mtx } & \multicolumn{1}{c| }{X } & \multicolumn{1}{c| }{- } \\
+ \hline
+{readline } & \multicolumn{1}{c| }{- } & \multicolumn{1}{c| }{X } \\
+ \hline
+{pthreads } & \multicolumn{1}{c| }{- } & \multicolumn{1}{c| }{- } \\
+ \hline
+{zlib } & \multicolumn{1}{c| }{- } & \multicolumn{1}{c| }{- } \\
+ \hline
+{wxWidgets } & \multicolumn{1}{c| }{- } & \multicolumn{1}{c| }{- } \\
+\hline
+
+\end{longtable}
+
+Notez que certains de ces paquets sont de taille respectable, si bien que
+l'\'etape de compilation peut prendre un certain temps. Les instructions
+ci-dessous construiront tous les paquets contenus dans le r\'epertoire.
+Cependant, la compilation de Bacula, ne prendra que les morceaux dont Bacula a
+effectivement besoin.
+
+Une alternative consiste \`a ne construire que les paquets n\'ecessaires. Par
+exemple,
+
+\footnotesize
+\begin{verbatim}
+cd bacula/depkgs
+make sqlite
+\end{verbatim}
+\normalsize
+
+configurera et construira SQLite et seulement SQLite.
+
+Vous devriez construire les paquets requis parmi {\bf depkgs} et/ou {\bf
+depkgs1} avant de configurer et compiler Bacula car Bacula en aura besoin
+d\`es la compilation.
+
+M\^eme si vous n'utilisez pas SQLite, vous pourriez trouver le paquet {\bf
+depkgs} pratique pour construire {\bf mtx} car le programme {\bf tapeinfo} qui
+vient avec peut souvent vous fournir de pr\'ecieuses informations sur vos
+lecteurs de bandes SCSI (e.g. compression, taille min/max des blocks,...).
+
+Le paquet {\bf depkgs-win32} est obsolète à partir de la version 1.39 de Bacula.
+Il était autrefois utilisé pour compiler le client natif Win32 qui est
+désormais construit sur Linux grâce à un mécanisme de compilation croisée.
+Tous les outils et librairies tierces sont automatiquement téléchargées
+par l'exécution de scripts apropriés. Lisez le fichier src/win32/README.mingw32
+pour plus de détails.
+
+\section{Syst\`emes Support\'es}
+\label{Systems}
+\index[general]{Syst\`emes Support\'es }
+\addcontentsline{toc}{section}{Syst\`emes Support\'es}
+
+Veuillez consulter la section
+\ilink{ Syst\`emes support\'es}{SupportedOSes} du chapitre
+D\'emarrer avec Bacula de ce manuel.
+
+\section{Construire Bacula \`a partir des sources}
+\label{Building}
+\index[general]{Construire Bacula \`a partir des sources }
+\index[general]{Sources!Construire Bacula \`a partir des }
+\addcontentsline{toc}{section}{Construire Bacula \`a partir des sources}
+
+L'installation basique est plut\^ot simple.
+
+\begin{enumerate}
+\item Installez et construisez chaque {\bf depkgs} comme indiqu\'e plus haut.
+
+
+\item Configurez et installez MySQL ou PostgreSQL (si vous le souhaitez):
+ \ilink{Installer et configurer MySQL Phase I}{_ChapterStart} ou
+ \ilink{Installer et configurer PostgreSQL Phase
+I}{_ChapterStart10}. Si vous installez depuis des rpms, et
+utilisez MySQL, veillez \`a installer {\bf mysql-devel}, afin que les
+fichiers d'en-t\^etes de MySQL soient disponibles pour la compilation de
+Bacula. De plus, la librairie client MySQL requi\`ert la librairie de
+compression gzip {\bf libz.a} ou {\bf libz.so}. Ces librairies sont dans le
+paquet {\bf libz-devel}. Sur Debian, vous devrez charger le paquet {\bf
+zlib1g-dev}. Si vous n'utilisez ni rpms, ni debs, il vous faudra trouver le
+paquetage adapt\'e \`a votre syst\`eme.
+
+Notez que si vous avez dej\`a MySQL
+ou PostgreSQL sur votre syst\`eme vous pouvez sauter cette phase pourvu que
+vous ayez construit "the thread safe libraries'' et que vous ayez d\'ej\`a
+install\'e les rpms additionnels sus-mentionn\'es.
+
+\item En alternative \`a MySQL et PostgreSQL, configurez et installez SQLite,
+ qui fait partie du paquetage {\bf depkgs}.
+ \ilink{Installer et configurer SQLite}{_ChapterStart33}.
+ SQLite n'est probablement pas adapt\'e \`a un environnement de production
+ de taille respectable, en raison de sa lenteur par rapport \`a MySQL, et de la
+ pauvret\'e de ses outils de reconstruction de base de donn\'ees endommag\'ee.
+
+\item D\'esarchivez les sources de Bacula, de pr\'ef\'erence dans le
+ r\'epertoire {\bf bacula} \'evoqu\'e ci-dessus.
+
+\item D\'eplacez-vous dans ce r\'epertoire.
+
+\item Ex\'ecutez ./configure (avec les options appropri\'ees comme d\'ecrit
+ ci-dessus)
+
+\item Examinez tr\`es attentivement la sortie de ./configure,
+ particuli\`erement les r\'epertoires d'installation des binaires et des
+ fichiers de configuration. La sortie de ./configure est stock\'ee dans le
+fichier {\bf config.out} et peut \^etre affich\'ee \`a volont\'e sans
+relancer ./configure par la commande {\bf cat config.out}.
+
+\item Vous pouvez relancer ./configure avec des options diff\'erentes apr\`es
+ une premi\`ere ex\'ecution, cela ne pose aucun probl\`eme, mais vous devriez
+ d'abord ex\'ecuter:
+
+\footnotesize
+\begin{verbatim}
+ make distclean
+\end{verbatim}
+\normalsize
+
+afin d'\^etre certain de repartir de z\'ero et d'\'eviter d'avoir un m\'elange
+avec vos premi\`eres options. C'est n\'ecessaire parce que ./configure met
+en cache une bonne partie des informations. {\bf make distclean} est aussi
+recommand\'e si vous d\'eplacez vos fichiers source d'une machine \`a une
+autre. Si {\bf make distclean} \'echoue, ignorez-le et continuez.
+
+\item make
+
+ Si vous obtenez des erreurs durant le {\it linking} dans le r\'epertoire du
+Storage Daemon (/etc/stored), c'est probablement parce que vous avez charg\'e
+la librairie statique sur votre syst\`eme. J'ai remarqu\'e ce probl\`eme sur
+un Solaris. Pour le corriger, assurez-vous de ne pas avoir ajout\'e l'option
+{\bf \verb{--{enable-static-tools} \`a la commande {\bf ./configure}.
+
+Si vous ignorez cette \'etape ({\bf make}) et poursuivez imm\'ediatement avec
+{\bf make install}, vous commettez deux erreurs s\'erieuses : d'abord, votre
+installation va \'echouer car Bacula a besoin d'un {\bf make} avant un
+{\bf make install} ; ensuite, vous vous privez de la possibilit\'e de vous
+assurer qu'il n'y a aucune erreur avant de commencer \`a \'ecrire les fichiers dans
+vos r\'epertoires syst\`eme.
+
+\item make install
+Avant de lancer cette commande, v\'erifiez consciencieusement que vous avez bien
+ex\'ecut\'e la commande {\bf make} et que tout a \'et\'e compil\'e proprement et li\'e
+sans erreur.
+
+\item Si vous \^etes un nouvel utilisateur de Bacula, nous vous recommandons
+ {\bf fortement} de sauter l'\'etape suivante et d'utiliser le fichier de
+ configuration par d\'efaut, puis d'ex\'ecuter le jeu d'exemples du prochain
+chapitre avant de revenir modifier vos fichier de configuration pour qu'ils
+satisfassent vos besoins.
+
+\item Modifiez les fichiers de configuration de chacun des trois {\it daemons}
+ (Directory, File, Storage) et celui de la Console. Pour plus de d\'etails,
+ consultez le chapitre
+\ilink{Fichiers de Configuration de Bacula}{_ChapterStart16} Nous
+vous recommandons de commencer par modifier les fichiers de configuration
+fournis par d\'efaut, en faisant les changements minima indispensables. Vous
+pourrez proc\'eder \`a une adaptation compl\`ete une fois que Bacula
+fonctionnera correctement. Veuillez prendre garde \`a modifier les mots de
+passe qui sont g\'en\'er\'es al\'eatoirement, ainsi que les noms car ils
+doivent s'accorder entre les fichiers de configuration pour des raisons de
+s\'ecurit\'e.
+
+\item Cr\'eez la base de donn\'ees Bacula MySQL et ses tables (si vous
+ utilisez MySQL)
+ \ilink{Installer et configurer MySQL Phase II}{mysql_phase2} ou
+cr\'eez la base de donn\'ees Bacula PostgreSQL et ses tables
+\ilink{Installer et configurer PostgreSQL Phase
+II}{PostgreSQL_phase2} (si vous utilisez PostgreSQL) ou
+encore
+\ilink{Installer et configurer SQLite Phase II}{phase2} (si vous
+utilisez SQLite)
+
+\item D\'emarrez Bacula ({\bf ./bacula start}) Notez: Le prochain chapitre
+ expose ces \'etapes en d\'etail.
+
+\item Lancez la Console pour communiquer avec Bacula.
+
+\item Pour les deux \'el\'ements pr\'ec\'edents, veuillez suivre les
+ instructions du chapitre
+ \ilink{Ex\'ecuter Bacula}{_ChapterStart1} o\`u vous ferez une
+simple sauvegarde et une restauration. Faites ceci avant de faire de lourdes
+modifications aux fichiers de configuration, ainsi vous serez certain que
+Bacula fonctionne, et il vous sera plus familier. Apr\`es quoi il vous sera
+plus facile de changer les fichiers de configuration.
+\item Si apr\`es l'installation de Bacula, vous d\'ecidez de le d\'eplacer,
+ c'est \`a dire de l'installer dans un jeu de r\'epertoires diff\'erents,
+ proc\'edez comme suit :
+
+\footnotesize
+\begin{verbatim}
+ make uninstall
+ make distclean
+ ./configure (vos-nouvelles-options)
+ make
+ make install
+
+\end{verbatim}
+\normalsize
+
+\end{enumerate}
+
+Si tout se passe bien, {\bf ./configure} d\'eterminera correctement votre
+syst\`eme et configurera correctement le code source. Actuellement, FreeBSD,
+Linux (RedHat), et Solaris sont support\'es. Des utilisateurs rapportent que
+le client Bacula fonctionne sur MacOS X 10.3 tant que le support readline est
+d\'esactiv\'e.
+
+Si vous installez Bacula sur plusieurs syst\`emes identiques, vous pouvez
+simplement transf\'erer le r\'epertoire des sources vers ces autres syst\`emes
+et faire un "make install''. Cependant s'il y a des diff\'erences dans les
+librairies, ou les versions de syst\`emes, ou si vous voulez installer sur un
+syst\`eme diff\'erent, vous devriez recommencer \`a partir de l'archive tar
+compress\'ee originale. Si vous transf\'erez un r\'epertoire de sources o\`u
+vous avez d\'ej\`a ex\'ecut\'e la commande ./configure, vous DEVEZ faire:
+
+\footnotesize
+\begin{verbatim}
+make distclean
+\end{verbatim}
+\normalsize
+
+avant d'ex\'ecuter \`a nouveau ./configure. Ceci est rendu n\'ecessaire par
+l'outil GNU autoconf qui met la configuration en cache, de sorte que si vous
+r\'eutilisez la configuration d'une machine Linux sur un Solaris, vous pouvez
+\^etre certain que votre compilation \'echouera. Pour l'\'eviter, comme
+mentionn\'e plus haut, recommencez depuis l'archive tar, ou faites un "make
+distclean''.
+
+En g\'en\'eral, vous voudrez probablement sophistiquer votre {\bf configure}
+pour vous assurer que tous les modules que vous souhaitez soient construits et
+que tout soit plac\'e dans les bons r\'epertoires.
+
+Par exemple, sur Fedora, RedHat ou SuSE, on pourrait utiliser ceci:
+
+\footnotesize
+\begin{verbatim}
+CFLAGS="-g -Wall" \
+ ./configure \
+ --sbindir=$HOME/bacula/bin \
+ --sysconfdir=$HOME/bacula/bin \
+ --with-pid-dir=$HOME/bacula/bin/working \
+ --with-subsys-dir=$HOME/bacula/bin/working \
+ --with-mysql \
+ --with-working-dir=$HOME/bacula/bin/working \
+ --with-dump-email=$USER
+\end{verbatim}
+\normalsize
+
+Notez: l'avantage de cette configuration pour commencer, est que tout sera mis
+dans un seul r\'epertoire, que vous pourrez ensuite supprimer une fois que
+vous aurez ex\'ecut\'e les exemples du prochain chapitre, et appris comment
+fonctionne Bacula. De plus, ceci peut \^etre install\'e et ex\'ecut\'e sans
+\^etre root.
+
+Pour le confort des d\'eveloppeurs, j'ai ajout\'e un script {\bf
+defaultconfig} au r\'epertoire {\bf examples}. Il contient les r\'eglages que
+vous devriez normalement utiliser, et chaque d\'eveloppeur/utilisateur devrait
+le modifier pour l'accorder \`a ses besoins. Vous trouverez d'autres exemples
+dans ce r\'epertoire.
+
+Les options {\bf \verb{--{enable-conio} ou {\bf \verb{--{enable-readline} sont utiles car
+elles conf\`erent un historique de lignes de commandes et des capacit\'es
+d'\'edition \`a la Console. Si vous avez inclus l'une ou l'autre option, l'un
+des deux paquets {\bf termcap} ou {\bf ncurses} sera n\'ecessaire pour
+compiler. Sur la plupart des syst\`emes, y compris RedHat et SuSE, vous
+devriez inclure le paquet ncurses. Si Le processus de configuration de
+Bacula le d\'etecte, il l'utilisera plut\^ot que la librairie termcap.
+Sur certains syst\`emes, tels que SUSE, la librairie termcap n'est
+pas dans le r\'epertoire standard des librairies par cons\'equent, l'option
+devrait \^etre d\'esactiv\'ee ou vous aurez un message tel que:
+
+\footnotesize
+\begin{verbatim}
+/usr/lib/gcc-lib/i586-suse-linux/3.3.1/.../ld:
+cannot find -ltermcap
+collect2: ld returned 1 exit status
+\end{verbatim}
+\normalsize
+
+lors de la compilation de la Console Bacula. Dans ce cas, il vous faudra
+placer la variable d'environnement {\bf LDFLAGS} avant de compiler.
+
+\footnotesize
+\begin{verbatim}
+export LDFLAGS="-L/usr/lib/termcap"
+\end{verbatim}
+\normalsize
+
+Les m\^emes contraintes de librairies s'appliquent si vous souhaitez utiliser
+les sous-programmes readlines pour l'\'edition des lignes de commande et
+l'historique, ou si vous utilisez une librairie MySQL qui requiert le
+chiffrement. Dans ce dernier cas, vous pouvez exporter les librairies
+additionnelles comme indiqu\'e ci-dessus ou, alternativement, les inclure
+directement en param\`etres de la commande ./configure comme ci-dessous :
+
+ \footnotesize
+ \begin{verbatim}
+ LDFLAGS="-lssl -lcyrpto" \
+ ./configure <vos-options>
+ \end{verbatim}
+\normalsize
+
+
+Veuillez noter que sur certains syst\`emes tels que Mandriva, readline tend
+\`a "avaler'' l'invite de commandes, ce qui le rend totalement inutile. Si
+cela vous arrive, utilisez l'option "disable'', ou si vous utilisez une
+version post\'erieure \`a 1.33 essayez {\bf \verb{--{enable-conio} pour utiliser une
+alternative \`a readline int\'egr\'ee. Il vous faudra tout de m\^eme termcap
+ou ncurses, mais il est peu probable que le paquetage {\bf conio} gobe vos
+invites de commandes.
+
+Readline n'est plus support\'e depuis la version 1.34. Le code reste
+disponible, et si des utilisateurs soumettent des patches, je serai heureux de
+les appliquer. Cependant, \'etant donn\'e que chaque version de readline
+semble incompatible avec les pr\'ec\'edentes, et qu'il y a des diff\'erences
+significatives entre les syst\`emes, je ne puis plus me permettre de le
+supporter.
+
+\section{Quelle base de donn\'ees utiliser ?}
+\label{DB}
+\index[general]{Utiliser!Quelle base de donn\'ees }
+\index[general]{Quelle base de donn\'ees utiliser ? }
+\addcontentsline{toc}{section}{Quelle base de donn\'ees utiliser ?}
+
+Avant de construire Bacula, vous devez d\'ecider si vous voulez utiliser
+SQLite, MySQL ou PostgreSQL. Si vous n'avez pas d\'ej\`a MySQL ou PostgreSQL
+sur votre machine, nous vous recommandons de d\'emarrer avec SQLite. Ceci vous
+facilitera beaucoup l'installation car SQLite est compil\'e dans Bacula et ne
+requiert aucune administration. SQLite fonctionne bien et sied bien aux
+petites et moyennes configurations (maximum 10-20 machines). Cependant, il nous
+faut signaler que plusieurs utilisateurs ont subi des corruptions inexpliqu\'ees
+de leur catalogue SQLite. C'est pourquoi nous recommandons de choisir MySQL
+ou PostgreSQL pour une utilisation en production.
+
+Si vous souhaitez utiliser MySQL pour votre catalogue Bacula, consultez le
+chapitre
+\ilink{Installer et Configurer MySQL}{_ChapterStart} de ce manuel.
+Vous devrez installer MySQL avant de poursuivre avec la configuration de
+Bacula. MySQL est une base de donn\'ees de haute qualit\'e tr\`es efficace et
+qui convient pour des configurations de toutes tailles. MySQL est
+l\'eg\`erement plus complexe \`a installer et administrer que SQLite en raison
+de ses nombreuses fonctions sophistiqu\'ees telles que userids et mots de
+passe. MySQL fonctionne en tant que processus distinct, est r\'eellement une
+solution professionnelle et peut prendre en charge des bases de donn\'ees de
+dimension quelconque.
+
+Si vous souhaitez utiliser PostgreSQL pour votre catalogue Bacula, consultez
+le chapitre
+\ilink{Installer et Configurer PostgreSQL}{_ChapterStart10} de ce
+manuel. Vous devrez installer PostgreSQL avant de poursuivre avec la
+configuration de Bacula. PostgreSQL est tr\`es similaire \`a MySQL bien que
+tendant \`a \^etre un peu plus conforme \`a SQL92. PostgreSQL poss\`ede
+beaucoup plus de fonctions avanc\'ees telles que les transactions, les
+proc\'edures stock\'ees, etc. PostgreSQL requiert une certaine connaissance
+pour son installation et sa maintenance.
+
+Si vous souhaitez utiliser SQLite pour votre catalogue Bacula, consultez le
+chapitre
+\ilink{Installer et Configurer SQLite}{_ChapterStart33} de ce manuel.
+
+\section{D\'emarrage rapide}
+\index[general]{D\'emarrage rapide }
+\index[general]{Rapide!D\'emarrage }
+\addcontentsline{toc}{section}{D\'emarrage rapide}
+
+Il y a de nombreuses options et d'importantes consid\'erations donn\'ees
+ci-dessous que vous pouvez passer pour le moment si vous n'avez eu aucun
+probl\`eme lors de la compilation de Bacula avec une configuration
+simplifi\'ee comme celles montr\'ees plus haut.
+
+Si le processus ./configure ne parvient pas \`a trouver les librairies
+sp\'ecifiques (par exemple libintl), assurez vous que le paquetage appropri\'e
+est install\'e sur votre syst\`eme. S'il est install\'e dans un r\'epertoire non
+standard (au moins pour Bacula), il existe dans la plupart des cas une
+option parmi celles \'enum\'er\'ees ci-dessous (ou avec "./configure {-}{-}help")
+qui vous permettra de sp\'ecifier un r\'epertoire de recherche. D'autres options
+vous permettent de d\'esactiver certaines fonctionnalit\'es (par exemple
+{-}{-}disable-nls).
+
+Si vous souhaitez vous jeter \`a l'eau, nous vous conseillons de passer
+directement au chapitre suivant, et d'ex\'ecuter le jeu d'exemples. Il vous
+apprendra beaucoup sur Bacula, et un Bacula de test peut \^etre install\'e
+dans un unique r\'epertoire (pour une destruction ais\'ee) et ex\'ecut\'e sans
+\^etre root. Revenez lire les d\'etails de ce chapitre si vous avez un
+quelconque probl\`eme avec les exemples, ou lorsque vous voudrez effectuer une
+installation r\'eelle.
+
+TAQUET MISE A JOUR
+
+\section{Options de la commande {\bf configure}}
+\label{Options}
+\index[general]{Options de la commande configure }
+\index[general]{Configure!Options de la commande }
+\addcontentsline{toc}{section}{Options de la commande configure}
+
+Les options en ligne de commande suivantes sont disponibles pour {\bf
+configure} afin d'adapter votre installation \`a vos besoins.
+
+\begin{description}
+
+\item [{-}{-}sysbindir=\lt{}binary-path\gt{}]
+ \index[dir]{{-}{-}sysbindir }
+ D\'efinit l'emplacement des binaires Bacula.
+
+\item [{-}{-}sysconfdir=\lt{}config-path\gt{}]
+ \index[dir]{{-}{-}sysconfdir }
+ D\'efinit l'emplacement des fichiers de configuration de Bacula.
+
+\item [ {-}{-}mandir=\lt{}path\gt{}]
+ \index[general]{{-}{-}mandir}
+ Notez qu'\`a partir de la version 1.39.14, tout chemin sp\'ecifi\'e
+ est d\'esormais compris comme le niveau le plus \'elev\'e du
+ r\'epertoire man. Pr\'ec\'edemment, le {\bf mandir} sp\'ecifiait le
+ chemin absolu o\`u vous souhaitiez instaler les pages de manuel.
+ Les fichiers man sont install\'es au format gzipp\'e sous
+ mandir/man1 et mandir/man8 comme il convient.
+ Pour que l'installation se d\'eroule normalement, vous devez
+ disposer de {\bf gzip} sur votre syst\`eme
+
+ Par d\'efaut, Bacula installe une simple page de manuel dans
+ /usr/share/man. Si vous voulez qu'elle soit install\'ee ailleurs,
+ utilisez cette options pour sp\'ecifier le chemin voulu. Notez
+ que les principaux documents Bacula en HTML et PDF sont dans une
+ archive tar distincte des sources de distribution de Bacula.
+
+\item [ {-}{-}datadir=\lt{}path\gt{}]
+ \index[general]{{-}{-}datadir}
+ Si vous traduisez Bacula ou des parties de Bacula dans une autre
+ langue, vous pouvez sp\'ecifier l'emplacement des fichiers .po avec
+ l'option {\bf {-}{-}datadir}. Vous devez installer manuellement tout
+ fichier .po qui n'est pas (encore) install\'e automatiquement.
+
+\item [{-}{-}enable-smartalloc ]
+ \index[dir]{{-}{-}enable-smartalloc }
+ Permet l'inclusion du code Smartalloc de d\'etection de tampons orphelins
+(NDT : orphaned buffer). Cette option est vivement recommand\'ee. Nous n'avons
+jamais compil\'e sans elle, aussi vous pourriez subir des d\'esagr\'ements si
+vous ne l'activez pas. Dans ce cas, r\'eactivez simplement cette option. Nous
+la recommandons car elle aide \`a d\'etecter les fuites de m\'emoire. Ce
+param\`etre est utilis\'e lors de la compilation de Bacula.
+
+\item [{-}{-}enable-gnome ]
+ \index[dir]{{-}{-}enable-gnome }
+ Si vous avez install\'e GNOME sur votre ordinateur, vous devez sp\'ecifier
+cette option pour utiliser la Console graphique GNOME. Vous trouverez les
+binaires dans le r\'epertoire {\bf src/gnome-console}.
+
+\item [{-}{-}enable-bwx-console ]
+ \index[general]{{-}{-}enable-bwx-console }
+ Si vous avez install\'e wxWidgets sur votre ordinateur, vous devez
+sp\'ecifier cette option pour utiliser la Console graphique bwx-console. Vous
+trouverez les binaires dans le r\'epertoire {\bf src/wx-console}. Ceci peut
+\^etre utile aux utilisateurs qui veulent une Console graphique, mais ne
+souhaitent pas installer Gnome, car wxWidgets peut fonctionner avec les
+librairies GTK+, Motif ou m\^eme X11.
+
+\item [{-}{-}enable-tray-monitor ]
+ \index[general]{{-}{-}enable-tray-monitor }
+ Si vous avez install\'e GTK sur votre ordinateur et utilisez un gestionnaire
+de fen\^etre compatible avec le syst\`eme de notification standard FreeDesktop
+(tels KDE et GNOME), vous pouvez utiliser une interface graphique pour
+surveiller les {\it daemons} Bacula en activant cette option. Les binaires
+seront plac\'es dans le r\'epertoire {\bf src/tray-monitor}.
+
+\item [{-}{-}enable-static-tools]
+ \index[general]{{-}{-}enable-static-tools }
+ Avec cette option, les utilitaires relatifs au Storage Daemon ({\bf bls},
+{\bf bextract}, et {\bf bscan}) seront li\'es statiquement, ce qui vous permet
+de les utiliser m\^eme si les librairies partag\'ees ne sont pas charg\'ees.
+Si vous avez des difficult\'es de type "linking'' \`a la compilation du
+r\'epertoire {\bf src/stored}, assurez-vous d'avoir d\'esactiv\'e cette
+option, en ajoutant \'eventuellement {\bf \verb{--{disable-static-tools}.
+
+\item [{-}{-}enable-static-fd]
+ \index[fd]{{-}{-}enable-static-fd }
+ Avec cette option, la compilation produira un {\bf static-bacula-fd} en plus
+du File Daemon standard. Cette version qui inclut les librairies statiquement
+li\'ees est requise pour la reconstruction compl\`ete d'une machine apr\`es
+un d\'esastre. Cette option est largement surpass\'ee par l'usage de {\bf
+make static-bacula-fd} du r\'epertoire {\bf src/filed}. L'option {\bf
+\verb:--:enable-client-only} d\'ecrite plus loin est aussi int\'eressante
+pour compiler un simple client sans les autres parties du programme.
+
+Pour lier un binaire statique, l'\'editeur de liens a besoin des versions
+statiques de toutes les librairies utilis\'ees, aussi les utilisateurs
+rencontrent fr\'equemment des erreurs d'\'edition de liens \`a l'utilisation
+de cette option. La premi\`ere chose \`a faire est de s'assurer d'avoir la
+librairie glibc statiquement li\'ee sur votre syst\`eme. Ensuite, il faut
+s'assurer de ne pas utiliser les options {\bf {-}{-}openssl} ou
+{\bf {-}{-}with-python} de la commande configure, car elle requierent des
+librairies suppl\'ementaires. Vous devriez pouvoir activer ces options, mais
+il vous faudra charger les librairies statiques additionnelles correspondantes.
+
+\item [{-}{-}enable-static-sd]
+ \index[sd]{{-}{-}enable-static-sd }
+ Avec cette option, la compilation produira un {\bf static-bacula-sd} en plus
+du Storage Daemon standard. Cette version qui inclut les librairies
+statiquement li\'ees peut se r\'ev\'eler utile pour la reconstruction
+compl\`ete d'une machine apr\`es un d\'esastre.
+
+Pour lier un binaire statique, l'\'editeur de liens a besoin des versions
+statiques de toutes les librairies utilis\'ees, aussi les utilisateurs
+rencontrent fr\'equemment des erreurs d'\'edition de liens \`a l'utilisation
+de cette option. La premi\`ere chose \`a faire est de s'assurer d'avoir la
+librairie glibc statiquement li\'ee sur votre syst\`eme. Ensuite, il faut
+s'assurer de ne pas utiliser les options {\bf {-}{-}openssl} ou
+{\bf {-}{-}with-python} de la commande configure, car elle requierent des
+librairies suppl\'ementaires. Vous devriez pouvoir activer ces options, mais
+il vous faudra charger les librairies statiques additionnelles correspondantes.
+
+\item [{-}{-}enable-static-dir]
+ \index[dir]{{-}{-}enable-static-dir }
+ Avec cette option, la compilation produira un {\bf static-bacula-dir} en plus
+du Director Daemon standard. Cette version qui inclut les librairies
+statiquement li\'ees peut se r\'ev\'eler utile pour la reconstruction
+compl\`ete d'une machine apr\`es un d\'esastre.
+
+Pour lier un binaire statique, l'\'editeur de liens a besoin des versions
+statiques de toutes les librairies utilis\'ees, aussi les utilisateurs
+rencontrent fr\'equemment des erreurs d'\'edition de liens \`a l'utilisation
+de cette option. La premi\`ere chose \`a faire est de s'assurer d'avoir la
+librairie glibc statiquement li\'ee sur votre syst\`eme. Ensuite, il faut
+s'assurer de ne pas utiliser les options {\bf {-}{-}openssl} ou
+{\bf {-}{-}with-python} de la commande configure, car elle requierent des
+librairies suppl\'ementaires. Vous devriez pouvoir activer ces options, mais
+il vous faudra charger les librairies statiques additionnelles correspondantes.
+
+\item [{-}{-}enable-static-cons]
+ \index[dir]{{-}{-}enable-static-cons }
+ Avec cette option, la compilation produira une {\bf static-console} et une
+{\bf static-gnome-console} en plus de la Console standard standard. Cette
+version qui inclut les librairies statiquement li\'ees peut se r\'ev\'eler
+utile pour la reconstruction compl\`ete d'une machine apr\`es un d\'esastre.
+
+Pour lier un binaire statique, l'\'editeur de liens a besoin des versions
+statiques de toutes les librairies utilis\'ees, aussi les utilisateurs
+rencontrent fr\'equemment des erreurs d'\'edition de liens \`a l'utilisation
+de cette option. La premi\`ere chose \`a faire est de s'assurer d'avoir la
+librairie glibc statiquement li\'ee sur votre syst\`eme. Ensuite, il faut
+s'assurer de ne pas utiliser les options {\bf {-}{-}openssl} ou
+{\bf {-}{-}with-python} de la commande configure, car elle requierent des
+librairies suppl\'ementaires. Vous devriez pouvoir activer ces options, mais
+il vous faudra charger les librairies statiques additionnelles correspondantes.
+
+\item [{-}{-}enable-client-only]
+ \index[general]{{-}{-}enable-client-only }
+ Avec cette option, la compilation produira seulement le File Daemon et les
+librairies qui lui sont n\'ecessaires. Aucun des autres {\it daemons}, outils
+de stockage, ni la console ne sera compil\'e. De m\^eme, un {\bf make
+install} installera seulement le File Daemon. Pour obtenir tous les {\it
+daemons}, vous devez la d\'esactiver. Cette option facilite grandement la
+compilation sur les simples clients.
+
+Pour lier un binaire statique, l'\'editeur de liens a besoin des versions
+statiques de toutes les librairies utilis\'ees, aussi les utilisateurs
+rencontrent fr\'equemment des erreurs d'\'edition de liens \`a l'utilisation
+de cette option. La premi\`ere chose \`a faire est de s'assurer d'avoir la
+librairie glibc statiquement li\'ee sur votre syst\`eme. Ensuite, il faut
+s'assurer de ne pas utiliser les options {\bf {-}{-}openssl} ou
+{\bf {-}{-}with-python} de la commande configure, car elle requierent des
+librairies suppl\'ementaires. Vous devriez pouvoir activer ces options, mais
+il vous faudra charger les librairies statiques additionnelles correspondantes.
+
+\item [ {-}{-}enable-build-dird]
+ \index[general]{{-}{-}enable-build-dird}
+Avec cette option activ\'ee (ce qui est le cas par d\'efaut), le processus make
+compile le Director ainsi que les outils du Director. Vous pouvez d\'esactiver
+la compilation du Director en utilisant {\bf {-}{-}disable-build-dird}.
+
+\item [ {-}{-}enable-build-stored]
+ \index[general]{{-}{-}enable-build-stored}
+Avec cette option activ\'ee (ce qui est le cas par d\'efaut), le processus make
+compile le Storage Daemon. Vous pouvez d\'esactiver
+la compilation du Storage Daemon en utilisant {\bf {-}{-}disable-build-stored}.
+
+\item [{-}{-}enable-largefile]
+ \index[general]{{-}{-}enable-largefile }
+ Cette option (activ\'ee par d\'efaut) provoque la compilation de Bacula avec
+le support d'adressage de fichiers 64 bits s'il est disponible sur votre
+syst\`eme. Ainsi Bacula peut lire et \'ecrire des fichiers de plus de 2
+GBytes. Vous pouvez d\'esactiver cette option et revenir \`a un adressage de
+fichiers 32 bits en utilisant {\bf \verb{--{disable-largefile}.
+
+\item [ {-}{-}disable-nls]
+ \index[general]{{-}{-}disable-nls}
+ Bacula utilise par d\'efaut les librairies {\it GNU Native Language Support} (NLS).
+ Sur certaines machines, ces librairies peuvent \^etre inexistante, ou ne pas
+ fonctionner correctement (particuli\`erement sur les impl\'ementations non Linux).
+ dans ce genre de situations, vous pouvez neutraliser l'utilisation de ces librairies
+ avec l'option {\bf {-}{-}disable-nls}. Dans ce cas, Bacula reviendra \`a l'usage de l'anglais.
+
+\item [{-}{-}with-sqlite=\lt{}sqlite-path\gt{}]
+ \index[general]{{-}{-}with-sqlite }
+ Cette option permet l'utilisation de la base de donn\'ees SQLite versions 2.8.x. Il n'est,
+en principe, pas n\'ecessaire de sp\'ecifier le chemin {\bf sqlite-path} car
+Bacula recherche les composants requis dans les r\'epertoires standards ({\bf
+depkgs/sqlite}). voyez
+\ilink{Installer et Configurer SQLite}{_ChapterStart33} pour plus de
+d\'etails.
+
+Voyez aussi la note ci-dessous, apr\`es le paragraphe --with-postgreSQL
+
+\item [{-}{-}with-sqlite3=\lt{}sqlite3-path\gt{}]
+ \index[general]{{-}{-}with-sqlite3 }
+ Cette option permet l'utilisation de la base de donn\'ees SQLite versions 3.x. Il n'est,
+en principe, pas n\'ecessaire de sp\'ecifier le chemin {\bf sqlite3-path} car
+Bacula recherche les composants requis dans les r\'epertoires standards ({\bf
+depkgs/sqlite3}). voyez
+\ilink{Installer et Configurer SQLite}{_ChapterStart33} pour plus de
+d\'etails.
+
+Voyez aussi la note ci-dessous, apr\`es le paragraphe --with-postgreSQL
+
+\item [{-}{-}with-mysql=\lt{}mysql-path\gt{}]
+ \index[general]{{-}{-}with-mysql }
+ Cette option permet la compilation des services de Catalogue de Bacula. Elle
+implique que MySQL tourne d\'ej\`a sur votre syst\`eme, et qu'il soit
+install\'e dans le chemin {\bf mysql-path} que vous avez sp\'ecifi\'e. Si
+cette option est absente, Bacula sera compil\'e automatiquement avec le code
+de la base Bacula interne. Nous recommandons d'utiliser cette option si
+possible. Si vous souhaitez utilisez cette option, veuillez proc\'eder \`a
+l'installation de MySQL (
+\ilink{Installer and Configurer MySQL}{_ChapterStart}) avant de
+proc\'eder \`a la configuration.
+
+Voyez aussi la note ci-dessous, apr\`es le paragraphe --with-postgreSQL
+
+\item [{-}{-}with-postgresql=\lt{}postgresql-path\gt{}]
+ \index[general]{{-}{-}with-postgresql }
+ Cette option d\'eclare un chemin explicite pour les librairies PostgreSQL si
+Bacula ne les trouve pas dans le r\'epertoire par d\'efaut.
+
+Notez que pour que Bacula soit configur\'e correctement, vous devez sp\'ecifier l'une des
+quatre options de bases de donn\'ees support\'ees : {-}{-}with-sqlite, {-}{-}with-sqlite3,
+{-}{-}with-mysql, ou {-}{-}with-postgresql, faute de quoi ./configure \'echouera.
+
+\item [ {-}{-}with-openssl=\lt{}path\gt{}]
+ Cette option est requise si vous souhaitez activer TLS (ssl) qui chiffre les
+ communications entre les daemons Bacula ou si vous voulez utiliser le chiffrement
+ PKI des données du File Daemon.Normalement, la sp\'ecification du chemin {\bf path}
+ n'est pas n\'ecessaire car le processus de
+ configuration recherche les librairies OpenSSL dans les emplacements standard du
+ syst\`eme. L'activation d'OpenSSL dans Bacula permet des communications s\'ecuris\'ees
+ entre les {\it daemons}. Pour plus d'informations sur l'usage de TLS, consultez le
+ chapitre \ilink{Bacula TLS}{_ChapterStart61} de ce manuel. Pour plus d'informations
+ sur l'usage du chiffrement des données PKI, veuillez consulter le chapitre
+ \ilink{Bacula PKI -- Data Encryption}{Chiffrement des données} de ce manuel.
+
+\item [ {-}{-}with-python=\lt{}path\gt{}]
+ \index[general]{{-}{-}with-python }
+ Cette option active le support Python dans Bacula. Si le chemin n'est pas
+ sp\'ecifi\'e, le processus de configuration recherchera les librairies Python
+ dans leurs emplacements standard. S'il ne peut trouver les librairies , il vous faudra
+ fournir le chemin vers votre r\'epertoire de librairies Python. Voyez le
+ \ilink{chapitre Python}{_ChapterStart60} pour plus de d\'etails sur l'utilisation de
+ scripts Python.
+
+\item [ {-}{-}with-libintl-prefix=\lt{}DIR\gt{}]
+ \index[general]{{-}{-}with-libintl-prefix}
+ Cette option peut \^etre utilis\'ee pour indiquer \`a Bacula de rechercher dans DIR/include
+ et DIR/lib les fichiers d'en t\^ete libintl et les librairies requises pour
+ Native Language Support (NLS).
+
+\item [{-}{-}enable-conio]
+ \index[general]{{-}{-}enable-conio }
+ Cette option permet la compilation d'une petite et l\'eg\`ere routine en
+alternative \`a readline, beaucoup plus facile \`a configurer, m\^eme si elle
+n\'ecessite aussi les librairies termcap ou ncurses.
+
+\item [{-}{-}with-readline=\lt{}readline-path\gt{}]
+ \index[general]{{-}{-}with-readline }
+ Sp\'ecifie l'emplacement de {\bf readline}. En principe, Bacula devrait le
+trouver s'il est dans une librairie standard. Sinon, et si l'option
+\verb{--{with-readline n'est pas renseign\'ee, readline sera d\'esactiv\'e. Cette
+option affecte la compilation de Bacula. Readline fournit le programme
+Console avec un historique des lignes de commandes et des capacit\'es
+d'\'edition. Readline n'est d\'esormais plus support\'e, ce qui signifie que
+vous l'utilisez \`a vos risques et p\'erils
+
+\item [{-}{-}enable-readline]
+ \index[general]{{-}{-}enable-readline }
+ Active le support readline. D\'esactiv\'e par d\'efaut en raison de nombreux
+probl\`emes de configuration, et parce que le paquetage semble devenir
+incompatible.
+
+\item [{-}{-}with-tcp-wrappers=\lt{}path\gt{}]
+ \index[general]{{-}{-}with-tcp-wrappers}
+ \index[general]{TCP Wrappers}
+ \index[general]{Wrappers!TCP}
+ \index[general]{libwrappers}
+ Cette option pr\'ecise que vous voulez TCP wrappers (man hosts\_access(5))
+compil\'e dans Bacula. Le chemin est facultatif puisque Bacula devrait, en
+principe, trouver les librairies dans les r\'epertoires standards. Cette
+option affecte la compilation. Lorsque vous sp\'ecifierez vos restrictions
+dans les fichiers {\bf /etc/hosts.allow} ou {\bf /etc/hosts.deny}, n'utilisez
+pas l'option {\bf twist} (man hosts\_options(5)) ou le processus Bacula sera
+stopp\'e.
+
+Pour plus d'informations sur la configuration et les tests de TCP wrappers,
+consultez la section
+\ilink{Configurer et Tester TCP Wrappers}{wrappers} du chapitre
+sur la s\'ecurit\'e.
+
+Sur SuSE, les librairies libwrappers requises pour lier Bacula appartiennent
+au paquet tcpd-devel. Sur RedHat, le paquet se nomme tcp\_wrappers.
+
+\item [{-}{-}with-working-dir=\lt{}working-directory-path\gt{}]
+ \index[dir]{{-}{-}with-working-dir }
+ Cette option est obligatoire et sp\'ecifie un r\'epertoire dans lequel Bacula
+peut placer en toute s\'ecurit\'e les fichiers qui resteront d'une
+ex\'ecution \`a l'autre. Par exemple, si la base de donn\'ees interne est
+utilis\'ee, Bacula stockera ces fichiers dans ce r\'epertoire. Cette option
+n'est utilis\'ee que pour modifier les fichiers de configuration de Bacula.
+Vous pourrez \'eventuellement effectuer cette modification directement en les
+\'editant plus tard. Le r\'epertoire sp\'ecifi\'e ici n'est pas
+automatiquement cr\'e\'e par le processus d'installation, aussi vous devez
+veiller \`a ce qu'il existe avant votre premi\`ere utilisation de Bacula.
+
+\item [{-}{-}with-base-port=\lt{}port=number\gt{}]
+ \index[dir]{{-}{-}with-base-port }
+ Bacula a besoin de trois ports TCP/IP pour fonctionner (un pour la Console,
+un pour le Storage Daemon et un pour le File Daemon). L'option {\bf
+\verb{--{with-baseport} permet d'assigner automatiquement trois ports cons\'ecutifs
+\`a partir du port de base sp\'ecifi\'e. Vous pouvez aussi changer les
+num\'eros de ports dans les fichiers de configuration. Cependant, vous devez
+prendre garde \`a ce que les num\'eros de ports se correspondent fid\`element
+dans chacun des trois fichiers de configuration. Le port de base par d\'efaut
+est 9101, ce qui assigne les ports 9101 \`a 9103. Ces ports (9101, 9102 et
+9103) ont \'et\'e officiellement assign\'e \`a Bacula par l'IANA. Cette
+option n'est utilis\'ee que pour modifier les fichiers de configuration de
+Bacula. Vous pouvez \`a tout moment faire cette modification en \'editant
+directement ces fichiers.
+
+\item [{-}{-}with-dump-email=\lt{}email-address\gt{}]
+ \index[dir]{{-}{-}with-dump-email }
+ Cette option sp\'ecifie l'adresse e-mail qui recevra tous les {\it core dump}.
+ Cette option n'est en principe utilis\'ee que par les d\'eveloppeurs.
+
+\item [{-}{-}with-pid-dir=\lt{}PATH\gt{} ]
+ \index[dir]{{-}{-}with-pid-dir }
+ Ceci pr\'ecise le r\'epertoire de stockage du fichier d'id de processus lors
+de l'ex\'ecution. La valeur par d\'efaut est : {\bf /var/run}. Le r\'epertoire
+sp\'ecifi\'e ici n'est pas automatiquement cr\'e\'e par le processus
+d'installation, aussi vous devez veiller \`a ce qu'il existe avant votre
+premi\`ere utilisation de Bacula.
+
+\item [{-}{-}with-subsys-dir=\lt{}PATH\gt{} ]
+ \index[dir]{{-}{-}with-subsys-dir }
+ Cette option pr\'ecise le r\'epertoire de stockage des fichiers verrous du
+sous-syst\`eme lors de l'ex\'ecution. Le r\'epertoire par d\'efaut est {\bf
+/var/run/subsys}. Veillez \`a ne pas sp\'ecifier le m\^eme r\'epertoire que
+pour l'option {\bf sbindir}. Ce r\'epertoire n'est utilis\'e que par les
+scripts de d\'emarrage automatique. Le r\'epertoire sp\'ecifi\'e ici n'est
+pas automatiquement cr\'e\'e par le processus d'installation, aussi vous devez
+veiller \`a ce qu'il existe avant votre premi\`ere utilisation de Bacula.
+
+\item [{-}{-}with-dir-password=\lt{}Password\gt{} ]
+ \index[dir]{{-}{-}with-dir-password }
+ Cette option vous permet de pr\'eciser le mot de passe d'acc\`es au Director
+(contact\'e, en principe, depuis la console). S'il n'est pas pr\'ecis\'e,
+configure en cr\'e\'e un al\'eatoirement.
+
+\item [{-}{-}with-fd-password=\lt{}Password\gt{} ]
+ \index[fd]{{-}{-}with-fd-password }
+ Cette option vous permet de pr\'eciser le mot de passe d'acc\`es au File
+Daemon (contact\'e, en principe, depuis le Director). S'il n'est pas
+pr\'ecis\'e, configure en cr\'e\'e un al\'eatoirement.
+
+\item [{-}{-}with-sd-password=\lt{}Password\gt{} ]
+ \index[sd]{{-}{-}with-sd-password }
+ Cette option vous permet de pr\'eciser le mot de passe d'acc\`es au Storage
+Daemon (contact\'e, en principe, depuis le File Daemon). S'il n'est pas
+pr\'ecis\'e, configure en cr\'e\'e un al\'eatoirement.
+
+\item [{-}{-}with-dir-user=\lt{}User\gt{} ]
+ \index[dir]{{-}{-}with-dir-user }
+ Cette option vous permet de sp\'ecifier l'UserId utilis\'e pour l'ex\'ecution
+du Director. Le Director doit \^etre d\'emarr\'e en tant que root, mais n'a
+pas besoin d'\^etre ex\'ecut\'e en tant que root. Apr\`es avoir effectu\'e les
+op\'erations d'initialisation pr\'eliminaires, il peut redescendre au niveau
+de l'UserId sp\'ecifi\'e dans cette option. Si vous utilisez cette option, vous
+devez cr\'eer l'utilisateur User avant d'ex\'ecuter {\bf make install}, car le
+r\'epertoire de travail de Bacula appartiendra \`a cet utilisateur.
+
+\item [{-}{-}with-dir-group=\lt{}Group\gt{} ]
+ \index[dir]{{-}{-}with-dir-group }
+ Cette option vous permet de sp\'ecifier le GroupId utilis\'e pour
+l'ex\'ecution du Director. Le Director doit \^etre d\'emarr\'e en tant que
+root, mais n'a pas besoin d'\^etre ex\'ecut\'e en tant que root. Apr\`es avoir
+effectu\'e les op\'erations d'initialisation pr\'eliminaires, il peut
+redescendre au niveau du GroupId sp\'ecifi\'e dans cette option.
+Si vous utilisez cette option, vous
+devez cr\'eer le groupe Group avant d'ex\'ecuter {\bf make install}, car le
+r\'epertoire de travail de Bacula appartiendra \`a ce groupe.
+
+\item [{-}{-}with-sd-user=\lt{}User\gt{} ]
+ \index[sd]{{-}{-}with-sd-user }
+ Cette option vous permet de sp\'ecifier l'UserId utilis\'e pour ex\'ecuter le
+Storage Daemon. Le Storage Daemon doit \^etre d\'emarr\'e en tant que root,
+mais n'a pas besoin d'\^etre ex\'ecut\'e en tant que root. Apr\`es avoir
+effectu\'e les op\'erations d'initialisation pr\'eliminaires, il peut
+redescendre au niveau de l'UserId sp\'ecifi\'e dans cette option. Si vous
+utilisez cette option, veillez \`a ce que le Storage Daemon ait acc\`es \`a
+tous les p\'eriph\'eriques de stockage dont il a besoin.
+
+\item [{-}{-}with-sd-group=\lt{}Group\gt{} ]
+ \index[sd]{{-}{-}with-sd-group }
+ Cette option vous permet de sp\'ecifier le GroupId utilis\'e pour ex\'ecuter
+le Storage Daemon. Le Storage Daemon doit \^etre d\'emarr\'e en tant que
+root, mais n'a pas besoin d'\^etre ex\'ecut\'e en tant que root. Apr\`es avoir
+effectu\'e les op\'erations d'initialisation pr\'eliminaires, il peut
+redescendre au niveau du GroupId sp\'ecifi\'e dans cette option.
+
+\item [{-}{-}with-fd-user=\lt{}User\gt{} ]
+ \index[fd]{{-}{-}with-fd-user }
+ Cette option vous permet de sp\'ecifier l'UserId utilis\'e pour ex\'ecuter le
+File Daemon. Le File Daemon doit \^etre d\'emarr\'e et, dans la plupart des
+cas, ex\'ecut\'e en tant que root, de sorte que cette option n'est utilis\'ee
+que dans des cas bien particuliers. Malgr\'e tout, apr\`es avoir effectu\'e
+les op\'erations d'initialisation pr\'eliminaires, il peut redescendre au
+niveau de l'UserId sp\'ecifi\'e dans cette option.
+
+\item [{-}{-}with-fd-group=\lt{}Group\gt{} ]
+ \index[fd]{{-}{-}with-fd-group }
+ Cette option vous permet de sp\'ecifier le GroupId utilis\'e pour ex\'ecuter
+le File Daemon. Le File Daemon doit \^etre d\'emarr\'e et, dans la plupart
+des cas, ex\'ecut\'e en tant que root, de sorte que cette option n'est
+utilis\'ee que dans des cas bien particuliers. Malgr\'e tout, apr\`es avoir
+effectu\'e les op\'erations d'initialisation pr\'eliminaires, il peut
+redescendre au niveau du GroupId sp\'ecifi\'e dans cette option.
+\end{description}
+
+Notez: de nombreuses options suppl\'ementaires vous sont pr\'esent\'ees
+lorsque vous entrez {\bf ./configure \verb{--{help}, mais elles ne sont pas
+impl\'ement\'ees.
+
+\section{Options recommand\'ees pour la plupart des syst\`emes}
+\index[general]{Options recommand\'ees pour la plupart des syst\`emes }
+\addcontentsline{toc}{section}{Options recommand\'ees pour la plupart des
+syst\`emes}
+
+Pour la plupart des syst\`emes, nous recommandons de commencer avec les
+options suivantes :
+
+\footnotesize
+\begin{verbatim}
+./configure \
+ --enable-smartalloc \
+ --sbindir=$HOME/bacula/bin \
+ --sysconfdir=$HOME/bacula/bin \
+ --with-pid-dir=$HOME/bacula/bin/working \
+ --with-subsys-dir=$HOME/bacula/bin/working \
+ --with-mysql=$HOME/mysql \
+ --with-working-dir=$HOME/bacula/working
+\end{verbatim}
+\normalsize
+
+Si vous souhaitez installer Bacula dans un r\'epertoire d'installation
+plut\^ot que de l'ex\'ecuter depuis le r\'epertoire de compilation, (comme le
+feront les d\'eveloppeurs la plupart du temps), vous devriez aussi inclure les
+options \verb{--{sbindir et \verb{--{sysconfdir avec les chemins appropri\'es. Aucune n'est
+n\'ecessaire si vous ne vous servez pas de "make install'', comme c'est le
+cas pour la plupart des travaux de d\'eveloppement. Le processus
+d'installation va cr\'eer les r\'epertoires sbindir et sysconfdir s'ils
+n'existent pas, mais il ne cr\'eera pas les r\'epertoires pid-dir, subsys-dir
+ni working-dir, aussi assurez vous qu'ils existent avant de lancer Bacula.
+L'exemple ci-dessous montre la fa\c{c}on de proc\'eder de Kern.
+
+\section{RedHat}
+\index[general]{RedHat }
+\addcontentsline{toc}{section}{RedHat}
+
+Avec SQLite:
+
+\footnotesize
+\begin{verbatim}
+
+CFLAGS="-g -Wall" ./configure \
+ --sbindir=$HOME/bacula/bin \
+ --sysconfdir=$HOME/bacula/bin \
+ --enable-smartalloc \
+ --with-sqlite=$HOME/bacula/depkgs/sqlite \
+ --with-working-dir=$HOME/bacula/working \
+ --with-pid-dir=$HOME/bacula/bin/working \
+ --with-subsys-dir=$HOME/bacula/bin/working \
+ --enable-gnome \
+ --enable-conio
+\end{verbatim}
+\normalsize
+
+ou
+
+\footnotesize
+\begin{verbatim}
+
+CFLAGS="-g -Wall" ./configure \
+ --sbindir=$HOME/bacula/bin \
+ --sysconfdir=$HOME/bacula/bin \
+ --enable-smartalloc \
+ --with-mysql=$HOME/mysql \
+ --with-working-dir=$HOME/bacula/working
+ --with-pid-dir=$HOME/bacula/bin/working \
+ --with-subsys-dir=$HOME/bacula/bin/working
+ --enable-gnome \
+ --enable-conio
+\end{verbatim}
+\normalsize
+
+ou une installation RedHat compl\`etement traditionnelle :
+
+\footnotesize
+\begin{verbatim}
+CFLAGS="-g -Wall" ./configure \
+ --prefix=/usr \
+ --sbindir=/usr/sbin \
+ --sysconfdir=/etc/bacula \
+ --with-scriptdir=/etc/bacula \
+ --enable-smartalloc \
+ --enable-gnome \
+ --with-mysql \
+ --with-working-dir=/var/bacula \
+ --with-pid-dir=$HOME/var/run \
+ --enable-conio
+\end{verbatim}
+\normalsize
+
+Notez que Bacula suppose que les r\'epertoires /var/bacula, /var/run et
+/var/lock/subsys existent, ils ne seront pas cr\'ees par le processus
+d'installation.
+
+D'autre part, avec gcc 4.0.1 20050727 (Red Hat 4.0.1-5) sur processeur AMD64
+et sous CentOS4 64 bits, un bug du compilateur g\'en\`ere du code erron\'e qui
+conduit Bacula \`a des erreurs de segmentation. Typiquement, vous le rencontrerez
+d'abord avec le Storage Daemon. La solution consiste \`a s'assurer que Bacula est
+compil\'e sans optimisation (normalement -O2)
+
+\section{Solaris}
+\index[general]{Solaris }
+\addcontentsline{toc}{section}{Solaris}
+
+Pour installer Bacula depuis les sources, il vous faudra les paquetages suivants
+sur votre syst\`eme (ils ne sont pas install\'es par d\'efaut) : libiconv, gcc 3.3.2, stdc++, libgcc
+( pour les librairies stdc++ and gcc\_s ), make 3.8 ou plus r\'ecent.
+
+Il vous faudra probablement aussi ajouter /usr/local/bin et /usr/css/bin \`a PATH pour ar.
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+CFLAGS="-g" ./configure \
+ --sbindir=$HOME/bacula/bin \
+ --sysconfdir=$HOME/bacula/bin \
+ --with-mysql=$HOME/mysql \
+ --enable-smartalloc \
+ --with-pid-dir=$HOME/bacula/bin/working \
+ --with-subsys-dir=$HOME/bacula/bin/working \
+ --with-working-dir=$HOME/bacula/working
+\end{verbatim}
+\normalsize
+
+Comme mentionn\'e ci-dessus, le processus d'installation va cr\'eer les
+r\'epertoires sbindir et sysconfdir s'ils n'existent pas, mais il ne cr\'eera
+pas les r\'epertoires pid-dir, subsys-dir ni working-dir, aussi assurez vous
+qu'ils existent avant de lancer Bacula.
+
+Notez que vous pouvez aussi avoir besoin des paquetages suivants pour installer Bacula
+depuis les sources :
+\footnotesize
+\begin{verbatim}
+SUNWbinutils,
+SUNWarc,
+SUNWhea,
+SUNWGcc,
+SUNWGnutls
+SUNWGnutls-devel
+SUNWGmake
+SUNWgccruntime
+SUNWlibgcrypt
+SUNWzlib
+SUNWzlibs
+SUNWbinutilsS
+SUNWGmakeS
+SUNWlibm
+
+export
+PATH=/usr/bin::/usr/ccs/bin:/etc:/usr/openwin/bin:/usr/local/bin:/usr/sfw/bin:/opt/sfw/bin:/usr/ucb:/usr/sbin
+\end{verbatim}
+\normalsize
+
+
+\section{FreeBSD}
+\index[general]{FreeBSD }
+\addcontentsline{toc}{section}{FreeBSD}
+
+Veuillez consulter:
+\elink{The FreeBSD Diary}{http://www.freebsddiary.org/bacula.php} pour une
+description d\'etaill\'ee de la m\'ethode pour faire fonctionner Bacula sur
+votre syst\`eme. De plus, les utilisateurs de versions de FreeBSD
+ant\'erieures \`a la 4.9-STABLE du lundi 29 d\'ecembre 2003 15:18:01 qui
+envisagent d'utiliser des lecteurs de bandes doivent consulter le chapitre
+\ilink{Tester son lecteur de bandes}{FreeBSDTapes} de ce
+manuel pour d'{\bf importantes} informations sur la configuration des lecteurs
+pour qu'ils soient compatibles avec Bacula.
+
+Si vous utilisez Bacula avec MySQL, vous devriez prendre garde \`a compiler
+MySQL avec les threads natifs de FreeBSD plut\^ot qu'avec ceux de Linux, car
+c'est avec ceux l\`a qu'est compil\'e Bacula et le m\'elange des deux ne
+fonctionnera probablement pas.
+
+\section{Win32}
+\index[general]{Win32 }
+\addcontentsline{toc}{section}{Win32}
+
+Pour installer la version binaire Win32 du File Daemon, consultez le chapitre
+\ilink{ Installation sur syst\`emes Win32}{_ChapterStart7} de ce
+document.
+
+\section{Syst\`emes Windows avec CYGWIN install\'e}
+\label{Win32}
+\index[general]{Syst\`emes Windows avec CYGWIN install\'e }
+\addcontentsline{toc}{section}{Syst\`emes Windows avec CYGWIN install\'e}
+
+A partir de la version 1.34, Bacula n'utilise plus CYGWIN pour le client
+Win32. Il est cependant encore compil\'e sous un environnement CYGWIN -- Bien
+que vous puissiez probablement le faire avec seulement VC Studio. Si vous
+souhaitez compiler le client Win32 depuis les sources, il vous faudra
+Microsoft C++ version 6.0 ou sup\'erieur. Dans les versions de Bacula
+ant\'erieures \`a la 1.33, CYGWIN \'etait utilis\'e.
+
+Notez qu'en d\'epit du fait que la plupart des \'el\'ements de Bacula puissent
+compiler sur les syst\`emes Windows, la seule partie que nous avons test\'ee
+et utilis\'ee est le File Daemon.
+
+Finalement, vous devriez suivre les instructions d'installation de la section
+\ilink{Win32 Installation sur syst\`emes Win32}{_ChapterStart7} de ce
+document en occultant la partie qui d\'ecrit la d\'ecompression de la version
+binaire.
+
+\section{Le script Configure de Kern}
+\index[general]{Le script Configure de Kern }
+\index[general]{Kern!Le script Configure de }
+\addcontentsline{toc}{section}{Le script Configure de Kern}
+
+Voici le script que j'utilise pour compiler sur mes machines Linux de
+"production'':
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+# This is Kern's configure script for Bacula
+CFLAGS="-g -Wall" \
+ ./configure \
+ --sbindir=$HOME/bacula/bin \
+ --sysconfdir=$HOME/bacula/bin \
+ --enable-smartalloc \
+ --enable-gnome \
+ --with-pid-dir=$HOME/bacula/bin/working \
+ --with-subsys-dir=$HOME/bacula/bin/working \
+ --with-mysql=$HOME/mysql \
+ --with-working-dir=$HOME/bacula/bin/working \
+ --with-dump-email=$USER \
+ --with-smtp-host=mail.your-site.com \
+ --with-baseport=9101
+exit 0
+\end{verbatim}
+\normalsize
+
+Notez que je fixe le port de base \`a 9101, ce qui signifie que Bacula
+utilisera le port 9101 pour la console Director, le port 9102 pour le File
+Daemon, et le 9103 pour le Storage Daemon. Ces ports devraient \^etre
+disponibles sur tous les syst\`emes \'etant donn\'e qu'ils ont \'et\'e
+officiellement attribu\'es \`a Bacula par l'IANA (Internet Assigned Numbers
+Authority). Nous recommandons fortement de n'utiliser que ces ports pour
+\'eviter tout conflit avec d'autres programmes. Ceci est en fait la
+configuration par d\'efaut si vous n'utilisez pas l'option {\bf
+\verb{--{with-baseport}.
+
+Vous pouvez aussi ins\'erer les entr\'ees suivantes dans votre fichier {\bf
+/etc/services} de fa\c{c}on \`a rendre les connections de Bacula plus
+ais\'ees \`a rep\'erer (i.e. netstat -a):
+
+\footnotesize
+\begin{verbatim}
+bacula-dir 9101/tcp
+bacula-fd 9102/tcp
+bacula-sd 9103/tcp
+\end{verbatim}
+\normalsize
+
+\section{Installer Bacula}
+\index[general]{Installer Bacula }
+\index[general]{Bacula!Installer }
+\addcontentsline{toc}{section}{Installer Bacula}
+
+Avant de personnaliser vos fichiers de configuration, vous voudrez installer
+Bacula dans son r\'epertoire d\'efinitif. tapez simplement:
+
+\footnotesize
+\begin{verbatim}
+make install
+\end{verbatim}
+\normalsize
+
+Si vous avez pr\'ec\'edemment install\'e Bacula, les anciens binaires seront
+\'ecras\'es, mais les anciens fichiers de configuration resteront inchang\'es,
+et les "nouveaux'' recevront l'extension {\bf .new}. G\'en\'eralement, si
+vous avez d\'ej\`a install\'e et ex\'ecut\'e Bacula, vous pr\'ef\`ererez
+supprimer ou ignorer les fichiers de configuration avec l'extension {\bf .new}
+
+
+\section{Compiler un File Daemon (ou Client)}
+\index[general]{Compiler un File Daemon (ou Client) }
+\index[general]{Client!Compiler un File Daemon ou }
+\addcontentsline{toc}{section}{Compiler un File Daemon (ou Client)}
+
+Si vous ex\'ecutez le Director et le Storage Daemon sur une machine et si vous
+voulez sauvegarder une autre machine, vous devez avoir un File Daemon sur
+cette machine. Si la machine et le syst\`eme sont identiques, vous pouvez
+simplement copier le binaire du File Daemon {\bf bacula-fd} ainsi que son
+fichier de configuration {\bf bacula-fd.conf}, puis modifier le nom et le mot
+de passe dans {\bf bacula-fd.conf} de fa\c{c}on \`a rendre ce fichier unique.
+Veillez \`a faire les modifications correspondantes dans le fichier de
+configuration du Director ({\bf bacula-dir.conf}).
+
+Si les architectures, les syst\`emes, ou les versions de syst\`emes
+diff\`erent, il vous faudra compiler un File Daemon sur la machine cliente.
+Pour ce faire, vous pouvez utiliser la m\^eme commande {\bf ./configure} que
+celle utilis\'ee pour construire le programme principal, soit en partant d'une
+copie fraiche du r\'epertoire des sources, soit en utilisant {\bf make\
+distclean} avant de lancer {\bf ./configure}.
+
+Le File Daemon n'ayant pas d'acc\`es au catalogue, vous pouvez supprimer les
+option {\bf \verb{--{with-mysql} ou {\bf \verb{--{with-sqlite}. Ajoutez l'option {\bf
+\verb{--{enable-client-only}. Ceci va compiler seulement les librairies et programmes
+clients, et donc \'eviter d'avoir \`a installer telle ou telle base de
+donn\'ees. Lancez make avec cette configuration, et seul le client sera
+compil\'e.
+\label{autostart}
+
+\section{D\'emarrage automatique des Daemons}
+\index[general]{Daemons!D\'emarrage automatique des }
+\index[general]{D\'emarrage automatique des Daemons }
+\addcontentsline{toc}{section}{D\'emarrage automatique des Daemons}
+
+Si vous souhaitez que vos {\it daemons} soient lanc\'es automatiquement au
+d\'emarrage de votre syst\`eme (une bonne id\'ee !), une \'etape
+suppl\'ementaire est requise. D'abord, le processus ./configure doit
+reconna{\^\i}tre votre syst\`eme -- ce qui signifie que ce doit \^etre une
+plate-forme support\'ee et non {\bf inconnue}, puis vous devez installer les
+fichiers d\'ependants de la plate-forme comme suit :
+
+\footnotesize
+\begin{verbatim}
+(devenez root)
+make install-autostart
+\end{verbatim}
+\normalsize
+
+Notez que la fonction d'autod\'emarrage n'est impl\'ement\'ee que pour les
+syst\`emes que nous supportons officiellement (actuellement FreeBSD, RedHat
+Linux, et Solaris), et n'a \'et\'e pleinement test\'ee que sur RedHat Linux.
+
+{\bf make install-autostart} installe les scripts de d\'emarrage apropri\'es
+ainsi que les liens symboliques n\'ecessaires. Sur RedHat Linux, Ces scripts
+r\'esident dans {\bf /etc/rc.d/init.d/bacula-dir} {\bf
+/etc/rc.d/init.d/bacula-fd}, et {\bf /etc/rc.d/init.d/bacula-sd}. Toutefois,
+leur localisation exacte d\'epend de votre syst\`eme d'exploitation.
+
+Si vous n'installez que le File Daemon, tapez:
+
+\footnotesize
+\begin{verbatim}
+make install-autostart-fd
+\end{verbatim}
+\normalsize
+
+\section{Autres notes concernant la compilation}
+\index[general]{Autres notes concernant la compilation }
+\index[general]{Compilation!Autres notes concernant la }
+\addcontentsline{toc}{section}{Autres notes concernant la compilation}
+
+Pour recompiler tout ex\'ecutable, tapez
+
+\footnotesize
+\begin{verbatim}
+make
+\end{verbatim}
+\normalsize
+
+dans le r\'epertoire correspondant.. Afin d'\'eliminer tous les objets et
+binaires (y compris les fichiers temporaires nomm\'es 1,2 ou 3 qu'utilise
+Kern), tapez
+
+\footnotesize
+\begin{verbatim}
+make clean
+\end{verbatim}
+\normalsize
+
+Pour un nettoyage exhaustif en vue de distribution, entrez:
+
+\footnotesize
+\begin{verbatim}
+make distclean
+\end{verbatim}
+\normalsize
+
+Notez que cette commande supprime les Makefiles. Elle est en principe
+lanc\'ee depuis la racine du r\'epertoire des sources pour les pr\'eparer \`a
+la distribution. Pour revenir de cet \'etat, vous devez r\'eex\'ecuter la
+commande {\bf ./configure} \`a la racine des sources puisque tous les
+Makefiles ont \'et\'e d\'etruits.
+
+Pour ajouter un nouveau fichier dans un sous-r\'epertoire, \'editez
+Makefile.in dans ce sous-r\'epertoire, puis faites un simple {\bf make}. Dans
+la plupart des cas, le make reconstruira le Makefile \`a partir du nouveau
+Makefile.in. Dans certains cas, il peut \^etre n\'ecessaire d'ex\'ecuter {\bf
+make} une deuxi\`eme fois. Dans les cas extr\`emes, remontez \`a la racine des
+sources et entrez {\bf make Makefiles}.
+
+Pour ajouter des d\'ependances:
+
+\footnotesize
+\begin{verbatim}
+make depend
+\end{verbatim}
+\normalsize
+
+La commande {\bf make depend} ins\`ere les fichiers d'en-t\^etes de
+d\'ependances aux Makefile et Makefile.in pour chaque fichier objet. Cette
+commande devrait \^etre lanc\'ee dans chaque r\'epertoire o\`u vous modifiez
+les d\'ependances. En principe, il suffit de l'ex\'ecuter lorsque vous ajoutez
+ou supprimez des sources ou fichiers d'en-t\^etes. {\bf make depend} est
+invoqu\'e automatiquement durant le processus de configuration.
+
+Pour installer:
+
+\footnotesize
+\begin{verbatim}
+make install
+\end{verbatim}
+\normalsize
+
+En principe, vous n'utilisez pas cette commande si vous \^etes en train de
+d\'evelopper Bacula, mais si vous vous appr\'etez \`a l'ex\'ecuter pour
+sauvegarder vos syst\`emes.
+
+Apr\`es avoir lanc\'e {\bf make install}, les fichiers suivants seront
+install\'es sur votre syst\`eme (\`a peu de choses pr\`es). La liste exacte
+des fichiers install\'es et leur localisation d\'epend de votre commande {\bf
+c./configure} (e.g. gnome-console et gnome-console.conf ne sont pas
+install\'es si vous ne configurez pas GNOME. De m\^eme, si vous utilisez
+SQLite plut\^ot que MySQL, certains fichiers seront diff\'erents.
+
+\footnotesize
+\begin{verbatim}
+bacula
+bacula-dir
+bacula-dir.conf
+bacula-fd
+bacula-fd.conf
+bacula-sd
+bacula-sd.conf
+bacula-tray-monitor
+tray-monitor.conf
+bextract
+bls
+bscan
+btape
+btraceback
+btraceback.gdb
+bconsole
+bconsole.conf
+create_mysql_database
+dbcheck
+delete_catalog_backup
+drop_bacula_tables
+drop_mysql_tables
+fd
+gnome-console
+gnome-console.conf
+make_bacula_tables
+make_catalog_backup
+make_mysql_tables
+mtx-changer
+query.sql
+bsmtp
+startmysql
+stopmysql
+bwx-console
+bwx-console.conf
+\end{verbatim}
+\normalsize
+
+\label{monitor}
+
+\section{Installer Tray Monitor}
+\index[general]{Monitor!Installer Tray }
+\index[general]{Installer Tray Monitor }
+\addcontentsline{toc}{section}{Installer Tray Monitor}
+
+Le Tray Monitor est d\'ej\`a install\'e si vous avez utilis\'e l'option {\bf
+\verb{--{enable-tray-monitor} de la commande configure et ex\'ecut\'e {\bf make
+install}.
+
+Comme vous n'ex\'ecutez pas votre environnement graphique en tant que root (si
+vous le faites, vous devriez changer cette mauvaise habitude), n'oubliez pas
+d'autoriser votre utilisateur \`a lire {\bf tray-monitor.conf}, et ex\'ecuter
+{\bf bacula-tray-monitor} (ceci ne constitue pas une faille de s\'ecurit\'e).
+
+Puis, connectez vous \`a votre environnement graphique (KDE, Gnome, ou autre),
+lancez {\bf bacula-tray-monitor} avec votre utilisateur et observez si l'icone
+d'une cartouche appara{\^\i}t quelque part sur l'\'ecran, usuellement dans la
+barre des t\^aches.
+Sinon, suivez les instructions suivantes relatives \`a votre gestionnaire de
+fen\^etres.
+
+\subsection{GNOME}
+\index[general]{GNOME }
+\addcontentsline{toc}{subsection}{GNOME}
+
+System tray, ou zone de notification si vous utilisez la terminologie GNOME,
+est support\'e par GNOME depuis la version 2.2. Pour l'activer, faites un
+click droit sur un de vos espaces de travail, ouvrez le menu {\bf Ajouter \`a
+ce bureau}, puis {\bf Utilitaire} et enfin, cliquez sur {\bf Zone de
+notification}. (NDT: A valider)
+
+\subsection{KDE}
+\index[general]{KDE }
+\addcontentsline{toc}{subsection}{KDE}
+
+System tray est support\'e par KDE depuis la version 3.1. Pour l'activer,
+faites un click droit sur la barre de t\^aches, ouvrez le menu {\bf Ajouter},
+puis {\bf Applet}, enfin cliquez sur {\bf System Tray}.
+
+\subsection{Autres gestionnaires de fen\^etres}
+\index[general]{Autres gestionnaires de fen\^etres }
+\addcontentsline{toc}{subsection}{Autres gestionnaires de fen\^etres}
+
+Lisez la documentation pour savoir si votre gestionnaire de fen\^etres
+supporte le standard {\it systemtray} de FreeDesktop, et comment l'activer le
+cas \'ech\'eant.
+
+\section{Modifier les fichiers de configuration de Bacula}
+\index[general]{Modifier les fichiers de configuration de Bacula }
+\index[general]{Bacula!Modifier les fichiers de configuration de }
+\addcontentsline{toc}{section}{Modifier les fichiers de configuration de
+Bacula}
+
+Consultez le chapitre
+\ilink{Configurer Bacula}{_ChapterStart16} de ce manuel pour les
+instructions de configuration de Bacula.
--- /dev/null
+%%
+%%
+
+\chapter{La ressource Messages}
+\label{_ChapterStart15}
+\index[general]{Ressource!Messages}
+\index[general]{Messages Ressource}
+\addcontentsline{toc}{section}{Ressource Messages}
+
+\section{La ressource Messages}
+\label{MessageResource}
+\index[general]{Ressource!Messages}
+\index[general]{Messages Ressource}
+\addcontentsline{toc}{section}{La ressource Messages}
+
+La ressource Messages d\'efinit la fa\c{c}on dont les messages doivent \^etre construits
+et vers quelles destinations ils doivent \^etre transmis.
+
+Bien que chaque {\it daemon} int\`egre un gestionnaire de messages pleinement
+fonctionnel, vous choisirez certainement de centraliser les messages appropri\'es
+des File Daemons et du Storage Daemon vers le Director. Ainsi, tous les messages
+associ\'es \`a un job donn\'e peuvent \^etre combin\'es et envoy\'es en un simple courrier
+\'electronique vers l'utilisateur, ou enregistr\'e dans quelque fichier de logs.
+
+Chaque message g\'en\'er\'e par un {\it daemon} Bacula poss\`ede un type associ\'e tel
+que INFO, WARNING, ERROR, FATAL, etc. La ressource Messages vous permet de
+stipuler les types de messages que vous voulez voir, et o\`u les envoyer. De plus,
+un message peut \^etre exp\'edi\'e vers plusieurs destinations. Par exemple, vous
+pouvez faire en sorte quque tous les messages d'erreur soient consign\'es dans un
+fichier de logs tout en vous \'etant envoy\'es par courrier \'elecronique. En
+d\'efinissant plusieurs ressources Messages, vous pouvez profiter de diff\'erents
+modes de prise en charge pour chaque type de job (par exemple, selon qu'il
+s'agit d'une full ou d'un incr\'ementale).
+
+En g\'en\'eral, les messages sont attach\'es \`a un job et sont inclus dans le rapport de job.
+Il existe de rares situations o\`u ce n'est pas possible, par exemple lorsqu'aucun
+job n'est en cours d'ex\'ecution, ou si une erreur de communication se produit
+entre un daemon et le Director. Dans ce genre de situations, le message demeure
+dans le syst\`eme et devrait \^etre purg\'e \`a la fin job suivant. Cependant, comme de tels
+messages ne sont pas attach\'es \`a un job, tous ceux qui sont envoy\'es par courrier
+\'electronique sont envoy\'es \`a {\bf /usr/lib/sendmail}. Si sur votre syst\`eme, comme c'est
+le cas de FreeBSD, sendmail r\'eside en un autre emplacement, veillez \`a le lier
+depuis l'emplacement ci-dessus.
+
+Les enregistrements contenus dans une ressource Messages consistent en une
+sp\'ecification de {\bf destination} suivie d'une liste de types de messages
+{\bf message-types} au format :
+
+\begin{description}
+
+\item [destination = message-type1, message-type2, message-type3, ... ]
+ \index[dir]{destination}
+ \end{description}
+
+ou, pour ces destinations qui n\'ecessitent de sp\'ecifier une adresse (e-mail, par exemple) :
+
+\begin{description}
+
+\item [destination = address = message-type1, message-type2,
+ message-type3, ... ]
+ \index[dir]{destination}
+
+o\`u {\bf destination} est l'un des mots-clef pr\'ed\'efinis qui pr\'ecise o\`u le message
+doit \^etre exp\'edi\'e ({\bf stdout}, {\bf file}, ...), {\bf message-type} est l'un des
+mots-clef pr\'ed\'efinis qui pr\'ecise le type de messages g\'en\'er\'e par Bacula ({\bf ERROR},
+{\bf WARNING}, {\bf FATAL}, ...) et {\bf address} varie selon le mot clef {\bf destination}
+mais peut typiquement \^etre une adresse de courrier \'electronique ou un nom de fichier.
+
+\end{description}
+
+Voici la liste des directives disponibles pour d\'efinir des ressources Messages :
+
+
+\begin{description}
+
+\item [Messages]
+ \index[dir]{Messages}
+ D\'ebut des enregistrements de Messages
+
+\item [Name = \lt{}name\gt{}]
+ \index[dir]{Name}
+ Le nom de la ressource Message. Ce nom sera utilis\'e pour lier cette ressource
+Message \`a un job et/ou au un daemon.
+
+\label{mailcommand}
+
+\item [MailCommand = \lt{}command\gt{}]
+ \index[dir]{MailCommand}
+En l'absence de cette directive, Bacula enverra tous ses messages avec la
+commande suivante :
+
+{\bf mail -s "Bacula Message" \lt{}recipients\gt{}}
+Dans de nombreusx cas, selon votre machine, cette commande peut ne pas fonctionner.
+La directive {\bf MailCommand} vous permet de stipuler pr\'ecis\'ement la fa\c{c}on
+d'envoyer vos courrier \'electroniques. Lors de l'ex\'ecution de la commande
+{\bf command}, sp\'ecifi\'ee entre guillemets, les substitutions suivantes sont
+effectu\'ees :
+
+\begin{itemize}
+ \item \%\% = \%
+ \item \%c = Le nom du client
+ \item \%d = Le nom du Director
+ \item \%e = Le code de sortie du job (OK, Error, ...)
+ \item \%i = L'Id du Job
+ \item \%j = Le nom unique du job
+ \item \%l = Le niveau (Full, differential, ...) du job
+ \item \%n = Le om du job
+ \item \%r = Les destinataires
+ \item \%t = Le type du job (Backup, verify, ...)
+\end{itemize}
+
+Voici la commande que j'utilise (Kern) :
+
+{\bf mailcommand = "/home/kern/bacula/bin/bsmtp -h mail.example.com -f
+\textbackslash{}"\textbackslash{}(Bacula\textbackslash{})
+\%r\textbackslash{}" -s \textbackslash{}"Bacula: \%t \%e of \%c
+\%l\textbackslash{}" \%r"}
+
+Notez que la commande enti\`ere devrait appara\^itre sur une seulle ligne plut\^ot
+que d\'ecoup\'ee comme ici pour des raisons de pr\'esentation.
+
+Le programme {\bf bsmtp} est fourni en tant que partie de Bacula. Pour plus
+de d\'etails, consultez la section \ilink{ bsmtp -- Personnaliser l'envoi
+de vos message par courrier \'electronique}{bsmtp}. Testez soigneusement
+toute commande {\bf mailcommand} pour vous assurer que votre passerelle
+bsmtp accepte le format d'adressage que vous utilisez. Certains programmes
+tels Exim peut se montrer tr\`es s\'electif en ce qui concerne les format
+autoris\'es, particuli\`erement en ce qui concerne le champ "from".
+
+\item [OperatorCommand = \lt{}command\gt{}]
+ \index[fd]{OperatorCommand}
+ Cette directive est analogue \`a {\bf MailCommand}, mais elle est utilis\'ee pour
+ les messages destin\'es \`a l'op\'erateur. Les substitutions effectu\'ees pour la
+ directive {\bf MailCommand} sont aussi effectu\'ees pour celle-ci. Normalement,
+ vous mettrez ici la m\^eme valeur que pour {\bf MailCommand}.
+
+\item [Debug = \lt{}debug-level\gt{}]
+ \index[fd]{Debug}
+ Cette directive r\`egle le niveau de d\'ebogage des messages. C'est un entier.
+ Plus sa valeur est grande, plus grande est la quantit\'e d'informations de
+ d\'ebogages produites. Nous vous conseillons de ne pas utiliser cette directive
+ car elle sera bient\^ot obsol\`ete.
+
+\item [\lt{}destination\gt{} = \lt{}message-type1\gt{},
+ \lt{}message-type2\gt{}, ...]
+ \index[fd]{\lt{}destination\gt{}}
+
+O\`u la {\bf destination} peut \^etre l'une des suivantes :
+
+\begin{description}
+
+\item [stdout]
+ \index[fd]{stdout}
+ Envoie le message vers la sortie standard.
+
+\item [stderr]
+ \index[fd]{stderr}
+ Envoie le message vers l'erreur standard
+
+\item [console]
+ \index[console]{console}
+ Envoie le message vers la console Bacula. Ces messages sont gard\'es en attente
+ jusqu'\`a ce que la console contacte le Director.
+\end{description}
+
+\item {\bf \lt{}destination\gt{} = \lt{}address\gt{} =
+ \lt{}message-type1\gt{}, \lt{}message-type2\gt{}, ...}
+ \index[console]{\lt{}destination\gt{}}
+
+O\`u {\bf address} d\'epend de la {\bf destination}, qui peut \^etre l'une des suivantes :
+
+\begin{description}
+
+\item [director]
+ \index[dir]{director}
+ Envoie le message vers le Director dont le nom est sp\'ecifi\'e dans le champ
+ {\bf address}. Notez que dans l'impl\'ementation actuelle, le nom du Director
+ est ignor\'e, le message \'etant envoy\'e au Directr qui a lanc\'e le job.
+
+\item [file]
+ \index[dir]{file}
+ Envoie le message vers le fichier d\'esign\'e dans le champ {\bf address}. Si le
+ fichier existe, il est \'ecras\'e.
+
+\item [append]
+ \index[dir]{append}
+ Ajoute le message \`a la suite du fichier d\'esign\'e dans le champ {\bf address}.
+ Si le fichier n'existe pas encore, il est cr\'e\'e.
+
+\item [syslog]
+ \index[fd]{syslog}
+ Envoie le message vers le syst\`eme de journalisation (syslog) en utilisant le
+ service d\'esign\'e par le champ {\bf address} Notez que, pour le moment, le champ
+ {\bf address} est ignor\'e, et que le message est toujours envoy\'e au service
+ LOG\_DAEMON avec le niveau LOG\_ERR. Consultez la page {\bf man 3 syslog}
+ pour plus de d\'etails. Exemple :
+
+\begin{verbatim}
+ syslog = all, !skipped, !saved
+\end{verbatim}
+
+\item [mail]
+ \index[fd]{mail}
+ Exp\'edie le message vers les adresses \'electroniques
+ sp\'ecifi\'ees dans le champ {\bf address} (s\'epar\'ees par des points-virgule).
+ Les messages sont rassembl\'es au cours du job, puis exp\'edi\'es lorsqu'il prend
+ fin en un seul courrier \'electronique. L'avantage de cette Destination est
+ que vous recevez une notification de chaque job ex\'ecut\'e. Toutefois, si vous
+ sauvegardez cinq ou dix machines chaque nuit, la quantit\'e de courrier
+ \'electronique peut devenir importante. Certains utilisateurs mettent en oeuvre
+ des filtres de courrier tels {\bf procmail} pour classer automatiquement ces
+ courriers en fonction des codes de fin de job (voyez la commande {\bf mailcommand}
+
+\item [mail on error]
+ \index[fd]{mail on error}
+ Exp\'edie le message vers les adresses \'electroniques
+ sp\'ecifi\'ees dans le champ {\bf address} (s\'epar\'ees par des points-virgule)
+ si le job se termine avec un code d'erreur. Les messages MailOnError sont
+ rassembl\'es au cours du job, puis exp\'edi\'es lorsqu'il prend fin en un seul
+ courrier \'electronique. Cette Destination diff\`ere de la Destination {\bf mail}
+ en ce que si le job s'ach\`eve normalement, le message est compl\`etement
+ abandonn\'e (pour cette Destination). En utilisant d'autres Destinations, telles
+ que {\bf append}, vous pouvez vous assurer que les informations de sorties
+ ne seront pas perdues m\^eme si le job se termine normalement.
+
+\item [operator]
+ \index[fd]{operator}
+ Exp\'edie le message vers les adresses \'electroniques
+ sp\'ecifi\'ees dans le champ {\bf address} (s\'epar\'ees par des points virgule).
+ Cette directive est similaire \`a {\bf mail} d\'ecrite plus haut, sauf que
+ chaque message est envoy\'e aussit\^ot re\c{c}u, de sorte qu'il y a un courrier
+ \'electronique par message . Ceci est surtout utile pour les messages de
+ type {\bf mount} (voir ci-dessous).
+
+\end{description}
+ Pour toutes les Destinations, le champ "type de message" {\bf message-type} est
+ une liste des types (ou classes) de messages suivants s\'epar\'es par des
+ points-virgule :
+
+\begin{description}
+
+\item [info]
+ \index[fd]{info}
+ Messages d'information g\'en\'erale.
+
+\item [warning]
+ \index[fd]{warning}
+ Messages d'avertissement. En g\'en\'eral, il s'agit de quelque situation inhabituelle
+ sans toutefois \^etre tr\`es s\'erieuse.
+
+\item [error]
+ \index[fd]{error}
+ Messages d'erreur non-fatale. Le job se poursuit. Tout message d'erreur devrait
+ \^etre suivi d'investigations, car il signifie que quelque chose est all\'e de travers.
+
+\item [fatal]
+ \index[fd]{fatal}
+ Messages d'erreur fatale. Ces erreurs pr\'ecipitent la fin du job.
+
+\item [terminate]
+ \index[fd]{terminate}
+ Messages g\'en\'er\'es lorsque le daemon s'arr\`ete.
+
+\item [saved]
+ \index[fd]{saved}
+ Fichiers sauvegard\'es normalement.
+
+\item [notsaved]
+ \index[fd]{notsaved}
+ Fichiers non sauvegard\'es en raison d'une erreur, en g\'en\'eral, parce que le
+ fichier n'a pu \^etre acc\'ed\'e (il n'existait pas ou n'\'etait pas mont\'e).
+
+\item [skipped]
+ \index[fd]{skipped}
+ Fichiers qui ont \'et\'e laiss\'es de cot\'e en raison d'une option pos\'ee par un
+ utilisateur (par exemple le niveau d'une sauvegarde ou une option
+ d'exclusion. Ceci n'est pas consid\'er\'e comme une condition d'erreur au m\^eme
+ titre que pour le type {\bf notsaved} puisque le fichier de configuration
+ stipule explicitement que ces fichiers ne doivent pas \^etre sauvegard\'es.
+ Des cas typiques de fichiers de type {\bf skipped} : fichiers inchang\'es
+ lors d'une incr\'ementale, sous-r\'epertoires si l'option {\bf no recursion}
+ est activ\'ee...
+
+\item [mount]
+ \index[dir]{mount}
+ Montage d'un volume ou intervention d'un op\'erateur requis par le Storage Daemon.
+ Ces requ\^etes n\'ecessitent une intervention sp\'ecifique de l'op\'erateur pour que le
+ job puisse se poursuivre.
+
+\item [restored]
+ \index[dir]{restored}
+ La liste, fa\c{c}on {\bf ls}, de tous les fichiers restaur\'es est envoy\'ee vers
+ cette classe de messages.
+
+\item [all]
+ \index[fd]{all}
+ Tous les types de messages.
+
+\item [*security]
+ \index[fd]{*security}
+ Messages d'information ou d'avertissement relatifs \`a la s\'ecurit\'e,
+ essentiellement les tentatives de connection non-autoris\'ees.
+\end{description}
+
+\end{description}
+
+Voici un exemple d'une d\'efinition de ressource Messages valide, o\`u tous les
+messages sont envoy\'es par courrier \'electronique \`a enforcement@sec.com \`a
+l'exception de ceux concernant les fichiers explicitement exclus (skipped),
+et des messages d'arr\^et de daemon (terminate). De plus, tous les messages
+de type mount sont envoy\'es \`a l'op\'erateur (courrier \`a enforcement@sec.com).
+Enfin, tous les messages autres que ceux relatifs aux fichiers explicitement
+exclus et aux fichiers sauvegard\'es sont envoy\'es vers la console :
+
+\footnotesize
+\begin{verbatim}
+Messages {
+ Name = Standard
+ mail = enforcement@sec.com = all, !skipped, !terminate
+ operator = enforcement@sec.com = mount
+ console = all, !skipped, !saved
+}
+\end{verbatim}
+\normalsize
+
+A l'exception de l'adresse \'electronique (modifi\'ee pour \'eviter le spam),
+voici la ressource Message du Director de Kern. Notez que les commandes
+{\bf mailcommand} et {\bf operatorcommand} sont sur une seule ligne et
+non coup\'ees comme ici pour des besoins de mise en page.
+
+\footnotesize
+\begin{verbatim}
+Messages {
+ Name = Standard
+ mailcommand = "bacula/bin/bsmtp -h mail.example.com \
+ -f \"\(Bacula\) %r\" -s \"Bacula: %t %e of %c %l\" %r"
+ operatorcommand = "bacula/bin/bsmtp -h mail.example.com \
+ -f \"\(Bacula\) %r\" -s \"Bacula: Intervention needed \
+ for %j\" %r"
+ MailOnError = security@example.com = all, !skipped, \
+ !terminate
+ append = "bacula/bin/log" = all, !skipped, !terminate
+ operator = security@example.com = mount
+ console = all, !skipped, !saved
+}
+\end{verbatim}
+\normalsize
--- /dev/null
+%%
+%%
+
+\chapter{Installer et configurer PostgreSQL}
+\label{_ChapterStart10}
+\index[general]{PostgreSQL!Installer et configurer }
+\index[general]{Installer et configurer PostgreSQL }
+\addcontentsline{toc}{section}{Installer et configurer PostgreSQL}
+
+\section{Installer et configurer PostgreSQL -- Phase I}
+\index[general]{Installer et configurer PostgreSQL -- Phase I }
+\index[general]{Phase I!Installer et configurer PostgreSQL -- }
+\addcontentsline{toc}{section}{Installer et configurer PostgreSQL -- Phase
+I}
+
+Attention !!! Si vous envisagez d'utiliser PostgreSQL, vous devriez
+\^etre conscient de la philosophie des mises \`a jour de PostgreSQL qui
+peut \^etre d\'estabilisant dans un environnement de
+production. En gros, pour chaque mise \`a jour vers une version majeure,
+vous devez exporter vos bases de donn\'ees au format ASCII, faire la
+mise \`a jour, et recharger vos bases de donn\'ees. Ceci est d\^u au \`a des
+mises \`a jour fr\'equentes du "format de donn\'ees" d'une version \`a l'autre,
+et aucun outil n'est fourni pour effectuer la conversion automatiquement.
+Si vous omettez d'exporter vos bases au format ASCII, elles peuvent
+devenir compl\`etement inutiles si aucun des nouveaux outils ne peut y
+acc\'eder en raison d'un changement de format, auquel cas le serveur
+PostgreSQL sera dans l'incapacit\'e de d\'emarrer.
+
+Si vous avez utilis\'e l'option {\bf ./configure
+\verb{--{with-postgresql=PostgreSQL-Directory} pour configurer {\bf Bacula}, vous
+avez besoin d'installer la version 7.3 ou sup\'erieure de PostgreSQL.
+ATTENTION! Les versions pr\'ealables \`a la 7.3 ne fonctionnent pas avec
+Bacula. Si PostgreSQL est install\'e dans ses r\'epertoires sandards, seule
+l'option {\bf \verb{--{with-postgresql} est n\'ecessaire, le programme de
+configuration scrutant tous les r\'epertoires standards. Si PostgreSQL est
+install\'e dans votre r\'epertoire de travail ou dans un r\'epertoire
+atypique, il faut pr\'eciser l'option {\bf \verb{--{with-postgresql} suivie du
+r\'epertoire {\it ad hoc}.
+
+Installer et configurer PostgreSQL n'est pas compliqu\'e mais peut \^etre
+d\'eroutant la premi\`ere fois. Si vous pr\'ef\'erez, vous pouvez utiliser le
+paquet de votre distribution. Les paquets binaires sont disponibles sur la
+plupart des mirroirs de PostgreSQL.
+
+Si vous pr\'ef\'erez installer PostgreSQL \`a partir des sources, nous vous
+recommandons de suivre les instructions de la
+\elink{documentation PostgreSQL}{http://www.postgresql.org/docs/}.
+
+Si vous utilisez PostgreSQL pour FreeBSD,
+\elink{cet article}{http://www.freebsddiary.org/postgresql.php} vous sera peut
+\^etre utile. M\^eme si vous n'utilisez pas FreeBSD, l'article contient des
+informations utiles \`a la configuration et au param\'etrage de PostgreSQL.
+
+Apr\`es l'installation de PostgreSQL, terminez l'installation de {\bf Bacula}.
+Ensuite, quand Bacula sera install\'e, reprenez ce chapitre pour terminer
+l'installation. Notez que les fichiers d'installation utilis\'es dans cette
+seconde phase de l'installation de PostgreSQL sont cr\'e\'es durant
+l'installation de Bacula.
+\label{PostgreSQL_phase2}
+
+\section{Installer et configurer PostgreSQL -- Phase II}
+\index[general]{Phase II!Installer et configurer PostgreSQL -- }
+\index[general]{Installer et configurer PostgreSQL -- Phase II }
+\addcontentsline{toc}{section}{Installer et configurer PostgreSQL -- Phase
+II}
+
+Si vous en \^etes l\`a, vous avez construit et install\'e PostgreSQL, ou vous
+aviez d\'ej\`a un serveur PostgreSQL existant et vous avez configur\'e et
+install\'e {\bf Bacula}. Dans le cas contraire, nous vous invitons \`a le
+faire avant de poursuivre.
+
+Notez bien que la commande {\bf ./configure} utilis\'ee pour
+construire {\bf Bacula} n\'ecessite d'ajouter l'option {\bf
+\verb{--{with-postgresql=repertoire\_de\_PostgreSQL}, o\`u {\bf
+repertoire\_de\_PostgreSQL} sp\'ecifie le chemin de PostgreSQL indiqu\'e \`a
+la commande ./configure. (si vous n'avez pas sp\'ecifi\'e de r\'epertoire ou
+si PostgreSQL est install\'e dans son r\'epertoire par d\'efaut, cette option
+n'est pas n\'ecessaire). Cette option est n\'ecessaire pour que Bacula puisse
+trouver les fichiers d'en-t\^ete et les librairies d'interface \`a PostgreSQL.
+
+
+{\bf Bacula} installe les scripts pour la gestion de la base de donn\'ees
+(cr\'eer, d\'etruire, cr\'eer les tables, etc.) dans le r\'epertoire principal
+de l'installation. Ces fichiers sont de la forme *\_bacula\_* (par exemple
+create\_bacula\_database). Ces fichiers sont \'egalement disponibles dans le
+r\'epertoire \lt{}bacula-src\gt{}/src/cats apr\`es que la commande ./configure
+ait \'et\'e lanc\'ee. Si vous consultez le fichier create\_bacula\_database,
+vous verrez qu'il fait appel \`a create\_postgresql\_database. Les fichiers
+*\_bacula\_* sont fournis pour faciliter les choses. Peu importe la base de
+donn\'ees choisie, create\_bacula\_database cr\'eera la base de donn\'ees.
+
+Maintenant vous allez cr\'eer la base de donn\'ees PostgreSQL et les tables
+utilis\'ees par Bacula. On pr\'esume dans la suite que votre serveur
+PostgreSQL fonctionne. Vous devez ex\'ecuter les diff\'erentes \'etapes
+ci-dessous en tant qu'utilisateur autoris\'e \`a cr\'eer des bases. Ceci peut
+\^etre fait avec l'utilisateur PostgreSQL (sur la plupart des syst\`emes il
+s'agit de pgsql. NDT: sur debian il s'agit de postgres)
+
+\begin{enumerate}
+\item cd \lt{}r\'epertoire\_d\_installation\gt{}
+
+ Ce r\'epertoire contient le catalogue des routines d'interfaces.
+
+\item ./create\_bacula\_database
+
+ Ce script cr\'e\'e le catalogue {\bf bacula} PostgreSQL. S'il \'echoue,
+ c'est probablement que vous n'avez pas les droits requis sur la
+ base de donn\'ees. Sur la plupart des syst\`emes, le propri\'etaire de
+ la base de donn\'ees est {\bf pgsql}, et sur d'autres tels que RedHat ou
+ Fedora, c'est {\bf postgres}. Vous pouvez d\'eterminer lequel en examinant
+ le fichier /etc/passwd. Pour cr\'eer un nouvel utilisateur avec votre nom
+ ou le nom {\bf bacula}, vous pouvez faire ce qui suit :
+
+\begin{verbatim}
+ su
+ (entrez le mot de passe root)
+ su pgsql (ou postgres)
+ createuser kern (ou peut-\^etre bacula)
+ Shall the new user be allowed to create databases? (y/n) y
+ Shall the new user be allowed to create more new users? (y/n) (choisissez ce que vous voulez)
+ exit
+\end{verbatim}
+
+
+ A ce stade, vous devriez pouvoir ex\'ecuter la commande ./create\_bacula\_database
+
+\item ./make\_bacula\_tables
+
+ Cr\'e\'ee les tables utilis\'ees par {\bf Bacula}.
+\item ./grant\_bacula\_privileges
+
+ Cr\'e\'ee l'utilisateur de la base de donn\'ees {\bf bacula} avec des droits
+d'acc\`es restreints. Vous pouvez modifier ce script pour cadrer avec votre
+propre configuration. Attention, cette base n'est pas prot\'eg\'ee par un mot
+de passe.
+
+\end{enumerate}
+
+Chacun de ces scripts (create\_bacula\_database, make\_bacula\_tables et
+grant\_bacula\_privileges) permet l'ajout d'arguments en ligne de commande.
+Ceci peut \^etre utile pour sp\'ecifier le nom de l'utilisateur. Par exemple,
+vous pouvez avoir besoin d'ajouter {\bf -h nom\_d\_hote} \`a la ligne de
+commande pour sp\'ecifier le serveur de base de donn\'ees distant.
+
+Pour avoir un bon aper\c{c}u des droits d'acc\`es que vous avez sp\'ecifi\'e
+vous pouvez utiliser la commande
+
+\footnotesize
+\begin{verbatim}
+
+repertoire_de_PostgreSQL/bin/psql --command \\dp bacula
+\end{verbatim}
+\normalsize
+
+J'ai rencontr\'e un probl\`eme de permissions avec le mot de passe. J'ai finalement
+du modifier mon fichier {\bf pg\_hba.conf} (situ\'e dans /var/lib/pgsql/data sur ma
+machine) :
+
+\footnotesize
+\begin{verbatim}
+de
+ local all all ident sameuser
+vers
+ local all all trust sameuser
+\end{verbatim}
+\normalsize
+
+Ceci a r\'esolu le probl\`eme pour moi, mais ce n'est pas pas forc\'ement une bonne
+chose du point de vue de la s\'ecurit\'e, mais j'ai ainsi pu ex\'ecuter mes scripts de
+r\'egression sans mot de passe.
+
+Un moyen plus s\'ecuris\'e pour l'authentification aupr\`es de la base de donn\'ees
+consiste \`a utiliser le hachage MD5 des mots de passe. Pour cela, \'editez les
+fichier {\bf pg\_hba.conf}, et ajoutez ajoutez ce qui suit juste avant les lignes
+"local" et "host" existantes :
+
+\footnotesize
+\begin{verbatim}
+ local bacula bacula md5
+\end{verbatim}
+\normalsize
+
+Puis red\'emarrez le {\it daemon} Postgres (la plupart du temps, avec
+ "/etc/init.d/postgresql restart") pour activer cette nouvelle r\`egle
+d'authentification.
+
+Ensuite, en tant qu'administrateur Postgres (connectez-vous en tant
+qu'utilisateur postgres ou en utilisant {\bf su} pour devenir root, puis
+ {\bf su postgres}), ajoutez un mot de passe \`a la base de donn\'ees bacula
+pour l'utilisateur bacula avec les commandes suivantes :
+
+\footnotesize
+\begin{verbatim}
+ \$ psql bacula
+ bacula=# alter user bacula with password 'secret';
+ ALTER USER
+ bacula=# \\q
+\end{verbatim}
+\normalsize
+
+Enfin, il vous faudra ajouter ce mot de passe en deux endroits du fichier
+bacula-dir.conf : au niveau de la ressource Catalog et au niveau de la
+directive RunBeforeJob de la ressource Job BackupCatalog. Avec les mots de
+passe en place, ces deux lignes devraient ressembler \`a ceci :
+
+\footnotesize
+\begin{verbatim}
+ dbname = bacula; user = bacula; password = "secret"
+ ... and ...
+ RunBeforeJob = "/etc/make_catalog_backup bacula bacula secret"
+\end{verbatim}
+\normalsize
+
+Naturellement, vous devriez choisir un meilleur mot de passe, et vous assurer
+que le fichier bacula-dir.conf qui contient ce mot de passe n'est lisible
+que par root.
+
+M\^eme avec ces restrictions, il reste un probl\`eme de s\'ecurit\'e avec cette approche :
+sur certaines plateformes, la variable d'environnement utilis\'ee pour soumettre le
+mot de passe \`a Postgres est disponible pour tout utilisateur
+local du syst\`eme. Pour supprimer ce probl\`eme, l'\'equipe Postgres a d\'ecr\'et\'e
+obsol\`ete ce m\'ecanisme de passage de mot de passe par variable d'environnement et
+recommande d'utiliser un fichier .pgpass. Pour utiliser ce m\'ecanisme, cr\'eez un fichier
+nomm\'e .pgpass vcontenant une simple ligne :
+
+\footnotesize
+\begin{verbatim}
+ localhost:5432:bacula:bacula:secret
+\end{verbatim}
+\normalsize
+
+Ce fichier devrait \^etre copi\'e dans les r\'epertoires personnels (NDT : home directories)
+de tous les comptes susceptibles d'avoir besoin d'acc\'eder \`a la base de donn\'ees :
+typiquement, il s'agit de root, bacula et tout utilisateur de la console Bacula. Les fichiers
+doivent appartenir aux utilisateur et groupe correspondant : root:root pour la copie
+dans ~root, etc. Les permissions doivent \^etre positionn\'ees \`a 600 pour limiter
+l'acc\`es au propri\'etaire du fichier.
+
+\section{R\'einitialiser la base des catalogues (de sauvegardes)}
+\index[general]{R\'einitialiser la base des catalogues (de sauvegardes) }
+\index[general]{Sauvegardes!R\'einitialiser la base des catalogues de }
+\addcontentsline{toc}{section}{R\'einitialiser la base des catalogues (de
+sauvegardes)}
+
+Apr\`es avoir fait un certain nombre de tests avec {\bf Bacula}, vous aurez
+tr\`es certainement envie de nettoyer le catalogue des sauvegardes et faire
+dispara{\^\i}tre tous les travaux de tests que vous avez lanc\'es. Pour ce
+faire, vous pouvez ex\'ecuter les commandes suivantes:
+
+\footnotesize
+\begin{verbatim}
+
+ cd <r\'epertoire_d_installation>
+ ./drop_bacula_tables
+ ./make_bacula_tables
+ ./grant_bacula_privileges
+\end{verbatim}
+\normalsize
+
+Attention! Toutes les informations contenues dans cette base seront perdues et
+vous repartirez de z\'ero. Si vous avez \'ecrit sur certains volumes (m\'edia
+de sauvegarde), vous devrez \'ecrire une marque de fin de fichier (EOF) sur
+chacun d'eux afin que {\bf Bacula} puisse les r\'eutiliser. Pour ce faire:
+
+\footnotesize
+\begin{verbatim}
+
+ (arr\^eter Baula ou demonter les volumes)
+ mt -f /dev/nst0 rewind
+ mt -f /dev/nst0 weof
+\end{verbatim}
+\normalsize
+
+o\`u vous devrez remplacer {\bf /dev/nst0} par le chemin appropri\'e de votre
+lecteur de sauvegarde.
+
+\section{Installer PostgreSQL avec les RPMs}
+\index[general]{PostgreSQL!Installer avec les RPMs}
+\index[general]{Installer PostgreSQL avec les RPMs}
+\addcontentsline{toc}{section}{Installer PostgreSQL avec les RPMs}
+Si vous installez PostgreSQL avec les RPMs, il vous faut installer les
+binaires PostgreSQL ainsi que les librairies clientes. Ces derni\`eres font
+g\'en\'eralement partie de paquetages de d\'eveloppement, aussi vous devez installer :
+
+\footnotesize
+\begin{verbatim}
+ postgresql
+ postgresql-devel
+\end{verbatim}
+\normalsize
+
+Il en va de m\^eme avec la plupart des gestionnaires de paquetages.
+
+\section{Migrer de MySQL \`a PostgreSQL}
+\index[general]{Migrer de MySQL \`a PostgreSQL }
+\index[general]{PostgreSQL!Migrer de MySQL \`a }
+\addcontentsline{toc}{section}{Migrer de MySQL \`a PostgreSQL}
+
+La proc\'edure de migration pr\'esent\'ee ici \`a fonctionn\'e pour Norm
+Dressler \lt{}ndressler at dinmar dot com\gt{}
+
+Ce process a \'et\'e test\'e en utilisant les versions suivantes des
+diff\'erents logiciels:
+
+\begin{itemize}
+\item Linux Mandrake 10/Kernel 2.4.22-10 SMP
+\item MySQL Ver 12.21 Distrib 4.0.15, pour mandrake-linux-gnu (i586)
+\item PostgreSQL 7.3.4
+\item Bacula 1.34.5
+ \end{itemize}
+
+ATTENTION! Par pr\'ecaution, r\'ealisez une sauvegarde compl\`ete de vos
+syst\`emes avant de proc\'eder \`a cette migration.
+
+\begin{enumerate}
+\item Arr\^etez bacula (cd /etc/bacula;./bacula stop)
+\item Lancez la commande pour extraire les donn\'ees de votre base MySQL:
+
+ \footnotesize
+\begin{verbatim}
+
+ mysqldump -f -t -n >bacula-backup.dmp
+
+\end{verbatim}
+\normalsize
+
+\item Faites une sauvegarde de votre r\'epertoire /etc/bacula (mais laisser
+ l'original en place ).
+\item Allez dans le r\'epertoire source de {\bf Bacula} et reconstruisez le en
+ incluant le support PostgreSQL au lieu de celui de MySQL . V\'erifiez que le
+ fichier config.log de votre configuration originale et remplacez enable-mysql
+par enable-postgresql.
+\item Recompilez Bacula avec la commande make et si tout se passe correctement
+ lancez un "make install".
+\item Arr\^etez MySQL.
+\item Lancez PostgreSQL sur votre syst\`eme.
+\item Cr\'eez un utilisateur {\bf Bacula} dans Postgres avec la commande
+ "createuser". En fonction de votre installation, vous serez peut \^etre
+ amen\'e \`a faire un "su" vers l'utilisateur ad\'equat (NDT: su postgres).
+\item Verifiez que le fichier pg\_hba.conf (NdT sur Debian:
+ /etc/postgres/pg\_hba.conf) contient les permissions ad\'equates pour
+ permettre \`a {\bf Bacula} d'acc\'eder au serveur. Le mien contient les
+informations suivantes, et il est situ\'e sur un r\'eseau s\'ecuris\'e,
+
+\footnotesize
+\begin{verbatim}
+
+local all all trust
+
+host all all 127.0.0.1 255.255.255.255 trust
+
+ATTENTION: vous devez red\'emmarer PostgreSQL si vous faites des changements dans ce fichier.
+
+\end{verbatim}
+\normalsize
+
+\item Allez dans le r\'epertoire /etc/bacula et pr\'eparez la base de
+ donn\'ees avec les commandes suivantes:
+
+\footnotesize
+\begin{verbatim}
+
+./create_postgresql_database
+
+./make_postgresql_tables
+
+./grant_postgresql_privileges
+
+\end{verbatim}
+\normalsize
+
+\item Verifiez que vous avez acc\`es \`a la base de donn\'ees:
+
+ \footnotesize
+\begin{verbatim}
+
+psql -Ubacula bacula
+
+\end{verbatim}
+\normalsize
+
+Vous ne devriez avoir aucune erreur.
+\item Chargez la base PostgreSQL avec l'extraction MySQL gr\^ace \`a la
+ commande:
+
+\footnotesize
+\begin{verbatim}
+
+psql -Ubacula bacula <bacula-backup.dmp>
+
+\end{verbatim}
+\normalsize
+
+\item R\'eindexez vos tables avec les commandes suivantes:
+
+ \footnotesize
+\begin{verbatim}
+
+psql -Ubacula bacula
+
+SELECT SETVAL('basefiles_baseid_seq', (SELECT
+MAX(baseid) FROM basefiles));
+
+SELECT SETVAL('client_clientid_seq', (SELECT
+MAX(clientid) FROM client));
+
+SELECT SETVAL('file_fileid_seq', (SELECT MAX(fileid)
+FROM file));
+
+SELECT SETVAL('filename_filenameid_seq', (SELECT
+MAX(filenameid) FROM filename));
+
+SELECT SETVAL('fileset_filesetid_seq', (SELECT
+MAX(filesetid) FROM fileset));
+
+SELECT SETVAL('job_jobid_seq', (SELECT MAX(jobid) FROM job));
+
+SELECT SETVAL('jobmedia_jobmediaid_seq', (SELECT
+MAX(jobmediaid) FROM jobmedia));
+
+SELECT SETVAL('media_mediaid_seq', (SELECT MAX(mediaid) FROM media));
+
+SELECT SETVAL('path_pathid_seq', (SELECT MAX(pathid) FROM path));
+
+SELECT SETVAL('pool_poolid_seq', (SELECT MAX(poolid) FROM pool));
+
+\end{verbatim}
+\normalsize
+
+\item Parvenu ici, lancez {\bf Bacula}, v\'erifiez votre librairie et
+ faites un test pour valider que tout s'est bien d\'eroul\'e.
+\end{enumerate}
+
+\section{Mettre \`a jour PostgreSQL}
+\index[general]{Mettre \`a jour PostgreSQL }
+\index[general]{Mettre \`a jour!PostgreSQL }
+\addcontentsline{toc}{section}{Mettre \`a jour PostgreSQL}
+Si vous mettez PosgreSQL \`a jour, vous devez reconfigurer, recompiler et
+r\'einstaller Bacula, faute de quoi vous constaterez probalement des
+erreurs \'etranges.
+Pour cela, il vous faut installer le RPM source, modifier le fichier bacula.spec
+pour l'accorder \`a votre version de PostgreSQL, reconstruire le RPM et l'installer.
+
+If you upgrade PostgreSQL, you must reconfigure, rebuild, and re-install
+Bacula otherwise you are likely to get bizarre failures. If you
+to modify the bacula.spec file to account for the new PostgreSQL version.
+You can do so by rebuilding from the source rpm. To do so, you may need
+install from rpms and you upgrade PostgreSQL, you must also rebuild Bacula.
+
+
+\section{Credits}
+\index[general]{Credits }
+\addcontentsline{toc}{section}{Credits}
+
+Tous mes remerciements \`a Dan Languille pour l'\'ecriture du driver
+PostgreSQL qui deviendra tr\`es certainement la base de donn\'ees la plus
+r\'eput\'ee utilisable avec {\bf Bacula}
--- /dev/null
+%%
+%%
+
+\chapter{D\'emarrer avec Bacula}
+\label{_ChapterStart37}
+\index[general]{Bacula!D\'emarrer avec }
+\index[general]{D\'emarrer avec Bacula }
+
+Si vous \^etes comme moi, vous voulez faire fonctionner Bacula imm\'ediatement
+pour en avoir un aper\c{c}u, puis, plus tard, vous reviendrez en arri\`ere
+pour lire et conna{\^\i}tre tous les d\'etails. C'est exactement ce que ce
+chapitre se propose d'accomplir : vous faire avancer rapidement sans tous les
+d\'etails. Si vous voulez sauter la section sur les Pools, Volumes et Labels,
+vous pourrez toujours y revenir, mais s'il vous pla\^it, veuillez lire ce
+chapitre jusqu'\`a la fin, et en particulier suivre les instructions pour
+tester votre lecteur de bandes.
+
+Nous supposons que vous \^etes parvenus \`a construire et installer Bacula,
+sinon, vous devriez d'abord jeter un oeil aux
+\ilink{Pr\'erequis (syst\`eme)}{SysReqs} puis au chapitre
+\ilink{Compiler et installer Bacula}{_ChapterStart17} de ce manuel.
+
+\label{JobsandSchedules}
+\section{Comprendre les Jobs et Schedules}
+\index[general]{Jobs!Comprendre}
+\index[general]{Schedules!Comprendre}
+\addcontentsline{toc}{section}{Comprendre les Jobs et Schedules}
+
+Afin de rendre Bacula aussi flexible que possible, les directives lui sont
+donn\'ees en plusieurs endroits. L'instruction principale est la ressource Job,
+qui d\'efinit un job. Un job de type sauvegarde consiste en g\'en\'eral en un
+FileSet, un client, un Schedule pour un ou plusieurs niveaux ou horaires de sauvegardes,
+un Pool, ainsi que des instructions additionnelles. Un autre point de vue
+est de consid\'erer le FileSet comme "Que sauvegarder ?", le Client comme
+"Qui sauvegarder ?", le Schedule comme "Quand sauvegarder ?" et le Pool
+comme "O\`u sauvegarder ?" (c'est \`a dire, "Sur quel volume ?)
+
+Typiquement, une combinaison FileSet/Client aura un job correspondant. La plupart
+des directives, telles que les FileSets, Pools, Schedules, peuvent \^etre
+m\'elang\'ees et partag\'ees entre les jobs. Ainsi, vous pouvez avoir deux d\'efinitions
+(ressources) de jobs sauvegardant diff\'erents serveurs et utilisant les m\^emes
+Schedule, FileSet (sauvegardant donc les m\^emes r\'epertoires sur les deux
+machines) et peut-\^etre m\^eme les m\^emes Pools. Le Schedule d\'efinira quel
+type de sauvegarde sera ex\'ecut\'e et \`a quel moment (par exemple les Full le
+mercredi, les incr\'ementales le reste de la semaine), et lorsque plus d'un job
+utilise le m\^eme Schedule la priorit\'e du job d\'etermine lequel d\'emarre en premier.
+Si vous avez de nombreux jobs, vous devriez utiliser la directive JobDefs,
+qui vous permet de d\'efinir des param\`etres par d\'efaut pour vos jobs, qui peuvent \^etre
+chang\'es au sein de la ressource Job, mais qui vous \'evitent de r\'e\'ecrire les m\^emes
+param\`etres pour chaque job. En plus des FileSets que vous voulez sauvegarder,
+vous devriez aussi avoir un job qui sauvegarde votre catalogue.
+
+Enfin, sachez qu'en plus des jobs de type Backup, vous pouvez aussi utiliser
+des jobs de type restore, verify, admin, qui ont chacun des exigences
+diff\'erentes.
+
+\label{PoolsVolsLabels}
+
+\section{Comprendre les Pools, Volumes et Labels}
+\index[general]{Comprendre les Pools, Volumes et Labels }
+\index[general]{Labels!Comprendre les Pools Volumes et }
+\addcontentsline{toc}{section}{Comprendre les Pools, Volumes et Labels}
+
+Si vous avez utilis\'e un programme tel que {\bf tar} pour sauvegarder votre
+syst\`eme, les notions de Pools, Volumes et labels peuvent vous sembler un peu
+confuses au premier abord. Un Volume est un simple support physique
+(cartouche, ou simple fichier) sur lequel Bacula \'ecrit vos donn\'ees de
+sauvegarde. Les Pools regroupent les Volumes de sorte qu'une sauvegarde n'est
+pas restreinte \`a la capacit\'e d'un unique Volume. Par cons\'equent,
+plut\^ot que de nommer explicitement les Volumes dans votre Job, vous
+sp\'ecifiez un Pool, et Bacula se chargera de s\'electionner le prochain
+Volume utilisable du Pool et vous demandera de le monter.
+
+Bien que les options de base soient sp\'ecifi\'ees dans la ressource Pool du
+fichier de configuration du Director, le Pool {\bf r\'eel} est g\'er\'e par le
+Catalogue Bacula. Il contient les informations de la ressource Pool
+(bacula-dir.conf) ainsi que les informations concernant tous les Volumes qui
+ont \'et\'e ajout\'es au Pool. L'ajout de Volumes se fait en principe
+manuellement depuis la Console gr\^ace \`a la commande {\bf label}.
+
+Pour chaque Volume, Bacula g\`ere une quantit\'e d'informations consid\'erable
+telles que les premi\`ere et derni\`ere date et heure d'\'ecriture, le nombre
+de fichiers sur le Volume, le nombre de bytes sur le Volume, le nombre de
+montages, etc.
+
+Pour que Bacula puisse lire ou \'ecrire sur un Volume physique, celui-ci doit
+avoir re\c{c}u un \'etiquettage logiciel afin que Bacula soit assur\'e que le
+bon Volume est mont\'e. Ceci s'effectue en principe manuellement depuis la
+Console gr\^ace \`a la commande {\bf label}.
+
+Les \'etapes de cr\'eation de Pool, ajout de Volumes \`a ce Pool, et
+\'ecriture d'\'etiquettes logicielles sur les Volumes, peuvent sembler
+p\'enibles au premier abord, mais en fait, elles sont tout \`a fait simples
+\`a franchir, et elles vous permettent d'utiliser plusieurs Volumes (plut\^ot
+que d'\^etre limit\'e \`a la capacit\'e d'un seul). Les Pools vous procurent
+aussi une flexibilit\'e importante pour votre politique de sauvegarde. Par
+exemple, vous pouvez avoir un Pool de Volumes "Daily" pour vos sauvegardes
+Incr\'ementales et un Pool de Volumes "Weekly" pour vos sauvegardes
+compl\`etes (Full). En sp\'ecifiant le Pool appropri\'e dans les Jobs de
+sauvegarde quotidiens et hebdomadaires, vous garantissez qu'aucun Job
+quotidien n'\'ecrira jamais sur un Volume du Pool r\'eserv\'e aux sauvegardes
+hebdomadaire et vice versa, et Bacula vous dira quelle cartouche est requise,
+et quand.
+
+Pour plus de d\'etails concernant les Pools, consultez la section
+\ilink{Ressource Pool}{PoolResource} du chapitre sur la
+configuration du Director, ou poursuivez votre lecture, nous reviendrons plus
+tard sur ce sujet.
+
+\section{Param\'etrage des fichiers de configuration de Bacula}
+\label{config}
+\index[general]{Param\'etrage des fichiers de configuration de Bacula }
+\index[general]{Bacula!Param\'etrage des fichiers de configuration de }
+\addcontentsline{toc}{section}{Param\'etrage des fichiers de configuration
+de Bacula}
+
+Apr\`es avoir ex\'ecut\'e la commande {\bf ./configure} {\it ad hoc}, {\bf
+make} et {\bf make install}, si c'est la premi\`ere fois que vous ex\'ecutez
+Bacula, vous devez cr\'eer des fichiers de configuration valides pour le
+Director, le File Daemon, le Storage Daemon et le programme Console. Si vous
+avez suivi nos recommandations, des fichiers de configuration par d\'efaut
+ainsi que les binaires des {\it daemons} seront situ\'es dans votre
+r\'epertoire d'installation. Dans tous les cas les binaires se trouvent dans
+le r\'epertoire que vous avez sp\'ecifi\'e au niveau de l'option {\bf
+\verb{--{sbindir} de la commande {\bf ./configure}, et les fichiers de configuration
+se trouvent dans le r\'epertoire que vous avez sp\'ecifi\'e au niveau de
+l'option {\bf \verb{--{sysconfdir}.
+
+Lors des param\'etrages initiaux de Bacula, il vous faudra investir un peu de
+temps pour modifier les fichiers de configuration par d\'efaut afin de
+les adapter \`a votre environnement. Ceci peut n\'ecessiter de red\'emarrer
+Bacula plusieurs fois jusqu'\`a ce que tout fonctionne correctement. Ne
+c\'edez pas au d\'esespoir. Une fois que vous aurez cr\'e\'e vos fichiers de
+configuration, vous n'aurez que rarement besoin de les changer et de
+red\'emarrer Bacula. Le gros du travail consistera \`a changer la cartouche
+quand elle est pleine.
+
+\subsection{
+\ilink{Configurer le programme Console}{_ChapterStart36}}
+\index[general]{Console!Configurer le programme }
+\index[general]{Configurer le programme Console }
+\addcontentsline{toc}{subsection}{Configurer le programme Console}
+
+Le programme console est utilis\'e par l'administrateur pour interagir avec le
+Director et pour arr\^eter et d\'emarrer manuellement des jobs, ou encore pour
+obtenir des informations sur les jobs en cours d'ex\'ecution ou programm\'es.
+
+Le fichier de configuration de la Console se trouve dans le r\'epertoire que
+vous avez sp\'ecifi\'e au niveau de l'option {\bf \verb{--{sysconfdir} de la commande
+{\bf ./configure} et par d\'efaut se nomme {\bf console.conf}.
+
+Si vous avez choisi de construire la Console GNOME avec l'option {\bf
+\verb{--{enable-gnome}, vous y trouverez \'egalement son fichier de configuration par
+d\'efaut, nomm\'e {\bf gnome-console.conf}.
+
+Il en va de m\^eme pour la console wxWidgets, qui est construite par l'option
+{\bf \verb{--{enable-bwx-console}, et le nom du fichier de configuration par d\'efaut
+est, dans ce cas, {\bf bwx-console.conf}.
+
+Normalement, pour les nouveaux
+utilisateurs, aucune modification n'est requise pour ces fichiers. Les
+r\'eglages par d\'efaut sont raisonnables.
+
+\subsection{
+\ilink{Configurer le programme Monitor}{_ChapterStart35}}
+\index[general]{Monitor!Configurer le programme }
+\index[general]{Configurer le programme Monitor }
+\addcontentsline{toc}{subsection}{Configurer le programme Monitor}
+
+Le programme Monitor est typiquement une ic\^one dans la barre des t\^aches.
+Cependant, lorsque l'ic\^one est \'etendue en une fen\`etre, l'administrateur ou
+l'utilisateur peut obtenir des informations concernant le Director ou l'\'etat
+des sauvegardes sur la machine locale ou n'importe quelle autre {\it daemon}
+Bacula configur\'e.
+
+\includegraphics{./Bacula-tray-monitor.eps}
+
+L'image montre le tray-monitor configur\'e pour trois {\it daemons}. En
+cliquant sur les boutons radio dans le coin en haut \`a gauche de l'image,
+vous pouvez voir l'\'etat de chacun des {\it daemons}. L'image montre l'\'etat
+du Storage Daemon (MainSD) s\'electionn\'e.
+
+Le fichier de configuration du Monitor se trouve dans le r\'epertoire
+sp\'ecifi\'e au niveau de l'option {\bf \verb{--{sysconfdir} de la commande {\bf
+./configure} et se nomme par d\'efaut {\bf tray-monitor.conf}. En principe,
+pour les nouveaux utilisateurs, il suffit de changer les permissions de ce
+fichier pour permettre aux utilisateurs non-root d'ex\'ecuter le Monitor, en
+effet cette application doit \^etre ex\'ecut\'e par le m\^eme utilisateur que
+l'environnement graphique (n'oubliez pas de donner aux non-root le droit
+d'ex\'ecuter {\bf bacula-tray-monitor}). Ceci ne constitue pas une faille de
+s\'ecurit\'e tant que vous utilisez les r\'eglages par d\'efaut.
+
+\subsection{
+\ilink{Configurer le File Daemon}{_ChapterStart25}}
+\index[general]{Configurer le File Daemon }
+\index[general]{Daemon!Configurer le File }
+\addcontentsline{toc}{subsection}{Configurer le File Daemon}
+
+Le File Daemon, est le programme qui s'ex\'ecute sur chaque machine cliente. A
+la demande du Director, il d\'etermine les fichiers \`a sauvegarder et les
+exp\'edie au Storage Daemon.
+
+Le fichier de configuration du File Daemon se trouve dans le r\'epertoire
+sp\'ecifi\'e au niveau de l'option {\bf \verb{--{sysconfdir} de la commande {\bf
+./configure} et se nomme par d\'efaut {\bf bacula-fd.conf}. Normalement, pour
+les nouveaux utilisateurs, aucune modification n'est requise pour ce fichier.
+Les r\'eglages par d\'efaut sont raisonnables. Cependant, si vous envisagez de
+sauvegarder plus d'une machine, il vous faudra installer le File Daemon avec
+un fichier de configuration sp\'ecifique sur chaque machine \`a sauvegarder.
+Les informations concernant chaque File Daemon doivent appara{\^\i}tre dans le
+fichier de configuration du Director.
+
+\subsection{
+\ilink{Configurer le Director}{_ChapterStart40}}
+\index[general]{Director!Configurer le }
+\index[general]{Configurer le Director }
+\addcontentsline{toc}{subsection}{Configurer le Director}
+
+Le director est le programme central qui contr\^ole tous les autres {\it
+daemons}. Il planifie et surveille les jobs \`a ex\'ecuter.
+
+Le fichier de configuration du Director se trouve dans le r\'epertoire
+sp\'ecifi\'e au niveau de l'option {\bf \verb{--{sysconfdir} de la commande {\bf
+./configure} et se nomme par d\'efaut {\bf bacula-dir.conf}.
+
+En g\'en\'eral, la seule modification n\'ecessaire consiste \`a faire en sorte
+que la directive {\bf Include} de la Ressource FileSet contienne au moins une
+ligne avec un nom de fichier ou de r\'epertoire valide \`a sauvegarder.
+
+Si vous ne poss\'edez pas de lecteur DLT, vous voudrez probablement modifier
+la ressource Storage pour donner un nom plus repr\'esentatif de votre
+p\'eriph\'erique de stockage. Vous pouvez toujours utiliser les noms existants
+puisque vous \^etes libre de les assigner arbitrairement, mais ils doivent
+s'accorder avec les noms correspondants dans le fichier de configuration du
+Storage Daemon.
+
+Vous pouvez aussi changer l'adresse \'electronique pour les notifications vers
+votre propre adresse e-mail plut\^ot que vers celle de {\bf root}
+(configuration par d\'efaut).
+
+Enfin, si vous avez plusieurs syst\`emes \`a sauvegarder, il vous faudra
+sp\'ecifier un File Daemon (ou client) pour chaque syst\`eme sauvegard\'e,
+pr\'ecisant ses nom, adresse et mot de passe. Nous estimons que baptiser vos
+{\it daemons} du nom de vos syst\`emes suffix\'es avec {\bf -fd} aide beaucoup
+\`a corriger les erreurs. Ainsi, si votre syst\`eme est {\bf foobaz}, vous
+nommerez le {\it daemon} {\bf foobaz-fd}. Pour le Director, vous pourriez
+utiliser {\bf foobaz-dir}, et {\bf foobaz-sd} pour le Storage Daemon.
+Chacun de vos composants de Bacula {\bf doit} avoir un nom unique
+Si vous les nommez tous \`a l'identique, en plus de ne jamais savoir
+quel {\it daemon} envoie quel message, s'ils partagent le m\^eme r\'epertoire
+de travail (working directory), les noms de fichiers temporaires des {\it daemons}
+ne seront pas uniques et vous aurez d'\'etranges erreurs.
+
+\subsection{
+\ilink{Configurer le Storage Daemon}{_ChapterStart31}}
+\index[general]{Daemon!Configurer le Storage }
+\index[general]{Configurer le Storage Daemon }
+\addcontentsline{toc}{subsection}{Configurer le Storage Daemon}
+
+Le Storage Daemon est responsable, sur demande du Director, de la r\'eception
+des donn\'ees en provenance des File Daemons, et de leur \'ecriture sur le
+medium de stockage, ou, dans le cas d'une restauration, de trouver les
+donn\'ees pour les envoyer vers le File Daemon.
+
+Le fichier de configuration du Storage Daemon se trouve dans le r\'epertoire
+sp\'ecifi\'e au niveau de l'option {\bf \verb{--{sysconfdir} de la commande {\bf
+./configure} et se nomme par d\'efaut {\bf bacula-sd.conf}. Modifiez ce
+fichier pour accorder les noms de p\'eriph\'eriques de stockage \`a ceux que
+vous poss\'edez. Si le processus d'installation a convenablement d\'etect\'e
+votre syst\`eme, elles seront d\'ej\`a correctement r\'egl\'ees. Ces
+ressources de stockage "Name" et "Media Type" doivent \^etre les m\^emes
+que leurs correspondantes du fichier de configuration du Director {\bf
+bacula-dir.conf}. Si vous souhaitez sauvegarder vers un fichier plut\^ot que
+sur des bandes, la ressource Device doit pointer vers un r\'epertoire o\`u des
+fichiers seront cr\'e\'es en guise de Volumes lorque vous \'etiquetterez
+(label) vos Volumes.
+\label{ConfigTesting}
+
+\section{Tester vos Fichiers de Configuration}
+\index[general]{Configuration!Tester vos Fichiers de }
+\index[general]{Tester vos Fichiers de Configuration }
+\addcontentsline{toc}{section}{Tester vos Fichiers de Configuration}
+
+Vous pouvez tester la validit\'e syntaxique de vos fichiers de configuration,
+afficher tout message d'erreur et terminer. Par exemple, en supposant que vous
+avez install\'e vos binaires et fichiers de configuration dans le m\^eme
+r\'epertoire,
+
+\footnotesize
+\begin{verbatim}
+cd <installation-directory>
+./bacula-dir -t -c bacula-dir.conf
+./bacula-fd -t -c bacula-fd.conf
+./bacula-sd -t -c bacula-sd.conf
+./bconsole -t -c bconsole.conf
+./gnome-console -t -c gnome-console.conf
+./bwx-console -t -c wx-console.conf
+su <normal user> -c "./bacula-tray-monitor -t -c tray-monitor.conf"
+\end{verbatim}
+\normalsize
+
+testera le fichier de configuration de chacun des principaux programmes. Si le
+fichier de configuration est correct, le programme se termine
+sans rien afficher. Veuillez noter que selon les options de configuration que
+vous avez choisies, il se peut qu'aucune des commandes ci-dessus ne soit
+valable sur votre syst\`eme. Si vous avez install\'e les binaires dans les
+r\'epertoires traditionnels d'Unix plut\^ot que dans un simple r\'epertoire,
+il vous faudra modifier les commandes ci-dessus en cons\'equence (pas de
+"./" devant les commandes, et un chemin devant les fichiers de
+configuration).
+\label{TapeTesting}
+
+\section{Tester la compatibilit\'e de Bacula avec votre lecteur de bandes}
+\index[general]{Tester la compatibilit\'e de Bacula avec votre lecteur de
+bandes }
+\index[general]{Bandes!Tester la compatibilit\'e de Bacula avec votre lecteur
+de }
+\addcontentsline{toc}{section}{Tester la compatibilit\'e de Bacula avec
+votre lecteur de bandes}
+
+Avant de gaspiller votre temps avec Bacula pour finalement constater qu'il ne
+fonctionne pas avec votre lecteur de bandes, veuillez s'il vous pla\^it lire le
+chapitre
+\ilink{btape -- Tester votre lecteur de bandes}{_ChapterStart27}
+de ce manuel. Si vous poss\'edez un lecteur standard SCSI moderne sur un Linux
+ou un Solaris, fort probablement, il fonctionnera, mais mieux vaut tester que
+d'\^etre d\'e\c{c}u. Pour FreeBSD (et probablement les autres xBSD), la
+lecture du chapitre mentionn\'e ci-dessus est un devoir. Pour FreeBSD,
+consultez aussi
+\elink{The FreeBSD Diary}{http://www.freebsddiary.org/bacula.php} pour une
+description d\'etaill\'ee de la m\'ethode pour faire fonctionner Bacula sur
+votre syst\`eme. De plus, les utilisateurs de versions de FreeBSD
+ant\'erieures \`a 4.9-STABLE dat\'ee du lundi 29 d\'ecembre 2003 15:18:01 UTC
+qui pr\'evoient d'utiliser des lecteurs de bandes sont invit\'es \`a lire le
+fichier {\bf platforms/freebsd/pthreads-fix.txt} du r\'epertoire principal de
+Bacula, qui contient d'importantes informations sur la compatibilit\'e de
+Bacula avec leur syst\`eme.
+\label{notls}
+
+\section{D\'ebarrassez-vous du r\'epertoire /lib/tls}
+\index[general]{D\'ebarrassez-vous du r\'epertoire /lib/tls }
+\addcontentsline{toc}{section}{D\'ebarrassez-vous du r\'epertoire /lib/tls}
+
+La nouvelle librairie pthreads {\bf /lib/tls} install\'ee par d\'efaut sur les
+syst\`emes Red Hat r\'ecents (kernels 2.4.x) est d\'efectueuse. Vous devez la
+supprimer ou la renommer, puis rebooter votre syst\`eme avant d'ex\'ecuter
+Bacula, faute de quoi, apr\`es environ une semaine de fonctionnement, Bacula
+se bloquera pour de longues p\'eriodes, voire d\'efinitivement. Veuillez consulter
+le chapitre \ilink{Syst\`emes support\'es}{SupportedOSes} pour plus
+d'informations sur ce probl\`eme.
+
+Ce probl\`eme n'existe plus avec les noyaux 2.6.
+
+\label{Running1}
+
+\section{Ex\'ecuter Bacula}
+\index[general]{Bacula!Ex\'ecuter }
+\index[general]{Ex\'ecuter Bacula }
+\addcontentsline{toc}{section}{Ex\'ecuter Bacula}
+
+La partie la plus importante de l'ex\'ecution de Bacula est probablement la
+capacit\'e de restaurer les fichiers. Si vous n'avez pas essay\'e de
+r\'ecup\'erer des fichiers au moins une fois, vous subirez une bien plus forte
+pression le jour o\`u vous devrez r\'eellement le faire, et serez enclin \`a
+commettre des erreurs que vous n'auriez pas commises si vous aviez d\'ej\`a
+essay\'e.
+
+Pour avoir rapidement une bonne id\'ee de la fa\c{c}on d'utiliser Bacula,
+nous vous recommandons {\bf fortement} de suivre les exemples du
+\ilink{chapitre ex\'ecuter Bacula}{_ChapterStart1} de ce manuel,
+o\`u vous trouverez des informations d\'etaill\'ees sur l'ex\'ecution de
+Bacula.
+
+\section{Rotation des logs}
+\index[general]{Logs!Rotation des }
+\index[general]{Rotation des logs }
+\addcontentsline{toc}{section}{Rotation des logs}
+
+Si vous utilisez le {\bf bacula-dir.conf} par d\'efaut ou une variante, vous
+constaterez qu'il r\'ecup\`ere toutes les sorties de Bacula dans un fichier.
+Pour \'eviter que ce fichier ne croisse sans limites, nous vous recommandons
+de copier le fichier {\bf logrotate} depuis {\bf scripts/logrotate} vers {\bf
+/etc/logrotate.d/bacula}. Ainsi les fichiers de logs subiront une rotation
+mensuelle et seront conserv\'es pour une dur\'ee maximum de cinq mois. Vous
+pouvez \'editer ce fichier pour adapter la rotation \`a votre convenance.
+
+\section{Log Watch}
+\index[general]{Watch!Log}
+\index[general]{Log Watch}
+\addcontentsline{toc}{section}{Log Watch}
+Certains syst\`emes tels que RedHat et Fedora ex\'ecutent le programme
+logwatch chaque nuit pour analyser vos fichiers de log et vous
+envoyer un rapport par mail. Si vous souhaitez inclure la sortie
+de vos jobs Bacula dans ce rapport, veuillez regarder dans le r\'epertoire
+{\bf scripts/logwatch}. Le fichier {\bf README} fournit une br\`eve
+explication sur la fa\c {c}on d'installer le script, et quelle genre
+de r\'esultats en attendre.
+
+\section{Reprise d'activit\'e apr\`es un d\'esastre (disaster recovery)}
+\index[general]{Recovery!Reprise d'activit\'e apr\`es un d\'esastre disaster }
+\index[general]{Reprise d'activit\'e apr\`es un d\'esastre (disaster recovery)
+}
+\addcontentsline{toc}{section}{Reprise d'activit\'e apr\`es un d\'esastre
+(disaster recovery)}
+
+Si vous avez l'intention d'utiliser Bacula en tant qu'outil de disaster
+recovery plut\^ot que comme un simple programme pour restaurer les fichiers
+perdus, vous serez int\'eress\'e par le
+\ilink{chapitre Plan de reprise d'activit\'e avec
+Bacula}{_ChapterStart38} de ce manuel.
+
+De toute fa\c{c}on, vous \^etes fortement invit\'e \`a tester soigneusement
+la restauration de quelques fichiers que vous aurez pr\'ealablement
+sauvegard\'es, plut\^ot que d'attendre qu'un d\'esastre ne frappe. Ainsi, vous
+serez pr\'epar\'e.
--- /dev/null
+%%
+%%
+
+\chapter{Consid\'erations sur la s\'ecurit\'e de Bacula}
+\label{_ChapterStart14}
+\index[general]{Bacula!Consid\'erations sur la s\'ecurit\'e de}
+\index[general]{Consid\'erations sur la s\'ecurit\'e de Bacula}
+\index[general]{S\'ecurit\'e}
+
+\begin{itemize}
+\item La s\'ecurit\'e, c'est de pouvoir restaurer vos fichiers, aussi, lisez
+ attentivement le chapitre \ilink{Critical Items Chapter}{Critical} de
+ ce manuel.
+\item Le client ({\bf bacula-fd}) doit \^etre ex\'ecut\'e en tant que root
+ afin d'avoir l'acc\`es \`a tous les fichiers du syst\`eme.
+\item Il n'est pas n\'ecessaire d'ex\'ecuter le Director en tant que root.
+\item Il n'est pas n\'ecessaire d'ex\'ecuter le Storage Daemon en tant que
+ root, mais vous devez vous assurer qu'l peut utiliser le lecteur de bandes,
+ dont l'acc\`es est presque toujours r\'eserv\'e \`a root par d\'efaut.
+ De plus, si vous n'ex\'ecutez pas le Storage Daemon en tant que root, il sera
+ dans l'incapacit\'e de r\'egler automatiquement les param\`etres de votre lecteur
+ de bandes. En effet, ces fonctions requi\`erent les droits root sur la plupart
+ des syst\`emes d'exploitation.
+\item Vous devriez restreindre l'acc\`es au fichiers de configuration de
+ Bacula, de sorte que les mots de passe ne soient pas lisibles par tous. Les
+ {\it daemons} {\bf Bacula} sont prot\'eg\'es par des mots de passe et CRAM-MD5
+(i.e. les mots de passe ne sont pas envoy\'es sur le r\'eseau). Ceci assure
+que tout le monde ne peut acc\'eder aux {\it daemons}. C'est une protection
+raisonnablement bonne, mais qui peut \^etre craqu\'ee par un expert.
+\item Si vous utilisez les ports recommand\'es 9101,9102 et 9103, vous voudrez
+ probablement prot\'eger ces ports des acc\`es externes \`a l'aide d'un
+ firewall et/ou en utilisant tcp wrappers ({\bf etc/hosts.allow}).
+\item Actuellement, toutes les donn\'ees sont envoy\'ees sur le r\'eseau sans
+ chiffrement. Par cons\'equent, \`a moins que vous n'utilisiez {\bf ssh} ou {\bf
+ stunnel} pour la transmission de port (NDT: port forwarding), il n'est pas
+recommand\'e de faire des sauvegardes \`a travers un r\'eseau non
+s\'ecuris\'e (par exemple, Internet). Nous pr\'evoyons d'int\'egrer le
+chiffrage {\bf ssl} dans une version future.
+\item Vous devriez vous assurer que seuls les {\it daemons} de Bacula ont
+ acc\`es en lecture et \'ecriture aux r\'epertoires de travail de Bacula.
+\item Si vous utilisez {\bf MySQL}, il n'est pas n\'ecessaire de l'ex\'ecuter
+ en tant que root
+\item Le script par d\'efaut de Bacula {\bf grant-mysql-permissions} accorde
+ toutes les permissions d'utilisation de la base de donn\'ees MySQL sans mot
+ de passe. Si vous voulez la s\'ecurit\'e, affinez ceci !
+\item N'oubliez pas que Bacula est un programme r\'eseau, ainsi quiconque sur
+ le r\'eseau dispose du programme console et du mot de passe du Director peut
+ acc\'eder \`a Bacula et aux donn\'ees sauvegard\'ees.
+\item Vous pouvez restreindre les adresses IP avec auxquelles Bacula se
+ connectera en utilisant les enregistrements appropri\'es {\bf DirAddress},
+ {\bf FDAddress}, ou {\bf SDAddress} dans les fichiers de configurations
+respectifs des {\it daemons}
+\item Soyez conscient que si vous sauvegardez votre catalogue avec le script
+ par d\'efaut, et si l'acc\`es \`a votre catalogue est prot\'eg\'e par un mot de passe,
+ ce dernier est transmis en tant qu'option de ligne de commande \`a ce script,
+ ce qui le rend visible \`a tout utilisateur du syst\`eme. Si vous voulez
+ s\'ecuriser ce point, vous devez le passer via une variable d'environnement
+ ou un fichier s\'ecuris\'e.
+\end{itemize}
+
+\section{Compatibilit\'e ascendante}
+\index[general]{Compatibilit\'e ascendante}
+\addcontentsline{toc}{section}{Compatibilit\'e ascendante}
+L'un des principaux objectifs de Bacula est de garantir que vous pouvez
+restaurer depuis des cartouches (ou depuis des volumes disque) \'ecrites des ann\'ees
+auparavant. Ceci implique que chaque nouvelle version de Bacula devrait \^etre
+capable de relire les anciens formats de cartouches. Le premier probl\`eme est de
+s'assurer que le mat\'eriel fonctionne encore malgr\'e les ann\'ees, et que les supports
+sont encore valides. Ensuite, votre syst\`eme d'exploitation doit \^etre capable
+de s'interfacer avec le p\'eriph\'erique et finalement, Bacula doit \^etre capable
+de reconna\^itre les anciens formats. De tous ces probl\`emes, nous ne pouvons
+prendre en charge que le dernier, pour les autres, vous devez vous pr\'eparer
+consciencieusement.
+
+Depuis les tous premiers stades de Bacula (janvier 2000) jusqu'\`a aujourd'hui
+(D\'ecembre 2005), Bacula a connu deux formats majeurs d'\'ecriture sur les
+cartouches. Le second format a \'et\'e introduit dans la version 1.27 en
+novembre 2002, et n'a pas chang\'e depuis. En principe, Bacula devrait encore pouvoir
+lire le format d'origine, mais j'avoue ne pas avoir essay\'e depuis longtemps...
+
+Bien que le format des cartouches soit fix\'e, les types de donn\'ees qui peuvent \^etre
+\'ecrites sur les cartouches sont extensibles, ce qui nous a permis d'ajouter de
+nouvelles fonctionnalit\'es telles que les ACLs, les donn\'ees Win32, les donn\'ees
+chiffr\'ees... Naturellement, une ancienne version de Bacula ne saurait lire des
+nouveaux flux de donn\'ees, mais chaque nouvelle version de Bacula est en principe
+capable de lire les anciens flux.
+
+Si vous voulez \^etre absolument certain de pouvoir lire vos vieilles cartouches,
+vous devriez :
+
+1. Essayer de lire les vieilles cartouches de temps en temps, une fois par an
+par exemple.
+
+2. Conserver une copie statiquement li\'ee de chaque version de Bacula que vous
+avez utilis\'ee en production. Ainsi, si pour quelque raison nous venions \`a
+abandonner la compatibilit\'e avec les anciens formats de cartouches, vous pourriez
+toujours remettre en service une vieille copie de Bacula...
+
+Le second point est probablement excessif, en toute rigueur, il pourrait vous
+sauver un jour.
+
+\label{wrappers}
+
+\section{Configurer et tester TCP Wrappers}
+\index[general]{Configurer et tester TCP Wrappers}
+\index[general]{Bacula!Configurer et tester TCP Wrappers}
+\index[general]{TCP Wrappers}
+\index[general]{Wrappers!TCP}
+\index[general]{libwrappers}
+\addcontentsline{toc}{section}{Configurer et tester TCP Wrappers}
+
+Les TCP Wrappers sont impl\'ement\'es si vous les activez lors de la
+configuration ({\bf ./configure \verb{:--:{with-tcp-wrappers}). Avec ce code activ\'e, vous
+pourrez contr\^oler qui peut acc\'eder \`a vos {\it daemons}. Ce contr\^ole
+est obtenu par la modification du fichier {\bf /etc/hosts.allow}. Le nom de
+programme qu'utilise {\bf Bacula} pour appliquer ces restrictions est celui
+que vous avez sp\'ecifi\'e dans le fichier de configuration du {\it daemon}.
+Vous ne devez pas utiliser l'option {\bf twist} dans votre {\bf
+/etc/hosts.allow} car elle stopperait les {\it daemons} Bacula lorsqu'une
+connection est refus\'ee.
+
+Le nom exact du paquet requis pour compiler avec le support TCP wrappers
+d\'epend du syst\`eme. Il s'agit, par exemple, de tcpd-devel sur SuSE, et de
+tcp\_wrappers sur RedHat.
+
+Dan Langille a fourni les informations suivantes concernant la configuration
+et les tests de TCP Wrappers avec Bacula.
+
+Si vous lisez hosts\_options(5), vous verrez une option nomm\'ee twist. Cette
+option remplace le processus courant par une instance de la commande shell
+sp\'ecifi\'ee. Voici un exemple typique de son utilisation :
+
+\footnotesize
+\begin{verbatim}
+ALL : ALL \
+ : severity auth.info \
+ : twist /bin/echo "Vous n'\^etes pas autoris\'e \`a utiliser %d depuis %h."
+\end{verbatim}
+\normalsize
+
+\label{question-1}
+Le code libwrap tente d'\'eviter {\bf twist} s'il est
+ex\'ecut\'e dans un processus r\'esident. Il en r\'esulte que le processus (e.g.
+bacula-fd, bacula-sd, bacula-dir) sera stopp\'e si la premi\`ere connection
+\`a son port provoque l'invocation de l'option twist. Le risque est qu'une
+attaque provoque l'arr\^et des {\it daemons}. Cette situation est \'evit\'ee si votre
+fichier /etc/hosts.allow contient un jeu de r\`egles appropri\'e. L'exemple
+suivant est suffisant :
+
+\footnotesize
+\begin{verbatim}
+undef-fd : localhost : allow
+undef-sd : localhost : allow
+undef-dir : localhost : allow
+undef-fd : ALL : deny
+undef-sd : ALL : deny
+undef-dir : ALL : deny
+\end{verbatim}
+\normalsize
+
+Vous devez accorder les noms des {\it daemons} \`a ceux sp\'ecifi\'es dans leurs
+fichiers de configuration respectifs. Ce ne sont, en g\'en\'eral, pas les noms
+des fichiers binaires des {\it daemons}. Il n'est pas possible d'utiliser
+les noms des binaires car plusieurs {\it daemons} peuvent \^etre ex\'ecut\'es
+sur une machine avec des fichiers de configuration distincts.
+
+Dans ces exemples, le Director est undef-dir, le
+Storage Daemon est undef-sd, et le File Daemon est undef-fd. Ajustez ces noms pour
+qu'ils conviennent \`a votre configuration. L'exemple de r\`egles ci-dessus suppose que
+SD, FD et DIR sont tous sur la m\^eme machine. Si vous avez un client FD
+distant, il vous suffira de placer le jeu de r\`egles suivant sur ce client :
+
+\footnotesize
+\begin{verbatim}
+undef-fd : director.example.org : allow
+undef-fd : ALL : deny
+\end{verbatim}
+\normalsize
+
+O\`u director.example.org est l'h\^ote qui contactera le client (i.e. la
+machine sur laquelle le Bacula Director tourne). L'usage de "ALL : deny"
+assure que l'option twist (si pr\'esente) n'est pas invoqu\'ee. Pour tester
+correctement votre configuration, d\'emarrez le(s) {\it daemon(s)}, puis
+essayez de vous y connecter depuis une adresse IP qui devrait \^etre capable
+de le faire. Vous devriez voir quelque chose comme :
+
+\footnotesize
+\begin{verbatim}
+$ telnet undef 9103
+Trying 192.168.0.56...
+Connected to undef.example.org.
+Escape character is '^]'.
+Connection closed by foreign host.
+$
+\end{verbatim}
+\normalsize
+
+C'est la r\'eponse correcte. Si vous voyez ceci :
+
+\footnotesize
+\begin{verbatim}
+$ telnet undef 9103
+Trying 192.168.0.56...
+Connected to undef.example.org.
+Escape character is '^]'.
+You are not welcome to use undef-sd from xeon.example.org.
+Connection closed by foreign host.
+$
+\end{verbatim}
+\normalsize
+
+Alors, twist a \'et\'e invoqu\'ee, et votre configuration est incorrecte. vous
+devez ajouter la directive "deny". Il est important de noter que vos tests
+doivent inclure le red\'emarrage des {\it daemons} apr\`es chaque tentative de
+connexion. Vous pouvez aussi tcpdchk(8) et tcpdmatch(8) pour valider jeu de
+r\`egles /etc/hosts.allow. Voici un test simple avec tcpdmatch :
+
+\footnotesize
+\begin{verbatim}
+$ tcpdmatch undef-dir xeon.example.org
+warning: undef-dir: no such process name in /etc/inetd.conf
+client: hostname xeon.example.org
+client: address 192.168.0.18
+server: process undef-dir
+matched: /etc/hosts.allow line 40
+option: allow
+access: granted
+\end{verbatim}
+\normalsize
+
+Si vous ex\'ecutez Bacula en tant que {\it standalone daemon}, les
+avertissements ci-dessus peuvent \^etre ignor\'es sans scrupules. Voici un
+exemple qui r\'ev\`ele que "deny" fait defaut \`a vos r\`egles, et que
+l'option twist a \'et\'e invoqu\'ee.
+
+\footnotesize
+\begin{verbatim}
+$ tcpdmatch undef-dir 10.0.0.1
+warning: undef-dir: no such process name in /etc/inetd.conf
+client: address 10.0.0.1
+server: process undef-dir
+matched: /etc/hosts.allow line 91
+option: severity auth.info
+option: twist /bin/echo "You are not welcome to use
+ undef-dir from 10.0.0.1."
+access: delegated
+\end{verbatim}
+\normalsize
+
+\section{Ex\'ecuter Bacula sans \^etre root}
+\index[general]{Root!Ex\'ecuter Bacula sans \^etre }
+\index[general]{Ex\'ecuter Bacula sans \^etre root }
+\addcontentsline{toc}{section}{Ex\'ecuter Bacula sans \^etre root}
+
+Voici quelques recommandations de Dan Languille :
+
+C'est une bonne id\'ee d'ex\'ecuter vos {\it daemons} avec des privil\`eges
+aussi faibles que possible. En d'autres termes, si vous pouvez, n'ex\'ecutez
+pas d'applications en tant que root si elle n'ont pas besoin d'\^etre
+ex\'ecut\'ees en tant que root. Le Storage Daemon et le Director Daemon n'ont
+pas besoin d'\^etre ex\'ecut\'es en tant que root. Le File Daemon en a besoin
+pour acc\'eder \`a l'ensemble des fichiers du syst\`eme. Pour vous passer des
+privil\`eges root, il vous faut cr\'eer un utilisateur et un groupe. Choisir
+{\tt bacula} pour l'un et l'autre me semble une bonne id\'ee.
+
+Le port FreeBSD cr\'ee cet utilisateur et ce groupe pour vous. (En fait, au
+moment ou j'\'ecris ces lignes, ce n'est pas encore le cas, mais \c{c}a le
+sera bient\^ot). Voici \`a quoi ressemblent ces entr\'ees sur mon portable
+FreeBSD :
+
+\footnotesize
+\begin{verbatim}
+bacula:*:1002:1002::0:0:Bacul Daemon:/var/db/bacula:/sbin/nologin
+\end{verbatim}
+\normalsize
+
+J'ai utilis\'e vipw pour cr\'eer ces entr\'ees. J'ai utilis\'e un User ID et
+un Group ID disponibles sur mon syst\`eme : 1002.
+
+J'ai aussi cr\'e\'e un groupe dans /etc/group:
+
+\footnotesize
+\begin{verbatim}
+bacula:*:1002:
+\end{verbatim}
+\normalsize
+
+L'utilisateur bacula, contrairement au {\it daemon} Bacula, aura un
+r\'epertoire d\'edi\'e (home directory) : {\tt /var/db/bacula} qui est le
+r\'epertoire standard pour le catalogue de Bacula.
+
+A pr\'esent, vous avez un utilisateur et un groupe bacula, et vous pouvez
+s\'ecuriser le r\'epertoire d\'edi\'e de bacula en utilisant cette commande :
+
+\footnotesize
+\begin{verbatim}
+chown -R bacula:bacula /var/db/bacula/
+\end{verbatim}
+\normalsize
+
+Celle-ci assure que seul l'utilisateur bacula peut acc\'eder \`a ce
+r\'epertoire. Elle signifie aussi que si nous ex\'ecutons le Director et le
+Storage Daemon en tant que bacula, ces {\it daemons} auront aussi des acc\`es
+restreints. Ce ne serait pas le cas s'ils \'etaient ex\'ecut\'es en tant que
+root.
+
+Il est important de noter que le Storage Daemon a vraiment besoin
+d'appartenir au groupe operator pour un acc\`es normal aux lecteurs de bandes.
+(au moins sur FreeBSD, c'est ainsi que les choses sont configur\'ees par
+d\'efaut). De tels p\'eriph\'eriques sont en principe attribu\'es \`a
+root:operator. Il est plus facile et moins dangereux de faire de bacula un
+membre de ce groupe que de jouer avec les permissions du syst\`eme.
+
+D\'emarrer les {\it daemons} bacula
+
+Pour d\'emarrer les {\it daemons} bacula sur FreeBSD, utilisez la commande :
+
+\footnotesize
+\begin{verbatim}
+/usr/local/etc/rc.d/bacula.sh start
+\end{verbatim}
+\normalsize
+
+Pour vous assurer que tous fonctionnent :
+
+\footnotesize
+\begin{verbatim}
+$ ps auwx | grep bacula
+root\ 63416\ 0.0\ 0.3\ 2040 1172\ ??\ Ss\ 4:09PM 0:00.01
+ /usr/local/sbin/bacula-sd -v -c /usr/local/etc/bacula-sd.conf
+root\ 63418\ 0.0\ 0.3\ 1856 1036\ ??\ Ss\ 4:09PM 0:00.00
+ /usr/local/sbin/bacula-fd -v -c /usr/local/etc/bacula-fd.conf
+root\ 63422\ 0.0\ 0.4\ 2360 1440\ ??\ Ss\ 4:09PM 0:00.00
+ /usr/local/sbin/bacula-dir -v -c /usr/local/etc/bacula-dir.conf
+\end{verbatim}
+\normalsize
--- /dev/null
+%%
+%%
+
+\chapter{Configuration du Storage Daemon}
+\label{_ChapterStart31}
+\index[general]{Configuration du Storage Daemon}
+\index[general]{Configuration!Storage Daemon}
+
+\section{General}
+\index[general]{General}
+\addcontentsline{toc}{section}{General}
+Le fichier de configuration du Storage Daemon a relativement peu de d\'efinitions
+de resources. Cependant, en raison du nombre pl\'ethorique de media et de syst\`emes,
+il doit \^etre hautement param\'etrable. Par cons\'equent, il existe un nombre assez important
+de directives dans la d\'efinition de ressource Devices qui vous permettent de d\'efinir
+toutes les caract\'eristiques de votre p\'eriph\'erique de stockage. Heureusement, avec les
+mat\'eriels modernes, les valeurs par d\'efaut sont g\'en\'eralement suffisantes, et tr\`es
+peu de directives sont r\'eellement indispensables.
+
+Des exemples de directives de ressources device connues pour fonctionner pour
+beaucoup de lecteurs de bandes communs peuvent \^etre trouv\'es dans le r\'epertoire :
+\lt{}bacula-src\gt{}/examples/devices. La plupart seront \'enum\'er\'es ici.
+
+Pour une discussion g\'en\'erale concernant les fichiers de configuration de Bacula,
+les ressources et les types de donn\'ees reconnus, veuillez consulter le
+chapitre \ilink{Configuration}{_ChapterStart16} de ce manuel. Les d\'efinitions de
+ressources Storage suivantes doivent \^etre d\'efinies :
+
+\begin{itemize}
+\item
+ \ilink{Storage}{StorageResource} -- Pour d\'efinir le nom du Storage Daemon.
+\item
+ \ilink{Director}{DirectorResource1} -- Pour d\'efinir le nom du Director et le mot
+ de passe permettant d'y acc\'eder.
+\item
+ \ilink{Device}{DeviceResource} -- Pour d\'efinir les caract\'eristiques de votre
+ p\'eriph\'erique de stockage.
+\item
+ \ilink{Messages}{_ChapterStart15} -- Pour d\'efinir o\`u les messages d'erreurs
+ et d'information doivent \^etre exp\'edi\'es.
+\end{itemize}
+
+\section{Ressource Storage}
+\label{StorageResource}
+\index[general]{Ressource!Storage}
+\index[general]{Ressource Sorage}
+\addcontentsline{toc}{section}{Ressource Storage}
+
+En g\'en\'eral, les propri\'et\'es sp\'ecifi\'ees au niveau de la ressource Storage d\'efinissent
+des propri\'et\'es globales du Storage Daemon. Chaque fichier de configuration de
+Storage Daemon doit avoir sa propre d\'efinition de ressource Storage.
+
+\begin{description}
+
+\item [Name = \lt{}Storage-Daemon-Name\gt{}]
+ \index[sd]{Name}
+ \index[sd]{Directive!Name}
+ Sp\'ecifie le nom du Storage Daemon. Cette directive est requise.
+\item [Working Directory = \lt{}R\'epertoire\gt{}]
+ \index[sd]{Working Directory}
+ \index[sd]{Directive!Working Directory}
+ Cette directive sp\'ecifie un r\'epertoire o\`u le Storage Daemon peut placer ses fichiers
+ d'\'etat. Ce r\'epertoire ne devrait \^etre utilis\'e que par Bacula, mais peut \^etre
+ partag\'e par d'autres daemons Bacula, pourvu que les noms donn\'es \`a chaque daemon
+ soient uniques. Cette directive est requise.
+
+\item [Pid Directory = \lt{}R\'epertoire\gt{}]
+ \index[sd]{Pid Directory}
+ \index[sd]{Directive!Pid Directory}
+ Cette directive sp\'ecifie un r\'epertoire o\`u le Storage Daemon peut d\'eposer son fichier
+d'Id de processus. Ce fichier est utilis\'e pour stopper Bacula et pr\'evenir l'ex\'ecution
+simultan\'ee de plusieurs copies de Bacula. Les substitutions shell standard sont
+effectu\'ees \`a la lecture du fichier de configuration, de sorte que des valeurs
+telles que {\bf \$HOME} seront correctement substitu\'ees.
+
+Typiquement, sur les syst\`emes Linux, vous utiliserez ici {\bf /var/run}. Si vous
+n'installez pas Bacula dans les r\'epertoires syst\`eme, vous pouvez utiliser le
+r\'epertoire de travail {\bf Working Directory} d\'efini plus haut.
+Cette directive est requise.
+
+\item [Heartbeat Interval = \lt{}P\'eriode\gt{}]
+ \index[sd]{Heartbeat Interval}
+ \index[sd]{Directive!Heartbeat Interval}
+ \index[general]{Heartbeat Interval}
+ \index[general]{Broken pipe}
+ Cette directive d\'efinit la p\'eriode des pulsations \'emises par le Storage Daemon
+ vers le File Daemon lorqu'il (le SD) se trouve en situation d'attente du montage
+ d'une cartouche par l'op\'erateur. La valeur par d\'efaut est z\'ero, ce qui d\'esactive
+ les pulsations. Cette fonctionnalit\'e est particuli\`erement utile si vous avez un
+ routeur (tel que les 3Com) qui ne suit pas les standards Internet et expire une
+ connection valide apr\`es une courte dur\'ee, bien que {\it keepalive} soit activ\'e.
+ Ceci produit habituellement un message d'erreur du type {\it broken pipe}.
+
+\item [Maximum Concurrent Jobs = \lt{}nombre\gt{}]
+ \index[sd]{Maximum Concurrent Jobs}
+ \index[sd]{Directive!Maximum Concurrent Jobs}
+ O\`u \lt{}nombre\gt{} est nombre maximal de jobs qui peuvent \^etre ex\'ecut\'es
+ simultan\'ement. La valeur par d\'efaut est fix\'ee \`a 10, mais vous pouvez d\'efinir
+ une valeur plus grande. Chaque connexion depuis le Director (par exemple
+ une requ\^ete de statut, le lancement d'un job...) est consid\'er\'ee comme un job,
+ aussi, si vous voulez conserver la possibilit\'e d'utiliser la commande
+ {\bf status} dans la console alors qu'un job est en cours d'ex\'ecution, vous
+ devez utiliser une valeur strictement sup\'erieure \`a 1. Pour ex\'ecuter plusieurs
+ jobs simultan\'ement, vous devez param\'etrer plusieurs autres directives dans le
+ fichier de configuration du Director. Selon ce que vous voulez faire, il faudra
+ intervenir sur l'un ou l'autre param\`etre, mais vous devrez presque surement
+ r\'egler le param\`etre {\bf Maximum Concurrent Jobs} de la ressource Storage du
+ fichier de configuration du Director, et peut-\^etre aussi ceux des ressources
+ Job et Client.
+
+\item [SDAddresses = \lt{}Adresse IP\gt{}]
+ \index[sd]{SDAddresses}
+ \index[sd]{Directive!SDAddresses}
+ Pr\'ecise les ports et adresses sur lesquels le Storage Daemon est \`a
+ l'\'ecoute de connections du Director. En principe, les valeurs par d\'efaut sont
+ suffisantes, et vous n'avez pas besoin d'utiliser cette directive. La meilleure
+ explication du fonctionnement de cette directive est certainement un exemple :
+
+\footnotesize
+\begin{verbatim}
+ SDAddresses = { ip = {
+ addr = 1.2.3.4; port = 1205; }
+ ipv4 = {
+ addr = 1.2.3.4; port = http; }
+ ipv6 = {
+ addr = 1.2.3.4;
+ port = 1205;
+ }
+ ip = {
+ addr = 1.2.3.4
+ port = 1205
+ }
+ ip = {
+ addr = 1.2.3.4
+ }
+ ip = {
+ addr = 201:220:222::2
+ }
+ ip = {
+ addr = bluedot.thun.net
+ }
+}
+\end{verbatim}
+\normalsize
+
+o\`u "ip", "ip4", "ip6", "addr", et "port" sont des mots-clef. Notez que les adresses
+peuvent \^etre sp\'ecifi\'ees sous forme de quadruplets point\'es, de nom symboliques
+(uniquement dans la sp\'ecification "ip") ou en notation IPv6 \`a double points. Le port
+peut quand \`a lui \^etre sp\'ecifi\'e par son num\'ero, ou par sa valeur mn\'emonique du
+fichier /etc/services. Si un port n'est pas sp\'ecifi\'e, la valeur par d\'efaut est
+utilis\'ee. Si une section ip est sp\'ecifi\'ee, la r\'esolution peut \^etre r\'ealis\'ee
+par ipv4 ou ipv6. En revanche, si ip4 ou ip6 est sp\'ecifi\'ee, seule la r\'esolution
+correspondante fonctionne.
+
+Vous pouvez, avec ces directives, remplacer les valeurs des directives SDPort et
+SDAddress montr\'ees ci-dessous.
+
+\item [SDPort = \lt{}Num\'ero de port\gt{}]
+ \index[sd]{SDPort}
+ \index[sd]{Directive!SDPort}
+ Sp\'ecifie le num\'ero de port sur lequel le Storage Daemon \'ecoute les connexions
+ en provenance du Director. La valeur par d\'efaut est 9103.
+
+\item [SDAddress = \lt{}Adresse IP\gt{}]
+ \index[sd]{SDAddress}
+ \index[sd]{Directive!SDAddress}
+ Cette directive est optionnelle. Lorsqu'elle est sp\'ecifi\'ee, le Storage Daemon n'accepte
+ de connections (de Director(s) ou de File(s) Daemon(s)) que de l'adresse sp\'ecifi\'ee
+ {\bf Adresse-IP}, qui peut \^etre
+ soit un nom de domaine, soit une adresse IP au format quadruplet point\'e.
+ Si cette directive n'est pas sp\'ecifi\'ee, le Storage Daemon acceptera des connections de
+ de toute adresse valide.
+
+\end{description}
+
+Voici une d\'efinition typique d'une ressource Storage du Storage Daemon :
+
+
+\footnotesize
+\begin{verbatim}
+#
+# "Global" Storage daemon configuration specifications appear
+# under the Storage resource.
+#
+Storage {
+ Name = "Storage daemon"
+ Address = localhost
+ WorkingDirectory = "~/bacula/working"
+ Pid Directory = "~/bacula/working"
+}
+\end{verbatim}
+\normalsize
+
+\section{La ressource Director}
+\label{DirectorResource1}
+\index[general]{Ressource Director}
+\index[general]{Resource!Director}
+\addcontentsline{toc}{section}{La ressource Director}
+
+La ressource Director sp\'ecifie le nom du Director qui est autoris\'e
+\`a utiliser les services du Storage Daemon. Il peut exister plusieurs
+ressources Director. Le nom et le mot de passe du Director doivent
+s'accorder avec leurs homologues dans le fichier de configuration
+du Storage Daemon.
+
+\begin{description}
+
+\item [Name = \lt{}Nom-du-Director\gt{}]
+ \index[sd]{Name}
+ \index[sd]{Directive!Name}
+ Sp\'ecifie le nom du Director autoris\'e \`a se connecter au Storage Daemon.
+ Cette directive est requise.
+
+\item [Password = \lt{}Mot-de-passe-du-Director\gt{}]
+ \index[sd]{Password}
+ \index[sd]{Directive!Password}
+ Sp\'ecifie le mot de passe qui doit \^etre soumis par le Director susnomm\'e.
+ Cette directive est requise.
+
+\item [Monitor = \lt{}yes|no\gt{}]
+ \index[sd]{Monitor}
+ \index[sd]{Directive!Monitor}
+ Si cette directive est d\'esactiv\'ee ({\bf no}), ce qui est le cas par d\'efaut,
+ ce Director dispose d'un acc\`es illimit\'e \`a ce Storage Daemon. Dans le cas
+ contraire, ce Director est brid\'e de fa\c {c}on \`a pouvoir seulement r\'ecup\'erer le
+ statut courant de ce Storage Daemon.
+
+ Si ce Director est utilis\'e par un superviseur, nous vous recommandons
+ fortement d'activer cette directive pour \'eviter de s\'erieux probl\`emes de
+ s\'ecurit\'e.
+
+\end{description}
+
+Voici un exemple d'une d\'efinition de ressource Director valide :
+
+\footnotesize
+\begin{verbatim}
+Director {
+ Name = MainDirector
+ Password = my_secret_password
+}
+\end{verbatim}
+\normalsize
+
+\label{DeviceResource}
+\section{La Ressource Device}
+\index[general]{Resource!Device}
+\index[general]{Ressource Device}
+\addcontentsline{toc}{section}{Ressource Device}
+
+La ressource Device sp\'ecifie les d\'etails de chaque p\'eriph\'erique (en g\'en\'eral,
+un lecteur de bandes) qui peut \^etre utilis\'e par le Storage Daemon. Un
+Storage Daemon peut disposer de plusieurs ressources Device. En g\'en\'eral,
+les propri\'et\'es sp\'ecifi\'ees dans la ressource Device sont sp\'ecifiques
+au p\'eriph\'erique.
+
+\begin{description}
+
+\item [Name = {\it Nom-de-p\'eriph\'erique}]
+ \index[sd]{Name}
+ \index[sd]{Directive!Name}
+ Sp\'ecifie le nom que le Director devra utiliser pour d\'esigner ce p\'eriph\'erique.
+ Il s'agit d'un nom logique, c'est une cha\^ine qui peut comporter jusqu'\`a 127
+ caract\`eres. C'est en g\'en\'eral une bonne id\'ee d'utiliser un nom qui corresponde
+ au nom "humain" du p\'eriph\'erique (NDT: la vo dit "the english name"). Le nom
+ physique du p\'eriph\'erique est sp\'ecifi\'e au niveau de la directive {\bf Archive Device}
+ d\'ecrite ci-dessous. Le nom que vous sp\'ecifiez ici est aussi utilis\'e dans le
+ fichier de configuration de votre Director au niveau de la
+ \ilink{directive Device}{StorageResource2} de sa ressource Storage.
+
+\item [Archive Device = {\it cha\^ine-nom}]
+ \index[sd]{Archive Device}
+ \index[sd]{Directive!Archive Device}
+ La {\bf cha\^ine-nom} (NDT : name-string dans la vo) sp\'ecifie le nom de fichier syst\`eme
+ du p\'eriph\'erique de stockage g\'er\'e par ce daemon. Il s'agit en g\'en\'eral d'un nom
+ de p\'eriph\'erique amovible, par exemple un lecteur de bande d\'esign\'e par "{\bf /dev/nst0}"
+ ou "{\bf /dev/rmt/0mbn}". Dans le cas d'un graveur de DVD, ce sera par exemple
+ {\bf /dev/hdc}. Ce peut \^etre aussi un un nom de r\'epertoire si vous sauvegardez
+ sur disque. Dans ce cas, vous devez soumettre le chemin absolu vers ce
+ r\'epertoire. Lorsque vous utilisez un lecteur de bandes, il est pr\'ef\'erable
+ d'utiliser la variante "non-rewind" du fichier de p\'eriph\'erique. De plus, sur les
+ syst\`emes tels que Sun, qui disposent de plusieurs m\'ethodes d'acc\`es aux cartouches,
+ prenez soin de sp\'ecifier l'usage de la convention I/O Berkeley avec les p\'eriph\'eriques.
+ le {\bf b} de la sp\'ecification {\bf /dev/rmt/0mbn} Solaris (Sun) est ce qui est
+ requis dans ce cas. Bacula ne supporte pas le comportement SysV des lecteurs de bandes.
+
+ Comme mentionn\'e plus haut,Archive Device est, en principe, le nom d'un lecteur de bandes,
+ mais vous pouvez tout aussi bien sp\'ecifier le chemin absolu vers un r\'epertoire
+ existant. Dans ce cas, Bacula utilisera un fichier pour stocker les donn\'ees dans
+ le r\'epertoire sp\'ecifi\'e, le nom de fichier utilis\'e sera celui du volume tel que
+ sp\'ecifi\'e dans le catalogue. Si vous souhaitez \'ecrire dans plusieurs r\'epertoires
+ (dans le but de r\'epartir la charge sur plusieurs disques), vous devez d\'efinir deux ressources
+ Device, chacune comportant une Archive Device avec un r\'epertoire diff\'erent.
+
+ Une troisi\`eme possibilit\'e consiste \`a sp\'ecifier le nom d'un FIFO. Un FIFO est un
+ fichier sp\'ecial qui connecte deux programmes via la m\'emoire du noyau. Si vous
+ sp\'ecifiez un FIFO en guise d'Archive Device, vous devez avoir un programme qui
+ lit ce que Bacula \'ecrit dans le FIFO. Lorsque le Storage Daemon d\'emarre le job,
+ il attend que le programme lecteur commence \`a lire pendant un d\'elai maximal de
+ de {\bf MaximumOpenWait} secondes, au del\`a duquel le job est termin\'e. Par cons\'equent,
+ il est pr\'ef\'erable de lancer le programme lecteur au d\'ebut du job, par exemple
+ gr\^ace \`a la directive {\bf RunBeforeJob}. Pour ce type de p\'eriph\'erique, vous ne devez
+ jamais sp\'ecifier {\bf AlwaysOpen}, puisque vous voulez que le Storage Daemon
+ ne l'ouvre que lorsqu'un job d\'emarre, aussi veuillez attribuer explicitement
+ la valeur {\bf No} \`a cette directive. Puisqu'un FIFO est un p\'eriph\'erique \`a sens
+ unique, Bacula ne tente pas d'en lire le label, il se contente d'y \'ecrire. Pour
+ cr\'eer un volume FIFO dans le catalogue, utilisez la commande {\bf add} plut\^ot
+ que la commande {\bf label} afin d'\'eviter de tenter d'\'ecrire un label.
+
+ Lors d'une op\'eration de restauration, si l'Archive Device est un FIFO, Bacula
+ tente de lire le FIFO, aussi vous devez avoir un programme externe qui \'ecrit dans
+ le FIFO. Bacula attend que ce programme commence \`a \'ecrire pendant un d\'elai
+ maximal de {\bf MaximumOpenWait} secondes apr\`es quoi il termine le job. Comme
+ mentionn\'e ci-dessus, vous pouvez utiliser la directive {\bf RunBeforeJob} pour
+ lancer ce programme auteur d\`es le d\'ebut du job.
+
+ La directive Archive Device est requise.
+
+\item [Device Type = {\it Sp\'ecification-de-type}]
+ \index[sd]{Device Type}
+ \index[sd]{Directive!Device Type}
+ La sp\'ecification Device Type de d\'eclarer explicitement \`a Bacula quel type
+ de p\'eriph\'erique vous d\'efinissez. La valeur de {\it Sp\'ecification-de-type} peut
+ \^etre l'une des suivantes :
+ \begin{description}
+ \item [File]
+ Indique \`a Bacula que le p\'eriph\'erique est un fichier. Ce peut \^etre
+ un fichier d\'efini sur un m\'edium fixe ou au contraire amovible (par exemple, un
+ p\'eriph\'erique USB). Tous les fichiers doivent \^etre des p\'eriph\'eriques en acc\`es
+ s\'electif (NDT : traduction Google sans doute \`a revoir de "random access")
+ \item[tape]
+ Indique \`a Bacula que le p\'eriph\'erique est un lecteur de bandes, donc \`a
+ acc\`es s\'equentiel. Ces p\'eriph\'eriques sont control\'e par les appels
+ ioctl().
+ \item[Fifo]
+ Indique \`a Bacula que le p\'eriph\'erique est un p\'eriph\'erique \`a acc\`es
+ s\'equentiel "first-in-first-out" (premier entr\'e, premier sorti) en
+ lecture seule ou en \'ecriture seule.
+ \item[DVD]
+ Indique \`a Bacula que le p\'eriph\'erique est un DVD. Les DVDs sont \`a acc\`es
+ s\'equentiel en \'ecriture et \`a acc\`es s\'electif (NDT : traduction Google sans
+ doute \`a revoir de "random access") en lecture.
+ \end{description}
+
+ La directive Device Type n'est pas requise, et si elle n'est pas sp\'ecifi\'ee,
+ Bacula tentera de deviner cette information selon la sp\'ecification Archive
+ Device fournie. Il existe plusieurs avantages \`a sp\'ecifier explicitement
+ le type de p\'eriph\'erique. D'abord, sur certains syst\`emes, les p\'eriph\'eriques
+ bloc et caract\`ere ont le m\^eme type, ce qui signifie que sur ces syst\`emes,
+ Bacula est probablement incapable de deviner qu'un p\'eriph\'erique est un DVD.
+ Ensuite, si vous sp\'ecifiez explicitement le type de p\'eriph\'erique, le point de
+ montage n'a pas besoin d'\^etre d\'efini jusqu'\`a ce que le p\'eriph\'erique soit ouvert.
+ C'est le cas de la plupart des p\'eriph\'eriques amovibles tels que les USB mont\'es
+ par le daemon HAL. Au contraire, si le type de p\'eriph\'erique n'est pas
+ sp\'ecifi\'e explicitement, le point de montage doit exister d\`es le
+ d\'emarrage du Storage Daemon.
+
+ Cette directive est apparue avec la version 1.38.6 de Bacula.
+
+\item [Media Type = {\it name-string}]
+ \index[sd]{Media Type}
+ \index[sd]{Directive!Media Type}
+ La cha\^ine {\bf name-string} sp\'ecifi\'ee baptise le type de m\'edia support\'e par
+ ce p\'eriph\'erique, par exemple, "DLT7000". Les noms de type de m\'edia sont
+ arbitraires, vous pouvez utiliser le nom de votre choix, mais ils doivent
+ \^etre connus du catalogue pour qu'il puisse garder trace de quel daemon
+ peut lire quel type de m\'edia. En g\'en\'eral, chaque type de stockage devrait
+ avoir un type de m\'edia unique associ\'e. Le m\^eme nom {\bf name-string} doit
+ appara\^itre dans la d\'efinition de ressource Storage appropri\'ee du fichier
+ de configuration du Director.
+
+ M\^eme si les noms que vous assignez sont arbitraires, vous devriez les choisir
+ avec circonspection, car le Media Type est utilis\'e pour d\'eterminer le
+ p\'eriph\'erique de stockage \`a s\'electionner lors d'une restauration. Ainsi, vous
+ devriez certainement utiliser le m\^eme Media Type pour tous les lecteurs
+ dont les cartouches sont interchangeables. Ce n'est g\'en\'eralement pas un
+ probl\`eme si vous n'avez qu'un Storage Daemon, mais c'en est un avec plusieurs
+ Storage Daemon, surtout s'ils utilisent des m\'edia incompatibles.
+
+ Si, par exemple, vous sp\'ecifiez le Media Type "DDS-4", Bacula pourra lors de
+ restaurations s\'electionner tout Storage Daemon qui supporte les "DDS-4".
+ Si vous avez une librairie, vous voudrez peut-\^etre baptiser son Media Type
+ d'un nom qui lui soit unique, \`a moins que vous souhaitiez pouvoir utiliser
+ ses volumes dans d'autres lecteurs. Vous devriez aussi vous assurer d'avoir
+ des noms de Media Type uniques si les media ne sont pas compatibles d'un
+ lecteur \`a l'autre. Cette sp\'ecification est requise pour tous les
+ p\'eriph\'eriques.
+
+ Enfin, si vous utilisez le stockage sur disque, sachez que chaque ressource
+ Device a g\'en\'eralement un point de montage (ou r\'epertoire) diff\'erent. Afin
+ que Bacula puisse s\'electionner correctement la ressource Device \`a utiliser,
+ chacun doit avoir un Media Type distinct.
+
+\label{Autochanger}
+\item [Autochanger = {\it Yes|No}]
+ \index[sd]{Autochanger}
+ \index[sd]{Directive!Autochanger}
+ Si cette directive est \`a {\bf yes}, alors Bacula consid\`ere que le p\'eriph\'erique
+ concern\'e est dans une librairie, et il vous faut sp\'ecifier une ressource
+ {\bf Autochanger} qui pointe vers les ressources {\bf Device}. Vous devez
+ aussi renseigner la directive {\bf Changer Device}. Si la directive est \`a {\bf No}
+ (valeur par d\'efaut), les volumes doivent \^etre chang\'es manuellement. Vous devriez
+ aussi avoir une directive identique \`a la \ilink{Storage resource}{Autochanger1} dans
+ le fichier de configuration du Director, de sorte que Bacula vous demande le slot
+ lors de l'\'etiquetage des cartouches.
+
+\item [Changer Device = {\it cha\^ine-nom}]
+ \index[sd]{Changer Device}
+ \index[sd]{Directive!Changer Device}
+ La {\bf cha\^ine-nom} sp\'ecifi\'ee doit \^etre le nom de p\'eriph\'erique {\bf SCSI g\'en\'erique}
+ associ\'e \`a l'{\bf Archive Device} sp\'ecifi\'ee dans la ressource Device. Ce nom de
+ p\'eriph\'erique SCSI g\'en\'erique devrait \^etre sp\'ecifi\'e si vous avez une librairie
+ ou si vous n'avez qu'un lecteur standard mais souhaitez utiliser la {\bf commande
+ Alert} (voir ci-dessous). Par exemple, sur les syst\`emes Linux, vous sp\'ecifierez
+ certainement {\bf /dev/nst0} pour le nom d'Archive Device, et {\bf /den/sg0} pour
+ le nom de Changer Device. Selon votre configuration, le nombre de librairies dont
+ vous disposez et leurs types, le nom que vous serez amen\'e \`a sp\'ecifier ici peut varier.
+ Cette directive est optionnelle. Consultez le chapitre
+ \ilink{Utiliser une librairie}{_ChapterStart18} de ce manuel pour plus de d\'etails
+ concernant les directives relatives aux librairies.
+
+\item [Changer Command = {\it cha\^ine nom}]
+ \index[sd]{Changer Command}
+ \index[sd]{Directive!Changer Command}
+ La {\bf cha\^ine-nom} d\'esigne un programme externe qui aura pour t\^ache le
+ changement des volumes \`a la demande de Bacula. En principe, cette directive
+ n'est sp\'ecifi\'ee qu'au niveau de la ressource {\bf AutoChanger}, qui est alors
+ utilis\'ee pour tous les p\'eriph\'eriques. Cependant, vous pouvez parfaitement
+ utiliser une commande {\bf Changer Command} diff\'erente pour chaque ressource Device.
+ La plupart du temps, vous sp\'ecifierez le script {\bf mtx-changer} fourni avec
+ Bacula de la fa\c {c}on suivante :
+
+\footnotesize
+\begin{verbatim}
+Changer Command = "/path/mtx-changer %c %o %S %a %d"
+\end{verbatim}
+\normalsize
+
+ Et vous installerez le programme {\bf mtx} sur votre syst\`eme (paquetage tiers).
+ Un exemple de cette commande figure dans le fichier de configuration par d\'efaut
+ du Storage Daemon, bacula-sd.conf. Pour plus de d\'etails concernant les
+ substitutions de caract\`eres qui peuvent \^etre utilis\'ees pour configurer
+ votre librairie, veuillez consulter le chapitre sur
+ l'\ilink{utilisation des Librairies}{_ChapterStart18}. Les utilisateurs
+ de FreeBSD voudront probablement jeter un oeil aux quelques scripts
+ fournis dans le r\'epertoire {\bf examples/autochangers}.
+
+\item [Alert Command = {\it name-string}]
+ \index[sd]{Alert Command}
+ La {\bf cha\^ine-nom} d\'esigne un programme externe \`a appeler au terme
+ de chaque job apr\`es que le p\'eriph\'erique ait \'et\'e lib\'er\'e. Le but de cette
+ commande est de r\'ecup\'erer d'\'eventuels messages d'alerte du lecteur pour
+ vous pr\'evenir si quelque chose ne fonctionne pas correctement (ces messages
+ existent au moins sur la plupart des lecteurs modernes). Les m\^emes
+ substitutions que celles d\'ecrites au niveau de la {\bf Changer command}
+ peuvent \^etre utilis\'ees ici. Pour plus d'informations, veuillez consulter
+ le chapitre sur les \ilink{Librairies}{_ChapterStart18} de ce manuel.
+
+ Notez que vous pouvez trouver un usage \`a cette commande sans n\'ecessairement
+ poss\'eder une librairie. L'exemple ci-dessous utilise le programme {\bf tapeinfo}
+ qui vient avec le paquet {\bf mtx} mais peut \^etre utilis\'e avec n'importe quel
+ lecteur. Vous devrez tout de m\^eme sp\'ecifier une directive {\bf Changer Device}
+ dans votre ressource Device (voir ci-dessus) afin que le p\'eriph\'erique SCSI
+ g\'en\'erique puisse \^etre \'edit\'e dans la commande (avec \%c).
+
+ Voici un exemple qui affiche les alertes en provenance du lecteur dans les
+ rapports de jobs :
+
+\footnotesize
+\begin{verbatim}
+Alert Command = "sh -c 'tapeinfo -f %c | grep TapeAlert'"
+
+\end{verbatim}
+\normalsize
+
+Et un exemple de ce qui peut en sortir lorqu'il y a un probl\`eme :
+
+\footnotesize
+\begin{verbatim}
+bacula-sd Alert: TapeAlert[32]: Interface: Problem with SCSI interface
+ between tape drive and initiator.
+
+\end{verbatim}
+\normalsize
+
+\item [Drive Index = {\it number}]
+ \index[sd]{Drive Index}
+ \index[sd]{Directive!Drive Index}
+ Le num\'ero de lecteur, ou {\bf Drive Index}, que vous sp\'ecifiez ici est
+ pass\'e au script {\bf mtx-changer} et donc au programe {\bf mtx}.
+ Par d\'efaut, le Drive Index vaut z\'ero, aussi, si vous n'avez qu'un
+ lecteur dans votre librairie, tout fonctionnera correctement.
+ Si en revanche vous avez plusieurs lecteurs, vous devez sp\'ecifier
+ plusieurs ressources Device (une par lecteur).
+ Il n'est pas n\'ecessaire de sp\'ecifier la valeur z\'ero pour la directive
+ Drive Index dans la premi\`ere de ces ressources (valeur par d\'efaut). Par
+ contre, la seconde devrait contenir une directive Drive Index \'egale \`a 1,
+ la troisi\`eme une directive Drive Index \'egale \`a 2, et ainsi de suite.
+ A partir de la version 1.38.0, en utilisant la ressource {\bf Autochanger},
+ Bacula s'assure qu'un seul lecteur \`a la fois utilise le script d'autochargement
+ (script mtx-changer), aussi vous n'avez plus besoin de scripts de verrouillage
+ comme ce fut le cas dans le pass\'e -- Le script mtx-change fourni avec Bacula
+ fonctionne avec un nombre quelconque de lecteurs.
+
+\item [Autoselect = {\it Yes|No}]
+ \index[sd]{Autoselect}
+ \index[sd]{Directive!Autoselect}
+ Si cette directive vaut {\bf yes} (valeur par d\'efaut), et si le p\'eriph\'erique
+ appartient \`a une librairie, alors lorsque la librairie est r\'ef\'erenc\'ee par
+ le Director, ce p\'eriph\'erique peut \^etre automatiquement s\'electionn\'e.
+ Si cette directive vaut {\bf no}, alors le p\'eriph\'erique peut seulement
+ \^etre d\'esign\'e par son nom de p\'eriph\'erique (Device Name) dans le
+ Director. Ceci permet de r\'eserver un lecteur pour une t\^ache particuli\`ere,
+ comme une sauvegarde hautement prioritaire, ou des op\'erations de restaurations.
+
+\item [Maximum Changer Wait = {\it time}]
+ \index[sd]{Maximum Changer Wait}
+ \index[sd]{Directive!Maximum Changer Wait}
+ Cette directive sp\'ecifie le d\'elai maximum, en secondes, pendant lequel Bacula
+ peut attendre d'une librairie qu'elle change de volume. Au del\`a de ce d\'elai,
+ Bacula invalide le num\'ero de slot r\'ef\'erenc\'e dans le catalogue et essaye \`a
+ nouveau. Si aucun autre volume n'est disponible dans la librairie, Bacula
+ r\'eclame l'intervention d'un op\'erateur. La valeur par d\'efaut est 5 minutes.
+
+\item [Maximum Rewind Wait = {\it time}]
+ \index[sd]{Maximum Rewind Wait}
+ \index[sd]{Directive!Maximum Rewind Wait}
+ Cette directive sp\'ecifie le d\'elai maximum, en secondes, pendant lequel Bacula
+ peut attendre d'un lecteur qu'il rembobine une cartouche. Au del\`a de ce d\'elai,
+ le job est effac\'e. La valeur par d\'efaut est 5 minutes.
+
+\item [Maximum Open Wait = {\it time}]
+ \index[sd]{Maximum Open Wait}
+ \index[sd]{Directive!Maximum Open Wait}
+ Cette directive sp\'ecifie le d\'elai maximum, en secondes, pendant lequel Bacula
+ peut attendre apr\`es une commande Open.Au del\`a de ce d\'elai,
+ le job est effac\'e. La valeur par d\'efaut est 5 minutes.
+
+\item [Always Open = {\it Yes|No}]
+ \index[sd]{Always Open}
+ \index[sd]{Directive!Always Open}
+ Si la valeur sp\'ecifi\'ee ici est {\bf Yes} (valeur par d\'efaut), Bacula garde le
+ p\'eriph\'erique ouvert, \`a moins qu'il ne soit explicitement d\'emont\'e ({\bf unmounted})
+ depuis la console Bacula. Ceci permet \`a Bacula de s'assurer que le lecteur est
+ toujours disponible. Si vous r\'eglez {\bf AlwaysOpen} \`a {\bf no} {\bf Bacula},
+ Bacula ouvre le lecteur seulement lorsque n\'ecessaire, et le lib\`ere \`a la fin du
+ job, si aucun autre job ne l'utilise. Lors de l'utilisation suivante, Bacula
+ doit rembobiner la cartouche et se repositionner au bon endroit. Pour \'eviter
+ ces rembnobinages inutiles et les interventions de l'op\'erateur, il est
+ hautement recommand\'e de garder la valeur {\bf Always Open = yes}. Ceci assure
+ aussi que le lecteur est disponible lorsque Bacula en a besoin.
+
+ Si vous avez sp\'ecifi\'e {\bf Always Open = yes} (comme recommand\'e) et si vous
+ voulez utiliser le lecteur pour autre chose, lib\'erez-le simplement avec la
+ commande {\bf unmount} dans la console Bacula. N'oubliez-pas ensuite de
+ remonter le lecteur avec la commande {\bf mount} afin que Bacula soit pr\`et
+ \`a prendre en charge le prochain job planifi\'e.
+
+ Pour le stockage sur disque (File Storage), cette directive est ignor\'ee. Dans le
+ cas d'un stockage FIFO, vous devez mettre cette directive \`a {\bf No}.
+
+ Notez bien que si vous mettez cette directive \`a {\bf No}, Bacula lib\`ere le
+ lecteur entre chaque job, obligeant le lecteur \`a rembobiner la cartouche, et
+ \`a replacer la bande \`a la fin de la zone de donn\'ees, ce qui peut prendre
+ beaucoup de temps.
+
+\item [Volume Poll Interval = {\it p\'eriode}]
+ \index[sd]{Volume Poll Interval}
+ \index[sd]{Directive!Volume Poll Interval}
+ Si la p\'eriode sp\'ecifi\'ee pour cette directive est non nulle alors, apr\`es avoir
+ demand\'e \`a l'op\'erateur de monter un nouveau volume, Bacula retentera
+ p\'eriodiquement de lire le lecteur selon la p\'eriode sp\'ecifi\'ee au cas o\`u un
+ nouveau volume aurait \'et\'e mont\'e. Si la valeur sp\'ecifi\'ee est z\'ero, ces
+ tentatives de lecture n'ont pas lieu. Cette directive est utile lorsque
+ vous souhaitez \'eviter l'intervention d'un op\'erateur \`a la console. Au lieu de
+ quoi l'op\'erateur se contente de sortir la cartouche pr\'ec\'edente et de monter la
+ nouvelle qui sera reconnue \`a la prochaine tentative. Soyez conscient que si vous
+ sp\'ecifiez une p\'eriode trop courte, vous risquez de solliciter excessivement
+ votre lecteur si la cartouche pr\'ec\'edente demeure dans le lecteur, puisque Bacula
+ la lira \`a chaque tentative. Vous pouvez \'eviter ceci en \'ejectant la cartouche avec
+ les directives {\bf Offline On Unmount} et {\bf Close on Poll}.
+ Cependant, si vous utilisez un noyau Linux 2.6 ou un autre syst\`eme d'exploitation tel
+ FreeBSD ou Solaris, les commandes Offline ou Unmount laisseront le lecteur sans cartouche,
+ et Bacula, incapable de d'ouvrir correctement le lecteur, pourrait \'echouer ses jobs.
+ Pour plus d'informations sur ce probl\`eme, veuillez consulter la section
+ \ilink{description of Offline On Unmount}{NoTapeInDrive} du chapitre relatif
+ aux tests des lecteurs de bandes.
+
+\item [Close on Poll= {\it Yes|No}]
+ \index[sd]{Close on Poll}
+ \index[sd]{Directive!Close on Poll}
+ Si cette directive est \`a {\bf Yes}, Bacula ferme le p\'eriph\'erique et le r\'eouvre
+ \`a chaque tentative (ce qui est \'equivalent \`a unmount, sauf qu'il n'est pas
+ n\'ecessaire d'utiliser mount ensuite). En principe, cette directive n'est
+ pas tr\`es utile \`a moins que vous ayez activ\'e la directive {\bf Offline on Unmount},
+ auquel cas le lecteur sera consid\'er\'e hors-ligne (NDT : offline) pr\'evenant ainsi
+ de nombreux mouvements inutiles de la bande lors de chaque tentative de lecture.
+ Une fois que l'op\'erateur aura charg\'e une nouvelle cartouche, Bacula
+ sera en mesure de s'en rendre compte \`a la prochaine tentative et poursuivra
+ automatiquement la sauvegarde. Voyez ci-dessus pour plus de d\'etails.
+
+\item [Maximum Open Wait = {\it time}]
+ \index[sd]{Maximum Open Wait}
+ \index[sd]{Directive!Maximum Open Wait}
+ Cette directive sp\'ecifie le d\'elai maximum, en secondes que Bacula
+ accorde \`a un p\'eriph\'erique occup\'e. La valeur par d\'efaut est 5 minutes.
+ Si le p\'eriph\'erique ne peut \^etre obtenu, le job en cours est termin\'e en erreur.
+ Bacula tentera \`a nouveau d'ouvrir le lecteur lorsqu'un nouveau job le
+ r\'eclamera.
+
+\item [Removable media = {\it Yes|No}]
+ \index[sd]{Removable media}
+ \index[sd]{Directive!Removable media}
+ R\'eglez cette directive \`a {\bf Yes} si le p\'eriph\'erique concern\'e supporte des
+ m\'edia amovibles (par exemple des cartouches ou des CDROMs). Dans le cas de
+ m\'edia inamovibles (par exemple, une zone de sauvegardes interm\'ediaires sur un
+ disque dur), mettez {\bf Removable media = No}
+
+\item [Random access = {\it Yes|No}]
+ \index[sd]{Random access}
+ \index[sd]{Directive!Random access}
+ Si cette directive est \`a {\bf Yes}, le p\'eriph\'erique de stockage est consid\'er\'e
+ comme \'etant un m\'edium \`a acc\`es al\'eatoire (NDT : random access medium) qui
+ supporte les commodit\'es {\bf lseek} (ou {\bf lseek64} si l'option Largefile
+ a \'et\'e activ\'ee lors de la compilation).
+
+\item [Minimum block size = {\it size-in-bytes}]
+ \index[sd]{Minimum block size}
+ \index[sd]{Directive!Minimum block size}
+ Sur la plupart des lecteurs modernes, vous n'aurez pas besoin de cette
+ directive, dont le but est d'utiliser des blocs de taille fixe. Cette
+ directive ne s'applique qu'aux p\'eriph\'eriques \`a acc\`es s\'equentiel (NDT :
+ non-random access devices) comme, par exemple, les lecteurs de bandes.
+ Les blocs \'ecrits par le Storage Daemon sur un p\'eriph\'erique \`a acc\`es
+ s\'equentiel ne seront jamais de taille inf\'erieure \`a la taille sp\'ecifi\'ee
+ {\bf size-in-bytes}. Le Storage Daemon tente de remplir au mieux les blocs
+ avec les donn\'ees re\c {c}ues, mais il compl\`ete si n\'ecessaire pour atteindre
+ la taille minimum requise {\bf Minimum block size} .
+
+ Pour contraindre la taille des blocs \`a \^etre fixe, comme c'est le cas de
+ certains p\'eriph\'eriques \`a acc\`es s\'equentiel, stipulez des tailles de blocs
+ minimum {\bf Minimum block size} et maximum {\bf Maximum block size}
+ identiques. Le param\'etrage par d\'efaut est 0 pour les deux directives
+ et la taille de bloc par d\'efaut est de 64 512 octets.
+
+ Par exemple, si vous souhaitez fixer la taille des blocs \`a 100K octets, sp\'ecifiez :
+
+\footnotesize
+\begin{verbatim}
+
+ Minimum block size = 100K
+ Maximum block size = 100K
+
+\end{verbatim}
+\normalsize
+ Notez que si vous sp\'ecifiez une taille de blocs fixe comme ci-dessus, le
+ lecteur doit \^etre r\'egl\'e soit en mode "taille de blocs variable", soit en
+ mode "taille de blocs fixe" avec imp\'erativement la m\^eme taille de blocs
+ fixe que celle sp\'ecifi\'ee dans Bacula (ce param\`etre se r\`egle g\'en\'eralement
+ au niveau du lecteur avec {\bf mt}), faute de quoi vous aurez des erreurs \`a
+ la relecture de vos cartouches.
+
+ Si vous voulez que votre taille de blocs soit variable mais comprise entre
+ 64 Ko et 200 Ko, sp\'ecifiez :
+
+\footnotesize
+\begin{verbatim}
+
+ Minimum block size = 64K
+ Maximum blocksize = 200K
+
+\end{verbatim}
+\normalsize
+
+\item [Maximum block size = {\it size-in-bytes}]
+ \index[sd]{Maximum block size}
+ \index[sd]{Directive!Maximum block size}
+ Sur la plupart des lecteurs modernes, vous n'aurez pas besoin de cette
+ directive. Dans le cas contraire, ce sera probablement pour utiliser
+ des blocs de taille fixe (voir la directive Minimum block size ci dessus).
+ Le Storage Daemon tente d'\'ecrire des blocs de la taille sp\'ecifi\'ee
+ {\bf size-in-bytes} sur le p\'eriph\'erique. Par cons\'equent cette
+ directive fixe \`a la fois la taille maximale et la taille par d\'efaut
+ des blocs. La taille \'ecrite n'exc\`ede jamais la taille sp\'ecifi\'ee ici.
+ Lorsque l'ajout de donn\'ees provoquerait un d\'epassement, le bloc est
+ \'ecrit sur le p\'eriph\'erique, et un nouveau bloc est entam\'e.
+ avec les donn\'ees re\c {c}ues, mais il compl\`ete si n\'ecessaire pour atteindre
+
+ Si aucune valeur n'est sp\'ecifi\'ee (ou si la valeur sp\'ecifi\'ee est 0), le
+ Storage Daemon utilise la valeur par d\'efaut de 64 512 octets.
+
+\item [Hardware End of Medium = {\it Yes|No}]
+ \index[sd]{Hardware End of Medium}
+ \index[sd]{Directive!Hardware End of Medium}
+ Si la valeur attribu\'ee \`a cette directive est {\bf No}, le p\'eriph\'erique de
+ stockage n'a pas besoin de supporter les requ\^etes ioctl "fin de m\'edium",
+ le Storage Daemon utilisant la fonction d'avance jusqu'au prochain espace
+ pour trouver la fin du m\'edium. Si la valeur est {\bf Yes}, le p\'eriph\'erique
+ doit supporter l'appel {\tt ioctl} {\tt MTEOM} qui positionne la cartouche
+ \`a la fin des donn\'ees enregistr\'ees. De plus, votre driver SCSI doit garder trace
+ du nombre de fichiers enregistr\'es sur la cartouche, et le retourner correctement
+ \`a l'appel {\bf MTIOCGET} ioctl. Notez que certains pilotes SCSI savent se
+ positionner correctement \`a la fin de la zone de donn\'ees enregistr\'ees sur la cartouche,
+ mais ne gardent pas trace du nombre de fichiers. Sur les machines Linux, le
+ driver SCSI a une option {\bf fast-eod} qui, si elle est utilis\'ee
+ provoque la perte du nombre de fichiers. assurez-vous toujours que cette
+ option est bien d\'esactiv\'ee (\`a l'aide du programme {\bf mt}).
+
+ Le r\'eglage par d\'efaut de cette directive est {\bf Yes}. Cette option est utilis\'ee
+ lors de l'\'ecriture \`a la suite d'une cartouche, pour s'assurer que les donn\'ees
+ pr\'ec\'edemment \'ecrites ne seront pas corrompues. Nous vous recommandons, si vous
+ avez un lecteur non-standard ou inhabituel, de le tester avec le programme
+ {\bf btape} pour v\'erifier s'il supporte ou non cette fonction. Tous les lecteurs
+ modernes (au del\`a de 1998) la supportent.
+
+\item [Fast Forward Space File = {\it Yes|No}]
+ \index[sd]{Fast Forward Space File}
+ \index[sd]{Directive!Fast Forward Space File}
+ Si la valeur attribu\'ee \`a cette directive est {\bf No}, le p\'eriph\'erique de
+ stockage n'a pas besoin de supporter les requ\^etes ioctl {\bf MTIOCGET}
+ "nombre de fichiers" lors du d\'eplacement sur la bande jusqu'au prochain espace. Si au contraire
+ vous sp\'ecifiez {\bf yes}, le lecteur doit supporter l'appel {\tt ioctl} {\tt MTFSF},
+ que presque tous les pilotes supportent, mais de plus votre pilote SCSI doit
+ garder trace et retourner correctement le nombre de fichiers \`a l'appel
+ ioctl {\bf MTIOCGET} . Notez que certains pilotes SCSI ex\'ecutent correctement
+ les d\'eplacements sur bande "jusqu'au prochain espace" sans toutefois garder trace
+ du nombre de fichiers enregistr\'es, et m\^eme plus grave pour certains : sans
+ signaler la fin du support.
+
+ La valeur par d\'efaut de cette directive est {\bf Yes}.
+
+\item [Use MTIOCGET = {\it Yes|No}]
+ \index[sd]{Use MTIOCGET}
+ \index[sd]{Directive!Use MTIOCGET}
+ Si la valeur attribu\'ee \`a cette directive est {\bf No}, le syst\`eme d'exploitation
+ n'a pas besoin de garder trace du nombre de fichiers sur la cartouche, ni de
+ le retourner \`a l'appel ioctl {\bf MTIOCGET}. La valeur par d\'efaut est {\bf Yes}.
+ Si vous devez mettre No ici, Bacula prendra en charge la d\'etermination des
+ positions de fichiers, mais cela implique des mouvements tr\`es inefficaces de la
+ bande. Heureusement, cette d\'eficience du syst\`eme d'exploitation semble n'\^etre
+ l'apanage que de quelques *BSD. Solaris, Linux et FreeBSD sont connus pour
+ fonctionner correctement.
+
+\item [BSF at EOM = {\it Yes|No}]
+ \index[sd]{BSF at EOM}
+ \index[sd]{Directive!BSF at EOM}
+ Si cette directive est \`a {\bf No} (valeur par d\'efaut), Bacula n'entreprend
+ aucune action particuli\`ere lorsque la fin du m\'edium est atteinte car
+ la cartouche est positionn\'ee apr\`es la derni\`ere marque de fin de fichier EOF,
+ et Bacula peut \'ecrire \`a la suite. Cependant, sur certains syst\`emes tels que
+ FreeBSD, lorsque Bacula lit la marque de fin de cartouche, la cartouche est
+ positionn\'ee apr\`es la seconde marque de fin de fichier EOF (deux marques EOF
+ successives indiquent la fin du support). Si Bacula \'ecrit au del\`a de cette
+ marque, toutes les donn\'ees ajout\'ees seront perdues. La solutions pour ces syst\`emes
+ consiste \`a sp\'ecifier {\bf BSF at EOM}, ainsi Bacula recule en \'ecrasant la
+ seconde marque de fin de fichier. Pour savoir si vous avez besoin de cette
+ directive, utilisez la commande {\bf test} du programme {\bf btape}.
+
+(NDT : Paragraphe \`a revoir VO ci dessous)
+ If {\bf No}, the default, no special action is taken by Bacula with the End
+ of Medium (end of tape) is reached because the tape will be positioned after
+ the last EOF tape mark, and Bacula can append to the tape as desired.
+ However, on some systems, such as FreeBSD, when Bacula reads the End of
+ Medium (end of tape), the tape will be positioned after the second EOF tape
+ mark (two successive EOF marks indicated End of Medium). If Bacula appends
+ from that point, all the appended data will be lost. The solution for such
+ systems is to specify {\bf BSF at EOM} which causes Bacula to backspace over
+ the second EOF mark. Determination of whether or not you need this directive
+ is done using the {\bf test} command in the {\bf btape} program.
+
+\item [TWO EOF = {\it Yes|No}]
+ \index[sd]{TWO EOF}
+ \index[sd]{Directive!TWO EOF}
+ Si cette directive est \`a {\bf Yes}, Bacula \'ecrit deux marques de fin de fichier EOF
+ lorsqu'il a fini d'utiliser une cartouche -- c'est \`a dire apr\`es le dernier
+ job, ou \`a la fin de la cartouche. Dans le cas contraire (la valeur par d\'efaut),
+ Bacula n'\'ecrit qu'une marque de fin de fichier pour terminer une cartouche.
+
+\item [Backward Space Record = {\it Yes|No}]
+ \index[sd]{Backward Space Record}
+ \index[sd]{Directive!Backward Space Record}
+ Si cette directive est \`a {\bf Yes}, le p\'eriph\'erique supporte {\tt MTBSR ioctl}
+ pour reculer dans les enregistrements. Sinon, cet appel n'est pas utilis\'e
+ et la bande doit \^etre rembobin\'ee puis avanc\'ee de fichier en fichier jusqu'\`a
+ la position d\'esir\'ee. La valeur par d\'efaut est {\bf Yes} pour un p\'eriph\'erique
+ \`a acc\`es s\'equentiel. Cette fonction, si activ\'ee, est utilis\'ee \`a la fin des
+ volumes apr\`es \'ecriture d'une marque fin de fichier et de toute \'etiquette
+ ANSI/IBM pour d\'eterminer si oui ou non le dernier bloc a \'et\'e \'ecrit
+ correctement. Si vous d\'esactivez cette fonction, le test ne sera pas fait.
+ Ce n'est pas un probl\`eme car le processus de relecture est une
+ pr\'ecaution plut\^ot qu'une n\'ecessit\'e.
+
+\item [Backward Space File = {\it Yes|No}]
+ \index[sd]{Backward Space File}
+ \index[sd]{Directive!Backward Space File}
+ Si cette directive est \`a {\bf Yes}, le p\'eriph\'erique supporte les appels
+ {\bf MTBSF} et {\bf ioctl MTBSF} pour reculer en-de\c{c}a d'un marque de fin de fichier
+ et se replacer au d\'ebut du fichier. Si cette directive est \`a {\bf No}, ces appels
+ ne sont pas utilis\'es et le lecteur doit rembobiner la cartouche, puis avancer
+ de fichier en fichier jusqu'\`a la position d\'esir\'ee. La valeur par d\'efaut est
+ {\bf Yes} pour les p\'eriph\'eriques \`a acc\`es s\'equentiel.
+
+\item [Forward Space Record = {\it Yes|No}]
+ \index[sd]{Forward Space Record}
+ \index[sd]{Directive!Forward Space Record}
+ Si cette directive est \`a {\bf Yes}, le p\'eriph\'erique doit supporter les appels
+ {\bf MTFSR ioctl} pour avancer \`a travers les
+ enregistrements. Si la valeur est {\bf No}, les donn\'ees doivent \^etre lues dans l'ordre
+ pour positionner la cartouche. La valeur par d\'efaut est
+ {\bf Yes} pour les p\'eriph\'eriques \`a acc\`es s\'equentiel.
+
+\item [Forward Space File = {\it Yes|No}]
+ \index[sd]{Forward Space File}
+ \index[sd]{Directive!Forward Space File}
+ Si cette directive est \`a {\bf Yes}, le p\'eriph\'erique doit supporter les appels
+ {\tt MTFSF ioctl} pour d\'eplacer la bande en se rep\'erant aux marques de fichiers.
+ Si la valeur est {\bf No}, les donn\'ees doivent \^etre lues pour positionner la
+ bande. La valeur par d\'efaut est
+ {\bf Yes} pour les p\'eriph\'eriques \`a acc\`es s\'equentiel.
+
+\item [Offline On Unmount = {\it Yes|No}]
+ \index[sd]{Offline On Unmount}
+ \index[sd]{Directive!Offline On Unmount}
+ Si cette directive est \`a {\bf Yes}, le p\'eriph\'erique doit supporter les appels
+ {\tt MTOFFL ioctl} pour rembobiner et placer le volume \`a l'\'etat {\it offline}.
+ Dans ce cas, Bacula lance requ\^ete {\it eject} avant de fermer le lecteur lors
+ de la commande {\bf unmount}. Si la valeur est {\bf No} (valeur par d\'efaut),
+ Bacula ne tente pas de mettre la cartouche \`a l'\'etat {\it offline} avant de
+ la d\'emonter. Apr\`es que la cartouche ait \'et\'e mise hors ligne, elle est \'eject\'ee
+ requ\'erant ainsi {\bf l'intervention d'un op\'erateur} pour poursuivre. Certains
+ syst\`emes exigent que la commande de chargement {\bf mt -f /dev/xxx load}
+ soit lanc\'ee avant de pouvoir reconna\^itre la cartouche. Si vous utilisez une
+ librairie, sachez que certaines requi\`erent de passer le lecteur \`a l'\'etat
+ {\it offline} pour pouvoir changer de cartouche. Cependant, la plupart n'en
+ on pas besoin et pourraient \^etre d\'erout\'es si cette directive est \`a {\bf Yes}.
+
+ Si vous utilisez un noyau Linux 2.6, ou un syst\`eme tel que FreeBSD ou Solaris,
+ la directive Offline On Unmount abandonnera votre lecteur sans cartouche, et Bacula
+ incapable de l'utiliser. Pour plus d'informations sur ce probl\`eme,
+ consultez la section \ilink{description de Offline On Unmount}{NoTapeInDrive} dans le
+ chapitre sur les tests de lecteurs.
+
+\item [Maximum Volume Size = {\it size}]
+ \index[sd]{Maximum Volume Size}
+ \index[sd]{Directive!Maximum Volume Size}
+ Avec cette directive, vous pouvez imposer une limite au poids de donn\'ees
+ \`a \'ecrire sur chaque volume. La valeur {\bf size} repr\'esente le nombre d'octets
+ autoris\'es. Cette directive est surtout utilis\'ee \`a des fins de tests pour
+ simuler des petits volumes, mais elle peut aussi se r\'ev\'eler utile si voulez
+ limiter la taille de vos volumes, par exemple \`a 2 Go. Certains rares lecteurs
+ vraiment anciens ne signalent pas correctement lorsque la fin de la
+ cartouche est atteinte lors d'une op\'eration d'\'ecriture (Bien que j'aie lu des
+ choses au sujet de tels lecteurs, je n'en n'ai jamais rencontr\'e moi-m\^eme). Notez
+ que cette directive est obsol\`ete, rendue inutile par la
+ directive {\bf Maximum Volume Bytes} d\'efinie dans le fichier de configuration
+ du Director.
+
+\item [Maximum File Size = {\it size}]
+ \index[sd]{Maximum File Size}
+ \index[sd]{Directive!Maximum File Size}
+ Cette directive vous permet d'imposer une limite au poids des fichiers logiques
+ sur le volume. La valeur {\bf size} repr\'esente le nombre d'octets autoris\'es
+ par fichier. Une fois cette valeur atteinte, une marque de fin de fichier est
+ plac\'ee sur le volume et les donn\'ees suivantes sont plac\'ees dans un nouveau
+ fichier. Ce d\'ecoupage des longues s\'equences de donn\'ees en blocs plus petits
+ permet un positionnement plus rapide du lecteur au d\'ebut d'un flux de donn\'ees
+ et peut contribuer \`a pr\'evenir les erreurs de lecture sur la cartouche lors des
+ restaurations. La valeur par d\'efaut est 1 Go.
+
+\item [Block Positioning = {\it yes|no}]
+ \index[sd]{Block Positioning}
+ \index[sd]{Directive!Block Positioning}
+ Cette directive n'est pas utilis\'ee en fonctionnement normal (et n'a pas encore
+ \'et\'e test\'ee). Son r\^ole est d'enjoindre Bacula \`a ne plus utiliser le
+ positionnement par blocs lors de la lecture des cartouches. Ceci peut rendre
+ les op\'erations de restauration {\bf extr\`emement} lentes. Vous utiliserez cette
+ directive si vous avez \'ecrit vos cartouches avec Bacula en mode "taille de blocs
+ variable" tandis que votre lecteur \'etait en taille de blocs fixe. Si tout
+ fonctionne comme je l'esp\`ere, Bacula sera capable de relire vos cartouches.
+
+\item [Maximum Network Buffer Size = {\it bytes}]
+ \index[sd]{Maximum Network Buffer Size}
+ \index[sd]{Directive!Maximum Network Buffer Size}
+ Cette directive permet de sp\'ecifier la taille initiale du tampon r\'eseau \`a
+ utiliser avec le File Daemon. La valeur {\bf bytes} est la taille exprim\'ee
+ en octets. Cette valeur es appel\'ee \`a \^etre ajust\'ee \`a la baisse si elle est
+ trop importante, jusqu'\`a ce qu'elle soit accep\'ee par le syst\`eme d'exploitation.
+ Soyez circonspect dans l'usage de cette directive, car si vous utilisez une
+ valeur trop grande, elle sera diminu\'ee par incr\'ements de 521 octets jusqu'\`a
+ satisfaction du syst\`eme d'exploitation, ce qui peut n\'ecessiter un grand nombre
+ d'appels syst\`eme. La valeur par d\'efaut est 32 768 octets.
+
+ La valeur par d\'efaut a \'et\'e choisie relativement importante, mais pas trop,
+ au cas ou vous transmettriez vos donn\'ees via Internet. Il est clair que sur
+ un r\'eseau local rapide, vous pouvez augmenter cette valeur et am\'eliorer les
+ performances. Par exemple, certains utilisateurs ont obtenu des facteurs
+ d'acc\'el\'eration de l'ordre de 5 \`a 10 en utilisant un tampon r\'eseau initial de
+ 65 536 octets. La plupart des utilisateurs indiquent que des valeurs plus
+ grandes ne semblent pas am\'eliorer les performances. Si vous voulez am\'eliorer
+ la viteese de vos sauvegardes, cette directive est probablement le meilleur
+ endroit pour exp\'erimenter. Vous voudrez probablement effectuer les
+ modifications correspondantes dans les fichiers de configuration de chacun
+ des File Daemons.
+
+\item [Maximum Spool Size = {\it bytes}]
+ \index[sd]{Maximum Spool Size}
+ \index[sd]{Directive!Maximum Spool Size}
+ Cette directive limite \`a la valeur sp\'ecifi\'ee (en octets) le volume occup\'e par
+ le tampon (NDT : spool) disque pour tous les jobs en ex\'ecution. Par d\'efaut, il n'y a
+ pas de limite.
+
+\item [Maximum Job Spool Size = {\it bytes}]
+ \index[sd]{Maximum Job Spool Size}
+ \index[sd]{Directive!Maximum Job Spool Size}
+ Cette directive limite \`a la valeur sp\'ecifi\'ee (en octets) le volume occup\'e par
+ le tampon disque pour chaque job. Par d\'efaut, il n'y a pas de limite. Cette
+ directive est apparue avel la version 1.37.
+
+\item [Spool Directory = {\it directory}]
+ \index[sd]{Spool Directory}
+ \index[sd]{Directive!Spool Directory}
+ Cette directive sp\'ecifie le nom du r\'epertoire \`a utiliser en tant que tampon
+ disque pour ce p\'eriph\'erique. Ce r\'epertoire est aussi utilis\'e pour stocker
+ les fichiers partiels lors de l'\'ecriture sur des supports qui requi\`erent
+ un montage (DVD). Le comportement par d\'efaut est d'utiliser le r\'epertoire
+ de travail de Bacula (working directory).
+
+\item [Maximum Part Size = {\it bytes}]
+ \index[sd]{Maximum Part Size}
+ \index[sd]{Directive!Maximum Part Size}
+ Cette directive pr\'ecise la taille maximale (en octets) d'un fichier partiel. Par d\'efaut,
+ il n'y a pas de limite. Cette directive est apparue avec la version 1.37.
+
+ Si le p\'eriph\'erique requiert un montage, l'ordre de montage est transmis lorsque
+ cette valeur est atteinte. Dans ce cas, vous devez vous assurer d'avor suffisament
+ d'espace dans votre r\'epertoire tampon, faute de quoi vos donn\'ees resteront dans le
+ r\'epertoire tampon.
+
+ Cette directive est ignor\'ee pour les lecteurs de bandes et les FIFO.
+
+\end{description}
+
+\section{P\'eriph\'eriques qui requi\`erent un montage (DVD)}
+\index[general]{P\'eriph\'eriques qui requi\`erent un montage (DVD)}
+\index[general]{DVD!P\'eriph\'eriques qui requi\`erent un montage}
+\addcontentsline{toc}{section}{P\'eriph\'eriques qui requi\`erent un montage (DVD)}
+
+Toutes les directives d\'ecrites dans cette section sont impl\'ement\'ees dans Bacula
+\`a partir de la version 1.37.
+
+A partir de la version 1.39.5, les directives "Requires Mount", "Mount Point",
+"Mount Command", et "Unmount Command" s'appliquent aux syst\`emes de fichiers
+amovibles tels que les p\'erih\'eriques USB, et plus seulement aux DVDs.
+
+\begin{description}
+
+\item [Requires Mount = {\it Yes|No}]
+ \index[sd]{Requires Mount}
+ \index[sd]{Directive!Requires Mount}
+ Cette directive doit \^etre \`a {\bf yes} pour les graveurs de DVDs, et \`a {\bf no}
+ pour tous les autres p\'eriph\'eriques (cartouches/fichiers). Elle indique si
+ le p\'eriph\'erique n\'ecessite d'\^etre mont\'e pour \^etre lu, et si un moyen particulier
+ doit \^etre employ\'e pour y \'ecrire. Si vous activez cette directive, vous devez aussi
+ d\'efinir les directives {\bf Mount Point}, {\bf Mount Command}, {\bf Unmount Command}
+ et {\bf Write Part Command}.
+
+\item [Mount Point = {\it directory}]
+ \index[sd]{Mount Point}
+ \index[sd]{Directive!Mount Point}
+ Cette directive sp\'ecifie le r\'epertoire o\`u le p\'eriph\'erique peut \^etre mont\'e.
+ (le point de montage)
+
+\item [Mount Command = {\it name-string}]
+ \index[sd]{Mount Command}
+ \index[sd]{Directive!Mount Command}
+ Cette directive sp\'ecifie la commande \`a ex\'ecuter pour monter le p\'eriph\'erique.
+ Avant l'ex\'ecution de la commande, \%a est remplac\'e par le p\'eriph\'erique de
+ stockage, et \%m par le point de montage (Mount Point).
+
+ La plupart du temps, vous le d\'efinirez ainsi :
+
+\footnotesize
+\begin{verbatim}
+ Mount Command = "/bin/mount -t iso9660 -o ro %a %m"
+\end{verbatim}
+\normalsize
+
+\item [Unmount Command = {\it name-string}]
+ \index[sd]{Unmount Command}
+ \index[sd]{Directive!Unmount Command}
+ Cette directive sp\'ecifie la commande \`a ex\'ecuter pour d\'emonter le p\'eriph\'erique.
+ Avant l'ex\'ecution de la commande, \%a est remplac\'e par le p\'eriph\'erique de
+ stockage, et \%m par le point de montage (Mount Point).
+
+ La plupart du temps, vous le d\'efinirez ainsi :
+
+\footnotesize
+\begin{verbatim}
+ Unmount Command = "/bin/umount %m"
+\end{verbatim}
+\normalsize
+
+\item [Write Part Command = {\it name-string}]
+ \index[sd]{Write Part Command}
+ \index[sd]{Directive!Write Part Command}
+ Cette directive sp\'ecifie la commande \`a ex\'ecuter pour \'ecrire une partition (NDT : Revoir cette partie, VO ci-dessous)
+ sur le p\'eriph\'erique. Avant l'ex\'ecution de la commande, \%a est remplac\'e par le p\'eriph\'erique de
+ stockage, \%m par le point de montage, \%e par 1 s'il s'agit de la premi\`ere
+ partition, 0 sinon, et \%v avec le nom de fichier de la partition courante.
+
+ Pour un DVD, vous utiliserez la plupart du temps le script fourni {\bf dvd-handler}
+ comme suit :
+
+Command that must be executed to write a part to the device. Before the
+ command is executed, \%a is replaced with the Archive Device, \%m with the
+ Mount Point, \%e is replaced with 1 if we are writing the first part,
+ and with 0 otherwise, and \%v with the current part filename.
+
+ For a DVD, you will most frequently specify the Bacula supplied {\bf
+ dvd-handler} script as follows:
+
+\footnotesize
+\begin{verbatim}
+ Write Part Command = "/path/dvd-handler %a write %e %v"
+\end{verbatim}
+\normalsize
+
+ O\`u {\bf /path} est le chemin vers votre r\'epertoire de scripts, et
+ dvd-handler est le script fourni avec Bacula. Cette commande est d\'ej\`a pr\'esente
+ quoique comment\'ee dans le fichier de configuration du Storage Daemon. Pour l'utiliser,
+ il vous suffit de supprimer le caract\`ere \#.
+
+\item [Free Space Command = {\it name-string}]
+ \index[sd]{Free Space Command}
+ \index[sd]{Directive!Free Space Command}
+ Cette directive sp\'ecifie la commande \`a ex\'ecuter pour contr\^oler l'espace disponible
+ sur le p\'eriph\'erique. Avant l'ex\'ecution de la commande, \%a est remplac\'e par le p\'eriph\'erique de
+ stockage, \%m par le point de montage, \%e par 1 s'il s'agit de la premi\`ere
+ partition, 0 sinon, et \%v avec le nom de fichier de la partition courante.
+
+ Pour un DVD, vous utiliserez la plupart du temps le script fourni {\bf dvd-handler}
+ comme suit :
+
+\footnotesize
+\begin{verbatim}
+ Free Space Command = "/path/dvd-handler %a free"
+\end{verbatim}
+\normalsize
+
+ O\`u {\bf /path} est le chemin vers votre r\'epertoire de scripts, et
+ dvd-handler est le script fourni avec Bacula. Si vous voulez
+ sp\'ecifier votre propre commande, examinez le code de dvd-handler afin de
+ voir le type de retour attendu par Bacula. Cette commande est d\'ej\`a pr\'esente
+ quoique comment\'ee dans le fichier de configuration du Storage Daemon. Pour l'utiliser,
+ il vous suffit de supprimer le caract\`ere \#.
+
+ Si vous n'utilisez pas cette directive, Bacula s'attendra \`a ce qu'il y ait
+ toujours de la place dur le p\'eriph\'erique.
+
+\end{description}
+
+%% This pulls in the Autochanger resource from another file.
+\label{AutochangerRes}
+\label{AutochangerResource1}
+\input{autochangerres}
+
+
+\section{Possibilit\'es}
+\index[general]{Possibilit\'es}
+\addcontentsline{toc}{section}{Possibilit\'es}
+
+\begin{description}
+
+\item [Label media = {\it Yes|No}]
+ \index[sd]{Label media}
+ \index[sd]{Directive!Label media}
+ Si cette directive est activ\'ee ({\bf Yes}), alors ce p\'eriph\'erique est
+ habilit\'e \`a \'etiqueter les media libres sans ordre explicite de l'op\'erateur.
+ Ceci est r\'ealis\'e selon un algorithme interne et suivant le format
+ d\'efini par l'enregistrement \ilink{Label Format}{Label} de chaque
+ ressource Pool. Si cette directive est \`a {\bf No} (valeur par d\'efaut),
+ Bacula n'\'etiquette les cartouches que sur instruction expresse de
+ l'op\'erateur (commande {\bf label} de la Console) ou lorsqu'une cartouche
+ a \'et\'e recycl\'ee. Cette fonctionnalit\'e est plus utile dans le cas de sauvegardes
+ sur disque qu'avec des cartouches.
+
+\item [Automatic mount = {\it Yes|No}]
+ \index[sd]{Automatic mount}
+ \index[sd]{Directive!Automatic mount}
+ Si cette directive est activ\'ee (c'est le cas par d\'efaut), le Storage Daemon
+ est autoris\'e \`a examiner le p\'eriph\'erique afin de d\'eterminer s'il contient
+ un volume \'etiquet\'e Bacula. Ceci est alors fait au d\'emarrage du {\it daemon},
+ et au d\'ebut de chaque job. Cette directive est particuli\`erement importante
+ si vous avez sp\'ecifi\'e {\bf Always Open = no} car elle permet \`a
+ Bacula de tenter de lire le p\'eriph\'erique avant de demander \`a l'op\'erateur
+ de monter une cartouche. Notez cependant que la cartouche doit \^etre
+ mont\'ee avant le lancement du job.
+
+\end{description}
+
+\section{La ressource Messages}
+\label{MessagesResource1}
+\index[general]{Ressource!Messages}
+\index[general]{Ressource Messages}
+\addcontentsline{toc}{section}{Resource Messages}
+
+Pour une description de la ressource Messages, veuillez consulter
+le chapitre \ilink{La ressource Messages}{_ChapterStart15} de ce
+manuel.
+
+\section{Un exemple de fichier de configuration du Storage Daemon}
+\label{SampleConfiguration}
+\index[general]{Fichier!Exemple configuration Storage Daemon}
+\index[general]{Exemple fichier configuration Storage Daemon}
+\addcontentsline{toc}{section}{Exemple fichier configuration Storage Daemon}
+
+Voici un exemple de fichier de configuration du Storage Daemon :
+
+\footnotesize
+\begin{verbatim}
+#
+# Default Bacula Storage Daemon Configuration file
+#
+# For Bacula release 1.37.2 (07 July 2005) -- gentoo 1.4.16
+#
+# You may need to change the name of your tape drive
+# on the "Archive Device" directive in the Device
+# resource. If you change the Name and/or the
+# "Media Type" in the Device resource, please ensure
+# that bacula-dir.conf has corresponding changes.
+#
+Storage { # definition of myself
+ Name = rufus-sd
+ Address = rufus
+ WorkingDirectory = "$HOME/bacula/bin/working"
+ Pid Directory = "$HOME/bacula/bin/working"
+ Maximum Concurrent Jobs = 20
+}
+#
+# List Directors who are permitted to contact Storage daemon
+#
+Director {
+ Name = rufus-dir
+ Password = "ZF9Ctf5PQoWCPkmR3s4atCB0usUPg+vWWyIo2VS5ti6k"
+}
+#
+# Restricted Director, used by tray-monitor to get the
+# status of the storage daemon
+#
+Director {
+ Name = rufus-mon
+ Password = "9usxgc307dMbe7jbD16v0PXlhD64UVasIDD0DH2WAujcDsc6"
+ Monitor = yes
+}
+#
+# Devices supported by this Storage daemon
+# To connect, the Director's bacula-dir.conf must have the
+# same Name and MediaType.
+#
+Autochanger {
+ Name = Autochanger
+ Device = Drive-1
+ Device = Drive-2
+ Changer Command = "/home/kern/bacula/bin/mtx-changer %c %o %S %a %d"
+ Changer Device = /dev/sg0
+}
+
+Device {
+ Name = Drive-1 #
+ Drive Index = 0
+ Media Type = DLT-8000
+ Archive Device = /dev/nst0
+ AutomaticMount = yes; # when device opened, read it
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+ RandomAccess = no;
+ AutoChanger = yes
+ Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
+}
+
+Device {
+ Name = Drive-2 #
+ Drive Index = 1
+ Media Type = DLT-8000
+ Archive Device = /dev/nst1
+ AutomaticMount = yes; # when device opened, read it
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+ RandomAccess = no;
+ AutoChanger = yes
+ Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
+}
+
+Device {
+ Name = "HP DLT 80"
+ Media Type = DLT8000
+ Archive Device = /dev/nst0
+ AutomaticMount = yes; # when device opened, read it
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+}
+#Device {
+# Name = SDT-7000 #
+# Media Type = DDS-2
+# Archive Device = /dev/nst0
+# AutomaticMount = yes; # when device opened, read it
+# AlwaysOpen = yes;
+# RemovableMedia = yes;
+#}
+#Device {
+# Name = Floppy
+# Media Type = Floppy
+# Archive Device = /mnt/floppy
+# RemovableMedia = yes;
+# Random Access = Yes;
+# AutomaticMount = yes; # when device opened, read it
+# AlwaysOpen = no;
+#}
+#Device {
+# Name = FileStorage
+# Media Type = File
+# Archive Device = /tmp
+# LabelMedia = yes; # lets Bacula label unlabeled media
+# Random Access = Yes;
+# AutomaticMount = yes; # when device opened, read it
+# RemovableMedia = no;
+# AlwaysOpen = no;
+#}
+#Device {
+# Name = "NEC ND-1300A"
+# Media Type = DVD
+# Archive Device = /dev/hda
+# LabelMedia = yes; # lets Bacula label unlabeled media
+# Random Access = Yes;
+# AutomaticMount = yes; # when device opened, read it
+# RemovableMedia = yes;
+# AlwaysOpen = no;
+# MaximumPartSize = 800M;
+# RequiresMount = yes;
+# MountPoint = /mnt/cdrom;
+# MountCommand = "/bin/mount -t iso9660 -o ro %a %m";
+# UnmountCommand = "/bin/umount %m";
+# SpoolDirectory = /tmp/backup;
+# WritePartCommand = "/etc/bacula/dvd-handler %a write %e %v"
+# FreeSpaceCommand = "/etc/bacula/dvd-handler %a free"
+#}
+#
+# A very old Exabyte with no end of media detection
+#
+#Device {
+# Name = "Exabyte 8mm"
+# Media Type = "8mm"
+# Archive Device = /dev/nst0
+# Hardware end of medium = No;
+# AutomaticMount = yes; # when device opened, read it
+# AlwaysOpen = Yes;
+# RemovableMedia = yes;
+#}
+#
+# Send all messages to the Director,
+# mount messages also are sent to the email address
+#
+Messages {
+ Name = Standard
+ director = rufus-dir = all
+ operator = root = mount
+}
+\end{verbatim}
+\normalsize
--- /dev/null
+\newfont{\bighead}{cmr17 at 36pt}
+\parskip 10pt
+\parindent 0pt
+
+\title{\includegraphics{\idir bacula-logo.eps} \\ \bigskip
+ \Huge{Bacula}$^{\normalsize \textregistered}$ \Huge{Bacula Miscellaneous Guide}
+ \begin{center}
+ \large{It comes in the night and sucks
+ the essence from your computers. }
+ \end{center}
+}
+
+
+\author{Kern Sibbald}
+\date{\vspace{1.0in}\today \\
+ This manual documents Bacula version \input{version} \\
+ \vspace{0.2in}
+ Copyright {\copyright} 1999-2010, Free Software Foundation Europe
+ e.V. \\
+ Bacula {\textregistered} is a registered trademark of Kern Sibbald.\\
+ \vspace{0.2in}
+ Permission is granted to copy, distribute and/or modify this document under the terms of the
+ GNU Free Documentation License, Version 1.2 published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU Free Documentation License".
+}
+
+\maketitle
--- /dev/null
+%%
+%%
+
+\chapter{DVD Volumes}
+\label{_DVDChapterStart}
+\index[general]{DVD Volumes}
+\index[general]{Writing DVDs}
+\index[general]{DVD Writing}
+\index[general]{Volumes!DVD}
+
+Bacula allows you to specify that you want to write to DVD. However,
+this feature is implemented only in version 1.37 or later.
+You may in fact write to DVD+RW, DVD+R, DVD-R, or DVD-RW
+media. The actual process used by Bacula is to first write
+the image to a spool directory, then when the Volume reaches
+a certain size or, at your option, at the end of a Job, Bacula
+will transfer the image from the spool directory to the
+DVD. The actual work of transferring the image is done
+by a script {\bf dvd-handler}, and the heart of that
+script is a program called {\bf growisofs} which allows
+creating or adding to a DVD ISO filesystem.
+
+You must have {\bf dvd+rw-tools} loaded on your system for DVD writing to
+work. Please note that the original {\bf dvd+rw-tools} package does {\bf
+NOT} work with Bacula. You must apply a patch which can be found in the
+{\bf patches} directory of Bacula sources with the name
+{\bf dvd+rw-tools-5.21.4.10.8.bacula.patch} for version 5.21 of the tools,
+or patch {bf dvd+rw-tools-6.1.bacula.patch} if you have version 6.1
+on your system. Unfortunately, this requires you to build the dvd\_rw-tools
+from source.
+
+Note, some Linux distros such as Debian dvd+rw-tools-7.0-4 package already
+have the patch applied, so please check.
+
+The fact that Bacula cannot use the OS to write directly
+to the DVD makes the whole process a bit more error prone than
+writing to a disk or a tape, but nevertheless, it does work if you
+use some care to set it up properly. However, at the current time
+(version 1.39.30 -- 12 December 2006) we still consider this code to be
+BETA quality. As a consequence, please do careful testing before relying
+on DVD backups in production.
+
+The remainder of this chapter explains the various directives that you can
+use to control the DVD writing.
+
+\label{DVDdirectives}
+\section{DVD Specific SD Directives}
+\index[general]{Directives!DVD}
+\index[general]{DVD Specific SD Directives }
+
+The following directives are added to the Storage daemon's
+Device resource.
+
+\begin{description}
+
+\item [Requires Mount = {\it Yes|No}]
+ \index[general]{Requires Mount }
+ You must set this directive to {\bf yes} for DVD-writers, and to {\bf no} for
+ all other devices (tapes/files). This directive indicates if the device
+ requires to be mounted using the {\bf Mount Command}.
+ To be able to write a DVD, the following directives must also be
+ defined: {\bf Mount Point}, {\bf Mount Command}, {\bf Unmount Command} and
+ {\bf Write Part Command}.
+
+\item [Mount Point = {\it directory}]
+ \index[general]{Mount Point}
+ Directory where the device can be mounted.
+
+\item [Mount Command = {\it name-string}]
+ \index[general]{Mount Command}
+ Command that must be executed to mount the device. Although the
+ device is written directly, the mount command is necessary in
+ order to determine the free space left on the DVD. Before the command is
+ executed, \%a is replaced with the Archive Device, and \%m with the Mount
+ Point.
+
+ Most frequently, you will define it as follows:
+
+\footnotesize
+\begin{verbatim}
+ Mount Command = "/bin/mount -t iso9660 -o ro %a %m"
+\end{verbatim}
+\normalsize
+
+However, if you have defined a mount point in /etc/fstab, you might be
+able to use a mount command such as:
+
+\footnotesize
+\begin{verbatim}
+ Mount Command = "/bin/mount /media/dvd"
+\end{verbatim}
+\normalsize
+
+
+\item [Unmount Command = {\it name-string}]
+ \index[general]{Unmount Command}
+ Command that must be executed to unmount the device. Before the command is
+ executed, \%a is replaced with the Archive Device, and \%m with the Mount
+ Point.
+
+ Most frequently, you will define it as follows:
+
+\footnotesize
+\begin{verbatim}
+ Unmount Command = "/bin/umount %m"
+\end{verbatim}
+\normalsize
+
+\item [Write Part Command = {\it name-string}]
+ \index[general]{Write Part Command }
+ Command that must be executed to write a part to the device. Before the
+ command is executed, \%a is replaced with the Archive Device, \%m with the
+ Mount Point, \%e is replaced with 1 if we are writing the first part,
+ and with 0 otherwise, and \%v with the current part filename.
+
+ For a DVD, you will most frequently specify the Bacula supplied {\bf
+ dvd-handler} script as follows:
+
+\footnotesize
+\begin{verbatim}
+ Write Part Command = "/path/dvd-handler %a write %e %v"
+\end{verbatim}
+\normalsize
+
+ Where {\bf /path} is the path to your scripts install directory, and
+ dvd-handler is the Bacula supplied script file.
+ This command will already be present, but commented out,
+ in the default bacula-sd.conf file. To use it, simply remove
+ the comment (\#) symbol.
+
+
+\item [Free Space Command = {\it name-string}]
+ \index[general]{Free Space Command }
+ Command that must be executed to check how much free space is left on the
+ device. Before the command is executed,\%a is replaced with the Archive
+ Device.
+
+ For a DVD, you will most frequently specify the Bacula supplied {\bf
+ dvd-handler} script as follows:
+
+\footnotesize
+\begin{verbatim}
+ Free Space Command = "/path/dvd-handler %a free"
+\end{verbatim}
+\normalsize
+
+ Where {\bf /path} is the path to your scripts install directory, and
+ dvd-handler is the Bacula supplied script file.
+ If you want to specify your own command, please look at the code in
+ dvd-handler to see what output Bacula expects from this command.
+ This command will already be present, but commented out,
+ in the default bacula-sd.conf file. To use it, simply remove
+ the comment (\#) symbol.
+
+ If you do not set it, Bacula will expect there is always free space on the
+ device.
+
+\end{description}
+
+In addition to the directives specified above, you must also
+specify the other standard Device resource directives. Please see the
+sample DVD Device resource in the default bacula-sd.conf file. Be sure
+to specify the raw device name for {\bf Archive Device}. It should
+be a name such as {\bf /dev/cdrom} or {\bf /media/cdrecorder} or
+{\bf /dev/dvd} depending on your system. It will not be a name such
+as {\bf /mnt/cdrom}.
+
+Finally, for {\bf growisofs} to work, it must be able to lock
+a certain amount of memory in RAM. If you have restrictions on
+this function, you may have failures. Under {\bf bash}, you can
+set this with the following command:
+
+\footnotesize
+\begin{verbatim}
+ulimit -l unlimited
+\end{verbatim}
+\normalsize
+
+\section{Edit Codes for DVD Directives}
+\index[general]{Directives!DVD Edit Codes}
+\index[general]{Edit Codes for DVD Directives }
+
+Before submitting the {\bf Mount Command}, {\bf Unmount Command},
+{\bf Write Part Command}, or {\bf Free Space Command} directives
+to the operating system, Bacula performs character substitution of the
+following characters:
+
+\footnotesize
+\begin{verbatim}
+ %% = %
+ %a = Archive device name
+ %e = erase (set if cannot mount and first part)
+ %n = part number
+ %m = mount point
+ %v = last part name (i.e. filename)
+\end{verbatim}
+\normalsize
+
+
+
+\section{DVD Specific Director Directives}
+\index[general]{Directives!DVD}
+\index[general]{DVD Specific Director Directives }
+
+The following directives are added to the Director's Job resource.
+
+\label{WritePartAfterJob}
+\begin{description}
+\item [Write Part After Job = \lt{}yes|no\gt{}]
+ \index[general]{Write Part After Job }
+ If this directive is set to {\bf yes} (default {\bf no}), the
+ Volume written to a temporary spool file for the current Job will
+ be written to the DVD as a new part file
+ will be created after the job is finished.
+
+ It should be set to {\bf yes} when writing to devices that require a mount
+ (for example DVD), so you are sure that the current part, containing
+ this job's data, is written to the device, and that no data is left in
+ the temporary file on the hard disk. However, on some media, like DVD+R
+ and DVD-R, a lot of space (about 10Mb) is lost everytime a part is
+ written. So, if you run several jobs each after another, you could set
+ this directive to {\bf no} for all jobs, except the last one, to avoid
+ wasting too much space, but to ensure that the data is written to the
+ medium when all jobs are finished.
+
+ This directive is ignored for devices other than DVDs.
+\end{description}
+
+
+
+\label{DVDpoints}
+\section{Other Points}
+\index[general]{Points!Other }
+\index[general]{Other Points }
+
+\begin{itemize}
+\item Please be sure that you have any automatic DVD mounting
+ disabled before running Bacula -- this includes auto mounting
+ in /etc/fstab, hotplug, ... If the DVD is automatically
+ mounted by the OS, it will cause problems when Bacula tries
+ to mount/unmount the DVD.
+\item Please be sure that you the directive {\bf Write Part After Job}
+ set to {\bf yes}, otherwise the last part of the data to be
+ written will be left in the DVD spool file and not written to
+ the DVD. The DVD will then be unreadable until this last part
+ is written. If you have a series of jobs that are run one at
+ a time, you can turn this off until the last job is run.
+\item The current code is not designed to have multiple simultaneous
+ jobs writing to the DVD. As a consequence, please ensure that
+ only one DVD backup job runs at any time.
+\item Writing and reading of DVD+RW seems to work quite reliably
+ provided you are using the patched dvd+rw-mediainfo programs.
+ On the other hand, we do not have enough information to ensure
+ that DVD-RW or other forms of DVDs work correctly.
+\item DVD+RW supports only about 1000 overwrites. Every time you
+ mount the filesystem read/write will count as one write. This can
+ add up quickly, so it is best to mount your DVD+RW filesystem read-only.
+ Bacula does not need the DVD to be mounted read-write, since it uses
+ the raw device for writing.
+\item Reformatting DVD+RW 10-20 times can apparently make the medium
+ unusable. Normally you should not have to format or reformat
+ DVD+RW media. If it is necessary, current versions of growisofs will
+ do so automatically.
+\item We have had several problems writing to DVD-RWs (this does NOT
+ concern DVD+RW), because these media have two writing-modes: {\bf
+ Incremental Sequential} and {\bf Restricted Overwrite}. Depending on
+ your device and the media you use, one of these modes may not work
+ correctly (e.g. {\bf Incremental Sequential} does not work with my NEC
+ DVD-writer and Verbatim DVD-RW).
+
+ To retrieve the current mode of a DVD-RW, run:
+\begin{verbatim}
+ dvd+rw-mediainfo /dev/xxx
+\end{verbatim}
+ where you replace xxx with your DVD device name.
+
+ {\bf Mounted Media} line should give you the information.
+
+ To set the device to {\bf Restricted Overwrite} mode, run:
+\begin{verbatim}
+ dvd+rw-format /dev/xxx
+\end{verbatim}
+ If you want to set it back to the default {\bf Incremental Sequential} mode, run:
+\begin{verbatim}
+ dvd+rw-format -blank /dev/xxx
+\end{verbatim}
+
+\item Bacula only accepts to write to blank DVDs. To quickly blank a DVD+/-RW, run
+ this command:
+\begin{verbatim}
+ dd if=/dev/zero bs=1024 count=512 | growisofs -Z /dev/xxx=/dev/fd/0
+\end{verbatim}
+ Then, try to mount the device, if it cannot be mounted, it will be considered
+ as blank by Bacula, if it can be mounted, try a full blank (see below).
+
+\item If you wish to blank completely a DVD+/-RW, use the following:
+\begin{verbatim}
+ growisofs -Z /dev/xxx=/dev/zero
+\end{verbatim}
+ where you replace xxx with your DVD device name. However, note that this
+ blanks the whole DVD, which takes quite a long time (16 minutes on mine).
+\item DVD+RW and DVD-RW support only about 1000 overwrites (i.e. don't use the
+same medium for years if you don't want to have problems...).
+
+To write to the DVD the first time use:
+\begin{verbatim}
+ growisofs -Z /dev/xxx filename
+\end{verbatim}
+
+To add additional files (more parts use):
+
+\begin{verbatim}
+ growisofs -M /dev/xxx filename
+\end{verbatim}
+
+The option {\bf -use-the-force-luke=4gms} was added in growisofs 5.20 to
+override growisofs' behavior of always checking for the 4GB limit.
+Normally, this option is recommended for all Linux 2.6.8 kernels or
+greater, since these newer kernels can handle writing more than 4GB.
+See below for more details on this subject.
+
+\item For more information about DVD writing, please look at the
+\elink{dvd+rw-tools homepage}{http://fy.chalmers.se/~appro/linux/DVD+RW/}.
+
+\item According to bug \#912, bscan cannot read multi-volume DVDs. This is
+on our TODO list, but unless someone submits a patch it is not likely to be
+done any time in the near future. (9 Sept 2007).
+
+\end{itemize}
--- /dev/null
+% TODO: maybe get rid of centering
+
+\chapter{GNU Free Documentation License}
+\index[general]{GNU Free Documentation License}
+\index[general]{License!GNU Free Documentation}
+
+\label{label_fdl}
+
+ \begin{center}
+
+ Version 1.2, November 2002
+
+
+ Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
+
+ \bigskip
+
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ \bigskip
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+\end{center}
+
+
+\begin{center}
+{\bf\large Preamble}
+\end{center}
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+\begin{center}
+{\Large\bf 1. APPLICABILITY AND DEFINITIONS}
+\end{center}
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The \textbf{"Document"}, below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as \textbf{"you"}. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A \textbf{"Modified Version"} of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The \textbf{"Cover Texts"} are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The \textbf{"Title Page"} means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as \textbf{"Acknowledgements"},
+\textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
+To \textbf{"Preserve the Title"}
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+\begin{center}
+{\Large\bf 2. VERBATIM COPYING}
+\end{center}
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+\begin{center}
+{\Large\bf 3. COPYING IN QUANTITY}
+\end{center}
+
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+\begin{center}
+{\Large\bf 4. MODIFICATIONS}
+\end{center}
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+\begin{itemize}
+\item[A.]
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+
+\item[B.]
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+
+\item[C.]
+ State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+\item[D.]
+ Preserve all the copyright notices of the Document.
+
+\item[E.]
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+\item[F.]
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+
+\item[G.]
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+
+\item[H.]
+ Include an unaltered copy of this License.
+
+\item[I.]
+ Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+
+\item[J.]
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+
+\item[K.]
+ For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+
+\item[L.]
+ Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+
+\item[M.]
+ Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+\item[N.]
+ Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+
+\item[O.]
+ Preserve any Warranty Disclaimers.
+\end{itemize}
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+\begin{center}
+{\Large\bf 5. COMBINING DOCUMENTS}
+\end{center}
+
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+\begin{center}
+{\Large\bf 6. COLLECTIONS OF DOCUMENTS}
+\end{center}
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+\begin{center}
+{\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
+\end{center}
+
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+\begin{center}
+{\Large\bf 8. TRANSLATION}
+\end{center}
+
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+\begin{center}
+{\Large\bf 9. TERMINATION}
+\end{center}
+
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+\begin{center}
+{\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE}
+\end{center}
+
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+\begin{center}
+{\Large\bf ADDENDUM: How to use this License for your documents}
+% TODO: this is too long for table of contents
+\end{center}
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+\bigskip
+\begin{quote}
+ Copyright \copyright YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+\end{quote}
+\bigskip
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+\bigskip
+\begin{quote}
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+\end{quote}
+\bigskip
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+%---------------------------------------------------------------------
--- /dev/null
+%%
+%%
+
+\section*{GNU General Public License}
+\label{GplChapter}
+\index[general]{GNU General Public License }
+\index[general]{License!GNU General Public }
+
+\elink{image of a Philosophical
+GNU}{http://www.gnu.org/graphics/philosophicalgnu.html}
+
+\begin{itemize}
+\item
+ \elink{What to do if you see a possible GPL
+ violation}{http://www.gnu.org/copyleft/gpl-violation.html}
+\item
+ \elink{Translations of the
+ GPL}{http://www.gnu.org/copyleft/copyleft.html\#translations}
+\end{itemize}
+
+
+\section{Table of Contents}
+\index[general]{Table of Contents }
+\index[general]{Contents!Table of }
+
+\begin{itemize}
+\item
+ \label{TOC1}
+ \ilink{GNU GENERAL PUBLIC LICENSE}{SEC1}
+
+\begin{itemize}
+\item
+ \label{TOC2}
+ \ilink{Preamble}{SEC2}
+\item
+ \label{TOC3}
+ \ilink{TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+MODIFICATION}{SEC3}
+\item
+ \label{TOC4}
+ \ilink{How to Apply These Terms to Your New Programs}{SEC4}
+\end{itemize}
+
+\end{itemize}
+
+
+\section{GNU GENERAL PUBLIC LICENSE}
+\label{SEC1}
+\index[general]{GNU GENERAL PUBLIC LICENSE }
+\index[general]{LICENSE!GNU GENERAL PUBLIC }
+
+Version 2, June 1991
+
+\footnotesize
+\begin{verbatim}
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+\end{verbatim}
+\normalsize
+
+\section{Preamble}
+\label{SEC2}
+\index[general]{Preamble }
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software\verb:--:to make sure the
+software is free for all its users. This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it. (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it
+to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have. You must
+make sure that they, too, receive or can get the source code. And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+\section{TERMS AND CONDITIONS}
+\label{SEC3}
+\index[general]{CONDITIONS!TERMS AND }
+\index[general]{TERMS AND CONDITIONS }
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+{\bf 0.} This License applies to any program or other work which contains a
+notice placed by the copyright holder saying it may be distributed under the
+terms of this General Public License. The "Program", below, refers to any
+such program or work, and a "work based on the Program" means either the
+Program or any derivative work under copyright law: that is to say, a work
+containing the Program or a portion of it, either verbatim or with
+modifications and/or translated into another language. (Hereinafter,
+translation is included without limitation in the term "modification".) Each
+licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running the Program is
+not restricted, and the output from the Program is covered only if its
+contents constitute a work based on the Program (independent of having been
+made by running the Program). Whether that is true depends on what the Program
+does.
+
+{\bf 1.} You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+{\bf 2.} You may modify your copy or copies of the Program or any portion of
+it, thus forming a work based on the Program, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+\begin{itemize}
+\item {\bf a)} You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+\item {\bf b)} You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program or any part
+ thereof, to be licensed as a whole at no charge to all third parties under
+ the terms of this License.
+
+\item {\bf c)} If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such interactive use in
+ the most ordinary way, to print or display an announcement including an
+ appropriate copyright notice and a notice that there is no warranty (or else,
+ saying that you provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to view a copy of
+ this License. (Exception: if the Program itself is interactive but does not
+ normally print such an announcement, your work based on the Program is not
+ required to print an announcement.)
+\end{itemize}
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Program, the distribution of the whole must be on
+the terms of this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with
+the Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+{\bf 3.} You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+\begin{itemize}
+\item {\bf a)} Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections 1 and 2
+ above on a medium customarily used for software interchange; or,
+
+\item {\bf b)} Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your cost of
+ physically performing source distribution, a complete machine-readable copy of
+ the corresponding source code, to be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+\item {\bf c)} Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is allowed only
+ for noncommercial distribution and only if you received the program in object
+ code or executable form with such an offer, in accord with Subsection b
+ above.)
+\end{itemize}
+
+The source code for a work means the preferred form of the work for making
+modifications to it. For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and
+installation of the executable. However, as a special exception, the source
+code distributed need not include anything that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel, and
+so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to
+copy from a designated place, then offering equivalent access to copy the
+source code from the same place counts as distribution of the source code,
+even though third parties are not compelled to copy the source along with the
+object code.
+
+{\bf 4.} You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense or distribute the Program is void, and will
+automatically terminate your rights under this License. However, parties who
+have received copies, or rights, from you under this License will not have
+their licenses terminated so long as such parties remain in full compliance.
+
+{\bf 5.} You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or distribute
+the Program or its derivative works. These actions are prohibited by law if
+you do not accept this License. Therefore, by modifying or distributing the
+Program (or any work based on the Program), you indicate your acceptance of
+this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Program or works based on it.
+
+{\bf 6.} Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these terms and
+conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties to this License.
+
+{\bf 7.} If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or otherwise)
+that contradict the conditions of this License, they do not excuse you from
+the conditions of this License. If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices. Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+{\bf 8.} If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded. In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+{\bf 9.} The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will be
+similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of this License,
+you may choose any version ever published by the Free Software Foundation.
+
+{\bf 10.} If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author to
+ask for permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make
+exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+{\bf NO WARRANTY}
+
+{\bf 11.} BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE
+THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+{\bf 12.} IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+\section{How to Apply These Terms to Your New Programs}
+\label{SEC4}
+\index[general]{Programs!How to Apply These Terms to Your New }
+\index[general]{How to Apply These Terms to Your New Programs }
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+\footnotesize
+\begin{verbatim}
+{\em one line to give the program's name and an idea of what it does.}
+Copyright (C) {\em yyyy} {\em name of author}
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301 USA
+\end{verbatim}
+\normalsize
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+\footnotesize
+\begin{verbatim}
+Gnomovision version 69, Copyright (C) {\em year} {\em name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'. This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c'
+for details.
+\end{verbatim}
+\normalsize
+
+The hypothetical commands {\tt `show w'} and {\tt `show c'} should show the
+appropriate parts of the General Public License. Of course, the commands you
+use may be called something other than {\tt `show w'} and {\tt `show c'}; they
+could even be mouse-clicks or menu items\verb:--:whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+\footnotesize
+\begin{verbatim}
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written
+by James Hacker.
+{\em signature of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
+\end{verbatim}
+\normalsize
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+Return to
+\elink{GNU's home page}{http://www.gnu.org/home.html}.
+
+FSF \& GNU inquiries \& questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}. Other
+\elink{ways to contact}{http://www.gnu.org/home.html\#ContactInfo} the FSF.
+
+Comments on these web pages to
+\elink{webmasters@www.gnu.org}{mailto:webmasters@www.gnu.org}, send other
+questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}.
+
+Copyright notice above.
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA
+
+Updated: 3 Jan 2000 rms
--- /dev/null
+%%
+%%
+
+\chapter{The internal database is not supported, please do not
+use it.}
+\label{InternalDbChapter}
+\index[general]{Use it!The internal database is not supported please
+do not }
+\index[general]{The internal database is not supported, please do not
+use it. }
+
+\section{Internal Bacula Database}
+\index[general]{Internal Bacula Database }
+\index[general]{Database!Internal Bacula }
+
+Previously it was intended to be used primarily by Bacula developers for
+testing; although SQLite is also a good choice for this. We do not recommend
+its use in general.
+
+This database is simplistic in that it consists entirely of Bacula's internal
+structures appended sequentially to a file. Consequently, it is in most cases
+inappropriate for sites with many clients or systems with large numbers of
+files, or long-term production environments.
+
+Below, you will find a table comparing the features available with SQLite and
+MySQL and with the internal Bacula database. At the current time, you cannot
+dynamically switch from one to the other, but must rebuild the Bacula source
+code. If you wish to experiment with both, it is possible to build both
+versions of Bacula and install them into separate directories.
+
+\addcontentsline{lot}{table}{SQLite vs MySQL Database Comparison}
+\begin{longtable}{|l|l|l|}
+ \hline
+\multicolumn{1}{|c| }{\bf Feature } & \multicolumn{1}{c| }{\bf SQLite or MySQL
+ } & \multicolumn{1}{c| }{\bf Bacula } \\
+ \hline
+{Job Record } & {Yes } & {Yes } \\
+ \hline
+{Media Record } & {Yes } & {Yes } \\
+ \hline
+{FileName Record } & {Yes } & {No } \\
+ \hline
+{File Record } & {Yes } & {No } \\
+ \hline
+{FileSet Record } & {Yes } & {Yes } \\
+ \hline
+{Pool Record } & {Yes } & {Yes } \\
+ \hline
+{Client Record } & {Yes } & {Yes } \\
+ \hline
+{JobMedia Record } & {Yes } & {Yes } \\
+ \hline
+{List Job Records } & {Yes } & {Yes } \\
+ \hline
+{List Media Records } & {Yes } & {Yes } \\
+ \hline
+{List Pool Records } & {Yes } & {Yes } \\
+ \hline
+{List JobMedia Records } & {Yes } & {Yes } \\
+ \hline
+{Delete Pool Record } & {Yes } & {Yes } \\
+ \hline
+{Delete Media Record } & {Yes } & {Yes } \\
+ \hline
+{Update Pool Record } & {Yes } & {Yes } \\
+ \hline
+{Implement Verify } & {Yes } & {No } \\
+ \hline
+{MD5 Signatures } & {Yes } & {No }
+\\ \hline
+
+\end{longtable}
+
+In addition, since there is no SQL available, the Console commands: {\bf
+sqlquery}, {\bf query}, {\bf retention}, and any other command that directly
+uses SQL are not available with the Internal database.
--- /dev/null
+%%
+%%
+
+\section*{GNU Lesser General Public License}
+\label{LesserChapter}
+\index[general]{GNU Lesser General Public License }
+\index[general]{License!GNU Lesser General Public }
+
+\elink{image of a Philosophical GNU}
+{http://www.gnu.org/graphics/philosophicalgnu.html} [
+\elink{English}{http://www.gnu.org/copyleft/lesser.html} |
+\elink{Japanese}{http://www.gnu.org/copyleft/lesser.ja.html} ]
+
+\begin{itemize}
+\item
+ \elink{Why you shouldn't use the Lesser GPL for your next
+ library}{http://www.gnu.org/philosophy/why-not-lgpl.html}
+\item
+ \elink{What to do if you see a possible LGPL
+ violation}{http://www.gnu.org/copyleft/gpl-violation.html}
+\item
+ \elink{Translations of the LGPL}
+{http://www.gnu.org/copyleft/copyleft.html\#translationsLGPL}
+\item The GNU Lesser General Public License as a
+ \elink{text file}{http://www.gnu.org/copyleft/lesser.txt}
+\item The GNU Lesser General Public License as a
+ \elink{Texinfo}{http://www.gnu.org/copyleft/lesser.texi} file
+ \end{itemize}
+
+
+This GNU Lesser General Public License counts as the successor of the GNU
+Library General Public License. For an explanation of why this change was
+necessary, read the
+\elink{Why you shouldn't use the Lesser GPL for your next
+library}{http://www.gnu.org/philosophy/why-not-lgpl.html} article.
+
+\section{Table of Contents}
+\index[general]{Table of Contents }
+\index[general]{Contents!Table of }
+
+\begin{itemize}
+\item
+ \label{TOC12}
+ \ilink{GNU LESSER GENERAL PUBLIC LICENSE}{SEC12}
+
+\begin{itemize}
+\item
+ \label{TOC23}
+ \ilink{Preamble}{SEC23}
+\item
+ \label{TOC34}
+ \ilink{TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+MODIFICATION}{SEC34}
+\item
+ \label{TOC45}
+ \ilink{How to Apply These Terms to Your New Libraries}{SEC45}
+\end{itemize}
+
+\end{itemize}
+
+
+\section{GNU LESSER GENERAL PUBLIC LICENSE}
+\label{SEC12}
+\index[general]{LICENSE!GNU LESSER GENERAL PUBLIC }
+\index[general]{GNU LESSER GENERAL PUBLIC LICENSE }
+
+Version 2.1, February 1999
+
+\footnotesize
+\begin{verbatim}
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+\end{verbatim}
+\normalsize
+
+\section{Preamble}
+\label{SEC23}
+\index[general]{Preamble }
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software\verb:--:to make sure the
+software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially
+designated software packages\verb:--:typically libraries\verb:--:of the Free Software
+Foundation and other authors who decide to use it. You can use it too, but we
+suggest you first think carefully about whether this license or the ordinary
+General Public License is the better strategy to use in any particular case,
+based on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price.
+Our General Public Licenses are designed to make sure that you have the
+freedom to distribute copies of free software (and charge for this service if
+you wish); that you receive source code or can get it if you want it; that you
+can change the software and use pieces of it in new free programs; and that
+you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors
+to deny you these rights or to ask you to surrender these rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a
+fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+other code with the library, you must provide complete object files to the
+recipients, so that they can relink them with the library after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library,
+and (2) we offer you this license, which gives you legal permission to copy,
+distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no
+warranty for the free library. Also, if the library is modified by someone
+else and passed on, the recipients should know that what they have is not the
+original version, so that the original author's reputation will not be
+affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free
+program. We wish to make sure that a company cannot effectively restrict the
+users of a free program by obtaining a restrictive license from a patent
+holder. Therefore, we insist that any patent license obtained for a version of
+the library must be consistent with the full freedom of use specified in this
+license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License. This license, the GNU Lesser General Public License,
+applies to certain designated libraries, and is quite different from the
+ordinary General Public License. We use this license for certain libraries in
+order to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared
+library, the combination of the two is legally speaking a combined work, a
+derivative of the original library. The ordinary General Public License
+therefore permits such linking only if the entire combination fits its
+criteria of freedom. The Lesser General Public License permits more lax
+criteria for linking other code with the library.
+
+We call this license the "Lesser" General Public License because it does
+Less to protect the user's freedom than the ordinary General Public License.
+It also provides other free software developers Less of an advantage over
+competing non-free programs. These disadvantages are the reason we use the
+ordinary General Public License for many libraries. However, the Lesser
+license provides advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the
+widest possible use of a certain library, so that it becomes a de-facto
+standard. To achieve this, non-free programs must be allowed to use the
+library. A more frequent case is that a free library does the same job as
+widely used non-free libraries. In this case, there is little to gain by
+limiting the free library to free software only, so we use the Lesser General
+Public License.
+
+In other cases, permission to use a particular library in non-free programs
+enables a greater number of people to use a large body of free software. For
+example, permission to use the GNU C Library in non-free programs enables many
+more people to use the whole GNU operating system, as well as its variant, the
+GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users'
+freedom, it does ensure that the user of a program that is linked with the
+Library has the freedom and the wherewithal to run that program using a
+modified version of the Library.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code
+derived from the library, whereas the latter must be combined with the library
+in order to run.
+
+\section{TERMS AND CONDITIONS}
+\label{SEC34}
+\index[general]{CONDITIONS!TERMS AND }
+\index[general]{TERMS AND CONDITIONS }
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+{\bf 0.} This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or other
+authorized party saying it may be distributed under the terms of this Lesser
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so
+as to be conveniently linked with application programs (which use some of
+those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means
+either the Library or any derivative work under copyright law: that is to say,
+a work containing the Library or a portion of it, either verbatim or with
+modifications and/or translated straightforwardly into another language.
+(Hereinafter, translation is included without limitation in the term
+"modification".)
+
+"Source code" for a work means the preferred form of the work for making
+modifications to it. For a library, complete source code means all the source
+code for all modules it contains, plus any associated interface definition
+files, plus the scripts used to control compilation and installation of the
+library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+{\bf 1.} You may copy and distribute verbatim copies of the Library's complete
+source code as you receive it, in any medium, provided that you conspicuously
+and appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and distribute a copy of this License
+along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+{\bf 2.} You may modify your copy or copies of the Library or any portion of
+it, thus forming a work based on the Library, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+\begin{itemize}
+\item {\bf a)} The modified work must itself be a software library.
+\item {\bf b)} You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+\item {\bf c)} You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+\item {\bf d)} If a facility in the modified Library refers to a function or
+ a table of data to be supplied by an application program that uses the
+ facility, other than as an argument passed when the facility is invoked, then
+you must make a good faith effort to ensure that, in the event an application
+does not supply such function or table, the facility still operates, and
+performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore,
+Subsection 2d requires that any application-supplied function or table used
+by this function must be optional: if the application does not supply it, the
+square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Library, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend to
+the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+\end{itemize}
+
+{\bf 3.} You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do this,
+you must alter all the notices that refer to this License, so that they refer
+to the ordinary GNU General Public License, version 2, instead of to this
+License. (If a newer version than version 2 of the ordinary GNU General Public
+License has appeared, then you can specify that version instead if you wish.)
+Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so
+the ordinary GNU General Public License applies to all subsequent copies and
+derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+{\bf 4.} You may copy and distribute the Library (or a portion or derivative
+of it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete
+corresponding machine-readable source code, which must be distributed under
+the terms of Sections 1 and 2 above on a medium customarily used for software
+interchange.
+
+If distribution of object code is made by offering access to copy from a
+designated place, then offering equivalent access to copy the source code from
+the same place satisfies the requirement to distribute the source code, even
+though third parties are not compelled to copy the source along with the
+object code.
+
+{\bf 5.} A program that contains no derivative of any portion of the Library,
+but is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that is
+part of the Library, the object code for the work may be a derivative work of
+the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not
+precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the
+object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+{\bf 6.} As an exception to the Sections above, you may also combine or link a
+"work that uses the Library" with the Library to produce a work containing
+portions of the Library, and distribute that work under terms of your choice,
+provided that the terms permit modification of the work for the customer's own
+use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is
+used in it and that the Library and its use are covered by this License. You
+must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+\begin{itemize}
+\item {\bf a)} Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever changes were
+ used in the work (which must be distributed under Sections 1 and 2 above);
+and, if the work is an executable linked with the Library, with the complete
+machine-readable "work that uses the Library", as object code and/or source
+code, so that the user can modify the Library and then relink to produce a
+modified executable containing the modified Library. (It is understood that
+the user who changes the contents of definitions files in the Library will
+not necessarily be able to recompile the application to use the modified
+definitions.)
+\item {\bf b)} Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a copy of the
+ library already present on the user's computer system, rather than copying
+library functions into the executable, and (2) will operate properly with a
+modified version of the library, if the user installs one, as long as the
+modified version is interface-compatible with the version that the work was
+made with.
+\item {\bf c)} Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in Subsection 6a,
+ above, for a charge no more than the cost of performing this distribution.
+\item {\bf d)} If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above specified
+ materials from the same place.
+\item {\bf e)} Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+ \end{itemize}
+
+For an executable, the required form of the "work that uses the Library"
+must include any data and utility programs needed for reproducing the
+executable from it. However, as a special exception, the materials to be
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating
+system. Such a contradiction means you cannot use both them and the Library
+together in an executable that you distribute.
+
+{\bf 7.} You may place library facilities that are a work based on the Library
+side-by-side in a single library together with other library facilities not
+covered by this License, and distribute such a combined library, provided that
+the separate distribution of the work based on the Library and of the other
+library facilities is otherwise permitted, and provided that you do these two
+things:
+
+\begin{itemize}
+\item {\bf a)} Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library facilities. This must
+ be distributed under the terms of the Sections above.
+\item {\bf b)} Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining where to find
+ the accompanying uncombined form of the same work.
+\end{itemize}
+
+{\bf 8.} You may not copy, modify, sublicense, link with, or distribute the
+Library except as expressly provided under this License. Any attempt otherwise
+to copy, modify, sublicense, link with, or distribute the Library is void, and
+will automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not have
+their licenses terminated so long as such parties remain in full compliance.
+
+{\bf 9.} You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or distribute
+the Library or its derivative works. These actions are prohibited by law if
+you do not accept this License. Therefore, by modifying or distributing the
+Library (or any work based on the Library), you indicate your acceptance of
+this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Library or works based on it.
+
+{\bf 10.} Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the original
+licensor to copy, distribute, link with or modify the Library subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein. You are not responsible for
+enforcing compliance by third parties with this License.
+
+{\bf 11.} If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or otherwise)
+that contradict the conditions of this License, they do not excuse you from
+the conditions of this License. If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Library at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Library by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply, and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system which is implemented by public license practices. Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+{\bf 12.} If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Library under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded. In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+{\bf 13.} The Free Software Foundation may publish revised and/or new versions
+of the Lesser General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software
+Foundation. If the Library does not specify a license version number, you may
+choose any version ever published by the Free Software Foundation.
+
+{\bf 14.} If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these, write to
+the author to ask for permission. For software which is copyrighted by the
+Free Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+{\bf NO WARRANTY}
+
+{\bf 15.} BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE
+THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+{\bf 16.} IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+\section{How to Apply These Terms to Your New Libraries}
+\label{SEC45}
+\index[general]{Libraries!How to Apply These Terms to Your New }
+\index[general]{How to Apply These Terms to Your New Libraries }
+
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+\footnotesize
+\begin{verbatim}
+{\it one line to give the library's name and an idea of what it does.}
+Copyright (C) {\it year} {\it name of author}
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+\end{verbatim}
+\normalsize
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+\footnotesize
+\begin{verbatim}
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library "Frob" (a library for tweaking knobs) written
+by James Random Hacker.
+{\it signature of Ty Coon}, 1 April 1990
+Ty Coon, President of Vice
+\end{verbatim}
+\normalsize
+
+That's all there is to it!
+Return to
+\elink{GNU's home page}{http://www.gnu.org/home.html}.
+
+FSF \& GNU inquiries \& questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}. Other
+\elink{ways to contact}{http://www.gnu.org/home.html\#ContactInfo} the FSF.
+
+Comments on these web pages to
+\elink{webmasters@www.gnu.org}{mailto:webmasters@www.gnu.org}, send other
+questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}.
+
+Copyright notice above.
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA
+USA
+
+Updated: 27 Nov 2000 paulv
--- /dev/null
+%%
+%%
+
+\chapter{Bacula Copyright, Trademark, and Licenses}
+\label{LicenseChapter}
+\index[general]{Licenses!Bacula Copyright Trademark}
+\index[general]{Bacula Copyright, Trademark, and Licenses}
+
+There are a number of different licenses that are used in Bacula.
+If you have a printed copy of this manual, the details of each of
+the licenses referred to in this chapter can be found in the
+online version of the manual at
+\elink{http://www.bacula.org}{http://www.bacula.org}.
+
+\section{FDL}
+\index[general]{FDL }
+
+The GNU Free Documentation License (FDL) is used for this manual,
+which is a free and open license. This means that you may freely
+reproduce it and even make changes to it. However, rather than
+distribute your own version of this manual, we would much prefer
+if you would send any corrections or changes to the Bacula project.
+
+The most recent version of the manual can always be found online
+at \elink{http://www.bacula.org}{http://www.bacula.org}.
+
+\section{GPL}
+\index[general]{GPL }
+
+The vast bulk of the source code is released under the
+\ilink{GNU General Public License version 2.}{GplChapter}.
+
+Most of this code is copyrighted: Copyright \copyright 2000-2009
+Free Software Foundation Europe e.V.
+
+Portions may be copyrighted by other people. These files are released
+under different licenses which are compatible with the Bacula GPLv2 license.
+
+\section{LGPL}
+\index[general]{LGPL }
+
+Some of the Bacula library source code is released under the
+\ilink{GNU Lesser General Public License.}{LesserChapter} This
+permits third parties to use these parts of our code in their proprietary
+programs to interface to Bacula.
+
+\section{Public Domain}
+\index[general]{Domain!Public }
+\index[general]{Public Domain }
+
+Some of the Bacula code, or code that Bacula references, has been released
+to the public domain. E.g. md5.c, SQLite.
+
+\section{Trademark}
+\index[general]{Trademark }
+
+Bacula\raisebox{.6ex}{\textsuperscript{\textregistered}} is a registered
+trademark of Kern Sibbald.
+
+We have trademarked the Bacula name to ensure that any program using the
+name Bacula will be exactly compatible with the program that we have
+released. The use of the name Bacula is restricted to software systems
+that agree exactly with the program presented here. If you have made
+modifications to the Bacula source code that alter in any significant
+way the way the program functions, you may not distribute it using the
+Bacula name.
+
+\section{Fiduciary License Agreement}
+\index[general]{Fiduciary License Agreement }
+Developers who have contributed significant changes to the Bacula code
+should have signed a Fiduciary License Agreement (FLA), which
+guarantees them the right to use the code they have developed, and also
+ensures that the Free Software Foundation Europe (and thus the Bacula
+project) has the rights to the code. This Fiduciary License Agreement
+is found on the Bacula web site at:
+
+\elink{http://www.bacula.org/en/FLA-bacula.en.pdf}{http://www.bacula.org/en/FLA-bacula.en.pdf}
+
+and if you are submitting code, you should fill it out then sent to:
+
+\begin{quote}
+ Kern Sibbald \\
+ Cotes-de-Montmoiret 9 \\
+ 1012 Lausanne \\
+ Switzerland \\
+\end{quote}
+
+When you send in such a
+complete document, please notify me: kern at sibbald dot com.
+
+
+\section{Disclaimer}
+\index[general]{Disclaimer }
+
+NO WARRANTY
+
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE
+PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
+COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
+DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
+A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
--- /dev/null
+%%
+%%
+%% The following characters must be preceded by a backslash
+%% to be entered as printable characters:
+%%
+%% # $ % & ~ _ ^ \ { }
+%%
+
+\documentclass[10pt,a4paper]{book}
+
+\topmargin -0.5in
+\oddsidemargin 0.0in
+\evensidemargin 0.0in
+\textheight 10in
+\textwidth 6.5in
+
+
+\usepackage{html}
+\usepackage{float}
+\usepackage{graphicx}
+\usepackage{bacula}
+\usepackage{longtable}
+\usepackage{makeidx}
+\usepackage{index}
+\usepackage{setspace}
+\usepackage{hyperref}
+% \usepackage[linkcolor=black,colorlinks=true]{hyperref}
+\usepackage{url}
+
+\makeindex
+\newindex{general}{idx}{ind}{General Index}
+
+\sloppy
+
+\begin{document}
+\sloppy
+
+\include{coverpage}
+
+\clearpage
+\pagenumbering{roman}
+\tableofcontents
+\clearpage
+
+\pagestyle{myheadings}
+\markboth{Bacula Version \version}{Bacula Version \version}
+\pagenumbering{arabic}
+\include{python}
+\include{vars}
+\include{stunnel}
+\include{dvd}
+\include{projects}
+\include{internaldb}
+\include{license}
+\include{fdl}
+\include{gpl}
+\include{lesser}
+
+
+% pull in the index
+\clearpage
+\printindex[general]
+
+\end{document}
--- /dev/null
+%%
+%%
+
+\chapter{Bacula Projects}
+\label{ProjectsChapter}
+\index[general]{Projects!Bacula }
+\index[general]{Bacula Projects }
+
+Once a new major version of Bacula is released, the Bacula
+users will vote on a list of new features. This vote is used
+as the main element determining what new features will be
+implemented for the next version. Generally, the development time
+for a new release is between four to nine months. Sometimes it may be
+a bit longer, but in that case, there will be a number of bug fix
+updates to the currently released version.
+
+For the current list of project, please see the projects page in the CVS
+at: \elink{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/projects}
+{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/projects}
+see the {\bf projects} file in the main source directory. The projects
+file is updated approximately once every six months.
+
+Separately from the project list, Kern maintains a current list of
+tasks as well as ideas, feature requests, and occasionally design
+notes. This list is updated roughly weekly (sometimes more often).
+For a current list of tasks you can see {\bf kernstodo} in the Source Forge
+CVS at \elink{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/kernstodo}
+{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/kernstodo}.
--- /dev/null
+%%
+%%
+
+\chapter{Python Scripting}
+\label{PythonChapter}
+\index[general]{Python Scripting}
+\index[general]{Scripting!Python}
+
+You may be asking what Python is and why a scripting language is
+needed in Bacula. The answer to the first question is that Python
+is an Object Oriented scripting language with features similar
+to those found in Perl, but the syntax of the language is much
+cleaner and simpler. The answer to why have scripting in Bacula is to
+give the user more control over the whole backup process. Probably
+the simplest example is when Bacula needs a new Volume name, with
+a scripting language such as Python, you can generate any name
+you want, based on the current state of Bacula.
+
+\section{Python Configuration}
+\index[general]{Python Configuration}
+\index[general]{Configuration!Python}
+
+Python must be enabled during the configuration process by adding
+a \verb:--:with-python, and possibly specifying an alternate
+directory if your Python is not installed in a standard system
+location. If you are using RPMs you will need the python-devel package
+installed.
+
+When Python is configured, it becomes an integral part of Bacula and
+runs in Bacula's address space, so even though it is an interpreted
+language, it is very efficient.
+
+When the Director starts, it looks to see if you have a {\bf
+Scripts Directory} Directive defined (normal default {\bf
+/etc/bacula/scripts}, if so, it looks in that directory for a file named
+{\bf DirStartUp.py}. If it is found, Bacula will pass this file to Python
+for execution. The {\bf Scripts Directory} is a new directive that you add
+to the Director resource of your bacula-dir.conf file.
+
+Note: Bacula does not install Python scripts by default because these
+scripts are for you to program. This means that with a default
+installation with Python enabled, Bacula will print the following error
+message:
+
+\begin{verbatim}
+09-Jun 15:14 bacula-dir: ERROR in pythonlib.c:131 Could not import
+Python script /etc/bacula/scripts/DirStartUp. Python disabled.
+\end{verbatim}
+
+The source code directory {\bf examples/python} contains sample scripts
+for DirStartUp.py, SDStartUp.py, and FDStartUp.py that you might want
+to use as a starting point. Normally, your scripts directory (at least
+where you store the Python scripts) should be writable by Bacula, because
+Python will attempt to write a compiled version of the scripts (e.g.
+DirStartUp.pyc) back to that directory.
+
+When starting with the sample scripts, you can delete any part that
+you will not need, but you should keep all the Bacula Event and Job Event
+definitions. If you do not want a particular event, simply replace the
+existing code with a {\bf noop = 1}.
+
+\section{Bacula Events}
+\index[general]{Bacula Events}
+\index[general]{Events}
+A Bacula event is a point in the Bacula code where Bacula
+will call a subroutine (actually a method) that you have
+defined in the Python StartUp script. Events correspond
+to some significant event such as a Job Start, a Job End,
+Bacula needs a new Volume Name, ... When your script is
+called, it will have access to all the Bacula variables
+specific to the Job (attributes of the Job Object), and
+it can even call some of the Job methods (subroutines)
+or set new values in the Job attributes, such as the
+Priority. You will see below how the events are used.
+
+\section{Python Objects}
+\index[general]{Python Objects}
+\index[general]{Objects!Python}
+
+There are four Python objects that you will need to work with:
+\begin{description}
+\item [The Bacula Object]
+ The Bacula object is created by the Bacula daemon (the Director
+ in the present case) when the daemon starts. It is available to
+ the Python startup script, {\bf DirStartup.py}, by importing the
+ Bacula definitions with {\bf import bacula}. The methods
+ available with this object are described below.
+
+\item [The Bacula Events Class]
+ You create this class in the startup script, and you pass
+ it to the Bacula Object's {\bf set\_events} method. The
+ purpose of the Bacula Events Class is to define what global
+ or daemon events you want to monitor. When one of those events
+ occurs, your Bacula Events Class will be called at the method
+ corresponding to the event. There are currently three events,
+ JobStart, JobEnd, and Exit, which are described in detail below.
+
+\item [The Job Object]
+ When a Job starts, and assuming you have defined a JobStart method
+ in your Bacula Events Class, Bacula will create a Job Object. This
+ object will be passed to the JobStart event. The Job Object has a
+ has good number of read-only members or attributes providing many
+ details of the Job, and it also has a number of writable attributes
+ that allow you to pass information into the Job. These attributes
+ are described below.
+
+\item [The Job Events Class]
+ You create this class in the JobStart method of your Bacula Events
+ class, and it allows you to define which of the possible Job Object
+ events you want to see. You must pass an instance of your Job Events
+ class to the Job Object set\_events() method.
+ Normally, you will probably only have one
+ Job Events Class, which will be instantiated for each Job. However,
+ if you wish to see different events in different Jobs, you may have
+ as many Job Events classes as you wish.
+\end{description}
+
+
+The first thing the startup script must do is to define what global Bacula
+events (daemon events), it wants to see. This is done by creating a
+Bacula Events class, instantiating it, then passing it to the
+{\bf set\_events} method. There are three possible
+events.
+
+\begin{description}
+\item [JobStart]
+ \index[general]{JobStart}
+ This Python method, if defined, will be called each time a Job is started.
+ The method is passed the class instantiation object as the first argument,
+ and the Bacula Job object as the second argument. The Bacula Job object
+ has several built-in methods, and you can define which ones you
+ want called. If you do not define this method, you will not be able
+ to interact with Bacula jobs.
+
+\item [JobEnd]
+ This Python method, if defined, will be called each time a Job terminates.
+ The method is passed the class instantiation object as the first argument,
+ and the Bacula Job object as the second argument.
+
+\item [Exit]
+ This Python method, if defined, will be called when the Director terminates.
+ The method is passed the class instantiation object as the first argument.
+\end{description}
+
+Access to the Bacula variables and methods is done with:
+
+ import bacula
+
+The following are the read-only attributes provided by the bacula object.
+\begin{description}
+\item [Name]
+\item [ConfigFile]
+\item [WorkingDir]
+\item [Version] string consisting of "Version Build-date"
+\end{description}
+
+
+A simple definition of the Bacula Events Class might be the following:
+
+\footnotesize
+\begin{verbatim}
+import sys, bacula
+class BaculaEvents:
+ def JobStart(self, job):
+ ...
+\end{verbatim}
+\normalsize
+
+Then to instantiate the class and pass it to Bacula, you
+would do:
+
+\footnotesize
+\begin{verbatim}
+bacula.set_events(BaculaEvents()) # register Bacula Events wanted
+\end{verbatim}
+\normalsize
+
+And at that point, each time a Job is started, your BaculaEvents JobStart
+method will be called.
+
+Now to actually do anything with a Job, you must define which Job events
+you want to see, and this is done by defining a JobEvents class containing
+the methods you want called. Each method name corresponds to one of the
+Job Events that Bacula will generate.
+
+A simple Job Events class might look like the following:
+
+\footnotesize
+\begin{verbatim}
+class JobEvents:
+ def NewVolume(self, job):
+ ...
+\end{verbatim}
+\normalsize
+
+Here, your JobEvents class method NewVolume will be called each time
+the Job needs a new Volume name. To actually register the events defined
+in your class with the Job, you must instantiate the JobEvents class and
+set it in the Job {\bf set\_events} variable. Note, this is a bit different
+from how you registered the Bacula events. The registration process must
+be done in the Bacula JobStart event (your method). So, you would modify
+Bacula Events (not the Job events) as follows:
+
+\footnotesize
+\begin{verbatim}
+import sys, bacula
+class BaculaEvents:
+ def JobStart(self, job):
+ events = JobEvents() # create instance of Job class
+ job.set_events(events) # register Job events desired
+ ...
+\end{verbatim}
+\normalsize
+
+When a job event is triggered, the appropriate event definition is
+called in the JobEvents class. This is the means by which your Python
+script or code gets control. Once it has control, it may read job
+attributes, or set them. See below for a list of read-only attributes,
+and those that are writable.
+
+In addition, the Bacula {\bf job} object in the Director has
+a number of methods (subroutines) that can be called. They
+are:
+\begin{description}
+\item [set\_events] The set\_events method takes a single
+ argument, which is the instantiation of the Job Events class
+ that contains the methods that you want called. The method
+ names that will be called must correspond to the Bacula
+ defined events. You may define additional methods but Bacula
+ will not use them.
+\item [run] The run method takes a single string
+ argument, which is the run command (same as in the Console)
+ that you want to submit to start a new Job. The value
+ returned by the run method is the JobId of the job that
+ started, or -1 if there was an error.
+\item [write] The write method is used to be able to send
+ print output to the Job Report. This will be described later.
+\item[cancel] The cancel method takes a single integer argument,
+ which is a JobId. If JobId is found, it will be canceled.
+\item [DoesVolumeExist] The DoesVolumeExist method takes a single
+ string argument, which is the Volume name, and returns
+ 1 if the volume exists in the Catalog and 0 if the volume
+ does not exist.
+\end{description}
+
+The following attributes are read/write within the Director
+for the {\bf job} object.
+
+\begin{description}
+\item [Priority] Read or set the Job priority.
+ Note, that setting a Job Priority is effective only before
+ the Job actually starts.
+\item [Level] This attribute contains a string representing the Job
+ level, e.g. Full, Differential, Incremental, ... if read.
+ The level can also be set.
+\end{description}
+
+The following read-only attributes are available within the Director
+for the {\bf job} object.
+
+\begin{description}
+\item [Type] This attribute contains a string representing the Job
+ type, e.g. Backup, Restore, Verify, ...
+\item [JobId] This attribute contains an integer representing the
+ JobId.
+\item [Client] This attribute contains a string with the name of the
+ Client for this job.
+\item [NumVols] This attribute contains an integer with the number of
+ Volumes in the Pool being used by the Job.
+\item [Pool] This attribute contains a string with the name of the Pool
+ being used by the Job.
+\item [Storage] This attribute contains a string with the name of the
+ Storage resource being used by the Job.
+\item [Catalog] This attribute contains a string with the name of the
+ Catalog resource being used by the Job.
+\item [MediaType] This attribute contains a string with the name of the
+ Media Type associated with the Storage resource being used by the Job.
+\item [Job] This attribute contains a string containing the name of the
+ Job resource used by this job (not unique).
+\item [JobName] This attribute contains a string representing the full
+ unique Job name.
+\item [JobStatus] This attribute contains a single character string
+ representing the current Job status. The status may change
+ during execution of the job. It may take on the following
+ values:
+ \begin{description}
+ \item [C] Created, not yet running
+ \item [R] Running
+ \item [B] Blocked
+ \item [T] Completed successfully
+ \item [E] Terminated with errors
+ \item [e] Non-fatal error
+ \item [f] Fatal error
+ \item [D] Verify found differences
+ \item [A] Canceled by user
+ \item [F] Waiting for Client
+ \item [S] Waiting for Storage daemon
+ \item [m] Waiting for new media
+ \item [M] Waiting for media mount
+ \item [s] Waiting for storage resource
+ \item [j] Waiting for job resource
+ \item [c] Waiting for client resource
+ \item [d] Waiting on maximum jobs
+ \item [t] Waiting on start time
+ \item [p] Waiting on higher priority jobs
+ \end{description}
+
+\item [Priority] This attribute contains an integer with the priority
+ assigned to the job.
+\item [CatalogRes] tuple consisting of (DBName, Address, User,
+ Password, Socket, Port, Database Vendor) taken from the Catalog resource
+ for the Job with the exception of Database Vendor, which is
+ one of the following: MySQL, PostgreSQL, SQLite, Internal,
+ depending on what database you configured.
+\item [VolumeName]
+ After a Volume has been purged, this attribute will contain the
+ name of that Volume. At other times, this value may have no meaning.
+\end{description}
+
+The following write-only attributes are available within the
+Director:
+
+\begin{description}
+\item [JobReport] Send line to the Job Report.
+\item [VolumeName] Set a new Volume name. Valid only during the
+ NewVolume event.
+\end{description}
+
+\section{Python Console Command}
+\index[general]{Python Console Command}
+\index[general]{Console Command!Python}
+
+There is a new Console command named {\bf python}. It takes
+a single argument {\bf restart}. Example:
+\begin{verbatim}
+ python restart
+\end{verbatim}
+
+This command restarts the Python interpreter in the Director.
+This can be useful when you are modifying the DirStartUp script,
+because normally Python will cache it, and thus the
+script will be read one time.
+
+\section{Debugging Python Scripts}
+\index[general]{Debugging Python Scripts}
+In general, you debug your Python scripts by using print statements.
+You can also develop your script or important parts of it as a
+separate file using the Python interpreter to run it. Once you
+have it working correctly, you can then call the script from
+within the Bacula Python script (DirStartUp.py).
+
+If you are having problems loading DirStartUp.py, you will probably
+not get any error messages because Bacula can only print Python
+error messages after the Python interpreter is started. However, you
+may be able to see the error messages by starting Bacula in
+a shell window with the {\bf -d1} option on the command line. That
+should cause the Python error messages to be printed in the shell
+window.
+
+If you are getting error messages such as the following when
+loading DirStartUp.py:
+
+\begin{verbatim}
+ Traceback (most recent call last):
+ File "/etc/bacula/scripts/DirStartUp.py", line 6, in ?
+ import time, sys, bacula
+ ImportError: /usr/lib/python2.3/lib-dynload/timemodule.so: undefined
+ symbol: PyInt_FromLong
+ bacula-dir: pythonlib.c:134 Python Import error.
+\end{verbatim}
+
+It is because the DirStartUp script is calling a dynamically loaded
+module (timemodule.so in the above case) that then tries to use
+Python functions exported from the Python interpreter (in this case
+PyInt\_FromLong). The way Bacula is currently linked with Python does
+not permit this. The solution to the problem is to put such functions
+(in this case the import of time into a separate Python script, which
+will do your calculations and return the values you want. Then call
+(not import) this script from the Bacula DirStartUp.py script, and
+it all should work as you expect.
+
+
+
+
+
+\section{Python Example}
+\index[general]{Python Example}
+\index[general]{Example!Python}
+
+An example script for the Director startup file is provided in
+{\bf examples/python/DirStartup.py} as follows:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula Python interface script for the Director
+#
+
+# You must import both sys and bacula
+import sys, bacula
+
+# This is the list of Bacula daemon events that you
+# can receive.
+class BaculaEvents(object):
+ def __init__(self):
+ # Called here when a new Bacula Events class is
+ # is created. Normally not used
+ noop = 1
+
+ def JobStart(self, job):
+ """
+ Called here when a new job is started. If you want
+ to do anything with the Job, you must register
+ events you want to receive.
+ """
+ events = JobEvents() # create instance of Job class
+ events.job = job # save Bacula's job pointer
+ job.set_events(events) # register events desired
+ sys.stderr = events # send error output to Bacula
+ sys.stdout = events # send stdout to Bacula
+ jobid = job.JobId; client = job.Client
+ numvols = job.NumVols
+ job.JobReport="Python Dir JobStart: JobId=%d Client=%s NumVols=%d\n" % (jobid,client,numvols)
+
+ # Bacula Job is going to terminate
+ def JobEnd(self, job):
+ jobid = job.JobId
+ client = job.Client
+ job.JobReport="Python Dir JobEnd output: JobId=%d Client=%s.\n" % (jobid, client)
+
+ # Called here when the Bacula daemon is going to exit
+ def Exit(self, job):
+ print "Daemon exiting."
+
+bacula.set_events(BaculaEvents()) # register daemon events desired
+
+"""
+ These are the Job events that you can receive.
+"""
+class JobEvents(object):
+ def __init__(self):
+ # Called here when you instantiate the Job. Not
+ # normally used
+ noop = 1
+
+ def JobInit(self, job):
+ # Called when the job is first scheduled
+ noop = 1
+
+ def JobRun(self, job):
+ # Called just before running the job after initializing
+ # This is the point to change most Job parameters.
+ # It is equivalent to the JobRunBefore point.
+ noop = 1
+
+ def NewVolume(self, job):
+ # Called when Bacula wants a new Volume name. The Volume
+ # name returned, if any, must be stored in job.VolumeName
+ jobid = job.JobId
+ client = job.Client
+ numvol = job.NumVols;
+ print job.CatalogRes
+ job.JobReport = "JobId=%d Client=%s NumVols=%d" % (jobid, client, numvol)
+ job.JobReport="Python before New Volume set for Job.\n"
+ Vol = "TestA-%d" % numvol
+ job.JobReport = "Exists=%d TestA-%d" % (job.DoesVolumeExist(Vol), numvol)
+ job.VolumeName="TestA-%d" % numvol
+ job.JobReport="Python after New Volume set for Job.\n"
+ return 1
+
+ def VolumePurged(self, job):
+ # Called when a Volume is purged. The Volume name can be referenced
+ # with job.VolumeName
+ noop = 1
+
+
+
+\end{verbatim}
+\normalsize
--- /dev/null
+%%
+%%
+
+\chapter{Using Stunnel to Encrypt Communications}
+\label{StunnelChapter}
+\index[general]{Using Stunnel to Encrypt Communications to Clients }
+
+Prior to version 1.37, Bacula did not have built-in communications encryption.
+Please see the \ilink {TLS chapter}{CommEncryption} if you are using Bacula
+1.37 or greater.
+
+Without too much effort, it is possible to encrypt the communications
+between any of the daemons. This chapter will show you how to use {\bf
+stunnel} to encrypt communications to your client programs. We assume the
+Director and the Storage daemon are running on one machine that will be called
+{\bf server} and the Client or File daemon is running on a different machine
+called {\bf client}. Although the details may be slightly different, the same
+principles apply whether you are encrypting between Unix, Linux, or Win32
+machines. This example was developed between two Linux machines running
+stunnel version 4.04-4 on a Red Hat Enterprise 3.0 system.
+
+\section{Communications Ports Used}
+\index[general]{Used!Communications Ports }
+\index[general]{Communications Ports Used }
+
+First, you must know that with the standard Bacula configuration, the Director
+will contact the File daemon on port 9102. The File daemon then contacts the
+Storage daemon using the address and port parameters supplied by the Director.
+The standard port used will be 9103. This is the typical server/client view of
+the world, the File daemon is a server to the Director (i.e. listens for the
+Director to contact it), and the Storage daemon is a server to the File
+daemon.
+
+\section{Encryption}
+\index[general]{Encryption }
+
+The encryption is accomplished between the Director and the File daemon by
+using an stunnel on the Director's machine (server) to encrypt the data and to
+contact an stunnel on the File daemon's machine (client), which decrypts the
+data and passes it to the client.
+
+Between the File daemon and the Storage daemon, we use an stunnel on the File
+daemon's machine to encrypt the data and another stunnel on the Storage
+daemon's machine to decrypt the data.
+
+As a consequence, there are actually four copies of stunnel running, two on the
+server and two on the client. This may sound a bit complicated, but it really
+isn't. To accomplish this, we will need to construct four separate conf files
+for stunnel, and we will need to make some minor modifications to the
+Director's conf file. None of the other conf files need to be changed.
+
+\section{A Picture}
+\index[general]{Picture }
+
+Since pictures usually help a lot, here is an overview of what we will be
+doing. Don't worry about all the details of the port numbers and such for the
+moment.
+
+\footnotesize
+\begin{verbatim}
+ File daemon (client):
+ stunnel-fd1.conf
+ |===========|
+ Port 29102 >----| Stunnel 1 |-----> Port 9102
+ |===========|
+ stunnel-fd2.conf
+ |===========|
+ Port 9103 >----| Stunnel 2 |-----> server:29103
+ |===========|
+ Director (server):
+ stunnel-dir.conf
+ |===========|
+ Port 29102 >----| Stunnel 3 |-----> client:29102
+ |===========|
+ stunnel-sd.conf
+ |===========|
+ Port 29103 >----| Stunnel 4 |-----> 9103
+ |===========|
+\end{verbatim}
+\normalsize
+
+\section{Certificates}
+\index[general]{Certificates }
+
+In order for stunnel to function as a server, which it does in our diagram for
+Stunnel 1 and Stunnel 4, you must have a certificate and the key. It is
+possible to keep the two in separate files, but normally, you keep them in one
+single .pem file. You may create this certificate yourself in which case, it
+will be self-signed, or you may have it signed by a CA.
+
+If you want your clients to verify that the server is in fact valid (Stunnel 2
+and Stunnel 3), you will need to have the server certificates signed by a CA
+(Certificate Authority), and you will need to have the CA's public certificate
+(contains the CA's public key).
+
+Having a CA signed certificate is {\bf highly} recommended if you are using
+your client across the Internet, otherwise you are exposed to the man in the
+middle attack and hence loss of your data.
+
+See below for how to create a self-signed certificate.
+
+\section{Securing the Data Channel}
+\index[general]{Channel!Securing the Data }
+\index[general]{Securing the Data Channel }
+
+To simplify things a bit, let's for the moment consider only the data channel.
+That is the connection between the File daemon and the Storage daemon, which
+takes place on port 9103. In fact, in a minimalist solution, this is the only
+connection that needs to be encrypted, because it is the one that transports your
+data. The connection between the Director and the File daemon is simply a
+control channel used to start the job and get the job status.
+
+Normally the File daemon will contact the Storage daemon on port 9103
+(supplied by the Director), so we need an stunnel that listens on port 9103 on
+the File daemon's machine, encrypts the data and sends it to the Storage
+daemon. This is depicted by Stunnel 2 above. Note that this stunnel is
+listening on port 9103 and sending to server:29103. We use port 29103 on the
+server because if we would send the data to port 9103, it would go directly to the
+Storage daemon, which doesn't understand encrypted data. On the server
+machine, we run Stunnel 4, which listens on port 29103, decrypts the data and
+sends it to the Storage daemon, which is listening on port 9103.
+
+\section{Data Channel Configuration}
+\index[general]{Modification of bacula-dir.conf for the Data Channel }
+\index[general]{baculoa-dir.conf!Modification for the Data Channel }
+
+The Storage resource of the bacula-dir.conf normally looks something like the
+following:
+
+\footnotesize
+\begin{verbatim}
+Storage {
+ Name = File
+ Address = server
+ SDPort = 9103
+ Password = storage_password
+ Device = File
+ Media Type = File
+}
+\end{verbatim}
+\normalsize
+
+Notice that this is running on the server machine, and it points the File
+daemon back to server:9103, which is where our Storage daemon is listening. We
+modify this to be:
+
+\footnotesize
+\begin{verbatim}
+Storage {
+ Name = File
+ Address = localhost
+ SDPort = 9103
+ Password = storage_password
+ Device = File
+ Media Type = File
+}
+\end{verbatim}
+\normalsize
+
+This causes the File daemon to send the data to the stunnel running on
+localhost (the client machine). We could have used client as the address as
+well.
+
+\section{Stunnel Configuration for the Data Channel}
+\index[general]{Stunnel Configuration for the Data Channel }
+
+In the diagram above, we see above Stunnel 2 that we use stunnel-fd2.conf on the
+client. A pretty much minimal config file would look like the following:
+
+\footnotesize
+\begin{verbatim}
+client = yes
+[29103]
+accept = localhost:9103
+connect = server:29103
+\end{verbatim}
+\normalsize
+
+The above config file does encrypt the data but it does not require a
+certificate, so it is subject to the man in the middle attack. The file I
+actually used, stunnel-fd2.conf, looked like this:
+
+\footnotesize
+\begin{verbatim}
+#
+# Stunnel conf for Bacula client -> SD
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29103]
+accept = localhost:9103
+connect = server:29103
+\end{verbatim}
+\normalsize
+
+You will notice that I specified a pid file location because I ran stunnel
+under my own userid so I could not use the default, which requires root
+permission. I also specified a certificate that I have as well as verify level
+2 so that the certificate is required and verified, and I must supply the
+location of the CA (Certificate Authority) certificate so that the stunnel
+certificate can be verified. Finally, you will see that there are two lines
+commented out, which when enabled, produce a lot of nice debug info in the
+command window.
+
+If you do not have a signed certificate (stunnel.pem), you need to delete the
+cert, CAfile, and verify lines.
+
+Note that the stunnel.pem, is actually a private key and a certificate in a
+single file. These two can be kept and specified individually, but keeping
+them in one file is more convenient.
+
+The config file, stunnel-sd.conf, needed for Stunnel 4 on the server machine
+is:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for Storage daemon
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is mandatory here, it may be self signed
+# If it is self signed, the client may not use
+# verify
+#
+cert = /home/kern/stunnel/stunnel.pem
+client = no
+# debug = 7
+# foreground = yes
+[29103]
+accept = 29103
+connect = 9103
+\end{verbatim}
+\normalsize
+
+\section{Starting and Testing the Data Encryption}
+\index[general]{Starting and Testing the Data Encryption }
+\index[general]{Encryption!Starting and Testing the Data }
+
+It will most likely be the simplest to implement the Data Channel encryption
+in the following order:
+
+\begin{itemize}
+\item Setup and run Bacula backing up some data on your client machine
+ without encryption.
+\item Stop Bacula.
+\item Modify the Storage resource in the Director's conf file.
+\item Start Bacula
+\item Start stunnel on the server with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-sd.conf
+
+\end{verbatim}
+\normalsize
+
+\item Start stunnel on the client with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-fd2.conf
+
+\end{verbatim}
+\normalsize
+
+\item Run a job.
+\item If it doesn't work, turn debug on in both stunnel conf files, restart
+ the stunnels, rerun the job, repeat until it works.
+ \end{itemize}
+
+\section{Encrypting the Control Channel}
+\index[general]{Channel!Encrypting the Control }
+\index[general]{Encrypting the Control Channel }
+
+The Job control channel is between the Director and the File daemon, and as
+mentioned above, it is not really necessary to encrypt, but it is good
+practice to encrypt it as well. The two stunnels that are used in this case
+will be Stunnel 1 and Stunnel 3 in the diagram above. Stunnel 3 on the server
+might normally listen on port 9102, but if you have a local File daemon, this
+will not work, so we make it listen on port 29102. It then sends the data to
+client:29102. Again we use port 29102 so that the stunnel on the client
+machine can decrypt the data before passing it on to port 9102 where the File
+daemon is listening.
+
+\section{Control Channel Configuration}
+\index[general]{Control Channel Configuration }
+
+We need to modify the standard Client resource, which would normally look
+something like:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client-fd
+ Address = client
+ FDPort = 9102
+ Catalog = BackupDB
+ Password = "xxx"
+}
+\end{verbatim}
+\normalsize
+
+to be:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client-fd
+ Address = localhost
+ FDPort = 29102
+ Catalog = BackupDB
+ Password = "xxx"
+}
+\end{verbatim}
+\normalsize
+
+This will cause the Director to send the control information to
+localhost:29102 instead of directly to the client.
+
+\section{Stunnel Configuration for the Control Channel}
+\index[general]{Config Files for stunnel to Encrypt the Control Channel }
+
+The stunnel config file, stunnel-dir.conf, for the Director's machine would
+look like the following:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for the Directory to contact a client
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29102]
+accept = localhost:29102
+connect = client:29102
+\end{verbatim}
+\normalsize
+
+and the config file, stunnel-fd1.conf, needed to run stunnel on the Client
+would be:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for the Directory to contact a client
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29102]
+accept = localhost:29102
+connect = client:29102
+\end{verbatim}
+\normalsize
+
+\section{Starting and Testing the Control Channel}
+\index[general]{Starting and Testing the Control Channel }
+\index[general]{Channel!Starting and Testing the Control }
+
+It will most likely be the simplest to implement the Control Channel
+encryption in the following order:
+
+\begin{itemize}
+\item Stop Bacula.
+\item Modify the Client resource in the Director's conf file.
+\item Start Bacula
+\item Start stunnel on the server with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-dir.conf
+
+\end{verbatim}
+\normalsize
+
+\item Start stunnel on the client with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-fd1.conf
+
+\end{verbatim}
+\normalsize
+
+\item Run a job.
+\item If it doesn't work, turn debug on in both stunnel conf files, restart
+ the stunnels, rerun the job, repeat until it works.
+ \end{itemize}
+
+\section{Using stunnel to Encrypt to a Second Client}
+\index[general]{Using stunnel to Encrypt to a Second Client }
+\index[general]{Client!Using stunnel to Encrypt to a Second }
+
+On the client machine, you can just duplicate the setup that you have on the
+first client file for file and it should work fine.
+
+In the bacula-dir.conf file, you will want to create a second client pretty
+much identical to how you did for the first one, but the port number must be
+unique. We previously used:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client-fd
+ Address = localhost
+ FDPort = 29102
+ Catalog = BackupDB
+ Password = "xxx"
+}
+\end{verbatim}
+\normalsize
+
+so for the second client, we will, of course, have a different name, and we
+will also need a different port. Remember that we used port 29103 for the
+Storage daemon, so for the second client, we can use port 29104, and the
+Client resource would look like:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client2-fd
+ Address = localhost
+ FDPort = 29104
+ Catalog = BackupDB
+ Password = "yyy"
+}
+\end{verbatim}
+\normalsize
+
+Now, fortunately, we do not need a third stunnel to on the Director's machine,
+we can just add the new port to the config file, stunnel-dir.conf, to make:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for the Directory to contact a client
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29102]
+accept = localhost:29102
+connect = client:29102
+[29104]
+accept = localhost:29102
+connect = client2:29102
+\end{verbatim}
+\normalsize
+
+There are no changes necessary to the Storage daemon or the other stunnel so
+that this new client can talk to our Storage daemon.
+
+\section{Creating a Self-signed Certificate}
+\index[general]{Creating a Self-signed Certificate }
+\index[general]{Certificate!Creating a Self-signed }
+
+You may create a self-signed certificate for use with stunnel that will permit
+you to make it function, but will not allow certificate validation. The .pem
+file containing both the certificate and the key can be made with the
+following, which I put in a file named {\bf makepem}:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+#
+# Simple shell script to make a .pem file that can be used
+# with stunnel and Bacula
+#
+OPENSSL=openssl
+ umask 77
+ PEM1="/bin/mktemp openssl.XXXXXX"
+ PEM2="/bin/mktemp openssl.XXXXXX"
+ ${OPENSSL} req -newkey rsa:1024 -keyout $PEM1 -nodes \
+ -x509 -days 365 -out $PEM2
+ cat $PEM1 > stunnel.pem
+ echo "" >>stunnel.pem
+ cat $PEM2 >>stunnel.pem
+ rm $PEM1 $PEM2
+\end{verbatim}
+\normalsize
+
+The above script will ask you a number of questions. You may simply answer
+each of them by entering a return, or if you wish you may enter your own data.
+
+
+\section{Getting a CA Signed Certificate}
+\index[general]{Certificate!Getting a CA Signed }
+\index[general]{Getting a CA Signed Certificate }
+
+The process of getting a certificate that is signed by a CA is quite a bit
+more complicated. You can purchase one from quite a number of PKI vendors, but
+that is not at all necessary for use with Bacula.
+
+To get a CA signed
+certificate, you will either need to find a friend that has setup his own CA
+or to become a CA yourself, and thus you can sign all your own certificates.
+The book OpenSSL by John Viega, Matt Mesier \& Pravir Chandra from O'Reilly
+explains how to do it, or you can read the documentation provided in the
+Open-source PKI Book project at Source Forge:
+\elink{
+http://ospkibook.sourceforge.net/docs/OSPKI-2.4.7/OSPKI-html/ospki-book.htm}
+{http://ospkibook.sourceforge.net/docs/OSPKI-2.4.7/OSPKI-html/ospki-book.htm}.
+Note, this link may change.
+
+\section{Using ssh to Secure the Communications}
+\index[general]{Communications!Using ssh to Secure the }
+\index[general]{Using ssh to Secure the Communications }
+
+Please see the script {\bf ssh-tunnel.sh} in the {\bf examples} directory. It
+was contributed by Stephan Holl.
--- /dev/null
+%%
+%%
+
+\chapter{Variable Expansion}
+\label{VarsChapter}
+\index[general]{Variable Expansion }
+\index[general]{Expansion!Variable }
+
+% TODO: does the following mean that this should not be in book?
+
+Please note that as of version 1.37, the Variable Expansion
+is deprecated and replaced by Python scripting (not yet
+documented).
+
+Variable expansion is somewhat similar to Unix shell variable expansion.
+Currently (version 1.31), it is used only in format labels, but in the future,
+it will most likely be used in more places.
+
+\section{General Functionality}
+\index[general]{Functionality!General }
+\index[general]{General Functionality }
+
+This is basically a string expansion capability that permits referencing
+variables, indexing arrays, conditional replacement of variables, case
+conversion, substring selection, regular expression matching and replacement,
+character class replacement, padding strings, repeated expansion in a user
+controlled loop, support of arithmetic expressions in the loop start, step and
+end conditions, and recursive expansion.
+
+When using variable expansion characters in a Volume Label Format record, the
+format should always be enclosed in double quotes ({\bf "}).
+
+For example, {\bf \$\{HOME\}} will be replaced by your home directory as
+defined in the environment. If you have defined the variable {\bf xxx} to be
+{\bf Test}, then the reference {\bf \$\{xxx:p/7/Y/r\}} will right pad the
+contents of {\bf xxx} to a length of seven characters filling with the
+character {\bf Y} giving {\bf YYYTest}.
+
+\section{Bacula Variables}
+\index[general]{Bacula Variables }
+\index[general]{Variables!Bacula }
+
+Within Bacula, there are three main classes of variables with some minor
+variations within the classes. The classes are:
+
+\begin{description}
+
+\item [Counters]
+ \index[general]{Counters }
+ Counters are defined by the {\bf Counter} resources in the Director's conf
+file. The counter can either be a temporary counter that lasts for the
+duration of Bacula's execution, or it can be a variable that is stored in
+the catalog, and thus retains its value from one Bacula execution to another.
+Counter variables may be incremented by postfixing a plus sign ({\bf +} after
+the variable name).
+
+\item [Internal Variables]
+ \index[general]{Internal Variables }
+ Internal variables are read-only, and may be related to the current job (i.e.
+Job name), or maybe special variables such as the date and time. The
+following variables are available:
+
+\begin{itemize}
+\item [Year] -- the full year
+\item [Month] -- the current month 1-12
+\item [Day] -- the day of the month 1-31
+\item [Hour] -- the hour 0-24
+\item [Minute] -- the current minute 0-59
+\item [Second] -- the current second 0-59
+\item [WeekDay] -- the current day of the week 0-6 with 0 being Sunday
+\item [Job] -- the job name
+\item [general] -- the Director's name
+\item [Level] -- the Job Level
+\item [Type] -- the Job type
+\item [JobId] -- the JobId
+\item [JobName] -- the unique job name composed of Job and date
+\item [Storage] -- the Storage daemon's name
+\item [Client] -- the Client's name
+\item [NumVols] -- the current number of Volumes in the Pool
+\item [Pool] -- the Pool name
+\item [Catalog] -- the Catalog name
+\item [MediaType] -- the Media Type
+ \end{itemize}
+
+\item [Environment Variables]
+ \index[general]{Environment Variables }
+ Environment variables are read-only, and must be defined in the environment
+prior to executing Bacula. Environment variables may be either scalar or an
+array, where the elements of the array are referenced by subscripting the
+variable name (e.g. {\bf \$\{Months[3]\}}). Environment variable arrays are
+defined by separating the elements with a vertical bar ({\bf |}), thus {\bf
+set Months="Jan|Feb|Mar|Apr|..."} defines an environment variable named
+{\bf Month} that will be treated as an array, and the reference {\bf
+\$\{Months[3]\}} will yield {\bf Mar}. The elements of the array can have
+differing lengths.
+\end{description}
+
+\section{Full Syntax}
+\index[general]{Syntax!Full }
+\index[general]{Full Syntax }
+
+Since the syntax is quite extensive, below, you will find the pseudo BNF. The
+special characters have the following meaning:
+
+\footnotesize
+\begin{verbatim}
+ ::= definition
+ ( ) grouping if the parens are not quoted
+ | separates alternatives
+ '/' literal / (or any other character)
+ CAPS a character or character sequence
+ * preceding item can be repeated zero or more times
+ ? preceding item can appear zero or one time
+ + preceding item must appear one or more times
+\end{verbatim}
+\normalsize
+
+And the pseudo BNF describing the syntax is:
+
+\footnotesize
+\begin{verbatim}
+ input ::= ( TEXT
+ | variable
+ | INDEX_OPEN input INDEX_CLOSE (loop_limits)?
+ )*
+ variable ::= DELIM_INIT (name|expression)
+ name ::= (NAME_CHARS)+
+ expression ::= DELIM_OPEN
+ (name|variable)+
+ (INDEX_OPEN num_exp INDEX_CLOSE)?
+ (':' command)*
+ DELIM_CLOSE
+ command ::= '-' (TEXT_EXP|variable)+
+ | '+' (TEXT_EXP|variable)+
+ | 'o' NUMBER ('-'|',') (NUMBER)?
+ | '#'
+ | '*' (TEXT_EXP|variable)+
+ | 's' '/' (TEXT_PATTERN)+
+ '/' (variable|TEXT_SUBST)*
+ '/' ('m'|'g'|'i'|'t')*
+ | 'y' '/' (variable|TEXT_SUBST)+
+ '/' (variable|TEXT_SUBST)*
+ '/'
+ | 'p' '/' NUMBER
+ '/' (variable|TEXT_SUBST)*
+ '/' ('r'|'l'|'c')
+ | '%' (name|variable)+
+ ('(' (TEXT_ARGS)? ')')?
+ | 'l'
+ | 'u'
+ num_exp ::= operand
+ | operand ('+'|'-'|'*'|'/'|'%') num_exp
+ operand ::= ('+'|'-')? NUMBER
+ | INDEX_MARK
+ | '(' num_exp ')'
+ | variable
+ loop_limits ::= DELIM_OPEN
+ (num_exp)? ',' (num_exp)? (',' (num_exp)?)?
+ DELIM_CLOSE
+ NUMBER ::= ('0'|...|'9')+
+ TEXT_PATTERN::= (^('/'))+
+ TEXT_SUBST ::= (^(DELIM_INIT|'/'))+
+ TEXT_ARGS ::= (^(DELIM_INIT|')'))+
+ TEXT_EXP ::= (^(DELIM_INIT|DELIM_CLOSE|':'|'+'))+
+ TEXT ::= (^(DELIM_INIT|INDEX_OPEN|INDEX_CLOSE))+
+ DELIM_INIT ::= '$'
+ DELIM_OPEN ::= '{'
+ DELIM_CLOSE ::= '}'
+ INDEX_OPEN ::= '['
+ INDEX_CLOSE ::= ']'
+ INDEX_MARK ::= '#'
+ NAME_CHARS ::= 'a'|...|'z'|'A'|...|'Z'|'0'|...|'9'
+\end{verbatim}
+\normalsize
+
+\section{Semantics}
+\index[general]{Semantics }
+
+The items listed in {\bf command} above, which always follow a colon ({\bf :})
+have the following meanings:
+
+\footnotesize
+\begin{verbatim}
+ - perform substitution if variable is empty
+ + perform substitution if variable is not empty
+ o cut out substring of the variable value
+ # length of the variable value
+ * substitute empty string if the variable value is not empty,
+ otherwise substitute the trailing parameter
+ s regular expression search and replace. The trailing
+ options are: m = multiline, i = case insensitive,
+ g = global, t = plain text (no regexp)
+ y transpose characters from class A to class B
+ p pad variable to l = left, r = right or c = center,
+ with second value.
+ % special function call (none implemented)
+ l lower case the variable value
+ u upper case the variable value
+\end{verbatim}
+\normalsize
+
+The {\bf loop\_limits} are start, step, and end values.
+
+A counter variable name followed immediately by a plus ({\bf +}) will cause
+the counter to be incremented by one.
+
+\section{Examples}
+\index[general]{Examples }
+
+To create an ISO date:
+
+\footnotesize
+\begin{verbatim}
+ DLT-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}
+\end{verbatim}
+\normalsize
+
+on 20 June 2003 would give {\bf DLT-2003-06-20}
+
+If you set the environment variable {\bf mon} to
+
+\footnotesize
+\begin{verbatim}
+ January|February|March|April|May|...
+ File-${mon[${Month}]}/${Day}/${Year}
+\end{verbatim}
+\normalsize
+
+on the first of March would give {\bf File-March/1/2003 }
--- /dev/null
+5.1.2 (26 February 2010)
--- /dev/null
+\newfont{\bighead}{cmr17 at 36pt}
+\parskip 10pt
+\parindent 0pt
+
+\title{\includegraphics{\idir bacula-logo.eps} \\ \bigskip
+ \Huge{Bacula}$^{\normalsize \textregistered}$ \Huge{Bacula Miscellaneous Guide}
+ \begin{center}
+ \large{It comes in the night and sucks
+ the essence from your computers. }
+ \end{center}
+}
+
+
+\author{Kern Sibbald}
+\date{\vspace{1.0in}\today \\
+ This manual documents Bacula version \input{version} \\
+ \vspace{0.2in}
+ Copyright {\copyright} 1999-2010, Free Software Foundation Europe
+ e.V. \\
+ Bacula {\textregistered} is a registered trademark of Kern Sibbald.\\
+ \vspace{0.2in}
+ Permission is granted to copy, distribute and/or modify this document under the terms of the
+ GNU Free Documentation License, Version 1.2 published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU Free Documentation License".
+}
+
+\maketitle
+++ /dev/null
-\newfont{\bighead}{cmr17 at 36pt}
-\parskip 10pt
-\parindent 0pt
-
-\title{\includegraphics{\idir bacula-logo.eps} \\ \bigskip
- \Huge{Bacula}$^{\normalsize \textregistered}$ \Huge{Bacula Miscellaneous Guide}
- \begin{center}
- \large{It comes in the night and sucks
- the essence from your computers. }
- \end{center}
-}
-
-
-\author{Kern Sibbald}
-\date{\vspace{1.0in}\today \\
- This manual documents Bacula version \input{version} \\
- \vspace{0.2in}
- Copyright {\copyright} 1999-2010, Free Software Foundation Europe
- e.V. \\
- Bacula {\textregistered} is a registered trademark of Kern Sibbald.\\
- \vspace{0.2in}
- Permission is granted to copy, distribute and/or modify this document under the terms of the
- GNU Free Documentation License, Version 1.2 published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled "GNU Free Documentation License".
-}
-
-\maketitle
--- /dev/null
+%%
+%%
+
+\chapter{DVD Volumes}
+\label{_DVDChapterStart}
+\index[general]{DVD Volumes}
+\index[general]{Writing DVDs}
+\index[general]{DVD Writing}
+\index[general]{Volumes!DVD}
+
+Bacula allows you to specify that you want to write to DVD. However,
+this feature is implemented only in version 1.37 or later.
+You may in fact write to DVD+RW, DVD+R, DVD-R, or DVD-RW
+media. The actual process used by Bacula is to first write
+the image to a spool directory, then when the Volume reaches
+a certain size or, at your option, at the end of a Job, Bacula
+will transfer the image from the spool directory to the
+DVD. The actual work of transferring the image is done
+by a script {\bf dvd-handler}, and the heart of that
+script is a program called {\bf growisofs} which allows
+creating or adding to a DVD ISO filesystem.
+
+You must have {\bf dvd+rw-tools} loaded on your system for DVD writing to
+work. Please note that the original {\bf dvd+rw-tools} package does {\bf
+NOT} work with Bacula. You must apply a patch which can be found in the
+{\bf patches} directory of Bacula sources with the name
+{\bf dvd+rw-tools-5.21.4.10.8.bacula.patch} for version 5.21 of the tools,
+or patch {bf dvd+rw-tools-6.1.bacula.patch} if you have version 6.1
+on your system. Unfortunately, this requires you to build the dvd\_rw-tools
+from source.
+
+Note, some Linux distros such as Debian dvd+rw-tools-7.0-4 package already
+have the patch applied, so please check.
+
+The fact that Bacula cannot use the OS to write directly
+to the DVD makes the whole process a bit more error prone than
+writing to a disk or a tape, but nevertheless, it does work if you
+use some care to set it up properly. However, at the current time
+(version 1.39.30 -- 12 December 2006) we still consider this code to be
+BETA quality. As a consequence, please do careful testing before relying
+on DVD backups in production.
+
+The remainder of this chapter explains the various directives that you can
+use to control the DVD writing.
+
+\label{DVDdirectives}
+\section{DVD Specific SD Directives}
+\index[general]{Directives!DVD}
+\index[general]{DVD Specific SD Directives }
+
+The following directives are added to the Storage daemon's
+Device resource.
+
+\begin{description}
+
+\item [Requires Mount = {\it Yes|No}]
+ \index[general]{Requires Mount }
+ You must set this directive to {\bf yes} for DVD-writers, and to {\bf no} for
+ all other devices (tapes/files). This directive indicates if the device
+ requires to be mounted using the {\bf Mount Command}.
+ To be able to write a DVD, the following directives must also be
+ defined: {\bf Mount Point}, {\bf Mount Command}, {\bf Unmount Command} and
+ {\bf Write Part Command}.
+
+\item [Mount Point = {\it directory}]
+ \index[general]{Mount Point}
+ Directory where the device can be mounted.
+
+\item [Mount Command = {\it name-string}]
+ \index[general]{Mount Command}
+ Command that must be executed to mount the device. Although the
+ device is written directly, the mount command is necessary in
+ order to determine the free space left on the DVD. Before the command is
+ executed, \%a is replaced with the Archive Device, and \%m with the Mount
+ Point.
+
+ Most frequently, you will define it as follows:
+
+\footnotesize
+\begin{verbatim}
+ Mount Command = "/bin/mount -t iso9660 -o ro %a %m"
+\end{verbatim}
+\normalsize
+
+However, if you have defined a mount point in /etc/fstab, you might be
+able to use a mount command such as:
+
+\footnotesize
+\begin{verbatim}
+ Mount Command = "/bin/mount /media/dvd"
+\end{verbatim}
+\normalsize
+
+
+\item [Unmount Command = {\it name-string}]
+ \index[general]{Unmount Command}
+ Command that must be executed to unmount the device. Before the command is
+ executed, \%a is replaced with the Archive Device, and \%m with the Mount
+ Point.
+
+ Most frequently, you will define it as follows:
+
+\footnotesize
+\begin{verbatim}
+ Unmount Command = "/bin/umount %m"
+\end{verbatim}
+\normalsize
+
+\item [Write Part Command = {\it name-string}]
+ \index[general]{Write Part Command }
+ Command that must be executed to write a part to the device. Before the
+ command is executed, \%a is replaced with the Archive Device, \%m with the
+ Mount Point, \%e is replaced with 1 if we are writing the first part,
+ and with 0 otherwise, and \%v with the current part filename.
+
+ For a DVD, you will most frequently specify the Bacula supplied {\bf
+ dvd-handler} script as follows:
+
+\footnotesize
+\begin{verbatim}
+ Write Part Command = "/path/dvd-handler %a write %e %v"
+\end{verbatim}
+\normalsize
+
+ Where {\bf /path} is the path to your scripts install directory, and
+ dvd-handler is the Bacula supplied script file.
+ This command will already be present, but commented out,
+ in the default bacula-sd.conf file. To use it, simply remove
+ the comment (\#) symbol.
+
+
+\item [Free Space Command = {\it name-string}]
+ \index[general]{Free Space Command }
+ Command that must be executed to check how much free space is left on the
+ device. Before the command is executed,\%a is replaced with the Archive
+ Device.
+
+ For a DVD, you will most frequently specify the Bacula supplied {\bf
+ dvd-handler} script as follows:
+
+\footnotesize
+\begin{verbatim}
+ Free Space Command = "/path/dvd-handler %a free"
+\end{verbatim}
+\normalsize
+
+ Where {\bf /path} is the path to your scripts install directory, and
+ dvd-handler is the Bacula supplied script file.
+ If you want to specify your own command, please look at the code in
+ dvd-handler to see what output Bacula expects from this command.
+ This command will already be present, but commented out,
+ in the default bacula-sd.conf file. To use it, simply remove
+ the comment (\#) symbol.
+
+ If you do not set it, Bacula will expect there is always free space on the
+ device.
+
+\end{description}
+
+In addition to the directives specified above, you must also
+specify the other standard Device resource directives. Please see the
+sample DVD Device resource in the default bacula-sd.conf file. Be sure
+to specify the raw device name for {\bf Archive Device}. It should
+be a name such as {\bf /dev/cdrom} or {\bf /media/cdrecorder} or
+{\bf /dev/dvd} depending on your system. It will not be a name such
+as {\bf /mnt/cdrom}.
+
+Finally, for {\bf growisofs} to work, it must be able to lock
+a certain amount of memory in RAM. If you have restrictions on
+this function, you may have failures. Under {\bf bash}, you can
+set this with the following command:
+
+\footnotesize
+\begin{verbatim}
+ulimit -l unlimited
+\end{verbatim}
+\normalsize
+
+\section{Edit Codes for DVD Directives}
+\index[general]{Directives!DVD Edit Codes}
+\index[general]{Edit Codes for DVD Directives }
+
+Before submitting the {\bf Mount Command}, {\bf Unmount Command},
+{\bf Write Part Command}, or {\bf Free Space Command} directives
+to the operating system, Bacula performs character substitution of the
+following characters:
+
+\footnotesize
+\begin{verbatim}
+ %% = %
+ %a = Archive device name
+ %e = erase (set if cannot mount and first part)
+ %n = part number
+ %m = mount point
+ %v = last part name (i.e. filename)
+\end{verbatim}
+\normalsize
+
+
+
+\section{DVD Specific Director Directives}
+\index[general]{Directives!DVD}
+\index[general]{DVD Specific Director Directives }
+
+The following directives are added to the Director's Job resource.
+
+\label{WritePartAfterJob}
+\begin{description}
+\item [Write Part After Job = \lt{}yes|no\gt{}]
+ \index[general]{Write Part After Job }
+ If this directive is set to {\bf yes} (default {\bf no}), the
+ Volume written to a temporary spool file for the current Job will
+ be written to the DVD as a new part file
+ will be created after the job is finished.
+
+ It should be set to {\bf yes} when writing to devices that require a mount
+ (for example DVD), so you are sure that the current part, containing
+ this job's data, is written to the device, and that no data is left in
+ the temporary file on the hard disk. However, on some media, like DVD+R
+ and DVD-R, a lot of space (about 10Mb) is lost everytime a part is
+ written. So, if you run several jobs each after another, you could set
+ this directive to {\bf no} for all jobs, except the last one, to avoid
+ wasting too much space, but to ensure that the data is written to the
+ medium when all jobs are finished.
+
+ This directive is ignored for devices other than DVDs.
+\end{description}
+
+
+
+\label{DVDpoints}
+\section{Other Points}
+\index[general]{Points!Other }
+\index[general]{Other Points }
+
+\begin{itemize}
+\item Please be sure that you have any automatic DVD mounting
+ disabled before running Bacula -- this includes auto mounting
+ in /etc/fstab, hotplug, ... If the DVD is automatically
+ mounted by the OS, it will cause problems when Bacula tries
+ to mount/unmount the DVD.
+\item Please be sure that you the directive {\bf Write Part After Job}
+ set to {\bf yes}, otherwise the last part of the data to be
+ written will be left in the DVD spool file and not written to
+ the DVD. The DVD will then be unreadable until this last part
+ is written. If you have a series of jobs that are run one at
+ a time, you can turn this off until the last job is run.
+\item The current code is not designed to have multiple simultaneous
+ jobs writing to the DVD. As a consequence, please ensure that
+ only one DVD backup job runs at any time.
+\item Writing and reading of DVD+RW seems to work quite reliably
+ provided you are using the patched dvd+rw-mediainfo programs.
+ On the other hand, we do not have enough information to ensure
+ that DVD-RW or other forms of DVDs work correctly.
+\item DVD+RW supports only about 1000 overwrites. Every time you
+ mount the filesystem read/write will count as one write. This can
+ add up quickly, so it is best to mount your DVD+RW filesystem read-only.
+ Bacula does not need the DVD to be mounted read-write, since it uses
+ the raw device for writing.
+\item Reformatting DVD+RW 10-20 times can apparently make the medium
+ unusable. Normally you should not have to format or reformat
+ DVD+RW media. If it is necessary, current versions of growisofs will
+ do so automatically.
+\item We have had several problems writing to DVD-RWs (this does NOT
+ concern DVD+RW), because these media have two writing-modes: {\bf
+ Incremental Sequential} and {\bf Restricted Overwrite}. Depending on
+ your device and the media you use, one of these modes may not work
+ correctly (e.g. {\bf Incremental Sequential} does not work with my NEC
+ DVD-writer and Verbatim DVD-RW).
+
+ To retrieve the current mode of a DVD-RW, run:
+\begin{verbatim}
+ dvd+rw-mediainfo /dev/xxx
+\end{verbatim}
+ where you replace xxx with your DVD device name.
+
+ {\bf Mounted Media} line should give you the information.
+
+ To set the device to {\bf Restricted Overwrite} mode, run:
+\begin{verbatim}
+ dvd+rw-format /dev/xxx
+\end{verbatim}
+ If you want to set it back to the default {\bf Incremental Sequential} mode, run:
+\begin{verbatim}
+ dvd+rw-format -blank /dev/xxx
+\end{verbatim}
+
+\item Bacula only accepts to write to blank DVDs. To quickly blank a DVD+/-RW, run
+ this command:
+\begin{verbatim}
+ dd if=/dev/zero bs=1024 count=512 | growisofs -Z /dev/xxx=/dev/fd/0
+\end{verbatim}
+ Then, try to mount the device, if it cannot be mounted, it will be considered
+ as blank by Bacula, if it can be mounted, try a full blank (see below).
+
+\item If you wish to blank completely a DVD+/-RW, use the following:
+\begin{verbatim}
+ growisofs -Z /dev/xxx=/dev/zero
+\end{verbatim}
+ where you replace xxx with your DVD device name. However, note that this
+ blanks the whole DVD, which takes quite a long time (16 minutes on mine).
+\item DVD+RW and DVD-RW support only about 1000 overwrites (i.e. don't use the
+same medium for years if you don't want to have problems...).
+
+To write to the DVD the first time use:
+\begin{verbatim}
+ growisofs -Z /dev/xxx filename
+\end{verbatim}
+
+To add additional files (more parts use):
+
+\begin{verbatim}
+ growisofs -M /dev/xxx filename
+\end{verbatim}
+
+The option {\bf -use-the-force-luke=4gms} was added in growisofs 5.20 to
+override growisofs' behavior of always checking for the 4GB limit.
+Normally, this option is recommended for all Linux 2.6.8 kernels or
+greater, since these newer kernels can handle writing more than 4GB.
+See below for more details on this subject.
+
+\item For more information about DVD writing, please look at the
+\elink{dvd+rw-tools homepage}{http://fy.chalmers.se/~appro/linux/DVD+RW/}.
+
+\item According to bug \#912, bscan cannot read multi-volume DVDs. This is
+on our TODO list, but unless someone submits a patch it is not likely to be
+done any time in the near future. (9 Sept 2007).
+
+\end{itemize}
+++ /dev/null
-%%
-%%
-
-\chapter{DVD Volumes}
-\label{_DVDChapterStart}
-\index[general]{DVD Volumes}
-\index[general]{Writing DVDs}
-\index[general]{DVD Writing}
-\index[general]{Volumes!DVD}
-
-Bacula allows you to specify that you want to write to DVD. However,
-this feature is implemented only in version 1.37 or later.
-You may in fact write to DVD+RW, DVD+R, DVD-R, or DVD-RW
-media. The actual process used by Bacula is to first write
-the image to a spool directory, then when the Volume reaches
-a certain size or, at your option, at the end of a Job, Bacula
-will transfer the image from the spool directory to the
-DVD. The actual work of transferring the image is done
-by a script {\bf dvd-handler}, and the heart of that
-script is a program called {\bf growisofs} which allows
-creating or adding to a DVD ISO filesystem.
-
-You must have {\bf dvd+rw-tools} loaded on your system for DVD writing to
-work. Please note that the original {\bf dvd+rw-tools} package does {\bf
-NOT} work with Bacula. You must apply a patch which can be found in the
-{\bf patches} directory of Bacula sources with the name
-{\bf dvd+rw-tools-5.21.4.10.8.bacula.patch} for version 5.21 of the tools,
-or patch {bf dvd+rw-tools-6.1.bacula.patch} if you have version 6.1
-on your system. Unfortunately, this requires you to build the dvd\_rw-tools
-from source.
-
-Note, some Linux distros such as Debian dvd+rw-tools-7.0-4 package already
-have the patch applied, so please check.
-
-The fact that Bacula cannot use the OS to write directly
-to the DVD makes the whole process a bit more error prone than
-writing to a disk or a tape, but nevertheless, it does work if you
-use some care to set it up properly. However, at the current time
-(version 1.39.30 -- 12 December 2006) we still consider this code to be
-BETA quality. As a consequence, please do careful testing before relying
-on DVD backups in production.
-
-The remainder of this chapter explains the various directives that you can
-use to control the DVD writing.
-
-\label{DVDdirectives}
-\section{DVD Specific SD Directives}
-\index[general]{Directives!DVD}
-\index[general]{DVD Specific SD Directives }
-
-The following directives are added to the Storage daemon's
-Device resource.
-
-\begin{description}
-
-\item [Requires Mount = {\it Yes|No}]
- \index[general]{Requires Mount }
- You must set this directive to {\bf yes} for DVD-writers, and to {\bf no} for
- all other devices (tapes/files). This directive indicates if the device
- requires to be mounted using the {\bf Mount Command}.
- To be able to write a DVD, the following directives must also be
- defined: {\bf Mount Point}, {\bf Mount Command}, {\bf Unmount Command} and
- {\bf Write Part Command}.
-
-\item [Mount Point = {\it directory}]
- \index[general]{Mount Point}
- Directory where the device can be mounted.
-
-\item [Mount Command = {\it name-string}]
- \index[general]{Mount Command}
- Command that must be executed to mount the device. Although the
- device is written directly, the mount command is necessary in
- order to determine the free space left on the DVD. Before the command is
- executed, \%a is replaced with the Archive Device, and \%m with the Mount
- Point.
-
- Most frequently, you will define it as follows:
-
-\footnotesize
-\begin{verbatim}
- Mount Command = "/bin/mount -t iso9660 -o ro %a %m"
-\end{verbatim}
-\normalsize
-
-However, if you have defined a mount point in /etc/fstab, you might be
-able to use a mount command such as:
-
-\footnotesize
-\begin{verbatim}
- Mount Command = "/bin/mount /media/dvd"
-\end{verbatim}
-\normalsize
-
-
-\item [Unmount Command = {\it name-string}]
- \index[general]{Unmount Command}
- Command that must be executed to unmount the device. Before the command is
- executed, \%a is replaced with the Archive Device, and \%m with the Mount
- Point.
-
- Most frequently, you will define it as follows:
-
-\footnotesize
-\begin{verbatim}
- Unmount Command = "/bin/umount %m"
-\end{verbatim}
-\normalsize
-
-\item [Write Part Command = {\it name-string}]
- \index[general]{Write Part Command }
- Command that must be executed to write a part to the device. Before the
- command is executed, \%a is replaced with the Archive Device, \%m with the
- Mount Point, \%e is replaced with 1 if we are writing the first part,
- and with 0 otherwise, and \%v with the current part filename.
-
- For a DVD, you will most frequently specify the Bacula supplied {\bf
- dvd-handler} script as follows:
-
-\footnotesize
-\begin{verbatim}
- Write Part Command = "/path/dvd-handler %a write %e %v"
-\end{verbatim}
-\normalsize
-
- Where {\bf /path} is the path to your scripts install directory, and
- dvd-handler is the Bacula supplied script file.
- This command will already be present, but commented out,
- in the default bacula-sd.conf file. To use it, simply remove
- the comment (\#) symbol.
-
-
-\item [Free Space Command = {\it name-string}]
- \index[general]{Free Space Command }
- Command that must be executed to check how much free space is left on the
- device. Before the command is executed,\%a is replaced with the Archive
- Device.
-
- For a DVD, you will most frequently specify the Bacula supplied {\bf
- dvd-handler} script as follows:
-
-\footnotesize
-\begin{verbatim}
- Free Space Command = "/path/dvd-handler %a free"
-\end{verbatim}
-\normalsize
-
- Where {\bf /path} is the path to your scripts install directory, and
- dvd-handler is the Bacula supplied script file.
- If you want to specify your own command, please look at the code in
- dvd-handler to see what output Bacula expects from this command.
- This command will already be present, but commented out,
- in the default bacula-sd.conf file. To use it, simply remove
- the comment (\#) symbol.
-
- If you do not set it, Bacula will expect there is always free space on the
- device.
-
-\end{description}
-
-In addition to the directives specified above, you must also
-specify the other standard Device resource directives. Please see the
-sample DVD Device resource in the default bacula-sd.conf file. Be sure
-to specify the raw device name for {\bf Archive Device}. It should
-be a name such as {\bf /dev/cdrom} or {\bf /media/cdrecorder} or
-{\bf /dev/dvd} depending on your system. It will not be a name such
-as {\bf /mnt/cdrom}.
-
-Finally, for {\bf growisofs} to work, it must be able to lock
-a certain amount of memory in RAM. If you have restrictions on
-this function, you may have failures. Under {\bf bash}, you can
-set this with the following command:
-
-\footnotesize
-\begin{verbatim}
-ulimit -l unlimited
-\end{verbatim}
-\normalsize
-
-\section{Edit Codes for DVD Directives}
-\index[general]{Directives!DVD Edit Codes}
-\index[general]{Edit Codes for DVD Directives }
-
-Before submitting the {\bf Mount Command}, {\bf Unmount Command},
-{\bf Write Part Command}, or {\bf Free Space Command} directives
-to the operating system, Bacula performs character substitution of the
-following characters:
-
-\footnotesize
-\begin{verbatim}
- %% = %
- %a = Archive device name
- %e = erase (set if cannot mount and first part)
- %n = part number
- %m = mount point
- %v = last part name (i.e. filename)
-\end{verbatim}
-\normalsize
-
-
-
-\section{DVD Specific Director Directives}
-\index[general]{Directives!DVD}
-\index[general]{DVD Specific Director Directives }
-
-The following directives are added to the Director's Job resource.
-
-\label{WritePartAfterJob}
-\begin{description}
-\item [Write Part After Job = \lt{}yes|no\gt{}]
- \index[general]{Write Part After Job }
- If this directive is set to {\bf yes} (default {\bf no}), the
- Volume written to a temporary spool file for the current Job will
- be written to the DVD as a new part file
- will be created after the job is finished.
-
- It should be set to {\bf yes} when writing to devices that require a mount
- (for example DVD), so you are sure that the current part, containing
- this job's data, is written to the device, and that no data is left in
- the temporary file on the hard disk. However, on some media, like DVD+R
- and DVD-R, a lot of space (about 10Mb) is lost everytime a part is
- written. So, if you run several jobs each after another, you could set
- this directive to {\bf no} for all jobs, except the last one, to avoid
- wasting too much space, but to ensure that the data is written to the
- medium when all jobs are finished.
-
- This directive is ignored for devices other than DVDs.
-\end{description}
-
-
-
-\label{DVDpoints}
-\section{Other Points}
-\index[general]{Points!Other }
-\index[general]{Other Points }
-
-\begin{itemize}
-\item Please be sure that you have any automatic DVD mounting
- disabled before running Bacula -- this includes auto mounting
- in /etc/fstab, hotplug, ... If the DVD is automatically
- mounted by the OS, it will cause problems when Bacula tries
- to mount/unmount the DVD.
-\item Please be sure that you the directive {\bf Write Part After Job}
- set to {\bf yes}, otherwise the last part of the data to be
- written will be left in the DVD spool file and not written to
- the DVD. The DVD will then be unreadable until this last part
- is written. If you have a series of jobs that are run one at
- a time, you can turn this off until the last job is run.
-\item The current code is not designed to have multiple simultaneous
- jobs writing to the DVD. As a consequence, please ensure that
- only one DVD backup job runs at any time.
-\item Writing and reading of DVD+RW seems to work quite reliably
- provided you are using the patched dvd+rw-mediainfo programs.
- On the other hand, we do not have enough information to ensure
- that DVD-RW or other forms of DVDs work correctly.
-\item DVD+RW supports only about 1000 overwrites. Every time you
- mount the filesystem read/write will count as one write. This can
- add up quickly, so it is best to mount your DVD+RW filesystem read-only.
- Bacula does not need the DVD to be mounted read-write, since it uses
- the raw device for writing.
-\item Reformatting DVD+RW 10-20 times can apparently make the medium
- unusable. Normally you should not have to format or reformat
- DVD+RW media. If it is necessary, current versions of growisofs will
- do so automatically.
-\item We have had several problems writing to DVD-RWs (this does NOT
- concern DVD+RW), because these media have two writing-modes: {\bf
- Incremental Sequential} and {\bf Restricted Overwrite}. Depending on
- your device and the media you use, one of these modes may not work
- correctly (e.g. {\bf Incremental Sequential} does not work with my NEC
- DVD-writer and Verbatim DVD-RW).
-
- To retrieve the current mode of a DVD-RW, run:
-\begin{verbatim}
- dvd+rw-mediainfo /dev/xxx
-\end{verbatim}
- where you replace xxx with your DVD device name.
-
- {\bf Mounted Media} line should give you the information.
-
- To set the device to {\bf Restricted Overwrite} mode, run:
-\begin{verbatim}
- dvd+rw-format /dev/xxx
-\end{verbatim}
- If you want to set it back to the default {\bf Incremental Sequential} mode, run:
-\begin{verbatim}
- dvd+rw-format -blank /dev/xxx
-\end{verbatim}
-
-\item Bacula only accepts to write to blank DVDs. To quickly blank a DVD+/-RW, run
- this command:
-\begin{verbatim}
- dd if=/dev/zero bs=1024 count=512 | growisofs -Z /dev/xxx=/dev/fd/0
-\end{verbatim}
- Then, try to mount the device, if it cannot be mounted, it will be considered
- as blank by Bacula, if it can be mounted, try a full blank (see below).
-
-\item If you wish to blank completely a DVD+/-RW, use the following:
-\begin{verbatim}
- growisofs -Z /dev/xxx=/dev/zero
-\end{verbatim}
- where you replace xxx with your DVD device name. However, note that this
- blanks the whole DVD, which takes quite a long time (16 minutes on mine).
-\item DVD+RW and DVD-RW support only about 1000 overwrites (i.e. don't use the
-same medium for years if you don't want to have problems...).
-
-To write to the DVD the first time use:
-\begin{verbatim}
- growisofs -Z /dev/xxx filename
-\end{verbatim}
-
-To add additional files (more parts use):
-
-\begin{verbatim}
- growisofs -M /dev/xxx filename
-\end{verbatim}
-
-The option {\bf -use-the-force-luke=4gms} was added in growisofs 5.20 to
-override growisofs' behavior of always checking for the 4GB limit.
-Normally, this option is recommended for all Linux 2.6.8 kernels or
-greater, since these newer kernels can handle writing more than 4GB.
-See below for more details on this subject.
-
-\item For more information about DVD writing, please look at the
-\elink{dvd+rw-tools homepage}{http://fy.chalmers.se/~appro/linux/DVD+RW/}.
-
-\item According to bug \#912, bscan cannot read multi-volume DVDs. This is
-on our TODO list, but unless someone submits a patch it is not likely to be
-done any time in the near future. (9 Sept 2007).
-
-\end{itemize}
--- /dev/null
+% TODO: maybe get rid of centering
+
+\chapter{GNU Free Documentation License}
+\index[general]{GNU Free Documentation License}
+\index[general]{License!GNU Free Documentation}
+
+\label{label_fdl}
+
+ \begin{center}
+
+ Version 1.2, November 2002
+
+
+ Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
+
+ \bigskip
+
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ \bigskip
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+\end{center}
+
+
+\begin{center}
+{\bf\large Preamble}
+\end{center}
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+\begin{center}
+{\Large\bf 1. APPLICABILITY AND DEFINITIONS}
+\end{center}
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The \textbf{"Document"}, below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as \textbf{"you"}. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A \textbf{"Modified Version"} of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The \textbf{"Cover Texts"} are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The \textbf{"Title Page"} means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as \textbf{"Acknowledgements"},
+\textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
+To \textbf{"Preserve the Title"}
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+\begin{center}
+{\Large\bf 2. VERBATIM COPYING}
+\end{center}
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+\begin{center}
+{\Large\bf 3. COPYING IN QUANTITY}
+\end{center}
+
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+\begin{center}
+{\Large\bf 4. MODIFICATIONS}
+\end{center}
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+\begin{itemize}
+\item[A.]
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+
+\item[B.]
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+
+\item[C.]
+ State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+\item[D.]
+ Preserve all the copyright notices of the Document.
+
+\item[E.]
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+\item[F.]
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+
+\item[G.]
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+
+\item[H.]
+ Include an unaltered copy of this License.
+
+\item[I.]
+ Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+
+\item[J.]
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+
+\item[K.]
+ For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+
+\item[L.]
+ Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+
+\item[M.]
+ Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+\item[N.]
+ Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+
+\item[O.]
+ Preserve any Warranty Disclaimers.
+\end{itemize}
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+\begin{center}
+{\Large\bf 5. COMBINING DOCUMENTS}
+\end{center}
+
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+\begin{center}
+{\Large\bf 6. COLLECTIONS OF DOCUMENTS}
+\end{center}
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+\begin{center}
+{\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
+\end{center}
+
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+\begin{center}
+{\Large\bf 8. TRANSLATION}
+\end{center}
+
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+\begin{center}
+{\Large\bf 9. TERMINATION}
+\end{center}
+
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+\begin{center}
+{\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE}
+\end{center}
+
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+\begin{center}
+{\Large\bf ADDENDUM: How to use this License for your documents}
+% TODO: this is too long for table of contents
+\end{center}
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+\bigskip
+\begin{quote}
+ Copyright \copyright YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+\end{quote}
+\bigskip
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+\bigskip
+\begin{quote}
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+\end{quote}
+\bigskip
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+%---------------------------------------------------------------------
+++ /dev/null
-% TODO: maybe get rid of centering
-
-\chapter{GNU Free Documentation License}
-\index[general]{GNU Free Documentation License}
-\index[general]{License!GNU Free Documentation}
-
-\label{label_fdl}
-
- \begin{center}
-
- Version 1.2, November 2002
-
-
- Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
-
- \bigskip
-
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- \bigskip
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-\end{center}
-
-
-\begin{center}
-{\bf\large Preamble}
-\end{center}
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document "free" in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-\begin{center}
-{\Large\bf 1. APPLICABILITY AND DEFINITIONS}
-\end{center}
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The \textbf{"Document"}, below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as \textbf{"you"}. You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A \textbf{"Modified Version"} of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall subject
-(or to related matters) and contains nothing that could fall directly
-within that overall subject. (Thus, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any
-mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The \textbf{"Cover Texts"} are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML, PostScript or PDF designed for human modification. Examples of
-transparent image formats include PNG, XCF and JPG. Opaque formats
-include proprietary formats that can be read and edited only by
-proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML, PostScript or PDF produced by some word
-processors for output purposes only.
-
-The \textbf{"Title Page"} means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as \textbf{"Acknowledgements"},
-\textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
-To \textbf{"Preserve the Title"}
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-
-\begin{center}
-{\Large\bf 2. VERBATIM COPYING}
-\end{center}
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-\begin{center}
-{\Large\bf 3. COPYING IN QUANTITY}
-\end{center}
-
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-
-\begin{center}
-{\Large\bf 4. MODIFICATIONS}
-\end{center}
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-\begin{itemize}
-\item[A.]
- Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-
-\item[B.]
- List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has fewer than five),
- unless they release you from this requirement.
-
-\item[C.]
- State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
-\item[D.]
- Preserve all the copyright notices of the Document.
-
-\item[E.]
- Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
-\item[F.]
- Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-
-\item[G.]
- Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-
-\item[H.]
- Include an unaltered copy of this License.
-
-\item[I.]
- Preserve the section Entitled "History", Preserve its Title, and add
- to it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section Entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-
-\item[J.]
- Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the "History" section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-
-\item[K.]
- For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section all
- the substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-
-\item[L.]
- Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-
-\item[M.]
- Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
-\item[N.]
- Do not retitle any existing section to be Entitled "Endorsements"
- or to conflict in title with any Invariant Section.
-
-\item[O.]
- Preserve any Warranty Disclaimers.
-\end{itemize}
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-\begin{center}
-{\Large\bf 5. COMBINING DOCUMENTS}
-\end{center}
-
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications". You must delete all sections
-Entitled "Endorsements".
-
-\begin{center}
-{\Large\bf 6. COLLECTIONS OF DOCUMENTS}
-\end{center}
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-
-\begin{center}
-{\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
-\end{center}
-
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-
-\begin{center}
-{\Large\bf 8. TRANSLATION}
-\end{center}
-
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-
-\begin{center}
-{\Large\bf 9. TERMINATION}
-\end{center}
-
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-\begin{center}
-{\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE}
-\end{center}
-
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-
-
-\begin{center}
-{\Large\bf ADDENDUM: How to use this License for your documents}
-% TODO: this is too long for table of contents
-\end{center}
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-\bigskip
-\begin{quote}
- Copyright \copyright YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License".
-\end{quote}
-\bigskip
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-
-\bigskip
-\begin{quote}
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
-\end{quote}
-\bigskip
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
-%---------------------------------------------------------------------
--- /dev/null
+%%
+%%
+
+\section*{GNU General Public License}
+\label{GplChapter}
+\index[general]{GNU General Public License }
+\index[general]{License!GNU General Public }
+
+\elink{image of a Philosophical
+GNU}{http://www.gnu.org/graphics/philosophicalgnu.html}
+
+\begin{itemize}
+\item
+ \elink{What to do if you see a possible GPL
+ violation}{http://www.gnu.org/copyleft/gpl-violation.html}
+\item
+ \elink{Translations of the
+ GPL}{http://www.gnu.org/copyleft/copyleft.html\#translations}
+\end{itemize}
+
+
+\section{Table of Contents}
+\index[general]{Table of Contents }
+\index[general]{Contents!Table of }
+
+\begin{itemize}
+\item
+ \label{TOC1}
+ \ilink{GNU GENERAL PUBLIC LICENSE}{SEC1}
+
+\begin{itemize}
+\item
+ \label{TOC2}
+ \ilink{Preamble}{SEC2}
+\item
+ \label{TOC3}
+ \ilink{TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+MODIFICATION}{SEC3}
+\item
+ \label{TOC4}
+ \ilink{How to Apply These Terms to Your New Programs}{SEC4}
+\end{itemize}
+
+\end{itemize}
+
+
+\section{GNU GENERAL PUBLIC LICENSE}
+\label{SEC1}
+\index[general]{GNU GENERAL PUBLIC LICENSE }
+\index[general]{LICENSE!GNU GENERAL PUBLIC }
+
+Version 2, June 1991
+
+\footnotesize
+\begin{verbatim}
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+\end{verbatim}
+\normalsize
+
+\section{Preamble}
+\label{SEC2}
+\index[general]{Preamble }
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public License is intended to
+guarantee your freedom to share and change free software\verb:--:to make sure the
+software is free for all its users. This General Public License applies to
+most of the Free Software Foundation's software and to any other program whose
+authors commit to using it. (Some other Free Software Foundation software is
+covered by the GNU Library General Public License instead.) You can apply it
+to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our
+General Public Licenses are designed to make sure that you have the freedom to
+distribute copies of free software (and charge for this service if you wish),
+that you receive source code or can get it if you want it, that you can change
+the software or use pieces of it in new free programs; and that you know you
+can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to
+deny you these rights or to ask you to surrender the rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for
+a fee, you must give the recipients all the rights that you have. You must
+make sure that they, too, receive or can get the source code. And you must
+show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2)
+offer you this license which gives you legal permission to copy, distribute
+and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that
+everyone understands that there is no warranty for this free software. If the
+software is modified by someone else and passed on, we want its recipients to
+know that what they have is not the original, so that any problems introduced
+by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We
+wish to avoid the danger that redistributors of a free program will
+individually obtain patent licenses, in effect making the program proprietary.
+To prevent this, we have made it clear that any patent must be licensed for
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification
+follow.
+
+\section{TERMS AND CONDITIONS}
+\label{SEC3}
+\index[general]{CONDITIONS!TERMS AND }
+\index[general]{TERMS AND CONDITIONS }
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+{\bf 0.} This License applies to any program or other work which contains a
+notice placed by the copyright holder saying it may be distributed under the
+terms of this General Public License. The "Program", below, refers to any
+such program or work, and a "work based on the Program" means either the
+Program or any derivative work under copyright law: that is to say, a work
+containing the Program or a portion of it, either verbatim or with
+modifications and/or translated into another language. (Hereinafter,
+translation is included without limitation in the term "modification".) Each
+licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running the Program is
+not restricted, and the output from the Program is covered only if its
+contents constitute a work based on the Program (independent of having been
+made by running the Program). Whether that is true depends on what the Program
+does.
+
+{\bf 1.} You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and give any other recipients of the
+Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+{\bf 2.} You may modify your copy or copies of the Program or any portion of
+it, thus forming a work based on the Program, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+\begin{itemize}
+\item {\bf a)} You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+\item {\bf b)} You must cause any work that you distribute or publish, that
+ in whole or in part contains or is derived from the Program or any part
+ thereof, to be licensed as a whole at no charge to all third parties under
+ the terms of this License.
+
+\item {\bf c)} If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such interactive use in
+ the most ordinary way, to print or display an announcement including an
+ appropriate copyright notice and a notice that there is no warranty (or else,
+ saying that you provide a warranty) and that users may redistribute the
+ program under these conditions, and telling the user how to view a copy of
+ this License. (Exception: if the Program itself is interactive but does not
+ normally print such an announcement, your work based on the Program is not
+ required to print an announcement.)
+\end{itemize}
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Program, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Program, the distribution of the whole must be on
+the terms of this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Program.
+
+In addition, mere aggregation of another work not based on the Program with
+the Program (or with a work based on the Program) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+
+{\bf 3.} You may copy and distribute the Program (or a work based on it, under
+Section 2) in object code or executable form under the terms of Sections 1 and
+2 above provided that you also do one of the following:
+
+\begin{itemize}
+\item {\bf a)} Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections 1 and 2
+ above on a medium customarily used for software interchange; or,
+
+\item {\bf b)} Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your cost of
+ physically performing source distribution, a complete machine-readable copy of
+ the corresponding source code, to be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+\item {\bf c)} Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is allowed only
+ for noncommercial distribution and only if you received the program in object
+ code or executable form with such an offer, in accord with Subsection b
+ above.)
+\end{itemize}
+
+The source code for a work means the preferred form of the work for making
+modifications to it. For an executable work, complete source code means all
+the source code for all modules it contains, plus any associated interface
+definition files, plus the scripts used to control compilation and
+installation of the executable. However, as a special exception, the source
+code distributed need not include anything that is normally distributed (in
+either source or binary form) with the major components (compiler, kernel, and
+so on) of the operating system on which the executable runs, unless that
+component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to
+copy from a designated place, then offering equivalent access to copy the
+source code from the same place counts as distribution of the source code,
+even though third parties are not compelled to copy the source along with the
+object code.
+
+{\bf 4.} You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt otherwise to
+copy, modify, sublicense or distribute the Program is void, and will
+automatically terminate your rights under this License. However, parties who
+have received copies, or rights, from you under this License will not have
+their licenses terminated so long as such parties remain in full compliance.
+
+{\bf 5.} You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or distribute
+the Program or its derivative works. These actions are prohibited by law if
+you do not accept this License. Therefore, by modifying or distributing the
+Program (or any work based on the Program), you indicate your acceptance of
+this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Program or works based on it.
+
+{\bf 6.} Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these terms and
+conditions. You may not impose any further restrictions on the recipients'
+exercise of the rights granted herein. You are not responsible for enforcing
+compliance by third parties to this License.
+
+{\bf 7.} If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or otherwise)
+that contradict the conditions of this License, they do not excuse you from
+the conditions of this License. If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Program at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Program by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system, which is implemented by public license practices. Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+{\bf 8.} If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Program under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded. In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+{\bf 9.} The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will be
+similar in spirit to the present version, but may differ in detail to address
+new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of this License,
+you may choose any version ever published by the Free Software Foundation.
+
+{\bf 10.} If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author to
+ask for permission. For software which is copyrighted by the Free Software
+Foundation, write to the Free Software Foundation; we sometimes make
+exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+{\bf NO WARRANTY}
+
+{\bf 11.} BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE
+THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+{\bf 12.} IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+\section{How to Apply These Terms to Your New Programs}
+\label{SEC4}
+\index[general]{Programs!How to Apply These Terms to Your New }
+\index[general]{How to Apply These Terms to Your New Programs }
+
+If you develop a new program, and you want it to be of the greatest possible
+use to the public, the best way to achieve this is to make it free software
+which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach
+them to the start of each source file to most effectively convey the exclusion
+of warranty; and each file should have at least the "copyright" line and a
+pointer to where the full notice is found.
+
+\footnotesize
+\begin{verbatim}
+{\em one line to give the program's name and an idea of what it does.}
+Copyright (C) {\em yyyy} {\em name of author}
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+02110-1301 USA
+\end{verbatim}
+\normalsize
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it
+starts in an interactive mode:
+
+\footnotesize
+\begin{verbatim}
+Gnomovision version 69, Copyright (C) {\em year} {\em name of author}
+Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+type `show w'. This is free software, and you are welcome
+to redistribute it under certain conditions; type `show c'
+for details.
+\end{verbatim}
+\normalsize
+
+The hypothetical commands {\tt `show w'} and {\tt `show c'} should show the
+appropriate parts of the General Public License. Of course, the commands you
+use may be called something other than {\tt `show w'} and {\tt `show c'}; they
+could even be mouse-clicks or menu items\verb:--:whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+\footnotesize
+\begin{verbatim}
+Yoyodyne, Inc., hereby disclaims all copyright
+interest in the program `Gnomovision'
+(which makes passes at compilers) written
+by James Hacker.
+{\em signature of Ty Coon}, 1 April 1989
+Ty Coon, President of Vice
+\end{verbatim}
+\normalsize
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General Public
+License instead of this License.
+Return to
+\elink{GNU's home page}{http://www.gnu.org/home.html}.
+
+FSF \& GNU inquiries \& questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}. Other
+\elink{ways to contact}{http://www.gnu.org/home.html\#ContactInfo} the FSF.
+
+Comments on these web pages to
+\elink{webmasters@www.gnu.org}{mailto:webmasters@www.gnu.org}, send other
+questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}.
+
+Copyright notice above.
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA
+
+Updated: 3 Jan 2000 rms
+++ /dev/null
-%%
-%%
-
-\section*{GNU General Public License}
-\label{GplChapter}
-\index[general]{GNU General Public License }
-\index[general]{License!GNU General Public }
-
-\elink{image of a Philosophical
-GNU}{http://www.gnu.org/graphics/philosophicalgnu.html}
-
-\begin{itemize}
-\item
- \elink{What to do if you see a possible GPL
- violation}{http://www.gnu.org/copyleft/gpl-violation.html}
-\item
- \elink{Translations of the
- GPL}{http://www.gnu.org/copyleft/copyleft.html\#translations}
-\end{itemize}
-
-
-\section{Table of Contents}
-\index[general]{Table of Contents }
-\index[general]{Contents!Table of }
-
-\begin{itemize}
-\item
- \label{TOC1}
- \ilink{GNU GENERAL PUBLIC LICENSE}{SEC1}
-
-\begin{itemize}
-\item
- \label{TOC2}
- \ilink{Preamble}{SEC2}
-\item
- \label{TOC3}
- \ilink{TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
-MODIFICATION}{SEC3}
-\item
- \label{TOC4}
- \ilink{How to Apply These Terms to Your New Programs}{SEC4}
-\end{itemize}
-
-\end{itemize}
-
-
-\section{GNU GENERAL PUBLIC LICENSE}
-\label{SEC1}
-\index[general]{GNU GENERAL PUBLIC LICENSE }
-\index[general]{LICENSE!GNU GENERAL PUBLIC }
-
-Version 2, June 1991
-
-\footnotesize
-\begin{verbatim}
-Copyright (C) 1989, 1991 Free Software Foundation, Inc.
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-\end{verbatim}
-\normalsize
-
-\section{Preamble}
-\label{SEC2}
-\index[general]{Preamble }
-
-The licenses for most software are designed to take away your freedom to share
-and change it. By contrast, the GNU General Public License is intended to
-guarantee your freedom to share and change free software\verb:--:to make sure the
-software is free for all its users. This General Public License applies to
-most of the Free Software Foundation's software and to any other program whose
-authors commit to using it. (Some other Free Software Foundation software is
-covered by the GNU Library General Public License instead.) You can apply it
-to your programs, too.
-
-When we speak of free software, we are referring to freedom, not price. Our
-General Public Licenses are designed to make sure that you have the freedom to
-distribute copies of free software (and charge for this service if you wish),
-that you receive source code or can get it if you want it, that you can change
-the software or use pieces of it in new free programs; and that you know you
-can do these things.
-
-To protect your rights, we need to make restrictions that forbid anyone to
-deny you these rights or to ask you to surrender the rights. These
-restrictions translate to certain responsibilities for you if you distribute
-copies of the software, or if you modify it.
-
-For example, if you distribute copies of such a program, whether gratis or for
-a fee, you must give the recipients all the rights that you have. You must
-make sure that they, too, receive or can get the source code. And you must
-show them these terms so they know their rights.
-
-We protect your rights with two steps: (1) copyright the software, and (2)
-offer you this license which gives you legal permission to copy, distribute
-and/or modify the software.
-
-Also, for each author's protection and ours, we want to make certain that
-everyone understands that there is no warranty for this free software. If the
-software is modified by someone else and passed on, we want its recipients to
-know that what they have is not the original, so that any problems introduced
-by others will not reflect on the original authors' reputations.
-
-Finally, any free program is threatened constantly by software patents. We
-wish to avoid the danger that redistributors of a free program will
-individually obtain patent licenses, in effect making the program proprietary.
-To prevent this, we have made it clear that any patent must be licensed for
-everyone's free use or not licensed at all.
-
-The precise terms and conditions for copying, distribution and modification
-follow.
-
-\section{TERMS AND CONDITIONS}
-\label{SEC3}
-\index[general]{CONDITIONS!TERMS AND }
-\index[general]{TERMS AND CONDITIONS }
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-{\bf 0.} This License applies to any program or other work which contains a
-notice placed by the copyright holder saying it may be distributed under the
-terms of this General Public License. The "Program", below, refers to any
-such program or work, and a "work based on the Program" means either the
-Program or any derivative work under copyright law: that is to say, a work
-containing the Program or a portion of it, either verbatim or with
-modifications and/or translated into another language. (Hereinafter,
-translation is included without limitation in the term "modification".) Each
-licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not covered
-by this License; they are outside its scope. The act of running the Program is
-not restricted, and the output from the Program is covered only if its
-contents constitute a work based on the Program (independent of having been
-made by running the Program). Whether that is true depends on what the Program
-does.
-
-{\bf 1.} You may copy and distribute verbatim copies of the Program's source
-code as you receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this License
-and to the absence of any warranty; and give any other recipients of the
-Program a copy of this License along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and you may
-at your option offer warranty protection in exchange for a fee.
-
-{\bf 2.} You may modify your copy or copies of the Program or any portion of
-it, thus forming a work based on the Program, and copy and distribute such
-modifications or work under the terms of Section 1 above, provided that you
-also meet all of these conditions:
-
-\begin{itemize}
-\item {\bf a)} You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
-\item {\bf b)} You must cause any work that you distribute or publish, that
- in whole or in part contains or is derived from the Program or any part
- thereof, to be licensed as a whole at no charge to all third parties under
- the terms of this License.
-
-\item {\bf c)} If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such interactive use in
- the most ordinary way, to print or display an announcement including an
- appropriate copyright notice and a notice that there is no warranty (or else,
- saying that you provide a warranty) and that users may redistribute the
- program under these conditions, and telling the user how to view a copy of
- this License. (Exception: if the Program itself is interactive but does not
- normally print such an announcement, your work based on the Program is not
- required to print an announcement.)
-\end{itemize}
-
-These requirements apply to the modified work as a whole. If identifiable
-sections of that work are not derived from the Program, and can be reasonably
-considered independent and separate works in themselves, then this License,
-and its terms, do not apply to those sections when you distribute them as
-separate works. But when you distribute the same sections as part of a whole
-which is a work based on the Program, the distribution of the whole must be on
-the terms of this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based on
-the Program.
-
-In addition, mere aggregation of another work not based on the Program with
-the Program (or with a work based on the Program) on a volume of a storage or
-distribution medium does not bring the other work under the scope of this
-License.
-
-{\bf 3.} You may copy and distribute the Program (or a work based on it, under
-Section 2) in object code or executable form under the terms of Sections 1 and
-2 above provided that you also do one of the following:
-
-\begin{itemize}
-\item {\bf a)} Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections 1 and 2
- above on a medium customarily used for software interchange; or,
-
-\item {\bf b)} Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your cost of
- physically performing source distribution, a complete machine-readable copy of
- the corresponding source code, to be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
-\item {\bf c)} Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is allowed only
- for noncommercial distribution and only if you received the program in object
- code or executable form with such an offer, in accord with Subsection b
- above.)
-\end{itemize}
-
-The source code for a work means the preferred form of the work for making
-modifications to it. For an executable work, complete source code means all
-the source code for all modules it contains, plus any associated interface
-definition files, plus the scripts used to control compilation and
-installation of the executable. However, as a special exception, the source
-code distributed need not include anything that is normally distributed (in
-either source or binary form) with the major components (compiler, kernel, and
-so on) of the operating system on which the executable runs, unless that
-component itself accompanies the executable.
-
-If distribution of executable or object code is made by offering access to
-copy from a designated place, then offering equivalent access to copy the
-source code from the same place counts as distribution of the source code,
-even though third parties are not compelled to copy the source along with the
-object code.
-
-{\bf 4.} You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt otherwise to
-copy, modify, sublicense or distribute the Program is void, and will
-automatically terminate your rights under this License. However, parties who
-have received copies, or rights, from you under this License will not have
-their licenses terminated so long as such parties remain in full compliance.
-
-{\bf 5.} You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or distribute
-the Program or its derivative works. These actions are prohibited by law if
-you do not accept this License. Therefore, by modifying or distributing the
-Program (or any work based on the Program), you indicate your acceptance of
-this License to do so, and all its terms and conditions for copying,
-distributing or modifying the Program or works based on it.
-
-{\bf 6.} Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the original
-licensor to copy, distribute or modify the Program subject to these terms and
-conditions. You may not impose any further restrictions on the recipients'
-exercise of the rights granted herein. You are not responsible for enforcing
-compliance by third parties to this License.
-
-{\bf 7.} If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or otherwise)
-that contradict the conditions of this License, they do not excuse you from
-the conditions of this License. If you cannot distribute so as to satisfy
-simultaneously your obligations under this License and any other pertinent
-obligations, then as a consequence you may not distribute the Program at all.
-For example, if a patent license would not permit royalty-free redistribution
-of the Program by all those who receive copies directly or indirectly through
-you, then the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply and
-the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or
-other property right claims or to contest validity of any such claims; this
-section has the sole purpose of protecting the integrity of the free software
-distribution system, which is implemented by public license practices. Many
-people have made generous contributions to the wide range of software
-distributed through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing to
-distribute software through any other system and a licensee cannot impose that
-choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-{\bf 8.} If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Program under this License may add an explicit
-geographical distribution limitation excluding those countries, so that
-distribution is permitted only in or among countries not thus excluded. In
-such case, this License incorporates the limitation as if written in the body
-of this License.
-
-{\bf 9.} The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will be
-similar in spirit to the present version, but may differ in detail to address
-new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any later
-version", you have the option of following the terms and conditions either of
-that version or of any later version published by the Free Software
-Foundation. If the Program does not specify a version number of this License,
-you may choose any version ever published by the Free Software Foundation.
-
-{\bf 10.} If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author to
-ask for permission. For software which is copyrighted by the Free Software
-Foundation, write to the Free Software Foundation; we sometimes make
-exceptions for this. Our decision will be guided by the two goals of
-preserving the free status of all derivatives of our free software and of
-promoting the sharing and reuse of software generally.
-
-{\bf NO WARRANTY}
-
-{\bf 11.} BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE
-THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
-IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
-THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM
-PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
-CORRECTION.
-
-{\bf 12.} IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO
-LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
-THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-\section{How to Apply These Terms to Your New Programs}
-\label{SEC4}
-\index[general]{Programs!How to Apply These Terms to Your New }
-\index[general]{How to Apply These Terms to Your New Programs }
-
-If you develop a new program, and you want it to be of the greatest possible
-use to the public, the best way to achieve this is to make it free software
-which everyone can redistribute and change under these terms.
-
-To do so, attach the following notices to the program. It is safest to attach
-them to the start of each source file to most effectively convey the exclusion
-of warranty; and each file should have at least the "copyright" line and a
-pointer to where the full notice is found.
-
-\footnotesize
-\begin{verbatim}
-{\em one line to give the program's name and an idea of what it does.}
-Copyright (C) {\em yyyy} {\em name of author}
-This program is free software; you can redistribute it and/or
-modify it under the terms of the GNU General Public License
-as published by the Free Software Foundation; either version 2
-of the License, or (at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-02110-1301 USA
-\end{verbatim}
-\normalsize
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this when it
-starts in an interactive mode:
-
-\footnotesize
-\begin{verbatim}
-Gnomovision version 69, Copyright (C) {\em year} {\em name of author}
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'. This is free software, and you are welcome
-to redistribute it under certain conditions; type `show c'
-for details.
-\end{verbatim}
-\normalsize
-
-The hypothetical commands {\tt `show w'} and {\tt `show c'} should show the
-appropriate parts of the General Public License. Of course, the commands you
-use may be called something other than {\tt `show w'} and {\tt `show c'}; they
-could even be mouse-clicks or menu items\verb:--:whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
-\footnotesize
-\begin{verbatim}
-Yoyodyne, Inc., hereby disclaims all copyright
-interest in the program `Gnomovision'
-(which makes passes at compilers) written
-by James Hacker.
-{\em signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-\end{verbatim}
-\normalsize
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General Public
-License instead of this License.
-Return to
-\elink{GNU's home page}{http://www.gnu.org/home.html}.
-
-FSF \& GNU inquiries \& questions to
-\elink{gnu@gnu.org}{mailto:gnu@gnu.org}. Other
-\elink{ways to contact}{http://www.gnu.org/home.html\#ContactInfo} the FSF.
-
-Comments on these web pages to
-\elink{webmasters@www.gnu.org}{mailto:webmasters@www.gnu.org}, send other
-questions to
-\elink{gnu@gnu.org}{mailto:gnu@gnu.org}.
-
-Copyright notice above.
-Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-Boston, MA 02110-1301 USA
-
-Updated: 3 Jan 2000 rms
--- /dev/null
+%%
+%%
+
+\chapter{The internal database is not supported, please do not
+use it.}
+\label{InternalDbChapter}
+\index[general]{Use it!The internal database is not supported please
+do not }
+\index[general]{The internal database is not supported, please do not
+use it. }
+
+\section{Internal Bacula Database}
+\index[general]{Internal Bacula Database }
+\index[general]{Database!Internal Bacula }
+
+Previously it was intended to be used primarily by Bacula developers for
+testing; although SQLite is also a good choice for this. We do not recommend
+its use in general.
+
+This database is simplistic in that it consists entirely of Bacula's internal
+structures appended sequentially to a file. Consequently, it is in most cases
+inappropriate for sites with many clients or systems with large numbers of
+files, or long-term production environments.
+
+Below, you will find a table comparing the features available with SQLite and
+MySQL and with the internal Bacula database. At the current time, you cannot
+dynamically switch from one to the other, but must rebuild the Bacula source
+code. If you wish to experiment with both, it is possible to build both
+versions of Bacula and install them into separate directories.
+
+\addcontentsline{lot}{table}{SQLite vs MySQL Database Comparison}
+\begin{longtable}{|l|l|l|}
+ \hline
+\multicolumn{1}{|c| }{\bf Feature } & \multicolumn{1}{c| }{\bf SQLite or MySQL
+ } & \multicolumn{1}{c| }{\bf Bacula } \\
+ \hline
+{Job Record } & {Yes } & {Yes } \\
+ \hline
+{Media Record } & {Yes } & {Yes } \\
+ \hline
+{FileName Record } & {Yes } & {No } \\
+ \hline
+{File Record } & {Yes } & {No } \\
+ \hline
+{FileSet Record } & {Yes } & {Yes } \\
+ \hline
+{Pool Record } & {Yes } & {Yes } \\
+ \hline
+{Client Record } & {Yes } & {Yes } \\
+ \hline
+{JobMedia Record } & {Yes } & {Yes } \\
+ \hline
+{List Job Records } & {Yes } & {Yes } \\
+ \hline
+{List Media Records } & {Yes } & {Yes } \\
+ \hline
+{List Pool Records } & {Yes } & {Yes } \\
+ \hline
+{List JobMedia Records } & {Yes } & {Yes } \\
+ \hline
+{Delete Pool Record } & {Yes } & {Yes } \\
+ \hline
+{Delete Media Record } & {Yes } & {Yes } \\
+ \hline
+{Update Pool Record } & {Yes } & {Yes } \\
+ \hline
+{Implement Verify } & {Yes } & {No } \\
+ \hline
+{MD5 Signatures } & {Yes } & {No }
+\\ \hline
+
+\end{longtable}
+
+In addition, since there is no SQL available, the Console commands: {\bf
+sqlquery}, {\bf query}, {\bf retention}, and any other command that directly
+uses SQL are not available with the Internal database.
+++ /dev/null
-%%
-%%
-
-\chapter{The internal database is not supported, please do not
-use it.}
-\label{InternalDbChapter}
-\index[general]{Use it!The internal database is not supported please
-do not }
-\index[general]{The internal database is not supported, please do not
-use it. }
-
-\section{Internal Bacula Database}
-\index[general]{Internal Bacula Database }
-\index[general]{Database!Internal Bacula }
-
-Previously it was intended to be used primarily by Bacula developers for
-testing; although SQLite is also a good choice for this. We do not recommend
-its use in general.
-
-This database is simplistic in that it consists entirely of Bacula's internal
-structures appended sequentially to a file. Consequently, it is in most cases
-inappropriate for sites with many clients or systems with large numbers of
-files, or long-term production environments.
-
-Below, you will find a table comparing the features available with SQLite and
-MySQL and with the internal Bacula database. At the current time, you cannot
-dynamically switch from one to the other, but must rebuild the Bacula source
-code. If you wish to experiment with both, it is possible to build both
-versions of Bacula and install them into separate directories.
-
-\addcontentsline{lot}{table}{SQLite vs MySQL Database Comparison}
-\begin{longtable}{|l|l|l|}
- \hline
-\multicolumn{1}{|c| }{\bf Feature } & \multicolumn{1}{c| }{\bf SQLite or MySQL
- } & \multicolumn{1}{c| }{\bf Bacula } \\
- \hline
-{Job Record } & {Yes } & {Yes } \\
- \hline
-{Media Record } & {Yes } & {Yes } \\
- \hline
-{FileName Record } & {Yes } & {No } \\
- \hline
-{File Record } & {Yes } & {No } \\
- \hline
-{FileSet Record } & {Yes } & {Yes } \\
- \hline
-{Pool Record } & {Yes } & {Yes } \\
- \hline
-{Client Record } & {Yes } & {Yes } \\
- \hline
-{JobMedia Record } & {Yes } & {Yes } \\
- \hline
-{List Job Records } & {Yes } & {Yes } \\
- \hline
-{List Media Records } & {Yes } & {Yes } \\
- \hline
-{List Pool Records } & {Yes } & {Yes } \\
- \hline
-{List JobMedia Records } & {Yes } & {Yes } \\
- \hline
-{Delete Pool Record } & {Yes } & {Yes } \\
- \hline
-{Delete Media Record } & {Yes } & {Yes } \\
- \hline
-{Update Pool Record } & {Yes } & {Yes } \\
- \hline
-{Implement Verify } & {Yes } & {No } \\
- \hline
-{MD5 Signatures } & {Yes } & {No }
-\\ \hline
-
-\end{longtable}
-
-In addition, since there is no SQL available, the Console commands: {\bf
-sqlquery}, {\bf query}, {\bf retention}, and any other command that directly
-uses SQL are not available with the Internal database.
--- /dev/null
+%%
+%%
+
+\section*{GNU Lesser General Public License}
+\label{LesserChapter}
+\index[general]{GNU Lesser General Public License }
+\index[general]{License!GNU Lesser General Public }
+
+\elink{image of a Philosophical GNU}
+{http://www.gnu.org/graphics/philosophicalgnu.html} [
+\elink{English}{http://www.gnu.org/copyleft/lesser.html} |
+\elink{Japanese}{http://www.gnu.org/copyleft/lesser.ja.html} ]
+
+\begin{itemize}
+\item
+ \elink{Why you shouldn't use the Lesser GPL for your next
+ library}{http://www.gnu.org/philosophy/why-not-lgpl.html}
+\item
+ \elink{What to do if you see a possible LGPL
+ violation}{http://www.gnu.org/copyleft/gpl-violation.html}
+\item
+ \elink{Translations of the LGPL}
+{http://www.gnu.org/copyleft/copyleft.html\#translationsLGPL}
+\item The GNU Lesser General Public License as a
+ \elink{text file}{http://www.gnu.org/copyleft/lesser.txt}
+\item The GNU Lesser General Public License as a
+ \elink{Texinfo}{http://www.gnu.org/copyleft/lesser.texi} file
+ \end{itemize}
+
+
+This GNU Lesser General Public License counts as the successor of the GNU
+Library General Public License. For an explanation of why this change was
+necessary, read the
+\elink{Why you shouldn't use the Lesser GPL for your next
+library}{http://www.gnu.org/philosophy/why-not-lgpl.html} article.
+
+\section{Table of Contents}
+\index[general]{Table of Contents }
+\index[general]{Contents!Table of }
+
+\begin{itemize}
+\item
+ \label{TOC12}
+ \ilink{GNU LESSER GENERAL PUBLIC LICENSE}{SEC12}
+
+\begin{itemize}
+\item
+ \label{TOC23}
+ \ilink{Preamble}{SEC23}
+\item
+ \label{TOC34}
+ \ilink{TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
+MODIFICATION}{SEC34}
+\item
+ \label{TOC45}
+ \ilink{How to Apply These Terms to Your New Libraries}{SEC45}
+\end{itemize}
+
+\end{itemize}
+
+
+\section{GNU LESSER GENERAL PUBLIC LICENSE}
+\label{SEC12}
+\index[general]{LICENSE!GNU LESSER GENERAL PUBLIC }
+\index[general]{GNU LESSER GENERAL PUBLIC LICENSE }
+
+Version 2.1, February 1999
+
+\footnotesize
+\begin{verbatim}
+Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+\end{verbatim}
+\normalsize
+
+\section{Preamble}
+\label{SEC23}
+\index[general]{Preamble }
+
+The licenses for most software are designed to take away your freedom to share
+and change it. By contrast, the GNU General Public Licenses are intended to
+guarantee your freedom to share and change free software\verb:--:to make sure the
+software is free for all its users.
+
+This license, the Lesser General Public License, applies to some specially
+designated software packages\verb:--:typically libraries\verb:--:of the Free Software
+Foundation and other authors who decide to use it. You can use it too, but we
+suggest you first think carefully about whether this license or the ordinary
+General Public License is the better strategy to use in any particular case,
+based on the explanations below.
+
+When we speak of free software, we are referring to freedom of use, not price.
+Our General Public Licenses are designed to make sure that you have the
+freedom to distribute copies of free software (and charge for this service if
+you wish); that you receive source code or can get it if you want it; that you
+can change the software and use pieces of it in new free programs; and that
+you are informed that you can do these things.
+
+To protect your rights, we need to make restrictions that forbid distributors
+to deny you these rights or to ask you to surrender these rights. These
+restrictions translate to certain responsibilities for you if you distribute
+copies of the library or if you modify it.
+
+For example, if you distribute copies of the library, whether gratis or for a
+fee, you must give the recipients all the rights that we gave you. You must
+make sure that they, too, receive or can get the source code. If you link
+other code with the library, you must provide complete object files to the
+recipients, so that they can relink them with the library after making changes
+to the library and recompiling it. And you must show them these terms so they
+know their rights.
+
+We protect your rights with a two-step method: (1) we copyright the library,
+and (2) we offer you this license, which gives you legal permission to copy,
+distribute and/or modify the library.
+
+To protect each distributor, we want to make it very clear that there is no
+warranty for the free library. Also, if the library is modified by someone
+else and passed on, the recipients should know that what they have is not the
+original version, so that the original author's reputation will not be
+affected by problems that might be introduced by others.
+
+Finally, software patents pose a constant threat to the existence of any free
+program. We wish to make sure that a company cannot effectively restrict the
+users of a free program by obtaining a restrictive license from a patent
+holder. Therefore, we insist that any patent license obtained for a version of
+the library must be consistent with the full freedom of use specified in this
+license.
+
+Most GNU software, including some libraries, is covered by the ordinary GNU
+General Public License. This license, the GNU Lesser General Public License,
+applies to certain designated libraries, and is quite different from the
+ordinary General Public License. We use this license for certain libraries in
+order to permit linking those libraries into non-free programs.
+
+When a program is linked with a library, whether statically or using a shared
+library, the combination of the two is legally speaking a combined work, a
+derivative of the original library. The ordinary General Public License
+therefore permits such linking only if the entire combination fits its
+criteria of freedom. The Lesser General Public License permits more lax
+criteria for linking other code with the library.
+
+We call this license the "Lesser" General Public License because it does
+Less to protect the user's freedom than the ordinary General Public License.
+It also provides other free software developers Less of an advantage over
+competing non-free programs. These disadvantages are the reason we use the
+ordinary General Public License for many libraries. However, the Lesser
+license provides advantages in certain special circumstances.
+
+For example, on rare occasions, there may be a special need to encourage the
+widest possible use of a certain library, so that it becomes a de-facto
+standard. To achieve this, non-free programs must be allowed to use the
+library. A more frequent case is that a free library does the same job as
+widely used non-free libraries. In this case, there is little to gain by
+limiting the free library to free software only, so we use the Lesser General
+Public License.
+
+In other cases, permission to use a particular library in non-free programs
+enables a greater number of people to use a large body of free software. For
+example, permission to use the GNU C Library in non-free programs enables many
+more people to use the whole GNU operating system, as well as its variant, the
+GNU/Linux operating system.
+
+Although the Lesser General Public License is Less protective of the users'
+freedom, it does ensure that the user of a program that is linked with the
+Library has the freedom and the wherewithal to run that program using a
+modified version of the Library.
+
+The precise terms and conditions for copying, distribution and modification
+follow. Pay close attention to the difference between a "work based on the
+library" and a "work that uses the library". The former contains code
+derived from the library, whereas the latter must be combined with the library
+in order to run.
+
+\section{TERMS AND CONDITIONS}
+\label{SEC34}
+\index[general]{CONDITIONS!TERMS AND }
+\index[general]{TERMS AND CONDITIONS }
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+{\bf 0.} This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or other
+authorized party saying it may be distributed under the terms of this Lesser
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+A "library" means a collection of software functions and/or data prepared so
+as to be conveniently linked with application programs (which use some of
+those functions and data) to form executables.
+
+The "Library", below, refers to any such software library or work which has
+been distributed under these terms. A "work based on the Library" means
+either the Library or any derivative work under copyright law: that is to say,
+a work containing the Library or a portion of it, either verbatim or with
+modifications and/or translated straightforwardly into another language.
+(Hereinafter, translation is included without limitation in the term
+"modification".)
+
+"Source code" for a work means the preferred form of the work for making
+modifications to it. For a library, complete source code means all the source
+code for all modules it contains, plus any associated interface definition
+files, plus the scripts used to control compilation and installation of the
+library.
+
+Activities other than copying, distribution and modification are not covered
+by this License; they are outside its scope. The act of running a program
+using the Library is not restricted, and output from such a program is covered
+only if its contents constitute a work based on the Library (independent of
+the use of the Library in a tool for writing it). Whether that is true depends
+on what the Library does and what the program that uses the Library does.
+
+{\bf 1.} You may copy and distribute verbatim copies of the Library's complete
+source code as you receive it, in any medium, provided that you conspicuously
+and appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this License
+and to the absence of any warranty; and distribute a copy of this License
+along with the Library.
+
+You may charge a fee for the physical act of transferring a copy, and you may
+at your option offer warranty protection in exchange for a fee.
+
+{\bf 2.} You may modify your copy or copies of the Library or any portion of
+it, thus forming a work based on the Library, and copy and distribute such
+modifications or work under the terms of Section 1 above, provided that you
+also meet all of these conditions:
+
+\begin{itemize}
+\item {\bf a)} The modified work must itself be a software library.
+\item {\bf b)} You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+\item {\bf c)} You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+\item {\bf d)} If a facility in the modified Library refers to a function or
+ a table of data to be supplied by an application program that uses the
+ facility, other than as an argument passed when the facility is invoked, then
+you must make a good faith effort to ensure that, in the event an application
+does not supply such function or table, the facility still operates, and
+performs whatever part of its purpose remains meaningful.
+
+(For example, a function in a library to compute square roots has a purpose
+that is entirely well-defined independent of the application. Therefore,
+Subsection 2d requires that any application-supplied function or table used
+by this function must be optional: if the application does not supply it, the
+square root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If identifiable
+sections of that work are not derived from the Library, and can be reasonably
+considered independent and separate works in themselves, then this License,
+and its terms, do not apply to those sections when you distribute them as
+separate works. But when you distribute the same sections as part of a whole
+which is a work based on the Library, the distribution of the whole must be
+on the terms of this License, whose permissions for other licensees extend to
+the entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest your
+rights to work written entirely by you; rather, the intent is to exercise the
+right to control the distribution of derivative or collective works based on
+the Library.
+
+In addition, mere aggregation of another work not based on the Library with
+the Library (or with a work based on the Library) on a volume of a storage or
+distribution medium does not bring the other work under the scope of this
+License.
+\end{itemize}
+
+{\bf 3.} You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do this,
+you must alter all the notices that refer to this License, so that they refer
+to the ordinary GNU General Public License, version 2, instead of to this
+License. (If a newer version than version 2 of the ordinary GNU General Public
+License has appeared, then you can specify that version instead if you wish.)
+Do not make any other change in these notices.
+
+Once this change is made in a given copy, it is irreversible for that copy, so
+the ordinary GNU General Public License applies to all subsequent copies and
+derivative works made from that copy.
+
+This option is useful when you wish to copy part of the code of the Library
+into a program that is not a library.
+
+{\bf 4.} You may copy and distribute the Library (or a portion or derivative
+of it, under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you accompany it with the complete
+corresponding machine-readable source code, which must be distributed under
+the terms of Sections 1 and 2 above on a medium customarily used for software
+interchange.
+
+If distribution of object code is made by offering access to copy from a
+designated place, then offering equivalent access to copy the source code from
+the same place satisfies the requirement to distribute the source code, even
+though third parties are not compelled to copy the source along with the
+object code.
+
+{\bf 5.} A program that contains no derivative of any portion of the Library,
+but is designed to work with the Library by being compiled or linked with it,
+is called a "work that uses the Library". Such a work, in isolation, is not
+a derivative work of the Library, and therefore falls outside the scope of
+this License.
+
+However, linking a "work that uses the Library" with the Library creates an
+executable that is a derivative of the Library (because it contains portions
+of the Library), rather than a "work that uses the library". The executable
+is therefore covered by this License. Section 6 states terms for distribution
+of such executables.
+
+When a "work that uses the Library" uses material from a header file that is
+part of the Library, the object code for the work may be a derivative work of
+the Library even though the source code is not. Whether this is true is
+especially significant if the work can be linked without the Library, or if
+the work is itself a library. The threshold for this to be true is not
+precisely defined by law.
+
+If such an object file uses only numerical parameters, data structure layouts
+and accessors, and small macros and small inline functions (ten lines or less
+in length), then the use of the object file is unrestricted, regardless of
+whether it is legally a derivative work. (Executables containing this object
+code plus portions of the Library will still fall under Section 6.)
+
+Otherwise, if the work is a derivative of the Library, you may distribute the
+object code for the work under the terms of Section 6. Any executables
+containing that work also fall under Section 6, whether or not they are linked
+directly with the Library itself.
+
+{\bf 6.} As an exception to the Sections above, you may also combine or link a
+"work that uses the Library" with the Library to produce a work containing
+portions of the Library, and distribute that work under terms of your choice,
+provided that the terms permit modification of the work for the customer's own
+use and reverse engineering for debugging such modifications.
+
+You must give prominent notice with each copy of the work that the Library is
+used in it and that the Library and its use are covered by this License. You
+must supply a copy of this License. If the work during execution displays
+copyright notices, you must include the copyright notice for the Library among
+them, as well as a reference directing the user to the copy of this License.
+Also, you must do one of these things:
+
+\begin{itemize}
+\item {\bf a)} Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever changes were
+ used in the work (which must be distributed under Sections 1 and 2 above);
+and, if the work is an executable linked with the Library, with the complete
+machine-readable "work that uses the Library", as object code and/or source
+code, so that the user can modify the Library and then relink to produce a
+modified executable containing the modified Library. (It is understood that
+the user who changes the contents of definitions files in the Library will
+not necessarily be able to recompile the application to use the modified
+definitions.)
+\item {\bf b)} Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a copy of the
+ library already present on the user's computer system, rather than copying
+library functions into the executable, and (2) will operate properly with a
+modified version of the library, if the user installs one, as long as the
+modified version is interface-compatible with the version that the work was
+made with.
+\item {\bf c)} Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in Subsection 6a,
+ above, for a charge no more than the cost of performing this distribution.
+\item {\bf d)} If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above specified
+ materials from the same place.
+\item {\bf e)} Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+ \end{itemize}
+
+For an executable, the required form of the "work that uses the Library"
+must include any data and utility programs needed for reproducing the
+executable from it. However, as a special exception, the materials to be
+distributed need not include anything that is normally distributed (in either
+source or binary form) with the major components (compiler, kernel, and so on)
+of the operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+It may happen that this requirement contradicts the license restrictions of
+other proprietary libraries that do not normally accompany the operating
+system. Such a contradiction means you cannot use both them and the Library
+together in an executable that you distribute.
+
+{\bf 7.} You may place library facilities that are a work based on the Library
+side-by-side in a single library together with other library facilities not
+covered by this License, and distribute such a combined library, provided that
+the separate distribution of the work based on the Library and of the other
+library facilities is otherwise permitted, and provided that you do these two
+things:
+
+\begin{itemize}
+\item {\bf a)} Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library facilities. This must
+ be distributed under the terms of the Sections above.
+\item {\bf b)} Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining where to find
+ the accompanying uncombined form of the same work.
+\end{itemize}
+
+{\bf 8.} You may not copy, modify, sublicense, link with, or distribute the
+Library except as expressly provided under this License. Any attempt otherwise
+to copy, modify, sublicense, link with, or distribute the Library is void, and
+will automatically terminate your rights under this License. However, parties
+who have received copies, or rights, from you under this License will not have
+their licenses terminated so long as such parties remain in full compliance.
+
+{\bf 9.} You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or distribute
+the Library or its derivative works. These actions are prohibited by law if
+you do not accept this License. Therefore, by modifying or distributing the
+Library (or any work based on the Library), you indicate your acceptance of
+this License to do so, and all its terms and conditions for copying,
+distributing or modifying the Library or works based on it.
+
+{\bf 10.} Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the original
+licensor to copy, distribute, link with or modify the Library subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein. You are not responsible for
+enforcing compliance by third parties with this License.
+
+{\bf 11.} If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or otherwise)
+that contradict the conditions of this License, they do not excuse you from
+the conditions of this License. If you cannot distribute so as to satisfy
+simultaneously your obligations under this License and any other pertinent
+obligations, then as a consequence you may not distribute the Library at all.
+For example, if a patent license would not permit royalty-free redistribution
+of the Library by all those who receive copies directly or indirectly through
+you, then the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply, and
+the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or
+other property right claims or to contest validity of any such claims; this
+section has the sole purpose of protecting the integrity of the free software
+distribution system which is implemented by public license practices. Many
+people have made generous contributions to the wide range of software
+distributed through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing to
+distribute software through any other system and a licensee cannot impose that
+choice.
+
+This section is intended to make thoroughly clear what is believed to be a
+consequence of the rest of this License.
+
+{\bf 12.} If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the original
+copyright holder who places the Library under this License may add an explicit
+geographical distribution limitation excluding those countries, so that
+distribution is permitted only in or among countries not thus excluded. In
+such case, this License incorporates the limitation as if written in the body
+of this License.
+
+{\bf 13.} The Free Software Foundation may publish revised and/or new versions
+of the Lesser General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and "any later
+version", you have the option of following the terms and conditions either of
+that version or of any later version published by the Free Software
+Foundation. If the Library does not specify a license version number, you may
+choose any version ever published by the Free Software Foundation.
+
+{\bf 14.} If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these, write to
+the author to ask for permission. For software which is copyrighted by the
+Free Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals of
+preserving the free status of all derivatives of our free software and of
+promoting the sharing and reuse of software generally.
+
+{\bf NO WARRANTY}
+
+{\bf 15.} BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE
+THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
+IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
+THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
+CORRECTION.
+
+{\bf 16.} IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
+LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
+THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+\section{How to Apply These Terms to Your New Libraries}
+\label{SEC45}
+\index[general]{Libraries!How to Apply These Terms to Your New }
+\index[general]{How to Apply These Terms to Your New Libraries }
+
+
+If you develop a new library, and you want it to be of the greatest possible
+use to the public, we recommend making it free software that everyone can
+redistribute and change. You can do so by permitting redistribution under
+these terms (or, alternatively, under the terms of the ordinary General Public
+License).
+
+To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+\footnotesize
+\begin{verbatim}
+{\it one line to give the library's name and an idea of what it does.}
+Copyright (C) {\it year} {\it name of author}
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Lesser General Public License for more details.
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
+USA
+\end{verbatim}
+\normalsize
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+\footnotesize
+\begin{verbatim}
+Yoyodyne, Inc., hereby disclaims all copyright interest in
+the library "Frob" (a library for tweaking knobs) written
+by James Random Hacker.
+{\it signature of Ty Coon}, 1 April 1990
+Ty Coon, President of Vice
+\end{verbatim}
+\normalsize
+
+That's all there is to it!
+Return to
+\elink{GNU's home page}{http://www.gnu.org/home.html}.
+
+FSF \& GNU inquiries \& questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}. Other
+\elink{ways to contact}{http://www.gnu.org/home.html\#ContactInfo} the FSF.
+
+Comments on these web pages to
+\elink{webmasters@www.gnu.org}{mailto:webmasters@www.gnu.org}, send other
+questions to
+\elink{gnu@gnu.org}{mailto:gnu@gnu.org}.
+
+Copyright notice above.
+Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+Boston, MA 02110-1301 USA
+USA
+
+Updated: 27 Nov 2000 paulv
+++ /dev/null
-%%
-%%
-
-\section*{GNU Lesser General Public License}
-\label{LesserChapter}
-\index[general]{GNU Lesser General Public License }
-\index[general]{License!GNU Lesser General Public }
-
-\elink{image of a Philosophical GNU}
-{http://www.gnu.org/graphics/philosophicalgnu.html} [
-\elink{English}{http://www.gnu.org/copyleft/lesser.html} |
-\elink{Japanese}{http://www.gnu.org/copyleft/lesser.ja.html} ]
-
-\begin{itemize}
-\item
- \elink{Why you shouldn't use the Lesser GPL for your next
- library}{http://www.gnu.org/philosophy/why-not-lgpl.html}
-\item
- \elink{What to do if you see a possible LGPL
- violation}{http://www.gnu.org/copyleft/gpl-violation.html}
-\item
- \elink{Translations of the LGPL}
-{http://www.gnu.org/copyleft/copyleft.html\#translationsLGPL}
-\item The GNU Lesser General Public License as a
- \elink{text file}{http://www.gnu.org/copyleft/lesser.txt}
-\item The GNU Lesser General Public License as a
- \elink{Texinfo}{http://www.gnu.org/copyleft/lesser.texi} file
- \end{itemize}
-
-
-This GNU Lesser General Public License counts as the successor of the GNU
-Library General Public License. For an explanation of why this change was
-necessary, read the
-\elink{Why you shouldn't use the Lesser GPL for your next
-library}{http://www.gnu.org/philosophy/why-not-lgpl.html} article.
-
-\section{Table of Contents}
-\index[general]{Table of Contents }
-\index[general]{Contents!Table of }
-
-\begin{itemize}
-\item
- \label{TOC12}
- \ilink{GNU LESSER GENERAL PUBLIC LICENSE}{SEC12}
-
-\begin{itemize}
-\item
- \label{TOC23}
- \ilink{Preamble}{SEC23}
-\item
- \label{TOC34}
- \ilink{TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND
-MODIFICATION}{SEC34}
-\item
- \label{TOC45}
- \ilink{How to Apply These Terms to Your New Libraries}{SEC45}
-\end{itemize}
-
-\end{itemize}
-
-
-\section{GNU LESSER GENERAL PUBLIC LICENSE}
-\label{SEC12}
-\index[general]{LICENSE!GNU LESSER GENERAL PUBLIC }
-\index[general]{GNU LESSER GENERAL PUBLIC LICENSE }
-
-Version 2.1, February 1999
-
-\footnotesize
-\begin{verbatim}
-Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-\end{verbatim}
-\normalsize
-
-\section{Preamble}
-\label{SEC23}
-\index[general]{Preamble }
-
-The licenses for most software are designed to take away your freedom to share
-and change it. By contrast, the GNU General Public Licenses are intended to
-guarantee your freedom to share and change free software\verb:--:to make sure the
-software is free for all its users.
-
-This license, the Lesser General Public License, applies to some specially
-designated software packages\verb:--:typically libraries\verb:--:of the Free Software
-Foundation and other authors who decide to use it. You can use it too, but we
-suggest you first think carefully about whether this license or the ordinary
-General Public License is the better strategy to use in any particular case,
-based on the explanations below.
-
-When we speak of free software, we are referring to freedom of use, not price.
-Our General Public Licenses are designed to make sure that you have the
-freedom to distribute copies of free software (and charge for this service if
-you wish); that you receive source code or can get it if you want it; that you
-can change the software and use pieces of it in new free programs; and that
-you are informed that you can do these things.
-
-To protect your rights, we need to make restrictions that forbid distributors
-to deny you these rights or to ask you to surrender these rights. These
-restrictions translate to certain responsibilities for you if you distribute
-copies of the library or if you modify it.
-
-For example, if you distribute copies of the library, whether gratis or for a
-fee, you must give the recipients all the rights that we gave you. You must
-make sure that they, too, receive or can get the source code. If you link
-other code with the library, you must provide complete object files to the
-recipients, so that they can relink them with the library after making changes
-to the library and recompiling it. And you must show them these terms so they
-know their rights.
-
-We protect your rights with a two-step method: (1) we copyright the library,
-and (2) we offer you this license, which gives you legal permission to copy,
-distribute and/or modify the library.
-
-To protect each distributor, we want to make it very clear that there is no
-warranty for the free library. Also, if the library is modified by someone
-else and passed on, the recipients should know that what they have is not the
-original version, so that the original author's reputation will not be
-affected by problems that might be introduced by others.
-
-Finally, software patents pose a constant threat to the existence of any free
-program. We wish to make sure that a company cannot effectively restrict the
-users of a free program by obtaining a restrictive license from a patent
-holder. Therefore, we insist that any patent license obtained for a version of
-the library must be consistent with the full freedom of use specified in this
-license.
-
-Most GNU software, including some libraries, is covered by the ordinary GNU
-General Public License. This license, the GNU Lesser General Public License,
-applies to certain designated libraries, and is quite different from the
-ordinary General Public License. We use this license for certain libraries in
-order to permit linking those libraries into non-free programs.
-
-When a program is linked with a library, whether statically or using a shared
-library, the combination of the two is legally speaking a combined work, a
-derivative of the original library. The ordinary General Public License
-therefore permits such linking only if the entire combination fits its
-criteria of freedom. The Lesser General Public License permits more lax
-criteria for linking other code with the library.
-
-We call this license the "Lesser" General Public License because it does
-Less to protect the user's freedom than the ordinary General Public License.
-It also provides other free software developers Less of an advantage over
-competing non-free programs. These disadvantages are the reason we use the
-ordinary General Public License for many libraries. However, the Lesser
-license provides advantages in certain special circumstances.
-
-For example, on rare occasions, there may be a special need to encourage the
-widest possible use of a certain library, so that it becomes a de-facto
-standard. To achieve this, non-free programs must be allowed to use the
-library. A more frequent case is that a free library does the same job as
-widely used non-free libraries. In this case, there is little to gain by
-limiting the free library to free software only, so we use the Lesser General
-Public License.
-
-In other cases, permission to use a particular library in non-free programs
-enables a greater number of people to use a large body of free software. For
-example, permission to use the GNU C Library in non-free programs enables many
-more people to use the whole GNU operating system, as well as its variant, the
-GNU/Linux operating system.
-
-Although the Lesser General Public License is Less protective of the users'
-freedom, it does ensure that the user of a program that is linked with the
-Library has the freedom and the wherewithal to run that program using a
-modified version of the Library.
-
-The precise terms and conditions for copying, distribution and modification
-follow. Pay close attention to the difference between a "work based on the
-library" and a "work that uses the library". The former contains code
-derived from the library, whereas the latter must be combined with the library
-in order to run.
-
-\section{TERMS AND CONDITIONS}
-\label{SEC34}
-\index[general]{CONDITIONS!TERMS AND }
-\index[general]{TERMS AND CONDITIONS }
-
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-{\bf 0.} This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or other
-authorized party saying it may be distributed under the terms of this Lesser
-General Public License (also called "this License"). Each licensee is
-addressed as "you".
-
-A "library" means a collection of software functions and/or data prepared so
-as to be conveniently linked with application programs (which use some of
-those functions and data) to form executables.
-
-The "Library", below, refers to any such software library or work which has
-been distributed under these terms. A "work based on the Library" means
-either the Library or any derivative work under copyright law: that is to say,
-a work containing the Library or a portion of it, either verbatim or with
-modifications and/or translated straightforwardly into another language.
-(Hereinafter, translation is included without limitation in the term
-"modification".)
-
-"Source code" for a work means the preferred form of the work for making
-modifications to it. For a library, complete source code means all the source
-code for all modules it contains, plus any associated interface definition
-files, plus the scripts used to control compilation and installation of the
-library.
-
-Activities other than copying, distribution and modification are not covered
-by this License; they are outside its scope. The act of running a program
-using the Library is not restricted, and output from such a program is covered
-only if its contents constitute a work based on the Library (independent of
-the use of the Library in a tool for writing it). Whether that is true depends
-on what the Library does and what the program that uses the Library does.
-
-{\bf 1.} You may copy and distribute verbatim copies of the Library's complete
-source code as you receive it, in any medium, provided that you conspicuously
-and appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this License
-and to the absence of any warranty; and distribute a copy of this License
-along with the Library.
-
-You may charge a fee for the physical act of transferring a copy, and you may
-at your option offer warranty protection in exchange for a fee.
-
-{\bf 2.} You may modify your copy or copies of the Library or any portion of
-it, thus forming a work based on the Library, and copy and distribute such
-modifications or work under the terms of Section 1 above, provided that you
-also meet all of these conditions:
-
-\begin{itemize}
-\item {\bf a)} The modified work must itself be a software library.
-\item {\bf b)} You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-\item {\bf c)} You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-\item {\bf d)} If a facility in the modified Library refers to a function or
- a table of data to be supplied by an application program that uses the
- facility, other than as an argument passed when the facility is invoked, then
-you must make a good faith effort to ensure that, in the event an application
-does not supply such function or table, the facility still operates, and
-performs whatever part of its purpose remains meaningful.
-
-(For example, a function in a library to compute square roots has a purpose
-that is entirely well-defined independent of the application. Therefore,
-Subsection 2d requires that any application-supplied function or table used
-by this function must be optional: if the application does not supply it, the
-square root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If identifiable
-sections of that work are not derived from the Library, and can be reasonably
-considered independent and separate works in themselves, then this License,
-and its terms, do not apply to those sections when you distribute them as
-separate works. But when you distribute the same sections as part of a whole
-which is a work based on the Library, the distribution of the whole must be
-on the terms of this License, whose permissions for other licensees extend to
-the entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest your
-rights to work written entirely by you; rather, the intent is to exercise the
-right to control the distribution of derivative or collective works based on
-the Library.
-
-In addition, mere aggregation of another work not based on the Library with
-the Library (or with a work based on the Library) on a volume of a storage or
-distribution medium does not bring the other work under the scope of this
-License.
-\end{itemize}
-
-{\bf 3.} You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do this,
-you must alter all the notices that refer to this License, so that they refer
-to the ordinary GNU General Public License, version 2, instead of to this
-License. (If a newer version than version 2 of the ordinary GNU General Public
-License has appeared, then you can specify that version instead if you wish.)
-Do not make any other change in these notices.
-
-Once this change is made in a given copy, it is irreversible for that copy, so
-the ordinary GNU General Public License applies to all subsequent copies and
-derivative works made from that copy.
-
-This option is useful when you wish to copy part of the code of the Library
-into a program that is not a library.
-
-{\bf 4.} You may copy and distribute the Library (or a portion or derivative
-of it, under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you accompany it with the complete
-corresponding machine-readable source code, which must be distributed under
-the terms of Sections 1 and 2 above on a medium customarily used for software
-interchange.
-
-If distribution of object code is made by offering access to copy from a
-designated place, then offering equivalent access to copy the source code from
-the same place satisfies the requirement to distribute the source code, even
-though third parties are not compelled to copy the source along with the
-object code.
-
-{\bf 5.} A program that contains no derivative of any portion of the Library,
-but is designed to work with the Library by being compiled or linked with it,
-is called a "work that uses the Library". Such a work, in isolation, is not
-a derivative work of the Library, and therefore falls outside the scope of
-this License.
-
-However, linking a "work that uses the Library" with the Library creates an
-executable that is a derivative of the Library (because it contains portions
-of the Library), rather than a "work that uses the library". The executable
-is therefore covered by this License. Section 6 states terms for distribution
-of such executables.
-
-When a "work that uses the Library" uses material from a header file that is
-part of the Library, the object code for the work may be a derivative work of
-the Library even though the source code is not. Whether this is true is
-especially significant if the work can be linked without the Library, or if
-the work is itself a library. The threshold for this to be true is not
-precisely defined by law.
-
-If such an object file uses only numerical parameters, data structure layouts
-and accessors, and small macros and small inline functions (ten lines or less
-in length), then the use of the object file is unrestricted, regardless of
-whether it is legally a derivative work. (Executables containing this object
-code plus portions of the Library will still fall under Section 6.)
-
-Otherwise, if the work is a derivative of the Library, you may distribute the
-object code for the work under the terms of Section 6. Any executables
-containing that work also fall under Section 6, whether or not they are linked
-directly with the Library itself.
-
-{\bf 6.} As an exception to the Sections above, you may also combine or link a
-"work that uses the Library" with the Library to produce a work containing
-portions of the Library, and distribute that work under terms of your choice,
-provided that the terms permit modification of the work for the customer's own
-use and reverse engineering for debugging such modifications.
-
-You must give prominent notice with each copy of the work that the Library is
-used in it and that the Library and its use are covered by this License. You
-must supply a copy of this License. If the work during execution displays
-copyright notices, you must include the copyright notice for the Library among
-them, as well as a reference directing the user to the copy of this License.
-Also, you must do one of these things:
-
-\begin{itemize}
-\item {\bf a)} Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever changes were
- used in the work (which must be distributed under Sections 1 and 2 above);
-and, if the work is an executable linked with the Library, with the complete
-machine-readable "work that uses the Library", as object code and/or source
-code, so that the user can modify the Library and then relink to produce a
-modified executable containing the modified Library. (It is understood that
-the user who changes the contents of definitions files in the Library will
-not necessarily be able to recompile the application to use the modified
-definitions.)
-\item {\bf b)} Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a copy of the
- library already present on the user's computer system, rather than copying
-library functions into the executable, and (2) will operate properly with a
-modified version of the library, if the user installs one, as long as the
-modified version is interface-compatible with the version that the work was
-made with.
-\item {\bf c)} Accompany the work with a written offer, valid for at least
- three years, to give the same user the materials specified in Subsection 6a,
- above, for a charge no more than the cost of performing this distribution.
-\item {\bf d)} If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above specified
- materials from the same place.
-\item {\bf e)} Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
- \end{itemize}
-
-For an executable, the required form of the "work that uses the Library"
-must include any data and utility programs needed for reproducing the
-executable from it. However, as a special exception, the materials to be
-distributed need not include anything that is normally distributed (in either
-source or binary form) with the major components (compiler, kernel, and so on)
-of the operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-It may happen that this requirement contradicts the license restrictions of
-other proprietary libraries that do not normally accompany the operating
-system. Such a contradiction means you cannot use both them and the Library
-together in an executable that you distribute.
-
-{\bf 7.} You may place library facilities that are a work based on the Library
-side-by-side in a single library together with other library facilities not
-covered by this License, and distribute such a combined library, provided that
-the separate distribution of the work based on the Library and of the other
-library facilities is otherwise permitted, and provided that you do these two
-things:
-
-\begin{itemize}
-\item {\bf a)} Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library facilities. This must
- be distributed under the terms of the Sections above.
-\item {\bf b)} Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining where to find
- the accompanying uncombined form of the same work.
-\end{itemize}
-
-{\bf 8.} You may not copy, modify, sublicense, link with, or distribute the
-Library except as expressly provided under this License. Any attempt otherwise
-to copy, modify, sublicense, link with, or distribute the Library is void, and
-will automatically terminate your rights under this License. However, parties
-who have received copies, or rights, from you under this License will not have
-their licenses terminated so long as such parties remain in full compliance.
-
-{\bf 9.} You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or distribute
-the Library or its derivative works. These actions are prohibited by law if
-you do not accept this License. Therefore, by modifying or distributing the
-Library (or any work based on the Library), you indicate your acceptance of
-this License to do so, and all its terms and conditions for copying,
-distributing or modifying the Library or works based on it.
-
-{\bf 10.} Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the original
-licensor to copy, distribute, link with or modify the Library subject to these
-terms and conditions. You may not impose any further restrictions on the
-recipients' exercise of the rights granted herein. You are not responsible for
-enforcing compliance by third parties with this License.
-
-{\bf 11.} If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or otherwise)
-that contradict the conditions of this License, they do not excuse you from
-the conditions of this License. If you cannot distribute so as to satisfy
-simultaneously your obligations under this License and any other pertinent
-obligations, then as a consequence you may not distribute the Library at all.
-For example, if a patent license would not permit royalty-free redistribution
-of the Library by all those who receive copies directly or indirectly through
-you, then the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply, and
-the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any patents or
-other property right claims or to contest validity of any such claims; this
-section has the sole purpose of protecting the integrity of the free software
-distribution system which is implemented by public license practices. Many
-people have made generous contributions to the wide range of software
-distributed through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing to
-distribute software through any other system and a licensee cannot impose that
-choice.
-
-This section is intended to make thoroughly clear what is believed to be a
-consequence of the rest of this License.
-
-{\bf 12.} If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the original
-copyright holder who places the Library under this License may add an explicit
-geographical distribution limitation excluding those countries, so that
-distribution is permitted only in or among countries not thus excluded. In
-such case, this License incorporates the limitation as if written in the body
-of this License.
-
-{\bf 13.} The Free Software Foundation may publish revised and/or new versions
-of the Lesser General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and "any later
-version", you have the option of following the terms and conditions either of
-that version or of any later version published by the Free Software
-Foundation. If the Library does not specify a license version number, you may
-choose any version ever published by the Free Software Foundation.
-
-{\bf 14.} If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these, write to
-the author to ask for permission. For software which is copyrighted by the
-Free Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals of
-preserving the free status of all derivatives of our free software and of
-promoting the sharing and reuse of software generally.
-
-{\bf NO WARRANTY}
-
-{\bf 15.} BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE
-THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
-IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO
-THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY
-PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
-CORRECTION.
-
-{\bf 16.} IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO
-LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR
-THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-\section{How to Apply These Terms to Your New Libraries}
-\label{SEC45}
-\index[general]{Libraries!How to Apply These Terms to Your New }
-\index[general]{How to Apply These Terms to Your New Libraries }
-
-
-If you develop a new library, and you want it to be of the greatest possible
-use to the public, we recommend making it free software that everyone can
-redistribute and change. You can do so by permitting redistribution under
-these terms (or, alternatively, under the terms of the ordinary General Public
-License).
-
-To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-\footnotesize
-\begin{verbatim}
-{\it one line to give the library's name and an idea of what it does.}
-Copyright (C) {\it year} {\it name of author}
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
-USA
-\end{verbatim}
-\normalsize
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
-\footnotesize
-\begin{verbatim}
-Yoyodyne, Inc., hereby disclaims all copyright interest in
-the library "Frob" (a library for tweaking knobs) written
-by James Random Hacker.
-{\it signature of Ty Coon}, 1 April 1990
-Ty Coon, President of Vice
-\end{verbatim}
-\normalsize
-
-That's all there is to it!
-Return to
-\elink{GNU's home page}{http://www.gnu.org/home.html}.
-
-FSF \& GNU inquiries \& questions to
-\elink{gnu@gnu.org}{mailto:gnu@gnu.org}. Other
-\elink{ways to contact}{http://www.gnu.org/home.html\#ContactInfo} the FSF.
-
-Comments on these web pages to
-\elink{webmasters@www.gnu.org}{mailto:webmasters@www.gnu.org}, send other
-questions to
-\elink{gnu@gnu.org}{mailto:gnu@gnu.org}.
-
-Copyright notice above.
-Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
-Boston, MA 02110-1301 USA
-USA
-
-Updated: 27 Nov 2000 paulv
--- /dev/null
+%%
+%%
+
+\chapter{Bacula Copyright, Trademark, and Licenses}
+\label{LicenseChapter}
+\index[general]{Licenses!Bacula Copyright Trademark}
+\index[general]{Bacula Copyright, Trademark, and Licenses}
+
+There are a number of different licenses that are used in Bacula.
+If you have a printed copy of this manual, the details of each of
+the licenses referred to in this chapter can be found in the
+online version of the manual at
+\elink{http://www.bacula.org}{http://www.bacula.org}.
+
+\section{FDL}
+\index[general]{FDL }
+
+The GNU Free Documentation License (FDL) is used for this manual,
+which is a free and open license. This means that you may freely
+reproduce it and even make changes to it. However, rather than
+distribute your own version of this manual, we would much prefer
+if you would send any corrections or changes to the Bacula project.
+
+The most recent version of the manual can always be found online
+at \elink{http://www.bacula.org}{http://www.bacula.org}.
+
+\section{GPL}
+\index[general]{GPL }
+
+The vast bulk of the source code is released under the
+\ilink{GNU General Public License version 2.}{GplChapter}.
+
+Most of this code is copyrighted: Copyright \copyright 2000-2009
+Free Software Foundation Europe e.V.
+
+Portions may be copyrighted by other people. These files are released
+under different licenses which are compatible with the Bacula GPLv2 license.
+
+\section{LGPL}
+\index[general]{LGPL }
+
+Some of the Bacula library source code is released under the
+\ilink{GNU Lesser General Public License.}{LesserChapter} This
+permits third parties to use these parts of our code in their proprietary
+programs to interface to Bacula.
+
+\section{Public Domain}
+\index[general]{Domain!Public }
+\index[general]{Public Domain }
+
+Some of the Bacula code, or code that Bacula references, has been released
+to the public domain. E.g. md5.c, SQLite.
+
+\section{Trademark}
+\index[general]{Trademark }
+
+Bacula\raisebox{.6ex}{\textsuperscript{\textregistered}} is a registered
+trademark of Kern Sibbald.
+
+We have trademarked the Bacula name to ensure that any program using the
+name Bacula will be exactly compatible with the program that we have
+released. The use of the name Bacula is restricted to software systems
+that agree exactly with the program presented here. If you have made
+modifications to the Bacula source code that alter in any significant
+way the way the program functions, you may not distribute it using the
+Bacula name.
+
+\section{Fiduciary License Agreement}
+\index[general]{Fiduciary License Agreement }
+Developers who have contributed significant changes to the Bacula code
+should have signed a Fiduciary License Agreement (FLA), which
+guarantees them the right to use the code they have developed, and also
+ensures that the Free Software Foundation Europe (and thus the Bacula
+project) has the rights to the code. This Fiduciary License Agreement
+is found on the Bacula web site at:
+
+\elink{http://www.bacula.org/en/FLA-bacula.en.pdf}{http://www.bacula.org/en/FLA-bacula.en.pdf}
+
+and if you are submitting code, you should fill it out then sent to:
+
+\begin{quote}
+ Kern Sibbald \\
+ Cotes-de-Montmoiret 9 \\
+ 1012 Lausanne \\
+ Switzerland \\
+\end{quote}
+
+When you send in such a
+complete document, please notify me: kern at sibbald dot com.
+
+
+\section{Disclaimer}
+\index[general]{Disclaimer }
+
+NO WARRANTY
+
+BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE
+PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
+STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
+PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
+YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
+COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
+PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
+DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
+A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
+HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+++ /dev/null
-%%
-%%
-
-\chapter{Bacula Copyright, Trademark, and Licenses}
-\label{LicenseChapter}
-\index[general]{Licenses!Bacula Copyright Trademark}
-\index[general]{Bacula Copyright, Trademark, and Licenses}
-
-There are a number of different licenses that are used in Bacula.
-If you have a printed copy of this manual, the details of each of
-the licenses referred to in this chapter can be found in the
-online version of the manual at
-\elink{http://www.bacula.org}{http://www.bacula.org}.
-
-\section{FDL}
-\index[general]{FDL }
-
-The GNU Free Documentation License (FDL) is used for this manual,
-which is a free and open license. This means that you may freely
-reproduce it and even make changes to it. However, rather than
-distribute your own version of this manual, we would much prefer
-if you would send any corrections or changes to the Bacula project.
-
-The most recent version of the manual can always be found online
-at \elink{http://www.bacula.org}{http://www.bacula.org}.
-
-\section{GPL}
-\index[general]{GPL }
-
-The vast bulk of the source code is released under the
-\ilink{GNU General Public License version 2.}{GplChapter}.
-
-Most of this code is copyrighted: Copyright \copyright 2000-2009
-Free Software Foundation Europe e.V.
-
-Portions may be copyrighted by other people. These files are released
-under different licenses which are compatible with the Bacula GPLv2 license.
-
-\section{LGPL}
-\index[general]{LGPL }
-
-Some of the Bacula library source code is released under the
-\ilink{GNU Lesser General Public License.}{LesserChapter} This
-permits third parties to use these parts of our code in their proprietary
-programs to interface to Bacula.
-
-\section{Public Domain}
-\index[general]{Domain!Public }
-\index[general]{Public Domain }
-
-Some of the Bacula code, or code that Bacula references, has been released
-to the public domain. E.g. md5.c, SQLite.
-
-\section{Trademark}
-\index[general]{Trademark }
-
-Bacula\raisebox{.6ex}{\textsuperscript{\textregistered}} is a registered
-trademark of Kern Sibbald.
-
-We have trademarked the Bacula name to ensure that any program using the
-name Bacula will be exactly compatible with the program that we have
-released. The use of the name Bacula is restricted to software systems
-that agree exactly with the program presented here. If you have made
-modifications to the Bacula source code that alter in any significant
-way the way the program functions, you may not distribute it using the
-Bacula name.
-
-\section{Fiduciary License Agreement}
-\index[general]{Fiduciary License Agreement }
-Developers who have contributed significant changes to the Bacula code
-should have signed a Fiduciary License Agreement (FLA), which
-guarantees them the right to use the code they have developed, and also
-ensures that the Free Software Foundation Europe (and thus the Bacula
-project) has the rights to the code. This Fiduciary License Agreement
-is found on the Bacula web site at:
-
-\elink{http://www.bacula.org/en/FLA-bacula.en.pdf}{http://www.bacula.org/en/FLA-bacula.en.pdf}
-
-and if you are submitting code, you should fill it out then sent to:
-
-\begin{quote}
- Kern Sibbald \\
- Cotes-de-Montmoiret 9 \\
- 1012 Lausanne \\
- Switzerland \\
-\end{quote}
-
-When you send in such a
-complete document, please notify me: kern at sibbald dot com.
-
-
-\section{Disclaimer}
-\index[general]{Disclaimer }
-
-NO WARRANTY
-
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE
-PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE
-STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE
-PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
-PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE,
-YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY
-COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE
-PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
-OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
-DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
-A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH
-HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
\begin{document}
\sloppy
-\include{coverpage}
+\include{coverpage-en}
\clearpage
\pagenumbering{roman}
\pagestyle{myheadings}
\markboth{Bacula Version \version}{Bacula Version \version}
\pagenumbering{arabic}
-\include{python}
-\include{vars}
-\include{stunnel}
-\include{dvd}
-\include{projects}
-\include{internaldb}
-\include{license}
-\include{fdl}
-\include{gpl}
-\include{lesser}
+\include{python-en}
+\include{vars-en}
+\include{stunnel-en}
+\include{dvd-en}
+\include{projects-en}
+\include{internaldb-en}
+\include{license-en}
+\include{fdl-en}
+\include{gpl-en}
+\include{lesser-en}
% pull in the index
--- /dev/null
+%%
+%%
+
+\chapter{Bacula Projects}
+\label{ProjectsChapter}
+\index[general]{Projects!Bacula }
+\index[general]{Bacula Projects }
+
+Once a new major version of Bacula is released, the Bacula
+users will vote on a list of new features. This vote is used
+as the main element determining what new features will be
+implemented for the next version. Generally, the development time
+for a new release is between four to nine months. Sometimes it may be
+a bit longer, but in that case, there will be a number of bug fix
+updates to the currently released version.
+
+For the current list of project, please see the projects page in the CVS
+at: \elink{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/projects}
+{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/projects}
+see the {\bf projects} file in the main source directory. The projects
+file is updated approximately once every six months.
+
+Separately from the project list, Kern maintains a current list of
+tasks as well as ideas, feature requests, and occasionally design
+notes. This list is updated roughly weekly (sometimes more often).
+For a current list of tasks you can see {\bf kernstodo} in the Source Forge
+CVS at \elink{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/kernstodo}
+{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/kernstodo}.
+++ /dev/null
-%%
-%%
-
-\chapter{Bacula Projects}
-\label{ProjectsChapter}
-\index[general]{Projects!Bacula }
-\index[general]{Bacula Projects }
-
-Once a new major version of Bacula is released, the Bacula
-users will vote on a list of new features. This vote is used
-as the main element determining what new features will be
-implemented for the next version. Generally, the development time
-for a new release is between four to nine months. Sometimes it may be
-a bit longer, but in that case, there will be a number of bug fix
-updates to the currently released version.
-
-For the current list of project, please see the projects page in the CVS
-at: \elink{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/projects}
-{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/projects}
-see the {\bf projects} file in the main source directory. The projects
-file is updated approximately once every six months.
-
-Separately from the project list, Kern maintains a current list of
-tasks as well as ideas, feature requests, and occasionally design
-notes. This list is updated roughly weekly (sometimes more often).
-For a current list of tasks you can see {\bf kernstodo} in the Source Forge
-CVS at \elink{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/kernstodo}
-{http://cvs.sourceforge.net/viewcvs.py/*checkout*/bacula/bacula/kernstodo}.
--- /dev/null
+%%
+%%
+
+\chapter{Python Scripting}
+\label{PythonChapter}
+\index[general]{Python Scripting}
+\index[general]{Scripting!Python}
+
+You may be asking what Python is and why a scripting language is
+needed in Bacula. The answer to the first question is that Python
+is an Object Oriented scripting language with features similar
+to those found in Perl, but the syntax of the language is much
+cleaner and simpler. The answer to why have scripting in Bacula is to
+give the user more control over the whole backup process. Probably
+the simplest example is when Bacula needs a new Volume name, with
+a scripting language such as Python, you can generate any name
+you want, based on the current state of Bacula.
+
+\section{Python Configuration}
+\index[general]{Python Configuration}
+\index[general]{Configuration!Python}
+
+Python must be enabled during the configuration process by adding
+a \verb:--:with-python, and possibly specifying an alternate
+directory if your Python is not installed in a standard system
+location. If you are using RPMs you will need the python-devel package
+installed.
+
+When Python is configured, it becomes an integral part of Bacula and
+runs in Bacula's address space, so even though it is an interpreted
+language, it is very efficient.
+
+When the Director starts, it looks to see if you have a {\bf
+Scripts Directory} Directive defined (normal default {\bf
+/etc/bacula/scripts}, if so, it looks in that directory for a file named
+{\bf DirStartUp.py}. If it is found, Bacula will pass this file to Python
+for execution. The {\bf Scripts Directory} is a new directive that you add
+to the Director resource of your bacula-dir.conf file.
+
+Note: Bacula does not install Python scripts by default because these
+scripts are for you to program. This means that with a default
+installation with Python enabled, Bacula will print the following error
+message:
+
+\begin{verbatim}
+09-Jun 15:14 bacula-dir: ERROR in pythonlib.c:131 Could not import
+Python script /etc/bacula/scripts/DirStartUp. Python disabled.
+\end{verbatim}
+
+The source code directory {\bf examples/python} contains sample scripts
+for DirStartUp.py, SDStartUp.py, and FDStartUp.py that you might want
+to use as a starting point. Normally, your scripts directory (at least
+where you store the Python scripts) should be writable by Bacula, because
+Python will attempt to write a compiled version of the scripts (e.g.
+DirStartUp.pyc) back to that directory.
+
+When starting with the sample scripts, you can delete any part that
+you will not need, but you should keep all the Bacula Event and Job Event
+definitions. If you do not want a particular event, simply replace the
+existing code with a {\bf noop = 1}.
+
+\section{Bacula Events}
+\index[general]{Bacula Events}
+\index[general]{Events}
+A Bacula event is a point in the Bacula code where Bacula
+will call a subroutine (actually a method) that you have
+defined in the Python StartUp script. Events correspond
+to some significant event such as a Job Start, a Job End,
+Bacula needs a new Volume Name, ... When your script is
+called, it will have access to all the Bacula variables
+specific to the Job (attributes of the Job Object), and
+it can even call some of the Job methods (subroutines)
+or set new values in the Job attributes, such as the
+Priority. You will see below how the events are used.
+
+\section{Python Objects}
+\index[general]{Python Objects}
+\index[general]{Objects!Python}
+
+There are four Python objects that you will need to work with:
+\begin{description}
+\item [The Bacula Object]
+ The Bacula object is created by the Bacula daemon (the Director
+ in the present case) when the daemon starts. It is available to
+ the Python startup script, {\bf DirStartup.py}, by importing the
+ Bacula definitions with {\bf import bacula}. The methods
+ available with this object are described below.
+
+\item [The Bacula Events Class]
+ You create this class in the startup script, and you pass
+ it to the Bacula Object's {\bf set\_events} method. The
+ purpose of the Bacula Events Class is to define what global
+ or daemon events you want to monitor. When one of those events
+ occurs, your Bacula Events Class will be called at the method
+ corresponding to the event. There are currently three events,
+ JobStart, JobEnd, and Exit, which are described in detail below.
+
+\item [The Job Object]
+ When a Job starts, and assuming you have defined a JobStart method
+ in your Bacula Events Class, Bacula will create a Job Object. This
+ object will be passed to the JobStart event. The Job Object has a
+ has good number of read-only members or attributes providing many
+ details of the Job, and it also has a number of writable attributes
+ that allow you to pass information into the Job. These attributes
+ are described below.
+
+\item [The Job Events Class]
+ You create this class in the JobStart method of your Bacula Events
+ class, and it allows you to define which of the possible Job Object
+ events you want to see. You must pass an instance of your Job Events
+ class to the Job Object set\_events() method.
+ Normally, you will probably only have one
+ Job Events Class, which will be instantiated for each Job. However,
+ if you wish to see different events in different Jobs, you may have
+ as many Job Events classes as you wish.
+\end{description}
+
+
+The first thing the startup script must do is to define what global Bacula
+events (daemon events), it wants to see. This is done by creating a
+Bacula Events class, instantiating it, then passing it to the
+{\bf set\_events} method. There are three possible
+events.
+
+\begin{description}
+\item [JobStart]
+ \index[general]{JobStart}
+ This Python method, if defined, will be called each time a Job is started.
+ The method is passed the class instantiation object as the first argument,
+ and the Bacula Job object as the second argument. The Bacula Job object
+ has several built-in methods, and you can define which ones you
+ want called. If you do not define this method, you will not be able
+ to interact with Bacula jobs.
+
+\item [JobEnd]
+ This Python method, if defined, will be called each time a Job terminates.
+ The method is passed the class instantiation object as the first argument,
+ and the Bacula Job object as the second argument.
+
+\item [Exit]
+ This Python method, if defined, will be called when the Director terminates.
+ The method is passed the class instantiation object as the first argument.
+\end{description}
+
+Access to the Bacula variables and methods is done with:
+
+ import bacula
+
+The following are the read-only attributes provided by the bacula object.
+\begin{description}
+\item [Name]
+\item [ConfigFile]
+\item [WorkingDir]
+\item [Version] string consisting of "Version Build-date"
+\end{description}
+
+
+A simple definition of the Bacula Events Class might be the following:
+
+\footnotesize
+\begin{verbatim}
+import sys, bacula
+class BaculaEvents:
+ def JobStart(self, job):
+ ...
+\end{verbatim}
+\normalsize
+
+Then to instantiate the class and pass it to Bacula, you
+would do:
+
+\footnotesize
+\begin{verbatim}
+bacula.set_events(BaculaEvents()) # register Bacula Events wanted
+\end{verbatim}
+\normalsize
+
+And at that point, each time a Job is started, your BaculaEvents JobStart
+method will be called.
+
+Now to actually do anything with a Job, you must define which Job events
+you want to see, and this is done by defining a JobEvents class containing
+the methods you want called. Each method name corresponds to one of the
+Job Events that Bacula will generate.
+
+A simple Job Events class might look like the following:
+
+\footnotesize
+\begin{verbatim}
+class JobEvents:
+ def NewVolume(self, job):
+ ...
+\end{verbatim}
+\normalsize
+
+Here, your JobEvents class method NewVolume will be called each time
+the Job needs a new Volume name. To actually register the events defined
+in your class with the Job, you must instantiate the JobEvents class and
+set it in the Job {\bf set\_events} variable. Note, this is a bit different
+from how you registered the Bacula events. The registration process must
+be done in the Bacula JobStart event (your method). So, you would modify
+Bacula Events (not the Job events) as follows:
+
+\footnotesize
+\begin{verbatim}
+import sys, bacula
+class BaculaEvents:
+ def JobStart(self, job):
+ events = JobEvents() # create instance of Job class
+ job.set_events(events) # register Job events desired
+ ...
+\end{verbatim}
+\normalsize
+
+When a job event is triggered, the appropriate event definition is
+called in the JobEvents class. This is the means by which your Python
+script or code gets control. Once it has control, it may read job
+attributes, or set them. See below for a list of read-only attributes,
+and those that are writable.
+
+In addition, the Bacula {\bf job} object in the Director has
+a number of methods (subroutines) that can be called. They
+are:
+\begin{description}
+\item [set\_events] The set\_events method takes a single
+ argument, which is the instantiation of the Job Events class
+ that contains the methods that you want called. The method
+ names that will be called must correspond to the Bacula
+ defined events. You may define additional methods but Bacula
+ will not use them.
+\item [run] The run method takes a single string
+ argument, which is the run command (same as in the Console)
+ that you want to submit to start a new Job. The value
+ returned by the run method is the JobId of the job that
+ started, or -1 if there was an error.
+\item [write] The write method is used to be able to send
+ print output to the Job Report. This will be described later.
+\item[cancel] The cancel method takes a single integer argument,
+ which is a JobId. If JobId is found, it will be canceled.
+\item [DoesVolumeExist] The DoesVolumeExist method takes a single
+ string argument, which is the Volume name, and returns
+ 1 if the volume exists in the Catalog and 0 if the volume
+ does not exist.
+\end{description}
+
+The following attributes are read/write within the Director
+for the {\bf job} object.
+
+\begin{description}
+\item [Priority] Read or set the Job priority.
+ Note, that setting a Job Priority is effective only before
+ the Job actually starts.
+\item [Level] This attribute contains a string representing the Job
+ level, e.g. Full, Differential, Incremental, ... if read.
+ The level can also be set.
+\end{description}
+
+The following read-only attributes are available within the Director
+for the {\bf job} object.
+
+\begin{description}
+\item [Type] This attribute contains a string representing the Job
+ type, e.g. Backup, Restore, Verify, ...
+\item [JobId] This attribute contains an integer representing the
+ JobId.
+\item [Client] This attribute contains a string with the name of the
+ Client for this job.
+\item [NumVols] This attribute contains an integer with the number of
+ Volumes in the Pool being used by the Job.
+\item [Pool] This attribute contains a string with the name of the Pool
+ being used by the Job.
+\item [Storage] This attribute contains a string with the name of the
+ Storage resource being used by the Job.
+\item [Catalog] This attribute contains a string with the name of the
+ Catalog resource being used by the Job.
+\item [MediaType] This attribute contains a string with the name of the
+ Media Type associated with the Storage resource being used by the Job.
+\item [Job] This attribute contains a string containing the name of the
+ Job resource used by this job (not unique).
+\item [JobName] This attribute contains a string representing the full
+ unique Job name.
+\item [JobStatus] This attribute contains a single character string
+ representing the current Job status. The status may change
+ during execution of the job. It may take on the following
+ values:
+ \begin{description}
+ \item [C] Created, not yet running
+ \item [R] Running
+ \item [B] Blocked
+ \item [T] Completed successfully
+ \item [E] Terminated with errors
+ \item [e] Non-fatal error
+ \item [f] Fatal error
+ \item [D] Verify found differences
+ \item [A] Canceled by user
+ \item [F] Waiting for Client
+ \item [S] Waiting for Storage daemon
+ \item [m] Waiting for new media
+ \item [M] Waiting for media mount
+ \item [s] Waiting for storage resource
+ \item [j] Waiting for job resource
+ \item [c] Waiting for client resource
+ \item [d] Waiting on maximum jobs
+ \item [t] Waiting on start time
+ \item [p] Waiting on higher priority jobs
+ \end{description}
+
+\item [Priority] This attribute contains an integer with the priority
+ assigned to the job.
+\item [CatalogRes] tuple consisting of (DBName, Address, User,
+ Password, Socket, Port, Database Vendor) taken from the Catalog resource
+ for the Job with the exception of Database Vendor, which is
+ one of the following: MySQL, PostgreSQL, SQLite, Internal,
+ depending on what database you configured.
+\item [VolumeName]
+ After a Volume has been purged, this attribute will contain the
+ name of that Volume. At other times, this value may have no meaning.
+\end{description}
+
+The following write-only attributes are available within the
+Director:
+
+\begin{description}
+\item [JobReport] Send line to the Job Report.
+\item [VolumeName] Set a new Volume name. Valid only during the
+ NewVolume event.
+\end{description}
+
+\section{Python Console Command}
+\index[general]{Python Console Command}
+\index[general]{Console Command!Python}
+
+There is a new Console command named {\bf python}. It takes
+a single argument {\bf restart}. Example:
+\begin{verbatim}
+ python restart
+\end{verbatim}
+
+This command restarts the Python interpreter in the Director.
+This can be useful when you are modifying the DirStartUp script,
+because normally Python will cache it, and thus the
+script will be read one time.
+
+\section{Debugging Python Scripts}
+\index[general]{Debugging Python Scripts}
+In general, you debug your Python scripts by using print statements.
+You can also develop your script or important parts of it as a
+separate file using the Python interpreter to run it. Once you
+have it working correctly, you can then call the script from
+within the Bacula Python script (DirStartUp.py).
+
+If you are having problems loading DirStartUp.py, you will probably
+not get any error messages because Bacula can only print Python
+error messages after the Python interpreter is started. However, you
+may be able to see the error messages by starting Bacula in
+a shell window with the {\bf -d1} option on the command line. That
+should cause the Python error messages to be printed in the shell
+window.
+
+If you are getting error messages such as the following when
+loading DirStartUp.py:
+
+\begin{verbatim}
+ Traceback (most recent call last):
+ File "/etc/bacula/scripts/DirStartUp.py", line 6, in ?
+ import time, sys, bacula
+ ImportError: /usr/lib/python2.3/lib-dynload/timemodule.so: undefined
+ symbol: PyInt_FromLong
+ bacula-dir: pythonlib.c:134 Python Import error.
+\end{verbatim}
+
+It is because the DirStartUp script is calling a dynamically loaded
+module (timemodule.so in the above case) that then tries to use
+Python functions exported from the Python interpreter (in this case
+PyInt\_FromLong). The way Bacula is currently linked with Python does
+not permit this. The solution to the problem is to put such functions
+(in this case the import of time into a separate Python script, which
+will do your calculations and return the values you want. Then call
+(not import) this script from the Bacula DirStartUp.py script, and
+it all should work as you expect.
+
+
+
+
+
+\section{Python Example}
+\index[general]{Python Example}
+\index[general]{Example!Python}
+
+An example script for the Director startup file is provided in
+{\bf examples/python/DirStartup.py} as follows:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula Python interface script for the Director
+#
+
+# You must import both sys and bacula
+import sys, bacula
+
+# This is the list of Bacula daemon events that you
+# can receive.
+class BaculaEvents(object):
+ def __init__(self):
+ # Called here when a new Bacula Events class is
+ # is created. Normally not used
+ noop = 1
+
+ def JobStart(self, job):
+ """
+ Called here when a new job is started. If you want
+ to do anything with the Job, you must register
+ events you want to receive.
+ """
+ events = JobEvents() # create instance of Job class
+ events.job = job # save Bacula's job pointer
+ job.set_events(events) # register events desired
+ sys.stderr = events # send error output to Bacula
+ sys.stdout = events # send stdout to Bacula
+ jobid = job.JobId; client = job.Client
+ numvols = job.NumVols
+ job.JobReport="Python Dir JobStart: JobId=%d Client=%s NumVols=%d\n" % (jobid,client,numvols)
+
+ # Bacula Job is going to terminate
+ def JobEnd(self, job):
+ jobid = job.JobId
+ client = job.Client
+ job.JobReport="Python Dir JobEnd output: JobId=%d Client=%s.\n" % (jobid, client)
+
+ # Called here when the Bacula daemon is going to exit
+ def Exit(self, job):
+ print "Daemon exiting."
+
+bacula.set_events(BaculaEvents()) # register daemon events desired
+
+"""
+ These are the Job events that you can receive.
+"""
+class JobEvents(object):
+ def __init__(self):
+ # Called here when you instantiate the Job. Not
+ # normally used
+ noop = 1
+
+ def JobInit(self, job):
+ # Called when the job is first scheduled
+ noop = 1
+
+ def JobRun(self, job):
+ # Called just before running the job after initializing
+ # This is the point to change most Job parameters.
+ # It is equivalent to the JobRunBefore point.
+ noop = 1
+
+ def NewVolume(self, job):
+ # Called when Bacula wants a new Volume name. The Volume
+ # name returned, if any, must be stored in job.VolumeName
+ jobid = job.JobId
+ client = job.Client
+ numvol = job.NumVols;
+ print job.CatalogRes
+ job.JobReport = "JobId=%d Client=%s NumVols=%d" % (jobid, client, numvol)
+ job.JobReport="Python before New Volume set for Job.\n"
+ Vol = "TestA-%d" % numvol
+ job.JobReport = "Exists=%d TestA-%d" % (job.DoesVolumeExist(Vol), numvol)
+ job.VolumeName="TestA-%d" % numvol
+ job.JobReport="Python after New Volume set for Job.\n"
+ return 1
+
+ def VolumePurged(self, job):
+ # Called when a Volume is purged. The Volume name can be referenced
+ # with job.VolumeName
+ noop = 1
+
+
+
+\end{verbatim}
+\normalsize
+++ /dev/null
-%%
-%%
-
-\chapter{Python Scripting}
-\label{PythonChapter}
-\index[general]{Python Scripting}
-\index[general]{Scripting!Python}
-
-You may be asking what Python is and why a scripting language is
-needed in Bacula. The answer to the first question is that Python
-is an Object Oriented scripting language with features similar
-to those found in Perl, but the syntax of the language is much
-cleaner and simpler. The answer to why have scripting in Bacula is to
-give the user more control over the whole backup process. Probably
-the simplest example is when Bacula needs a new Volume name, with
-a scripting language such as Python, you can generate any name
-you want, based on the current state of Bacula.
-
-\section{Python Configuration}
-\index[general]{Python Configuration}
-\index[general]{Configuration!Python}
-
-Python must be enabled during the configuration process by adding
-a \verb:--:with-python, and possibly specifying an alternate
-directory if your Python is not installed in a standard system
-location. If you are using RPMs you will need the python-devel package
-installed.
-
-When Python is configured, it becomes an integral part of Bacula and
-runs in Bacula's address space, so even though it is an interpreted
-language, it is very efficient.
-
-When the Director starts, it looks to see if you have a {\bf
-Scripts Directory} Directive defined (normal default {\bf
-/etc/bacula/scripts}, if so, it looks in that directory for a file named
-{\bf DirStartUp.py}. If it is found, Bacula will pass this file to Python
-for execution. The {\bf Scripts Directory} is a new directive that you add
-to the Director resource of your bacula-dir.conf file.
-
-Note: Bacula does not install Python scripts by default because these
-scripts are for you to program. This means that with a default
-installation with Python enabled, Bacula will print the following error
-message:
-
-\begin{verbatim}
-09-Jun 15:14 bacula-dir: ERROR in pythonlib.c:131 Could not import
-Python script /etc/bacula/scripts/DirStartUp. Python disabled.
-\end{verbatim}
-
-The source code directory {\bf examples/python} contains sample scripts
-for DirStartUp.py, SDStartUp.py, and FDStartUp.py that you might want
-to use as a starting point. Normally, your scripts directory (at least
-where you store the Python scripts) should be writable by Bacula, because
-Python will attempt to write a compiled version of the scripts (e.g.
-DirStartUp.pyc) back to that directory.
-
-When starting with the sample scripts, you can delete any part that
-you will not need, but you should keep all the Bacula Event and Job Event
-definitions. If you do not want a particular event, simply replace the
-existing code with a {\bf noop = 1}.
-
-\section{Bacula Events}
-\index[general]{Bacula Events}
-\index[general]{Events}
-A Bacula event is a point in the Bacula code where Bacula
-will call a subroutine (actually a method) that you have
-defined in the Python StartUp script. Events correspond
-to some significant event such as a Job Start, a Job End,
-Bacula needs a new Volume Name, ... When your script is
-called, it will have access to all the Bacula variables
-specific to the Job (attributes of the Job Object), and
-it can even call some of the Job methods (subroutines)
-or set new values in the Job attributes, such as the
-Priority. You will see below how the events are used.
-
-\section{Python Objects}
-\index[general]{Python Objects}
-\index[general]{Objects!Python}
-
-There are four Python objects that you will need to work with:
-\begin{description}
-\item [The Bacula Object]
- The Bacula object is created by the Bacula daemon (the Director
- in the present case) when the daemon starts. It is available to
- the Python startup script, {\bf DirStartup.py}, by importing the
- Bacula definitions with {\bf import bacula}. The methods
- available with this object are described below.
-
-\item [The Bacula Events Class]
- You create this class in the startup script, and you pass
- it to the Bacula Object's {\bf set\_events} method. The
- purpose of the Bacula Events Class is to define what global
- or daemon events you want to monitor. When one of those events
- occurs, your Bacula Events Class will be called at the method
- corresponding to the event. There are currently three events,
- JobStart, JobEnd, and Exit, which are described in detail below.
-
-\item [The Job Object]
- When a Job starts, and assuming you have defined a JobStart method
- in your Bacula Events Class, Bacula will create a Job Object. This
- object will be passed to the JobStart event. The Job Object has a
- has good number of read-only members or attributes providing many
- details of the Job, and it also has a number of writable attributes
- that allow you to pass information into the Job. These attributes
- are described below.
-
-\item [The Job Events Class]
- You create this class in the JobStart method of your Bacula Events
- class, and it allows you to define which of the possible Job Object
- events you want to see. You must pass an instance of your Job Events
- class to the Job Object set\_events() method.
- Normally, you will probably only have one
- Job Events Class, which will be instantiated for each Job. However,
- if you wish to see different events in different Jobs, you may have
- as many Job Events classes as you wish.
-\end{description}
-
-
-The first thing the startup script must do is to define what global Bacula
-events (daemon events), it wants to see. This is done by creating a
-Bacula Events class, instantiating it, then passing it to the
-{\bf set\_events} method. There are three possible
-events.
-
-\begin{description}
-\item [JobStart]
- \index[general]{JobStart}
- This Python method, if defined, will be called each time a Job is started.
- The method is passed the class instantiation object as the first argument,
- and the Bacula Job object as the second argument. The Bacula Job object
- has several built-in methods, and you can define which ones you
- want called. If you do not define this method, you will not be able
- to interact with Bacula jobs.
-
-\item [JobEnd]
- This Python method, if defined, will be called each time a Job terminates.
- The method is passed the class instantiation object as the first argument,
- and the Bacula Job object as the second argument.
-
-\item [Exit]
- This Python method, if defined, will be called when the Director terminates.
- The method is passed the class instantiation object as the first argument.
-\end{description}
-
-Access to the Bacula variables and methods is done with:
-
- import bacula
-
-The following are the read-only attributes provided by the bacula object.
-\begin{description}
-\item [Name]
-\item [ConfigFile]
-\item [WorkingDir]
-\item [Version] string consisting of "Version Build-date"
-\end{description}
-
-
-A simple definition of the Bacula Events Class might be the following:
-
-\footnotesize
-\begin{verbatim}
-import sys, bacula
-class BaculaEvents:
- def JobStart(self, job):
- ...
-\end{verbatim}
-\normalsize
-
-Then to instantiate the class and pass it to Bacula, you
-would do:
-
-\footnotesize
-\begin{verbatim}
-bacula.set_events(BaculaEvents()) # register Bacula Events wanted
-\end{verbatim}
-\normalsize
-
-And at that point, each time a Job is started, your BaculaEvents JobStart
-method will be called.
-
-Now to actually do anything with a Job, you must define which Job events
-you want to see, and this is done by defining a JobEvents class containing
-the methods you want called. Each method name corresponds to one of the
-Job Events that Bacula will generate.
-
-A simple Job Events class might look like the following:
-
-\footnotesize
-\begin{verbatim}
-class JobEvents:
- def NewVolume(self, job):
- ...
-\end{verbatim}
-\normalsize
-
-Here, your JobEvents class method NewVolume will be called each time
-the Job needs a new Volume name. To actually register the events defined
-in your class with the Job, you must instantiate the JobEvents class and
-set it in the Job {\bf set\_events} variable. Note, this is a bit different
-from how you registered the Bacula events. The registration process must
-be done in the Bacula JobStart event (your method). So, you would modify
-Bacula Events (not the Job events) as follows:
-
-\footnotesize
-\begin{verbatim}
-import sys, bacula
-class BaculaEvents:
- def JobStart(self, job):
- events = JobEvents() # create instance of Job class
- job.set_events(events) # register Job events desired
- ...
-\end{verbatim}
-\normalsize
-
-When a job event is triggered, the appropriate event definition is
-called in the JobEvents class. This is the means by which your Python
-script or code gets control. Once it has control, it may read job
-attributes, or set them. See below for a list of read-only attributes,
-and those that are writable.
-
-In addition, the Bacula {\bf job} object in the Director has
-a number of methods (subroutines) that can be called. They
-are:
-\begin{description}
-\item [set\_events] The set\_events method takes a single
- argument, which is the instantiation of the Job Events class
- that contains the methods that you want called. The method
- names that will be called must correspond to the Bacula
- defined events. You may define additional methods but Bacula
- will not use them.
-\item [run] The run method takes a single string
- argument, which is the run command (same as in the Console)
- that you want to submit to start a new Job. The value
- returned by the run method is the JobId of the job that
- started, or -1 if there was an error.
-\item [write] The write method is used to be able to send
- print output to the Job Report. This will be described later.
-\item[cancel] The cancel method takes a single integer argument,
- which is a JobId. If JobId is found, it will be canceled.
-\item [DoesVolumeExist] The DoesVolumeExist method takes a single
- string argument, which is the Volume name, and returns
- 1 if the volume exists in the Catalog and 0 if the volume
- does not exist.
-\end{description}
-
-The following attributes are read/write within the Director
-for the {\bf job} object.
-
-\begin{description}
-\item [Priority] Read or set the Job priority.
- Note, that setting a Job Priority is effective only before
- the Job actually starts.
-\item [Level] This attribute contains a string representing the Job
- level, e.g. Full, Differential, Incremental, ... if read.
- The level can also be set.
-\end{description}
-
-The following read-only attributes are available within the Director
-for the {\bf job} object.
-
-\begin{description}
-\item [Type] This attribute contains a string representing the Job
- type, e.g. Backup, Restore, Verify, ...
-\item [JobId] This attribute contains an integer representing the
- JobId.
-\item [Client] This attribute contains a string with the name of the
- Client for this job.
-\item [NumVols] This attribute contains an integer with the number of
- Volumes in the Pool being used by the Job.
-\item [Pool] This attribute contains a string with the name of the Pool
- being used by the Job.
-\item [Storage] This attribute contains a string with the name of the
- Storage resource being used by the Job.
-\item [Catalog] This attribute contains a string with the name of the
- Catalog resource being used by the Job.
-\item [MediaType] This attribute contains a string with the name of the
- Media Type associated with the Storage resource being used by the Job.
-\item [Job] This attribute contains a string containing the name of the
- Job resource used by this job (not unique).
-\item [JobName] This attribute contains a string representing the full
- unique Job name.
-\item [JobStatus] This attribute contains a single character string
- representing the current Job status. The status may change
- during execution of the job. It may take on the following
- values:
- \begin{description}
- \item [C] Created, not yet running
- \item [R] Running
- \item [B] Blocked
- \item [T] Completed successfully
- \item [E] Terminated with errors
- \item [e] Non-fatal error
- \item [f] Fatal error
- \item [D] Verify found differences
- \item [A] Canceled by user
- \item [F] Waiting for Client
- \item [S] Waiting for Storage daemon
- \item [m] Waiting for new media
- \item [M] Waiting for media mount
- \item [s] Waiting for storage resource
- \item [j] Waiting for job resource
- \item [c] Waiting for client resource
- \item [d] Waiting on maximum jobs
- \item [t] Waiting on start time
- \item [p] Waiting on higher priority jobs
- \end{description}
-
-\item [Priority] This attribute contains an integer with the priority
- assigned to the job.
-\item [CatalogRes] tuple consisting of (DBName, Address, User,
- Password, Socket, Port, Database Vendor) taken from the Catalog resource
- for the Job with the exception of Database Vendor, which is
- one of the following: MySQL, PostgreSQL, SQLite, Internal,
- depending on what database you configured.
-\item [VolumeName]
- After a Volume has been purged, this attribute will contain the
- name of that Volume. At other times, this value may have no meaning.
-\end{description}
-
-The following write-only attributes are available within the
-Director:
-
-\begin{description}
-\item [JobReport] Send line to the Job Report.
-\item [VolumeName] Set a new Volume name. Valid only during the
- NewVolume event.
-\end{description}
-
-\section{Python Console Command}
-\index[general]{Python Console Command}
-\index[general]{Console Command!Python}
-
-There is a new Console command named {\bf python}. It takes
-a single argument {\bf restart}. Example:
-\begin{verbatim}
- python restart
-\end{verbatim}
-
-This command restarts the Python interpreter in the Director.
-This can be useful when you are modifying the DirStartUp script,
-because normally Python will cache it, and thus the
-script will be read one time.
-
-\section{Debugging Python Scripts}
-\index[general]{Debugging Python Scripts}
-In general, you debug your Python scripts by using print statements.
-You can also develop your script or important parts of it as a
-separate file using the Python interpreter to run it. Once you
-have it working correctly, you can then call the script from
-within the Bacula Python script (DirStartUp.py).
-
-If you are having problems loading DirStartUp.py, you will probably
-not get any error messages because Bacula can only print Python
-error messages after the Python interpreter is started. However, you
-may be able to see the error messages by starting Bacula in
-a shell window with the {\bf -d1} option on the command line. That
-should cause the Python error messages to be printed in the shell
-window.
-
-If you are getting error messages such as the following when
-loading DirStartUp.py:
-
-\begin{verbatim}
- Traceback (most recent call last):
- File "/etc/bacula/scripts/DirStartUp.py", line 6, in ?
- import time, sys, bacula
- ImportError: /usr/lib/python2.3/lib-dynload/timemodule.so: undefined
- symbol: PyInt_FromLong
- bacula-dir: pythonlib.c:134 Python Import error.
-\end{verbatim}
-
-It is because the DirStartUp script is calling a dynamically loaded
-module (timemodule.so in the above case) that then tries to use
-Python functions exported from the Python interpreter (in this case
-PyInt\_FromLong). The way Bacula is currently linked with Python does
-not permit this. The solution to the problem is to put such functions
-(in this case the import of time into a separate Python script, which
-will do your calculations and return the values you want. Then call
-(not import) this script from the Bacula DirStartUp.py script, and
-it all should work as you expect.
-
-
-
-
-
-\section{Python Example}
-\index[general]{Python Example}
-\index[general]{Example!Python}
-
-An example script for the Director startup file is provided in
-{\bf examples/python/DirStartup.py} as follows:
-
-\footnotesize
-\begin{verbatim}
-#
-# Bacula Python interface script for the Director
-#
-
-# You must import both sys and bacula
-import sys, bacula
-
-# This is the list of Bacula daemon events that you
-# can receive.
-class BaculaEvents(object):
- def __init__(self):
- # Called here when a new Bacula Events class is
- # is created. Normally not used
- noop = 1
-
- def JobStart(self, job):
- """
- Called here when a new job is started. If you want
- to do anything with the Job, you must register
- events you want to receive.
- """
- events = JobEvents() # create instance of Job class
- events.job = job # save Bacula's job pointer
- job.set_events(events) # register events desired
- sys.stderr = events # send error output to Bacula
- sys.stdout = events # send stdout to Bacula
- jobid = job.JobId; client = job.Client
- numvols = job.NumVols
- job.JobReport="Python Dir JobStart: JobId=%d Client=%s NumVols=%d\n" % (jobid,client,numvols)
-
- # Bacula Job is going to terminate
- def JobEnd(self, job):
- jobid = job.JobId
- client = job.Client
- job.JobReport="Python Dir JobEnd output: JobId=%d Client=%s.\n" % (jobid, client)
-
- # Called here when the Bacula daemon is going to exit
- def Exit(self, job):
- print "Daemon exiting."
-
-bacula.set_events(BaculaEvents()) # register daemon events desired
-
-"""
- These are the Job events that you can receive.
-"""
-class JobEvents(object):
- def __init__(self):
- # Called here when you instantiate the Job. Not
- # normally used
- noop = 1
-
- def JobInit(self, job):
- # Called when the job is first scheduled
- noop = 1
-
- def JobRun(self, job):
- # Called just before running the job after initializing
- # This is the point to change most Job parameters.
- # It is equivalent to the JobRunBefore point.
- noop = 1
-
- def NewVolume(self, job):
- # Called when Bacula wants a new Volume name. The Volume
- # name returned, if any, must be stored in job.VolumeName
- jobid = job.JobId
- client = job.Client
- numvol = job.NumVols;
- print job.CatalogRes
- job.JobReport = "JobId=%d Client=%s NumVols=%d" % (jobid, client, numvol)
- job.JobReport="Python before New Volume set for Job.\n"
- Vol = "TestA-%d" % numvol
- job.JobReport = "Exists=%d TestA-%d" % (job.DoesVolumeExist(Vol), numvol)
- job.VolumeName="TestA-%d" % numvol
- job.JobReport="Python after New Volume set for Job.\n"
- return 1
-
- def VolumePurged(self, job):
- # Called when a Volume is purged. The Volume name can be referenced
- # with job.VolumeName
- noop = 1
-
-
-
-\end{verbatim}
-\normalsize
--- /dev/null
+%%
+%%
+
+\chapter{Using Stunnel to Encrypt Communications}
+\label{StunnelChapter}
+\index[general]{Using Stunnel to Encrypt Communications to Clients }
+
+Prior to version 1.37, Bacula did not have built-in communications encryption.
+Please see the \ilink {TLS chapter}{CommEncryption} if you are using Bacula
+1.37 or greater.
+
+Without too much effort, it is possible to encrypt the communications
+between any of the daemons. This chapter will show you how to use {\bf
+stunnel} to encrypt communications to your client programs. We assume the
+Director and the Storage daemon are running on one machine that will be called
+{\bf server} and the Client or File daemon is running on a different machine
+called {\bf client}. Although the details may be slightly different, the same
+principles apply whether you are encrypting between Unix, Linux, or Win32
+machines. This example was developed between two Linux machines running
+stunnel version 4.04-4 on a Red Hat Enterprise 3.0 system.
+
+\section{Communications Ports Used}
+\index[general]{Used!Communications Ports }
+\index[general]{Communications Ports Used }
+
+First, you must know that with the standard Bacula configuration, the Director
+will contact the File daemon on port 9102. The File daemon then contacts the
+Storage daemon using the address and port parameters supplied by the Director.
+The standard port used will be 9103. This is the typical server/client view of
+the world, the File daemon is a server to the Director (i.e. listens for the
+Director to contact it), and the Storage daemon is a server to the File
+daemon.
+
+\section{Encryption}
+\index[general]{Encryption }
+
+The encryption is accomplished between the Director and the File daemon by
+using an stunnel on the Director's machine (server) to encrypt the data and to
+contact an stunnel on the File daemon's machine (client), which decrypts the
+data and passes it to the client.
+
+Between the File daemon and the Storage daemon, we use an stunnel on the File
+daemon's machine to encrypt the data and another stunnel on the Storage
+daemon's machine to decrypt the data.
+
+As a consequence, there are actually four copies of stunnel running, two on the
+server and two on the client. This may sound a bit complicated, but it really
+isn't. To accomplish this, we will need to construct four separate conf files
+for stunnel, and we will need to make some minor modifications to the
+Director's conf file. None of the other conf files need to be changed.
+
+\section{A Picture}
+\index[general]{Picture }
+
+Since pictures usually help a lot, here is an overview of what we will be
+doing. Don't worry about all the details of the port numbers and such for the
+moment.
+
+\footnotesize
+\begin{verbatim}
+ File daemon (client):
+ stunnel-fd1.conf
+ |===========|
+ Port 29102 >----| Stunnel 1 |-----> Port 9102
+ |===========|
+ stunnel-fd2.conf
+ |===========|
+ Port 9103 >----| Stunnel 2 |-----> server:29103
+ |===========|
+ Director (server):
+ stunnel-dir.conf
+ |===========|
+ Port 29102 >----| Stunnel 3 |-----> client:29102
+ |===========|
+ stunnel-sd.conf
+ |===========|
+ Port 29103 >----| Stunnel 4 |-----> 9103
+ |===========|
+\end{verbatim}
+\normalsize
+
+\section{Certificates}
+\index[general]{Certificates }
+
+In order for stunnel to function as a server, which it does in our diagram for
+Stunnel 1 and Stunnel 4, you must have a certificate and the key. It is
+possible to keep the two in separate files, but normally, you keep them in one
+single .pem file. You may create this certificate yourself in which case, it
+will be self-signed, or you may have it signed by a CA.
+
+If you want your clients to verify that the server is in fact valid (Stunnel 2
+and Stunnel 3), you will need to have the server certificates signed by a CA
+(Certificate Authority), and you will need to have the CA's public certificate
+(contains the CA's public key).
+
+Having a CA signed certificate is {\bf highly} recommended if you are using
+your client across the Internet, otherwise you are exposed to the man in the
+middle attack and hence loss of your data.
+
+See below for how to create a self-signed certificate.
+
+\section{Securing the Data Channel}
+\index[general]{Channel!Securing the Data }
+\index[general]{Securing the Data Channel }
+
+To simplify things a bit, let's for the moment consider only the data channel.
+That is the connection between the File daemon and the Storage daemon, which
+takes place on port 9103. In fact, in a minimalist solution, this is the only
+connection that needs to be encrypted, because it is the one that transports your
+data. The connection between the Director and the File daemon is simply a
+control channel used to start the job and get the job status.
+
+Normally the File daemon will contact the Storage daemon on port 9103
+(supplied by the Director), so we need an stunnel that listens on port 9103 on
+the File daemon's machine, encrypts the data and sends it to the Storage
+daemon. This is depicted by Stunnel 2 above. Note that this stunnel is
+listening on port 9103 and sending to server:29103. We use port 29103 on the
+server because if we would send the data to port 9103, it would go directly to the
+Storage daemon, which doesn't understand encrypted data. On the server
+machine, we run Stunnel 4, which listens on port 29103, decrypts the data and
+sends it to the Storage daemon, which is listening on port 9103.
+
+\section{Data Channel Configuration}
+\index[general]{Modification of bacula-dir.conf for the Data Channel }
+\index[general]{baculoa-dir.conf!Modification for the Data Channel }
+
+The Storage resource of the bacula-dir.conf normally looks something like the
+following:
+
+\footnotesize
+\begin{verbatim}
+Storage {
+ Name = File
+ Address = server
+ SDPort = 9103
+ Password = storage_password
+ Device = File
+ Media Type = File
+}
+\end{verbatim}
+\normalsize
+
+Notice that this is running on the server machine, and it points the File
+daemon back to server:9103, which is where our Storage daemon is listening. We
+modify this to be:
+
+\footnotesize
+\begin{verbatim}
+Storage {
+ Name = File
+ Address = localhost
+ SDPort = 9103
+ Password = storage_password
+ Device = File
+ Media Type = File
+}
+\end{verbatim}
+\normalsize
+
+This causes the File daemon to send the data to the stunnel running on
+localhost (the client machine). We could have used client as the address as
+well.
+
+\section{Stunnel Configuration for the Data Channel}
+\index[general]{Stunnel Configuration for the Data Channel }
+
+In the diagram above, we see above Stunnel 2 that we use stunnel-fd2.conf on the
+client. A pretty much minimal config file would look like the following:
+
+\footnotesize
+\begin{verbatim}
+client = yes
+[29103]
+accept = localhost:9103
+connect = server:29103
+\end{verbatim}
+\normalsize
+
+The above config file does encrypt the data but it does not require a
+certificate, so it is subject to the man in the middle attack. The file I
+actually used, stunnel-fd2.conf, looked like this:
+
+\footnotesize
+\begin{verbatim}
+#
+# Stunnel conf for Bacula client -> SD
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29103]
+accept = localhost:9103
+connect = server:29103
+\end{verbatim}
+\normalsize
+
+You will notice that I specified a pid file location because I ran stunnel
+under my own userid so I could not use the default, which requires root
+permission. I also specified a certificate that I have as well as verify level
+2 so that the certificate is required and verified, and I must supply the
+location of the CA (Certificate Authority) certificate so that the stunnel
+certificate can be verified. Finally, you will see that there are two lines
+commented out, which when enabled, produce a lot of nice debug info in the
+command window.
+
+If you do not have a signed certificate (stunnel.pem), you need to delete the
+cert, CAfile, and verify lines.
+
+Note that the stunnel.pem, is actually a private key and a certificate in a
+single file. These two can be kept and specified individually, but keeping
+them in one file is more convenient.
+
+The config file, stunnel-sd.conf, needed for Stunnel 4 on the server machine
+is:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for Storage daemon
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is mandatory here, it may be self signed
+# If it is self signed, the client may not use
+# verify
+#
+cert = /home/kern/stunnel/stunnel.pem
+client = no
+# debug = 7
+# foreground = yes
+[29103]
+accept = 29103
+connect = 9103
+\end{verbatim}
+\normalsize
+
+\section{Starting and Testing the Data Encryption}
+\index[general]{Starting and Testing the Data Encryption }
+\index[general]{Encryption!Starting and Testing the Data }
+
+It will most likely be the simplest to implement the Data Channel encryption
+in the following order:
+
+\begin{itemize}
+\item Setup and run Bacula backing up some data on your client machine
+ without encryption.
+\item Stop Bacula.
+\item Modify the Storage resource in the Director's conf file.
+\item Start Bacula
+\item Start stunnel on the server with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-sd.conf
+
+\end{verbatim}
+\normalsize
+
+\item Start stunnel on the client with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-fd2.conf
+
+\end{verbatim}
+\normalsize
+
+\item Run a job.
+\item If it doesn't work, turn debug on in both stunnel conf files, restart
+ the stunnels, rerun the job, repeat until it works.
+ \end{itemize}
+
+\section{Encrypting the Control Channel}
+\index[general]{Channel!Encrypting the Control }
+\index[general]{Encrypting the Control Channel }
+
+The Job control channel is between the Director and the File daemon, and as
+mentioned above, it is not really necessary to encrypt, but it is good
+practice to encrypt it as well. The two stunnels that are used in this case
+will be Stunnel 1 and Stunnel 3 in the diagram above. Stunnel 3 on the server
+might normally listen on port 9102, but if you have a local File daemon, this
+will not work, so we make it listen on port 29102. It then sends the data to
+client:29102. Again we use port 29102 so that the stunnel on the client
+machine can decrypt the data before passing it on to port 9102 where the File
+daemon is listening.
+
+\section{Control Channel Configuration}
+\index[general]{Control Channel Configuration }
+
+We need to modify the standard Client resource, which would normally look
+something like:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client-fd
+ Address = client
+ FDPort = 9102
+ Catalog = BackupDB
+ Password = "xxx"
+}
+\end{verbatim}
+\normalsize
+
+to be:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client-fd
+ Address = localhost
+ FDPort = 29102
+ Catalog = BackupDB
+ Password = "xxx"
+}
+\end{verbatim}
+\normalsize
+
+This will cause the Director to send the control information to
+localhost:29102 instead of directly to the client.
+
+\section{Stunnel Configuration for the Control Channel}
+\index[general]{Config Files for stunnel to Encrypt the Control Channel }
+
+The stunnel config file, stunnel-dir.conf, for the Director's machine would
+look like the following:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for the Directory to contact a client
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29102]
+accept = localhost:29102
+connect = client:29102
+\end{verbatim}
+\normalsize
+
+and the config file, stunnel-fd1.conf, needed to run stunnel on the Client
+would be:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for the Directory to contact a client
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29102]
+accept = localhost:29102
+connect = client:29102
+\end{verbatim}
+\normalsize
+
+\section{Starting and Testing the Control Channel}
+\index[general]{Starting and Testing the Control Channel }
+\index[general]{Channel!Starting and Testing the Control }
+
+It will most likely be the simplest to implement the Control Channel
+encryption in the following order:
+
+\begin{itemize}
+\item Stop Bacula.
+\item Modify the Client resource in the Director's conf file.
+\item Start Bacula
+\item Start stunnel on the server with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-dir.conf
+
+\end{verbatim}
+\normalsize
+
+\item Start stunnel on the client with:
+
+ \footnotesize
+\begin{verbatim}
+ stunnel stunnel-fd1.conf
+
+\end{verbatim}
+\normalsize
+
+\item Run a job.
+\item If it doesn't work, turn debug on in both stunnel conf files, restart
+ the stunnels, rerun the job, repeat until it works.
+ \end{itemize}
+
+\section{Using stunnel to Encrypt to a Second Client}
+\index[general]{Using stunnel to Encrypt to a Second Client }
+\index[general]{Client!Using stunnel to Encrypt to a Second }
+
+On the client machine, you can just duplicate the setup that you have on the
+first client file for file and it should work fine.
+
+In the bacula-dir.conf file, you will want to create a second client pretty
+much identical to how you did for the first one, but the port number must be
+unique. We previously used:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client-fd
+ Address = localhost
+ FDPort = 29102
+ Catalog = BackupDB
+ Password = "xxx"
+}
+\end{verbatim}
+\normalsize
+
+so for the second client, we will, of course, have a different name, and we
+will also need a different port. Remember that we used port 29103 for the
+Storage daemon, so for the second client, we can use port 29104, and the
+Client resource would look like:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = client2-fd
+ Address = localhost
+ FDPort = 29104
+ Catalog = BackupDB
+ Password = "yyy"
+}
+\end{verbatim}
+\normalsize
+
+Now, fortunately, we do not need a third stunnel to on the Director's machine,
+we can just add the new port to the config file, stunnel-dir.conf, to make:
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula stunnel conf for the Directory to contact a client
+#
+pid = /home/kern/bacula/bin/working/stunnel.pid
+#
+# A cert is not mandatory here. If verify=2, a
+# cert signed by a CA must be specified, and
+# either CAfile or CApath must point to the CA's
+# cert
+#
+cert = /home/kern/stunnel/stunnel.pem
+CAfile = /home/kern/ssl/cacert.pem
+verify = 2
+client = yes
+# debug = 7
+# foreground = yes
+[29102]
+accept = localhost:29102
+connect = client:29102
+[29104]
+accept = localhost:29102
+connect = client2:29102
+\end{verbatim}
+\normalsize
+
+There are no changes necessary to the Storage daemon or the other stunnel so
+that this new client can talk to our Storage daemon.
+
+\section{Creating a Self-signed Certificate}
+\index[general]{Creating a Self-signed Certificate }
+\index[general]{Certificate!Creating a Self-signed }
+
+You may create a self-signed certificate for use with stunnel that will permit
+you to make it function, but will not allow certificate validation. The .pem
+file containing both the certificate and the key can be made with the
+following, which I put in a file named {\bf makepem}:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+#
+# Simple shell script to make a .pem file that can be used
+# with stunnel and Bacula
+#
+OPENSSL=openssl
+ umask 77
+ PEM1="/bin/mktemp openssl.XXXXXX"
+ PEM2="/bin/mktemp openssl.XXXXXX"
+ ${OPENSSL} req -newkey rsa:1024 -keyout $PEM1 -nodes \
+ -x509 -days 365 -out $PEM2
+ cat $PEM1 > stunnel.pem
+ echo "" >>stunnel.pem
+ cat $PEM2 >>stunnel.pem
+ rm $PEM1 $PEM2
+\end{verbatim}
+\normalsize
+
+The above script will ask you a number of questions. You may simply answer
+each of them by entering a return, or if you wish you may enter your own data.
+
+
+\section{Getting a CA Signed Certificate}
+\index[general]{Certificate!Getting a CA Signed }
+\index[general]{Getting a CA Signed Certificate }
+
+The process of getting a certificate that is signed by a CA is quite a bit
+more complicated. You can purchase one from quite a number of PKI vendors, but
+that is not at all necessary for use with Bacula.
+
+To get a CA signed
+certificate, you will either need to find a friend that has setup his own CA
+or to become a CA yourself, and thus you can sign all your own certificates.
+The book OpenSSL by John Viega, Matt Mesier \& Pravir Chandra from O'Reilly
+explains how to do it, or you can read the documentation provided in the
+Open-source PKI Book project at Source Forge:
+\elink{
+http://ospkibook.sourceforge.net/docs/OSPKI-2.4.7/OSPKI-html/ospki-book.htm}
+{http://ospkibook.sourceforge.net/docs/OSPKI-2.4.7/OSPKI-html/ospki-book.htm}.
+Note, this link may change.
+
+\section{Using ssh to Secure the Communications}
+\index[general]{Communications!Using ssh to Secure the }
+\index[general]{Using ssh to Secure the Communications }
+
+Please see the script {\bf ssh-tunnel.sh} in the {\bf examples} directory. It
+was contributed by Stephan Holl.
+++ /dev/null
-%%
-%%
-
-\chapter{Using Stunnel to Encrypt Communications}
-\label{StunnelChapter}
-\index[general]{Using Stunnel to Encrypt Communications to Clients }
-
-Prior to version 1.37, Bacula did not have built-in communications encryption.
-Please see the \ilink {TLS chapter}{CommEncryption} if you are using Bacula
-1.37 or greater.
-
-Without too much effort, it is possible to encrypt the communications
-between any of the daemons. This chapter will show you how to use {\bf
-stunnel} to encrypt communications to your client programs. We assume the
-Director and the Storage daemon are running on one machine that will be called
-{\bf server} and the Client or File daemon is running on a different machine
-called {\bf client}. Although the details may be slightly different, the same
-principles apply whether you are encrypting between Unix, Linux, or Win32
-machines. This example was developed between two Linux machines running
-stunnel version 4.04-4 on a Red Hat Enterprise 3.0 system.
-
-\section{Communications Ports Used}
-\index[general]{Used!Communications Ports }
-\index[general]{Communications Ports Used }
-
-First, you must know that with the standard Bacula configuration, the Director
-will contact the File daemon on port 9102. The File daemon then contacts the
-Storage daemon using the address and port parameters supplied by the Director.
-The standard port used will be 9103. This is the typical server/client view of
-the world, the File daemon is a server to the Director (i.e. listens for the
-Director to contact it), and the Storage daemon is a server to the File
-daemon.
-
-\section{Encryption}
-\index[general]{Encryption }
-
-The encryption is accomplished between the Director and the File daemon by
-using an stunnel on the Director's machine (server) to encrypt the data and to
-contact an stunnel on the File daemon's machine (client), which decrypts the
-data and passes it to the client.
-
-Between the File daemon and the Storage daemon, we use an stunnel on the File
-daemon's machine to encrypt the data and another stunnel on the Storage
-daemon's machine to decrypt the data.
-
-As a consequence, there are actually four copies of stunnel running, two on the
-server and two on the client. This may sound a bit complicated, but it really
-isn't. To accomplish this, we will need to construct four separate conf files
-for stunnel, and we will need to make some minor modifications to the
-Director's conf file. None of the other conf files need to be changed.
-
-\section{A Picture}
-\index[general]{Picture }
-
-Since pictures usually help a lot, here is an overview of what we will be
-doing. Don't worry about all the details of the port numbers and such for the
-moment.
-
-\footnotesize
-\begin{verbatim}
- File daemon (client):
- stunnel-fd1.conf
- |===========|
- Port 29102 >----| Stunnel 1 |-----> Port 9102
- |===========|
- stunnel-fd2.conf
- |===========|
- Port 9103 >----| Stunnel 2 |-----> server:29103
- |===========|
- Director (server):
- stunnel-dir.conf
- |===========|
- Port 29102 >----| Stunnel 3 |-----> client:29102
- |===========|
- stunnel-sd.conf
- |===========|
- Port 29103 >----| Stunnel 4 |-----> 9103
- |===========|
-\end{verbatim}
-\normalsize
-
-\section{Certificates}
-\index[general]{Certificates }
-
-In order for stunnel to function as a server, which it does in our diagram for
-Stunnel 1 and Stunnel 4, you must have a certificate and the key. It is
-possible to keep the two in separate files, but normally, you keep them in one
-single .pem file. You may create this certificate yourself in which case, it
-will be self-signed, or you may have it signed by a CA.
-
-If you want your clients to verify that the server is in fact valid (Stunnel 2
-and Stunnel 3), you will need to have the server certificates signed by a CA
-(Certificate Authority), and you will need to have the CA's public certificate
-(contains the CA's public key).
-
-Having a CA signed certificate is {\bf highly} recommended if you are using
-your client across the Internet, otherwise you are exposed to the man in the
-middle attack and hence loss of your data.
-
-See below for how to create a self-signed certificate.
-
-\section{Securing the Data Channel}
-\index[general]{Channel!Securing the Data }
-\index[general]{Securing the Data Channel }
-
-To simplify things a bit, let's for the moment consider only the data channel.
-That is the connection between the File daemon and the Storage daemon, which
-takes place on port 9103. In fact, in a minimalist solution, this is the only
-connection that needs to be encrypted, because it is the one that transports your
-data. The connection between the Director and the File daemon is simply a
-control channel used to start the job and get the job status.
-
-Normally the File daemon will contact the Storage daemon on port 9103
-(supplied by the Director), so we need an stunnel that listens on port 9103 on
-the File daemon's machine, encrypts the data and sends it to the Storage
-daemon. This is depicted by Stunnel 2 above. Note that this stunnel is
-listening on port 9103 and sending to server:29103. We use port 29103 on the
-server because if we would send the data to port 9103, it would go directly to the
-Storage daemon, which doesn't understand encrypted data. On the server
-machine, we run Stunnel 4, which listens on port 29103, decrypts the data and
-sends it to the Storage daemon, which is listening on port 9103.
-
-\section{Data Channel Configuration}
-\index[general]{Modification of bacula-dir.conf for the Data Channel }
-\index[general]{baculoa-dir.conf!Modification for the Data Channel }
-
-The Storage resource of the bacula-dir.conf normally looks something like the
-following:
-
-\footnotesize
-\begin{verbatim}
-Storage {
- Name = File
- Address = server
- SDPort = 9103
- Password = storage_password
- Device = File
- Media Type = File
-}
-\end{verbatim}
-\normalsize
-
-Notice that this is running on the server machine, and it points the File
-daemon back to server:9103, which is where our Storage daemon is listening. We
-modify this to be:
-
-\footnotesize
-\begin{verbatim}
-Storage {
- Name = File
- Address = localhost
- SDPort = 9103
- Password = storage_password
- Device = File
- Media Type = File
-}
-\end{verbatim}
-\normalsize
-
-This causes the File daemon to send the data to the stunnel running on
-localhost (the client machine). We could have used client as the address as
-well.
-
-\section{Stunnel Configuration for the Data Channel}
-\index[general]{Stunnel Configuration for the Data Channel }
-
-In the diagram above, we see above Stunnel 2 that we use stunnel-fd2.conf on the
-client. A pretty much minimal config file would look like the following:
-
-\footnotesize
-\begin{verbatim}
-client = yes
-[29103]
-accept = localhost:9103
-connect = server:29103
-\end{verbatim}
-\normalsize
-
-The above config file does encrypt the data but it does not require a
-certificate, so it is subject to the man in the middle attack. The file I
-actually used, stunnel-fd2.conf, looked like this:
-
-\footnotesize
-\begin{verbatim}
-#
-# Stunnel conf for Bacula client -> SD
-#
-pid = /home/kern/bacula/bin/working/stunnel.pid
-#
-# A cert is not mandatory here. If verify=2, a
-# cert signed by a CA must be specified, and
-# either CAfile or CApath must point to the CA's
-# cert
-#
-cert = /home/kern/stunnel/stunnel.pem
-CAfile = /home/kern/ssl/cacert.pem
-verify = 2
-client = yes
-# debug = 7
-# foreground = yes
-[29103]
-accept = localhost:9103
-connect = server:29103
-\end{verbatim}
-\normalsize
-
-You will notice that I specified a pid file location because I ran stunnel
-under my own userid so I could not use the default, which requires root
-permission. I also specified a certificate that I have as well as verify level
-2 so that the certificate is required and verified, and I must supply the
-location of the CA (Certificate Authority) certificate so that the stunnel
-certificate can be verified. Finally, you will see that there are two lines
-commented out, which when enabled, produce a lot of nice debug info in the
-command window.
-
-If you do not have a signed certificate (stunnel.pem), you need to delete the
-cert, CAfile, and verify lines.
-
-Note that the stunnel.pem, is actually a private key and a certificate in a
-single file. These two can be kept and specified individually, but keeping
-them in one file is more convenient.
-
-The config file, stunnel-sd.conf, needed for Stunnel 4 on the server machine
-is:
-
-\footnotesize
-\begin{verbatim}
-#
-# Bacula stunnel conf for Storage daemon
-#
-pid = /home/kern/bacula/bin/working/stunnel.pid
-#
-# A cert is mandatory here, it may be self signed
-# If it is self signed, the client may not use
-# verify
-#
-cert = /home/kern/stunnel/stunnel.pem
-client = no
-# debug = 7
-# foreground = yes
-[29103]
-accept = 29103
-connect = 9103
-\end{verbatim}
-\normalsize
-
-\section{Starting and Testing the Data Encryption}
-\index[general]{Starting and Testing the Data Encryption }
-\index[general]{Encryption!Starting and Testing the Data }
-
-It will most likely be the simplest to implement the Data Channel encryption
-in the following order:
-
-\begin{itemize}
-\item Setup and run Bacula backing up some data on your client machine
- without encryption.
-\item Stop Bacula.
-\item Modify the Storage resource in the Director's conf file.
-\item Start Bacula
-\item Start stunnel on the server with:
-
- \footnotesize
-\begin{verbatim}
- stunnel stunnel-sd.conf
-
-\end{verbatim}
-\normalsize
-
-\item Start stunnel on the client with:
-
- \footnotesize
-\begin{verbatim}
- stunnel stunnel-fd2.conf
-
-\end{verbatim}
-\normalsize
-
-\item Run a job.
-\item If it doesn't work, turn debug on in both stunnel conf files, restart
- the stunnels, rerun the job, repeat until it works.
- \end{itemize}
-
-\section{Encrypting the Control Channel}
-\index[general]{Channel!Encrypting the Control }
-\index[general]{Encrypting the Control Channel }
-
-The Job control channel is between the Director and the File daemon, and as
-mentioned above, it is not really necessary to encrypt, but it is good
-practice to encrypt it as well. The two stunnels that are used in this case
-will be Stunnel 1 and Stunnel 3 in the diagram above. Stunnel 3 on the server
-might normally listen on port 9102, but if you have a local File daemon, this
-will not work, so we make it listen on port 29102. It then sends the data to
-client:29102. Again we use port 29102 so that the stunnel on the client
-machine can decrypt the data before passing it on to port 9102 where the File
-daemon is listening.
-
-\section{Control Channel Configuration}
-\index[general]{Control Channel Configuration }
-
-We need to modify the standard Client resource, which would normally look
-something like:
-
-\footnotesize
-\begin{verbatim}
-Client {
- Name = client-fd
- Address = client
- FDPort = 9102
- Catalog = BackupDB
- Password = "xxx"
-}
-\end{verbatim}
-\normalsize
-
-to be:
-
-\footnotesize
-\begin{verbatim}
-Client {
- Name = client-fd
- Address = localhost
- FDPort = 29102
- Catalog = BackupDB
- Password = "xxx"
-}
-\end{verbatim}
-\normalsize
-
-This will cause the Director to send the control information to
-localhost:29102 instead of directly to the client.
-
-\section{Stunnel Configuration for the Control Channel}
-\index[general]{Config Files for stunnel to Encrypt the Control Channel }
-
-The stunnel config file, stunnel-dir.conf, for the Director's machine would
-look like the following:
-
-\footnotesize
-\begin{verbatim}
-#
-# Bacula stunnel conf for the Directory to contact a client
-#
-pid = /home/kern/bacula/bin/working/stunnel.pid
-#
-# A cert is not mandatory here. If verify=2, a
-# cert signed by a CA must be specified, and
-# either CAfile or CApath must point to the CA's
-# cert
-#
-cert = /home/kern/stunnel/stunnel.pem
-CAfile = /home/kern/ssl/cacert.pem
-verify = 2
-client = yes
-# debug = 7
-# foreground = yes
-[29102]
-accept = localhost:29102
-connect = client:29102
-\end{verbatim}
-\normalsize
-
-and the config file, stunnel-fd1.conf, needed to run stunnel on the Client
-would be:
-
-\footnotesize
-\begin{verbatim}
-#
-# Bacula stunnel conf for the Directory to contact a client
-#
-pid = /home/kern/bacula/bin/working/stunnel.pid
-#
-# A cert is not mandatory here. If verify=2, a
-# cert signed by a CA must be specified, and
-# either CAfile or CApath must point to the CA's
-# cert
-#
-cert = /home/kern/stunnel/stunnel.pem
-CAfile = /home/kern/ssl/cacert.pem
-verify = 2
-client = yes
-# debug = 7
-# foreground = yes
-[29102]
-accept = localhost:29102
-connect = client:29102
-\end{verbatim}
-\normalsize
-
-\section{Starting and Testing the Control Channel}
-\index[general]{Starting and Testing the Control Channel }
-\index[general]{Channel!Starting and Testing the Control }
-
-It will most likely be the simplest to implement the Control Channel
-encryption in the following order:
-
-\begin{itemize}
-\item Stop Bacula.
-\item Modify the Client resource in the Director's conf file.
-\item Start Bacula
-\item Start stunnel on the server with:
-
- \footnotesize
-\begin{verbatim}
- stunnel stunnel-dir.conf
-
-\end{verbatim}
-\normalsize
-
-\item Start stunnel on the client with:
-
- \footnotesize
-\begin{verbatim}
- stunnel stunnel-fd1.conf
-
-\end{verbatim}
-\normalsize
-
-\item Run a job.
-\item If it doesn't work, turn debug on in both stunnel conf files, restart
- the stunnels, rerun the job, repeat until it works.
- \end{itemize}
-
-\section{Using stunnel to Encrypt to a Second Client}
-\index[general]{Using stunnel to Encrypt to a Second Client }
-\index[general]{Client!Using stunnel to Encrypt to a Second }
-
-On the client machine, you can just duplicate the setup that you have on the
-first client file for file and it should work fine.
-
-In the bacula-dir.conf file, you will want to create a second client pretty
-much identical to how you did for the first one, but the port number must be
-unique. We previously used:
-
-\footnotesize
-\begin{verbatim}
-Client {
- Name = client-fd
- Address = localhost
- FDPort = 29102
- Catalog = BackupDB
- Password = "xxx"
-}
-\end{verbatim}
-\normalsize
-
-so for the second client, we will, of course, have a different name, and we
-will also need a different port. Remember that we used port 29103 for the
-Storage daemon, so for the second client, we can use port 29104, and the
-Client resource would look like:
-
-\footnotesize
-\begin{verbatim}
-Client {
- Name = client2-fd
- Address = localhost
- FDPort = 29104
- Catalog = BackupDB
- Password = "yyy"
-}
-\end{verbatim}
-\normalsize
-
-Now, fortunately, we do not need a third stunnel to on the Director's machine,
-we can just add the new port to the config file, stunnel-dir.conf, to make:
-
-\footnotesize
-\begin{verbatim}
-#
-# Bacula stunnel conf for the Directory to contact a client
-#
-pid = /home/kern/bacula/bin/working/stunnel.pid
-#
-# A cert is not mandatory here. If verify=2, a
-# cert signed by a CA must be specified, and
-# either CAfile or CApath must point to the CA's
-# cert
-#
-cert = /home/kern/stunnel/stunnel.pem
-CAfile = /home/kern/ssl/cacert.pem
-verify = 2
-client = yes
-# debug = 7
-# foreground = yes
-[29102]
-accept = localhost:29102
-connect = client:29102
-[29104]
-accept = localhost:29102
-connect = client2:29102
-\end{verbatim}
-\normalsize
-
-There are no changes necessary to the Storage daemon or the other stunnel so
-that this new client can talk to our Storage daemon.
-
-\section{Creating a Self-signed Certificate}
-\index[general]{Creating a Self-signed Certificate }
-\index[general]{Certificate!Creating a Self-signed }
-
-You may create a self-signed certificate for use with stunnel that will permit
-you to make it function, but will not allow certificate validation. The .pem
-file containing both the certificate and the key can be made with the
-following, which I put in a file named {\bf makepem}:
-
-\footnotesize
-\begin{verbatim}
-#!/bin/sh
-#
-# Simple shell script to make a .pem file that can be used
-# with stunnel and Bacula
-#
-OPENSSL=openssl
- umask 77
- PEM1="/bin/mktemp openssl.XXXXXX"
- PEM2="/bin/mktemp openssl.XXXXXX"
- ${OPENSSL} req -newkey rsa:1024 -keyout $PEM1 -nodes \
- -x509 -days 365 -out $PEM2
- cat $PEM1 > stunnel.pem
- echo "" >>stunnel.pem
- cat $PEM2 >>stunnel.pem
- rm $PEM1 $PEM2
-\end{verbatim}
-\normalsize
-
-The above script will ask you a number of questions. You may simply answer
-each of them by entering a return, or if you wish you may enter your own data.
-
-
-\section{Getting a CA Signed Certificate}
-\index[general]{Certificate!Getting a CA Signed }
-\index[general]{Getting a CA Signed Certificate }
-
-The process of getting a certificate that is signed by a CA is quite a bit
-more complicated. You can purchase one from quite a number of PKI vendors, but
-that is not at all necessary for use with Bacula.
-
-To get a CA signed
-certificate, you will either need to find a friend that has setup his own CA
-or to become a CA yourself, and thus you can sign all your own certificates.
-The book OpenSSL by John Viega, Matt Mesier \& Pravir Chandra from O'Reilly
-explains how to do it, or you can read the documentation provided in the
-Open-source PKI Book project at Source Forge:
-\elink{
-http://ospkibook.sourceforge.net/docs/OSPKI-2.4.7/OSPKI-html/ospki-book.htm}
-{http://ospkibook.sourceforge.net/docs/OSPKI-2.4.7/OSPKI-html/ospki-book.htm}.
-Note, this link may change.
-
-\section{Using ssh to Secure the Communications}
-\index[general]{Communications!Using ssh to Secure the }
-\index[general]{Using ssh to Secure the Communications }
-
-Please see the script {\bf ssh-tunnel.sh} in the {\bf examples} directory. It
-was contributed by Stephan Holl.
--- /dev/null
+%%
+%%
+
+\chapter{Variable Expansion}
+\label{VarsChapter}
+\index[general]{Variable Expansion }
+\index[general]{Expansion!Variable }
+
+% TODO: does the following mean that this should not be in book?
+
+Please note that as of version 1.37, the Variable Expansion
+is deprecated and replaced by Python scripting (not yet
+documented).
+
+Variable expansion is somewhat similar to Unix shell variable expansion.
+Currently (version 1.31), it is used only in format labels, but in the future,
+it will most likely be used in more places.
+
+\section{General Functionality}
+\index[general]{Functionality!General }
+\index[general]{General Functionality }
+
+This is basically a string expansion capability that permits referencing
+variables, indexing arrays, conditional replacement of variables, case
+conversion, substring selection, regular expression matching and replacement,
+character class replacement, padding strings, repeated expansion in a user
+controlled loop, support of arithmetic expressions in the loop start, step and
+end conditions, and recursive expansion.
+
+When using variable expansion characters in a Volume Label Format record, the
+format should always be enclosed in double quotes ({\bf "}).
+
+For example, {\bf \$\{HOME\}} will be replaced by your home directory as
+defined in the environment. If you have defined the variable {\bf xxx} to be
+{\bf Test}, then the reference {\bf \$\{xxx:p/7/Y/r\}} will right pad the
+contents of {\bf xxx} to a length of seven characters filling with the
+character {\bf Y} giving {\bf YYYTest}.
+
+\section{Bacula Variables}
+\index[general]{Bacula Variables }
+\index[general]{Variables!Bacula }
+
+Within Bacula, there are three main classes of variables with some minor
+variations within the classes. The classes are:
+
+\begin{description}
+
+\item [Counters]
+ \index[general]{Counters }
+ Counters are defined by the {\bf Counter} resources in the Director's conf
+file. The counter can either be a temporary counter that lasts for the
+duration of Bacula's execution, or it can be a variable that is stored in
+the catalog, and thus retains its value from one Bacula execution to another.
+Counter variables may be incremented by postfixing a plus sign ({\bf +} after
+the variable name).
+
+\item [Internal Variables]
+ \index[general]{Internal Variables }
+ Internal variables are read-only, and may be related to the current job (i.e.
+Job name), or maybe special variables such as the date and time. The
+following variables are available:
+
+\begin{itemize}
+\item [Year] -- the full year
+\item [Month] -- the current month 1-12
+\item [Day] -- the day of the month 1-31
+\item [Hour] -- the hour 0-24
+\item [Minute] -- the current minute 0-59
+\item [Second] -- the current second 0-59
+\item [WeekDay] -- the current day of the week 0-6 with 0 being Sunday
+\item [Job] -- the job name
+\item [general] -- the Director's name
+\item [Level] -- the Job Level
+\item [Type] -- the Job type
+\item [JobId] -- the JobId
+\item [JobName] -- the unique job name composed of Job and date
+\item [Storage] -- the Storage daemon's name
+\item [Client] -- the Client's name
+\item [NumVols] -- the current number of Volumes in the Pool
+\item [Pool] -- the Pool name
+\item [Catalog] -- the Catalog name
+\item [MediaType] -- the Media Type
+ \end{itemize}
+
+\item [Environment Variables]
+ \index[general]{Environment Variables }
+ Environment variables are read-only, and must be defined in the environment
+prior to executing Bacula. Environment variables may be either scalar or an
+array, where the elements of the array are referenced by subscripting the
+variable name (e.g. {\bf \$\{Months[3]\}}). Environment variable arrays are
+defined by separating the elements with a vertical bar ({\bf |}), thus {\bf
+set Months="Jan|Feb|Mar|Apr|..."} defines an environment variable named
+{\bf Month} that will be treated as an array, and the reference {\bf
+\$\{Months[3]\}} will yield {\bf Mar}. The elements of the array can have
+differing lengths.
+\end{description}
+
+\section{Full Syntax}
+\index[general]{Syntax!Full }
+\index[general]{Full Syntax }
+
+Since the syntax is quite extensive, below, you will find the pseudo BNF. The
+special characters have the following meaning:
+
+\footnotesize
+\begin{verbatim}
+ ::= definition
+ ( ) grouping if the parens are not quoted
+ | separates alternatives
+ '/' literal / (or any other character)
+ CAPS a character or character sequence
+ * preceding item can be repeated zero or more times
+ ? preceding item can appear zero or one time
+ + preceding item must appear one or more times
+\end{verbatim}
+\normalsize
+
+And the pseudo BNF describing the syntax is:
+
+\footnotesize
+\begin{verbatim}
+ input ::= ( TEXT
+ | variable
+ | INDEX_OPEN input INDEX_CLOSE (loop_limits)?
+ )*
+ variable ::= DELIM_INIT (name|expression)
+ name ::= (NAME_CHARS)+
+ expression ::= DELIM_OPEN
+ (name|variable)+
+ (INDEX_OPEN num_exp INDEX_CLOSE)?
+ (':' command)*
+ DELIM_CLOSE
+ command ::= '-' (TEXT_EXP|variable)+
+ | '+' (TEXT_EXP|variable)+
+ | 'o' NUMBER ('-'|',') (NUMBER)?
+ | '#'
+ | '*' (TEXT_EXP|variable)+
+ | 's' '/' (TEXT_PATTERN)+
+ '/' (variable|TEXT_SUBST)*
+ '/' ('m'|'g'|'i'|'t')*
+ | 'y' '/' (variable|TEXT_SUBST)+
+ '/' (variable|TEXT_SUBST)*
+ '/'
+ | 'p' '/' NUMBER
+ '/' (variable|TEXT_SUBST)*
+ '/' ('r'|'l'|'c')
+ | '%' (name|variable)+
+ ('(' (TEXT_ARGS)? ')')?
+ | 'l'
+ | 'u'
+ num_exp ::= operand
+ | operand ('+'|'-'|'*'|'/'|'%') num_exp
+ operand ::= ('+'|'-')? NUMBER
+ | INDEX_MARK
+ | '(' num_exp ')'
+ | variable
+ loop_limits ::= DELIM_OPEN
+ (num_exp)? ',' (num_exp)? (',' (num_exp)?)?
+ DELIM_CLOSE
+ NUMBER ::= ('0'|...|'9')+
+ TEXT_PATTERN::= (^('/'))+
+ TEXT_SUBST ::= (^(DELIM_INIT|'/'))+
+ TEXT_ARGS ::= (^(DELIM_INIT|')'))+
+ TEXT_EXP ::= (^(DELIM_INIT|DELIM_CLOSE|':'|'+'))+
+ TEXT ::= (^(DELIM_INIT|INDEX_OPEN|INDEX_CLOSE))+
+ DELIM_INIT ::= '$'
+ DELIM_OPEN ::= '{'
+ DELIM_CLOSE ::= '}'
+ INDEX_OPEN ::= '['
+ INDEX_CLOSE ::= ']'
+ INDEX_MARK ::= '#'
+ NAME_CHARS ::= 'a'|...|'z'|'A'|...|'Z'|'0'|...|'9'
+\end{verbatim}
+\normalsize
+
+\section{Semantics}
+\index[general]{Semantics }
+
+The items listed in {\bf command} above, which always follow a colon ({\bf :})
+have the following meanings:
+
+\footnotesize
+\begin{verbatim}
+ - perform substitution if variable is empty
+ + perform substitution if variable is not empty
+ o cut out substring of the variable value
+ # length of the variable value
+ * substitute empty string if the variable value is not empty,
+ otherwise substitute the trailing parameter
+ s regular expression search and replace. The trailing
+ options are: m = multiline, i = case insensitive,
+ g = global, t = plain text (no regexp)
+ y transpose characters from class A to class B
+ p pad variable to l = left, r = right or c = center,
+ with second value.
+ % special function call (none implemented)
+ l lower case the variable value
+ u upper case the variable value
+\end{verbatim}
+\normalsize
+
+The {\bf loop\_limits} are start, step, and end values.
+
+A counter variable name followed immediately by a plus ({\bf +}) will cause
+the counter to be incremented by one.
+
+\section{Examples}
+\index[general]{Examples }
+
+To create an ISO date:
+
+\footnotesize
+\begin{verbatim}
+ DLT-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}
+\end{verbatim}
+\normalsize
+
+on 20 June 2003 would give {\bf DLT-2003-06-20}
+
+If you set the environment variable {\bf mon} to
+
+\footnotesize
+\begin{verbatim}
+ January|February|March|April|May|...
+ File-${mon[${Month}]}/${Day}/${Year}
+\end{verbatim}
+\normalsize
+
+on the first of March would give {\bf File-March/1/2003 }
+++ /dev/null
-%%
-%%
-
-\chapter{Variable Expansion}
-\label{VarsChapter}
-\index[general]{Variable Expansion }
-\index[general]{Expansion!Variable }
-
-% TODO: does the following mean that this should not be in book?
-
-Please note that as of version 1.37, the Variable Expansion
-is deprecated and replaced by Python scripting (not yet
-documented).
-
-Variable expansion is somewhat similar to Unix shell variable expansion.
-Currently (version 1.31), it is used only in format labels, but in the future,
-it will most likely be used in more places.
-
-\section{General Functionality}
-\index[general]{Functionality!General }
-\index[general]{General Functionality }
-
-This is basically a string expansion capability that permits referencing
-variables, indexing arrays, conditional replacement of variables, case
-conversion, substring selection, regular expression matching and replacement,
-character class replacement, padding strings, repeated expansion in a user
-controlled loop, support of arithmetic expressions in the loop start, step and
-end conditions, and recursive expansion.
-
-When using variable expansion characters in a Volume Label Format record, the
-format should always be enclosed in double quotes ({\bf "}).
-
-For example, {\bf \$\{HOME\}} will be replaced by your home directory as
-defined in the environment. If you have defined the variable {\bf xxx} to be
-{\bf Test}, then the reference {\bf \$\{xxx:p/7/Y/r\}} will right pad the
-contents of {\bf xxx} to a length of seven characters filling with the
-character {\bf Y} giving {\bf YYYTest}.
-
-\section{Bacula Variables}
-\index[general]{Bacula Variables }
-\index[general]{Variables!Bacula }
-
-Within Bacula, there are three main classes of variables with some minor
-variations within the classes. The classes are:
-
-\begin{description}
-
-\item [Counters]
- \index[general]{Counters }
- Counters are defined by the {\bf Counter} resources in the Director's conf
-file. The counter can either be a temporary counter that lasts for the
-duration of Bacula's execution, or it can be a variable that is stored in
-the catalog, and thus retains its value from one Bacula execution to another.
-Counter variables may be incremented by postfixing a plus sign ({\bf +} after
-the variable name).
-
-\item [Internal Variables]
- \index[general]{Internal Variables }
- Internal variables are read-only, and may be related to the current job (i.e.
-Job name), or maybe special variables such as the date and time. The
-following variables are available:
-
-\begin{itemize}
-\item [Year] -- the full year
-\item [Month] -- the current month 1-12
-\item [Day] -- the day of the month 1-31
-\item [Hour] -- the hour 0-24
-\item [Minute] -- the current minute 0-59
-\item [Second] -- the current second 0-59
-\item [WeekDay] -- the current day of the week 0-6 with 0 being Sunday
-\item [Job] -- the job name
-\item [general] -- the Director's name
-\item [Level] -- the Job Level
-\item [Type] -- the Job type
-\item [JobId] -- the JobId
-\item [JobName] -- the unique job name composed of Job and date
-\item [Storage] -- the Storage daemon's name
-\item [Client] -- the Client's name
-\item [NumVols] -- the current number of Volumes in the Pool
-\item [Pool] -- the Pool name
-\item [Catalog] -- the Catalog name
-\item [MediaType] -- the Media Type
- \end{itemize}
-
-\item [Environment Variables]
- \index[general]{Environment Variables }
- Environment variables are read-only, and must be defined in the environment
-prior to executing Bacula. Environment variables may be either scalar or an
-array, where the elements of the array are referenced by subscripting the
-variable name (e.g. {\bf \$\{Months[3]\}}). Environment variable arrays are
-defined by separating the elements with a vertical bar ({\bf |}), thus {\bf
-set Months="Jan|Feb|Mar|Apr|..."} defines an environment variable named
-{\bf Month} that will be treated as an array, and the reference {\bf
-\$\{Months[3]\}} will yield {\bf Mar}. The elements of the array can have
-differing lengths.
-\end{description}
-
-\section{Full Syntax}
-\index[general]{Syntax!Full }
-\index[general]{Full Syntax }
-
-Since the syntax is quite extensive, below, you will find the pseudo BNF. The
-special characters have the following meaning:
-
-\footnotesize
-\begin{verbatim}
- ::= definition
- ( ) grouping if the parens are not quoted
- | separates alternatives
- '/' literal / (or any other character)
- CAPS a character or character sequence
- * preceding item can be repeated zero or more times
- ? preceding item can appear zero or one time
- + preceding item must appear one or more times
-\end{verbatim}
-\normalsize
-
-And the pseudo BNF describing the syntax is:
-
-\footnotesize
-\begin{verbatim}
- input ::= ( TEXT
- | variable
- | INDEX_OPEN input INDEX_CLOSE (loop_limits)?
- )*
- variable ::= DELIM_INIT (name|expression)
- name ::= (NAME_CHARS)+
- expression ::= DELIM_OPEN
- (name|variable)+
- (INDEX_OPEN num_exp INDEX_CLOSE)?
- (':' command)*
- DELIM_CLOSE
- command ::= '-' (TEXT_EXP|variable)+
- | '+' (TEXT_EXP|variable)+
- | 'o' NUMBER ('-'|',') (NUMBER)?
- | '#'
- | '*' (TEXT_EXP|variable)+
- | 's' '/' (TEXT_PATTERN)+
- '/' (variable|TEXT_SUBST)*
- '/' ('m'|'g'|'i'|'t')*
- | 'y' '/' (variable|TEXT_SUBST)+
- '/' (variable|TEXT_SUBST)*
- '/'
- | 'p' '/' NUMBER
- '/' (variable|TEXT_SUBST)*
- '/' ('r'|'l'|'c')
- | '%' (name|variable)+
- ('(' (TEXT_ARGS)? ')')?
- | 'l'
- | 'u'
- num_exp ::= operand
- | operand ('+'|'-'|'*'|'/'|'%') num_exp
- operand ::= ('+'|'-')? NUMBER
- | INDEX_MARK
- | '(' num_exp ')'
- | variable
- loop_limits ::= DELIM_OPEN
- (num_exp)? ',' (num_exp)? (',' (num_exp)?)?
- DELIM_CLOSE
- NUMBER ::= ('0'|...|'9')+
- TEXT_PATTERN::= (^('/'))+
- TEXT_SUBST ::= (^(DELIM_INIT|'/'))+
- TEXT_ARGS ::= (^(DELIM_INIT|')'))+
- TEXT_EXP ::= (^(DELIM_INIT|DELIM_CLOSE|':'|'+'))+
- TEXT ::= (^(DELIM_INIT|INDEX_OPEN|INDEX_CLOSE))+
- DELIM_INIT ::= '$'
- DELIM_OPEN ::= '{'
- DELIM_CLOSE ::= '}'
- INDEX_OPEN ::= '['
- INDEX_CLOSE ::= ']'
- INDEX_MARK ::= '#'
- NAME_CHARS ::= 'a'|...|'z'|'A'|...|'Z'|'0'|...|'9'
-\end{verbatim}
-\normalsize
-
-\section{Semantics}
-\index[general]{Semantics }
-
-The items listed in {\bf command} above, which always follow a colon ({\bf :})
-have the following meanings:
-
-\footnotesize
-\begin{verbatim}
- - perform substitution if variable is empty
- + perform substitution if variable is not empty
- o cut out substring of the variable value
- # length of the variable value
- * substitute empty string if the variable value is not empty,
- otherwise substitute the trailing parameter
- s regular expression search and replace. The trailing
- options are: m = multiline, i = case insensitive,
- g = global, t = plain text (no regexp)
- y transpose characters from class A to class B
- p pad variable to l = left, r = right or c = center,
- with second value.
- % special function call (none implemented)
- l lower case the variable value
- u upper case the variable value
-\end{verbatim}
-\normalsize
-
-The {\bf loop\_limits} are start, step, and end values.
-
-A counter variable name followed immediately by a plus ({\bf +}) will cause
-the counter to be incremented by one.
-
-\section{Examples}
-\index[general]{Examples }
-
-To create an ISO date:
-
-\footnotesize
-\begin{verbatim}
- DLT-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}
-\end{verbatim}
-\normalsize
-
-on 20 June 2003 would give {\bf DLT-2003-06-20}
-
-If you set the environment variable {\bf mon} to
-
-\footnotesize
-\begin{verbatim}
- January|February|March|April|May|...
- File-${mon[${Month}]}/${Day}/${Year}
-\end{verbatim}
-\normalsize
-
-on the first of March would give {\bf File-March/1/2003 }
--- /dev/null
+%%
+%%
+% TODO: maybe merge all this FAQ in with the appropriate section?
+% TODO: and use detailed indexing to help reader
+
+\chapter{Bacula Frequently Asked Questions}
+\label{FaqChapter}
+\index[general]{Questions!Bacula Frequently Asked }
+\index[general]{Bacula Frequently Asked Questions }
+
+These are questions that have been submitted over time by the
+Bacula users. The following
+FAQ is very useful, but it is not always up to date
+with newer information, so after reading it, if you don't find what you
+want, you might try the Bacula wiki maintained by Frank Sweetser, which
+contains more than just a FAQ:
+\elink{http://wiki.bacula.org}{http://wiki.bacula.org}
+or go directly to the FAQ at:
+\elink{http://wiki.bacula.org/doku.php?id=faq}
+{http://wiki.bacula.org/doku.php?id=faq}.
+
+Please also see
+\ilink{the bugs section}{BugsChapter} of this document for a list
+of known bugs and solutions.
+
+\begin{description}
+\label{what}
+\section{What is Bacula?}
+\item [What is {\bf Bacula}? ]
+ \index[general]{What is Bacula? }
+ {\bf Bacula} is a network backup and restore program.
+
+\section{Does Bacula support Windows?}
+\item [Does Bacula support Windows?]
+\index[general]{Does Bacula support Windows? }
+ Yes, Bacula compiles and runs on Windows machines (Win98, WinMe, WinXP,
+ WinNT, Win2003, and Win2000). We provide a binary version of the Client
+ (bacula-fd), but have not tested the Director nor the Storage daemon.
+ Note, Win95 is no longer supported because it doesn't have the
+ GetFileAttributesExA API call.
+
+
+\label{lang}
+\section{What language is Bacula written in?}
+\item [What language is Bacula written in?]
+\index[general]{What language is Bacula written in? }
+ It is written in C++, but it is mostly C code using only a limited set of
+ the C++ extensions over C. Thus Bacula is completely compiled using the
+ C++ compiler. There are several modules, including the Win32 interface, that
+ are written using the object oriented C++ features. Over time, we are slowly
+ adding a larger subset of C++.
+
+\label{run}
+\section{On what machines does Bacula run?}
+\item [On what machines does Bacula run? ]
+ \index[general]{On what machines does Bacula run? }
+ {\bf Bacula} builds and executes on Red Hat Linux (versions RH7.1-RHEL
+ 4.0, Fedora, SuSE, Gentoo, Debian, Mandriva, ...), FreeBSD, Solaris,
+ Alpha, SGI (client), NetBSD, OpenBSD, Mac OS X (client), and Win32.
+
+ Bacula has been my only backup tool for over seven years backing up 8
+ machines nightly (6 Linux boxes running SuSE, previously
+ Red Hat and Fedora, a WinXP machine, and a WinNT machine).
+
+
+\label{stable}
+\section{Is Bacula Stable?}
+\item [Is Bacula Stable? ]
+\index[general]{Is Bacula Stable? }
+ Yes, it is remarkably stable, but remember, there are still a lot of
+ unimplemented or partially implemented features. With a program of this
+ size (150,000+ lines of C++ code not including the SQL programs) there
+ are bound to be bugs. The current test environment (a twisted pair
+ local network and a HP DLT backup tape) is not exactly ideal, so
+ additional testing on other sites is necessary. The File daemon has
+ never crashed -- running months at a time with no intervention. The
+ Storage daemon is remarkably stable with most of the problems arising
+ during labeling or switching tapes. Storage daemon crashes are rare
+ but running multiple drives and simultaneous jobs sometimes (rarely)
+ problems.
+ The Director, given the multitude of functions it fulfills is also
+ relatively stable. In a production environment, it rarely if ever
+ crashes. Of the three daemons, the Director is the most prone to having
+ problems. Still, it frequently runs several months with no problems.
+
+ There are a number of reasons for this stability.
+
+ \begin{enumerate}
+ \item The program is constantly checking the chain of allocated
+ memory buffers to ensure that no overruns have occurred. \\
+ \item All memory leaks (orphaned buffers) are reported each time the
+ program terminates.\\
+ \item Any signal (segmentation fault, ...) generates a
+ traceback that is emailed to the developer. This permits quick
+ resolution of bugs even if they only show up rarely in a production
+ system.\\
+ \item There is a reasonably comprehensive set of regression tests
+ that avoids re-creating the most common errors in new versions of
+ Bacula.
+ \end{enumerate}
+
+\label{AuthorizationErrors}
+\section{I'm Getting Authorization Errors. What is Going On? }
+\item [I'm Getting Authorization Errors. What is Going On? ]
+\index[general]{Authorization Errors}
+\index[general]{Concurrent Jobs}
+ For security reasons, Bacula requires that both the File daemon and the
+ Storage daemon know the name of the Director as well as its password. As a
+ consequence, if you change the Director's name or password, you must make
+ the corresponding change in the Storage daemon's and in the File daemon's
+ configuration files.
+
+ During the authorization process, the Storage daemon and File daemon
+ also require that the Director authenticates itself, so both ends
+ require the other to have the correct name and password.
+
+ If you have edited the conf files and modified any name or any password,
+ and you are getting authentication errors, then your best bet is to go
+ back to the original conf files generated by the Bacula installation
+ process. Make only the absolutely necessary modifications to these
+ files -- e.g. add the correct email address. Then follow the
+ instructions in the \ilink{ Running Bacula}{TutorialChapter} chapter of
+ this manual. You will run a backup to disk and a restore. Only when
+ that works, should you begin customization of the conf files.
+
+ Another reason that you can get authentication errors is if you are
+ running Multiple Concurrent Jobs in the Director, but you have not set
+ them in the File daemon or the Storage daemon. Once you reach their
+ limit, they will reject the connection producing authentication (or
+ connection) errors.
+
+ If you are having problems connecting to a Windows machine that
+ previously worked, you might try restarting the Bacula service since
+ Windows frequently encounters networking connection problems.
+
+ Some users report that authentication fails if there is not a proper
+ reverse DNS lookup entry for the machine. This seems to be a
+ requirement of gethostbyname(), which is what Bacula uses to translate
+ names into IP addresses. If you cannot add a reverse DNS entry, or you
+ don't know how to do so, you can avoid the problem by specifying an IP
+ address rather than a machine name in the appropriate Bacula conf file.
+
+ Here is a picture that indicates what names/passwords in which
+ files/Resources must match up:
+
+ \includegraphics{\idir Conf-Diagram.eps}
+
+ In the left column, you will find the Director, Storage, and Client
+ resources, with their names and passwords -- these are all in {\bf
+ bacula-dir.conf}. The right column is where the corresponding values
+ should be found in the Console, Storage daemon (SD), and File daemon (FD)
+ configuration files.
+
+ Another thing to check is to ensure that the Bacula component you are
+ trying to access has {\bf Maximum Concurrent Jobs} set large enough to
+ handle each of the Jobs and the Console that want to connect
+ simultaneously. Once the maximum connections has been reached, each
+ Bacula component will reject all new connections.
+
+ Finally, make sure you have no {\bf hosts.allow} or {\bf hosts.deny}
+ file that is not permitting access to the site trying to connect.
+
+\label{AccessProblems}
+\section{Bacula Runs Fine but Cannot Access a Client on a Different Machine.
+ Why? }
+\item [Bacula Runs Fine but Cannot Access a Client on a Different Machine.
+ Why? ]
+\index[general]{Cannot Access a Client}
+ There are several reasons why Bacula could not contact a client on a
+ different machine. They are:
+
+\begin{itemize}
+\item It is a Windows Client, and the client died because of an improper
+ configuration file. Check that the Bacula icon is in the system tray and the
+ the menu items work. If the client has died, the icon will disappear only
+ when you move the mouse over the icon.
+\item The Client address or port is incorrect or not resolved by DNS. See if
+ you can ping the client machine using the same address as in the Client
+ record.
+\item You have a firewall, and it is blocking traffic on port 9102 between
+ the Director's machine and the Client's machine (or on port 9103 between the
+ Client and the Storage daemon machines).
+\item Your password or names are not correct in both the Director and the
+ Client machine. Try configuring everything identical to how you run the
+ client on the same machine as the Director, but just change the Address. If
+ that works, make the other changes one step at a time until it works.
+\item You may also be having problems between your File daemon and your
+ Storage daemon. The name you use in the Storage resource of your
+ Director's conf file must be known (resolvable) by the File daemon,
+ because it is passed symbolically to the File daemon, which then
+ resolves it to get an IP address used to contact the Storage daemon.
+\item You may have a {\bf hosts.allow} or {\bf hosts.deny} file that is
+ not permitting access.
+\end{itemize}
+
+\label{startover}
+\section{My Catalog is Full of Test Runs, How Can I Start Over?}
+\item [My Catalog is Full of Test Runs, How Can I Start Over? ]
+ \index[general]{My Catalog is Full of Test Runs, How Can I Start Over? }
+ If you are using MySQL do the following:
+
+\footnotesize
+\begin{verbatim}
+ cd <bacula-source>/src/cats
+ ./drop_mysql_tables
+ ./make_mysql_tables
+
+\end{verbatim}
+\normalsize
+
+If you are using SQLite, do the following:
+
+\footnotesize
+\begin{verbatim}
+ Delete bacula.db from your working directory.
+ cd <bacula-source>/src/cats
+ ./drop_sqlite_tables
+ ./make_sqlite_tables
+
+\end{verbatim}
+\normalsize
+
+Then write an EOF on each tape you used with {\bf Bacula} using:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/st0 rewind
+mt -f /dev/st0 weof
+\end{verbatim}
+\normalsize
+
+where you need to adjust the device name for your system.
+
+\label{restorehang}
+\section{I Run a Restore Job and Bacula Hangs. What do I do?}
+\item [I Run a Restore Job and Bacula Hangs. What do I do?]
+\index[general]{I Run a Restore Job and Bacula Hangs. What do I do? }
+ On Bacula version 1.25 and prior, it expects you to have the correct
+ tape mounted prior to a restore. On Bacula version 1.26 and higher, it
+ will ask you for the tape, and if the wrong one is mounted, it will
+ inform you.
+
+ If you have previously done an {\bf unmount} command, all Storage daemon
+ sessions (jobs) will be completely blocked from using the drive
+ unmounted, so be sure to do a {\bf mount} after your unmount. If in
+ doubt, do a second {\bf mount}, it won't cause any harm.
+
+\label{windowstart}
+\section{I Cannot Get My Windows Client to Start Automatically? }
+\item [I Cannot Get My Windows Client to Start Automatically? ]
+\index[general]{Windows Auto Start}
+ You are probably having one of two problems: either the Client is dying
+ due to an incorrect configuration file, or you didn't do the
+ Installation commands necessary to install it as a Windows Service.
+
+ For the first problem, see the next FAQ question. For the second
+ problem, please review the \ilink{ Windows Installation
+ instructions}{Win32Chapter} in this manual.
+
+\label{windowsdie}
+\section{My Windows Client Immediately Dies When I Start It}
+\item [My Windows Client Immediately Dies When I Start It]
+\index[general]{Windows Client Dies}
+The most common problem is either that the configuration file is not where
+it expects it to be, or that there is an error in the configuration file.
+You must have the configuration file in {\bf
+c:\textbackslash{}bacula\textbackslash{}bin\textbackslash{}bacula-fd.conf}.
+
+To {\bf see} what is going on when the File daemon starts on Windows, do the
+following:
+
+\footnotesize
+\begin{verbatim}
+ Start a DOS shell Window.
+ cd c:\bacula\bin
+ bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf
+
+\end{verbatim}
+\normalsize
+
+This will cause the FD to write a file {\bf bacula.trace} in the current
+directory, which you can examine and thereby determine the problem.
+
+\label{scroll}
+\item [When I Start the Console, the Error Messages Fly By. How can I see
+ them? ]
+\index[general]{Error Messages}
+ Either use a shell window with a scroll bar, or use the gnome-console.
+ In any case, you probably should be logging all output to a file, and
+ then you can simply view the file using an editor or the {\bf less}
+ program. To log all output, I have the following in my Director's
+ Message resource definition:
+
+\footnotesize
+\begin{verbatim}
+ append = "/home/kern/bacula/bin/log" = all, !skipped
+
+\end{verbatim}
+\normalsize
+
+Obviously you will want to change the filename to be appropriate for your
+system.
+
+\label{nobackup}
+\section{My backups are not working on my Windows
+ Client. What should I do?}
+\item [I didn't realize that the backups were not working on my Windows
+ Client. What should I do? ]
+\index[general]{Backups Failing}
+You should be sending yourself an email message for each job. This will avoid
+the possibility of not knowing about a failed backup. To do so put something
+like:
+
+\footnotesize
+\begin{verbatim}
+ Mail = yourname@yourdomain = all, !skipped
+
+\end{verbatim}
+\normalsize
+
+in your Director's message resource. You should then receive one email for
+each Job that ran. When you are comfortable with what is going on (it took
+me 9 months), you might change that to:
+
+\footnotesize
+\begin{verbatim}
+ MailOnError = yourname@yourdomain = all, !skipped
+
+\end{verbatim}
+\normalsize
+
+then you only get email messages when a Job errors as is the case for your
+Windows machine.
+
+You should also be logging the Director's messages, please see the previous
+FAQ for how to do so.
+
+\label{sched}
+\section{All my Jobs are scheduled for the same time. Will this cause
+ problems?}
+\item [All my Jobs are scheduled for the same time. Will this cause
+ problems? ]
+\index[general]{Schedule problems}
+ No, not at all. Bacula will schedule all the Jobs at the same time, but
+ will run them one after another unless you have increased the number of
+ simultaneous jobs in the configuration files for the Director, the File
+ daemon, and the Storage daemon. The appropriate configuration record is
+ {\bf Maximum Concurrent Jobs = nn}. At the current time, we recommend
+ that you leave this set to {\bf 1} for the Director.
+
+\label{disk}
+\section{Can Bacula Backup My System To Files instead of Tape?}
+\item [Can Bacula Backup My System To Files instead of Tape? ]
+\index[general]{Backup to Disk}
+ Yes, in principle, Bacula can backup to any storage medium as long as
+ you have correctly defined that medium in the Storage daemon's Device
+ resource. For an example of how to backup to files, please see the
+ \ilink{Pruning Example}{PruningExample} in the Recycling chapter of this
+ manual. Also, there is a whole chapter devoted to \ilink{Basic Volume
+ Management}{DiskChapter}. This chapter was originally written to
+ explain how to write to disk, but was expanded to include volume
+ management. It is, however, still quite a good chapter to read.
+
+\label{testbackup}
+\section{Can I use a dummy device to test the backup?}
+ Yes, to have a {\sl Virtual} device which just consumes data, you can use a
+ FIFO device (see \ilink{Stored configuration}{SetupFifo}).
+ It's useful to test a backup.
+\footnotesize
+\begin{verbatim}
+Device {
+ Name = NULL
+ Media Type = NULL
+ Device Type = Fifo
+ Archive Device = /dev/null
+ LabelMedia = yes
+ Random Access = no
+ AutomaticMount = no
+ RemovableMedia = no
+ MaximumOpenWait = 60
+ AlwaysOpen = no
+}
+\end{verbatim}
+\normalsize
+
+\label{bigfiles}
+\section{Can Bacula Backup and Restore Files Bigger than 2 Gigabytes?}
+\item [Can Bacula Backup and Restore Files Bigger than 2 Gigabytes?]
+\index[general]{Large file support}
+If your operating system permits it, and you are running Bacula version
+1.26 or later, the answer is yes. To the best of our knowledge all client
+system supported by Bacula can handle files bigger 2 Gigabytes.
+
+\label{cancel}
+\section{I want to stop a job.}
+%% Is there a better way than "./bacula stop" to stop it?}
+\item [I Started A Job then Decided I Really Did Not Want to Run It. Is
+ there a better way than {\bf ./bacula stop} to stop it?]
+\index[general]{Cancelling jobs}
+ Yes, you normally should use the Console command {\bf cancel} to cancel
+ a Job that is either scheduled or running. If the Job is scheduled, it
+ will be marked for cancellation and will be canceled when it is
+ scheduled to start. If it is running, it will normally terminate after
+ a few minutes. If the Job is waiting on a tape mount, you may need to
+ do a {\bf mount} command before it will be canceled.
+
+\label{trademark}
+\section{Why have You Trademarked the Name Bacula?}
+\item [Why have You Trademarked the Name
+ Bacula\raisebox{.6ex}{{\footnotesize \textsuperscript{\textregistered}}}?]
+\index[general]{Bacula Trademark}
+We have trademarked the name Bacula to ensure that all media written by any
+program named Bacula will always be compatible. Anyone may use the name
+Bacula, even in a derivative product as long as it remains totally compatible
+in all respects with the program defined here.
+
+\label{docversion}
+\section{Why is the Online Document for Version 1.39 but the Released Version is 1.38?}
+\item [Why is the Online Document for Version 1.39 of Bacula when the
+ Current Version is 1.38?]
+\index[general]{Multiple manuals}
+As Bacula is being developed, the document is also being enhanced, more
+often than not it has clarifications of existing features that can be very
+useful to our users, so we publish the very latest document. Fortunately
+it is rare that there are confusions with new features.
+
+If you want to read a document that pertains only to a specific version,
+please use the one distributed in the source code. The web site also has
+online versions of both the released manual and the current development
+manual.
+
+\label{sure}
+\section{Does Bacula really save and restore all files?}
+\item [How Can I Be Sure that Bacula Really Saves and Restores All Files? ]
+\index[general]{Checking Restores}
+ It is really quite simple, but took me a while to figure
+ out how to "prove" it. First make a Bacula Rescue disk, see the
+ \ilink{Disaster Recovery Using Bacula}{RescueChapter} chapter
+ of this manual.
+ Second, you run a full backup of all your files on all partitions.
+ Third, you run an Verify InitCatalog Job on the same FileSet, which
+ effectively makes a record of all the files on your system. Fourth, you
+ run a Verify Catalog job and assure yourself that nothing has changed
+ (well, between an InitCatalog and Catalog one doesn't expect anything).
+ Then do the unthinkable, write zeros on your MBR (master boot record)
+ wiping out your hard disk. Now, restore your whole system using your
+ Bacula Rescue disk and the Full backup you made, and finally re-run the
+ Verify Catalog job. You will see that with the exception of the
+ directory modification and access dates and the files changed during the
+ boot, your system is identical to what it was before you wiped your hard
+ disk.
+ Alternatively you could do the wiping and restoring to another computer
+ of the same type.
+
+\label{upgrade}
+\section{I want an Incremental but Bacula runs it as a Full backup. Why?}
+\item [I did a Full backup last week, but now in running an Incremental,
+ Bacula says it did not find a FULL backup, so it did a FULL backup. Why?]
+\index[general]{FULL backup not found}
+ Before doing an Incremental or a Differential
+ backup, Bacula checks to see if there was a prior Full backup of the
+ same Job that terminated successfully. If so, it uses the date that
+ full backup started as the time for comparing if files have changed. If
+ Bacula does not find a successful full backup, it proceeds to do one.
+ Perhaps you canceled the full backup, or it terminated in error. In
+ such cases, the full backup will not be successful. You can check by
+ entering {\bf list jobs} and look to see if there is a prior Job with
+ the same Name that has Level F and JobStatus T (normal termination).
+
+ Another reason why Bacula may not find a suitable Full backup is that
+ every time you change the FileSet, Bacula will require a new Full
+ backup. This is necessary to ensure that all files are properly backed
+ up in the case where you have added more files to the FileSet.
+ Beginning with version 1.31, the FileSets are also dated when they are
+ created, and this date is displayed with the name when you are listing
+ or selecting a FileSet. For more on backup levels see below.
+
+ See also {\bf Ignore FileSet Changes} in the
+ \ilink{FileSet Resource definition}{FileSetResource} in the Director
+ chapter of this document.
+
+\label{filenamelengths}
+\section{Do you really handle unlimited path lengths?}
+\item [How Can You Claim to Handle Unlimited Path and Filename Lengths
+ when All Other Programs Have Fixed Limits?]
+\index[general]{Path and Filename Lengths}
+ Most of those other programs have been around for a long time, in fact
+ since the beginning of Unix, which means that they were designed for
+ rather small fixed length path and filename lengths. Over the years,
+ these restrictions have been relaxed allowing longer names. Bacula on
+ the other hand was designed in 2000, and so from the start, Path and
+ Filenames have been kept in buffers that start at 256 bytes in length,
+ but can grow as needed to handle any length. Most of the work is
+ carried out by lower level routines making the coding rather easy.
+
+ Note that due to limitations Win32 path and filenames cannot exceed
+ 260 characters. By using Win32 Unicode functions, we will remove this
+ restriction in later versions of Bacula.
+
+\label{unique}
+\section{What Is the Really Unique Feature of Bacula?}
+\item [What Is the Really Unique Feature of Bacula?]
+\index[general]{Unique Feature of Bacula}
+ Well, it is hard to come up with unique features when backup programs
+ for Unix machines have been around since the 1960s. That said, I
+ believe that Bacula is the first and only program to use a standard SQL
+ interface to catalog its database. Although this adds a bit of
+ complexity and possibly overhead, it provides an amazingly rich set of
+ features that are easy to program and enhance. The current code has
+ barely scratched the surface in this regard (version 1.38).
+
+ The second feature, which gives a lot of power and flexibility to Bacula
+ is the Bootstrap record definition.
+
+ The third unique feature, which is currently (1.30) unimplemented, and
+ thus can be called vaporware :-), is Base level saves. When
+ implemented, this will enormously reduce tape usage.
+
+\label{sequence}
+\section{How can I force one job to run after another?}
+\item [If I Run Multiple Simultaneous Jobs, How Can I Force One
+ Particular Job to Run After Another Job? ]
+\index[general]{Multiple Simultaneous Jobs}
+Yes, you can set Priorities on your jobs so that they run in the order you
+specify. Please see:
+\ilink{the Priority record}{Priority} in the Job resource.
+
+\label{nomail}
+\section{I Am Not Getting Email Notification, What Can I Do? }
+\item [I Am Not Getting Email Notification, What Can I Do? ]
+\index[general]{No Email Notification}
+ The most common problem is that you have not specified a fully qualified
+ email address and your bsmtp server is rejecting the mail. The next
+ most common problem is that your bsmtp server doesn't like the syntax on
+ the From part of the message. For more details on this and other
+ problems, please see the \ilink{ Getting Email Notification to
+ Work}{email} section of the Tips chapter of this manual. The section
+ \ilink{ Getting Notified of Job Completion}{notification} of the Tips
+ chapter may also be useful. For more information on the {\bf bsmtp}
+ mail program, please see \ilink{bsmtp in the Volume Utility Tools
+ chapter}{bsmtp} of this manual.
+
+\label{periods}
+\section{My retention periods don't work}
+\item [I Change Recycling, Retention Periods, or File Sizes in my Pool
+ Resource and they Still Don't Work.]
+\index[general]{Recycling}
+\index[general]{Retention Periods}
+\index[general]{Pool changes}
+ The different variables associated with a Pool are defined in the Pool
+ Resource, but are actually read by Bacula from the Catalog database. On
+ Bacula versions prior to 1.30, after changing your Pool Resource, you must
+ manually update the corresponding values in the Catalog by using the {\bf
+ update pool} command in the Console program. In Bacula version 1.30, Bacula
+ does this for you automatically every time it starts.
+
+ When Bacula creates a Media record (Volume), it uses many default values from
+ the Pool record. If you subsequently change the Pool record, the new values
+ will be used as a default for the next Volume that is created, but if you
+ want the new values to apply to existing Volumes, you must manually update
+ the Volume Catalog entry using the {\bf update volume} command in the Console
+ program.
+
+\label{CompressionNotWorking}
+\section{Why aren't my files compressed?}
+\item [I Have Configured Compression On, But None of My Files Are
+ Compressed. Why?]
+\index[general]{Compression}
+ There are two kinds of compression. One is tape compression. This is done by
+ the tape drive hardware, and you either enable or disable it with system
+ tools such as {\bf mt}. This compression works independently of Bacula,
+ and when it is enabled, you should not use the Bacula software
+ compression.
+
+ Bacula also has software compression code in the File daemons, which you
+ normally need to enable only when backing up to file Volumes. There are
+ two conditions necessary to enable the Bacula software compression.
+
+\begin{enumerate}
+\item You must have the zip development libraries loaded on your system
+ when building Bacula and Bacula must find this library, normally {\bf
+ /usr/lib/libz.a}. On Red Hat systems, this library is provided by the
+ {\bf zlib-devel} rpm.
+
+ If the library is found by Bacula during the {\bf ./configure} it will
+ be mentioned in the {\bf config.out} line by:
+
+\footnotesize
+\begin{verbatim}
+ ZLIB support: yes
+
+\end{verbatim}
+\normalsize
+
+\item You must add the {\bf compression=gzip} option on your Include
+ statement in the Director's configuration file.
+\end{enumerate}
+
+\label{NewTape}
+\item [Bacula is Asking for a New Tape After 2 GB of Data but My Tape
+ holds 33 GB. Why?]
+\index[general]{Tape capacity}
+There are several reasons why Bacula will request a new tape.
+
+\begin{itemize}
+\item There is an I/O error on the tape. Bacula prints an error message and
+ requests a new tape. Bacula does not attempt to continue writing after an
+ I/O error.
+\item Bacula encounters and end of medium on the tape. This is not always
+ distinguishable from an I/O error.
+\item You have specifically set some size limitation on the tape. For example
+ the {\bf Maximum Volume Bytes} or {\bf Maximum Volume Files} in the
+ Director's Pool resource, or {\bf Maximum Volume Size} in the Storage
+ daemon's Device resource.
+\end{itemize}
+
+\label{LevelChanging}
+\section{Incremental backups are not working}
+\item [Bacula is Not Doing the Right Thing When I Request an Incremental
+ Backup. Why?]
+\index[general]{Incremental backups}
+ As explained in one of the previous questions, Bacula will automatically
+ upgrade an Incremental or Differential job to a Full backup if it cannot
+ find a prior Full backup or a suitable Full backup. For the gory
+ details on how/when Bacula decides to upgrade levels please see the
+ \ilink{Level record}{Level} in the Director's configuration chapter of
+ this manual.
+
+ If after reading the above mentioned section, you believe that Bacula is not
+ correctly handling the level (Differential/Incremental), please send us the
+ following information for analysis:
+
+\begin{itemize}
+\item Your Director's configuration file.
+\item The output from {\bf list jobs} covering the period where you are
+ having the problem.
+\item The Job report output from the prior Full save (not critical).
+\item An {\bf llist jobid=nnn} where nnn is the JobId of the prior Full save.
+
+\item The Job report output from the save that is doing the wrong thing (not
+ critical).
+\item An {\bf llist jobid=nnn} where nnn is the JobId of the job that was not
+ correct.
+\item An explanation of what job went wrong and why you think it did.
+ \end{itemize}
+
+The above information can allow us to analyze what happened, without it,
+there is not much we can do.
+
+\label{WaitForever}
+\section{I am waiting forever for a backup of an offsite machine}
+\item [I am Backing Up an Offsite Machine with an Unreliable Connection.
+ The Director Waits Forever for the Client to Contact the SD. What Can I
+ Do?]
+\index[general]{Backing Up Offsite Machines}
+ Bacula was written on the assumption that it will have a good TCP/IP
+ connection between all the daemons. As a consequence, the current
+ Bacula doesn't deal with faulty connections very well. This situation
+ is slowly being corrected over time.
+
+ There are several things you can do to improve the situation.
+
+\begin{itemize}
+\item Upgrade to version 1.32 and use the new SDConnectTimeout record. For
+ example, set:
+
+\footnotesize
+\begin{verbatim}
+ SD Connect Timeout = 5 min
+
+\end{verbatim}
+\normalsize
+
+in the FileDaemon resource.
+\item Run these kinds of jobs after all other jobs.
+ \end{itemize}
+
+\label{sshHanging}
+\section{SSH hangs forever after starting Bacula}
+\item [When I ssh into a machine and start Bacula then attempt to exit,
+ ssh hangs forever.]
+\index[general]{ssh hangs}
+ This happens because Bacula leaves stdin, stdout, and stderr open for
+ debug purposes. To avoid it, the simplest thing to do is to redirect
+ the output of those files to {\bf /dev/null} or another file in your
+ startup script (the Red Hat autostart scripts do this automatically).
+ For example, you start the Director with:
+
+\footnotesize
+\begin{verbatim}
+ bacula-dir -c bacula-dir.conf ... >/dev/null 0>\&1 2>\&1
+
+\end{verbatim}
+\normalsize
+
+and likewise for the other daemons.
+
+\label{RetentionPeriods}
+\section{I'm confused by retention periods}
+\item [I'm confused by the different Retention periods: File Retention,
+ Job Retention, Volume Retention. Why are there so many?]
+\index[general]{Retention Periods}
+ Yes, this certainly can be confusing. The basic reason for so many is
+ to allow flexibility. The File records take quite a lot of space in the
+ catalog, so they are typically records you want to remove rather
+ quickly. The Job records, take very little space, and they can be
+ useful even without the File records to see what Jobs actually ran and
+ when. One must understand that if the File records are removed from the
+ catalog, you cannot use the {\bf restore} command to restore an
+ individual file since Bacula no longer knows where it is. However, as
+ long as the Volume Retention period has not expired, the data will still
+ be on the tape, and can be recovered from the tape.
+
+ For example, I keep a 30 day retention period for my Files to keep my
+ catalog from getting too big, but I keep my tapes for a minimum of one
+ year, just in case.
+
+\label{MaxVolumeSize}
+\section{MaxVolumeSize is ignored}
+\item [Why Does Bacula Ignore the MaxVolumeSize Set in my Pool?]
+\index[general]{MaxVolumeSize}
+ The MaxVolumeSize that Bacula uses comes from the Media record, so most
+ likely you changed your Pool, which is used as the default for creating
+ Media records, {\bf after} you created your Volume. Check what is in
+ the Media record by doing:
+
+\footnotesize
+\begin{verbatim}
+llist Volume=xxx
+\end{verbatim}
+\normalsize
+
+If it doesn't have the right value, you can use:
+
+\footnotesize
+\begin{verbatim}
+update Volume=xxx
+\end{verbatim}
+\normalsize
+
+to change it.
+
+\label{ConnectionRefused}
+\section{I get a Connection refused when connecting to my Client}
+\item [In connecting to my Client, I get "ERR:Connection Refused. Packet
+ Size too big from File daemon:192.168.1.4:9102" Why?]
+\index[general]{ERR:Connection Refused}
+ This is typically a communications error resulting from one of the
+ following:
+
+
+\begin{itemize}
+\item Old versions of Bacula, usually a Win32 client, where two threads were
+ using the same I/O packet. Fixed in more recent versions. Please upgrade.
+\item Some other program such as an HP Printer using the same port (9102 in
+ this case).
+\end{itemize}
+
+If it is neither of the above, please submit a bug report at
+\elink{bugs.bacula.org}{http://bugs.bacula.org}.
+
+Another solution might be to run the daemon with the debug option by:
+
+\footnotesize
+\begin{verbatim}
+ Start a DOS shell Window.
+ cd c:\bacula\bin
+ bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf
+
+\end{verbatim}
+\normalsize
+
+This will cause the FD to write a file {\bf bacula.trace} in the current
+directory, which you can examine to determine the problem.
+
+\section{Long running jobs die with Pipe Error}
+\item [During long running jobs my File daemon dies with Pipe Error, or
+ some other communications error. Why?]
+\index[general]{Communications Errors}
+\index[general]{Pipe Errors}
+\index[general]{slow}
+\index[general]{Backups!slow}
+ There are a number of reasons why a connection might break.
+ Most often, it is a router between your two computers that times out
+ inactive lines (not respecting the keepalive feature that Bacula uses).
+ In that case, you can use the {\bf Heartbeat Interval} directive in
+ both the Storage daemon and the File daemon.
+
+ In at least one case, the problem has been a bad driver for a Win32
+ NVidia NForce 3 ethernet card with driver (4.4.2 17/05/2004).
+ In this case, a good driver is (4.8.2.0 06/04/2005). Moral of
+ the story, make sure you have the latest ethernet drivers
+ loaded, or use the following workaround as suggested by Thomas
+ Simmons for Win32 machines:
+
+ Browse to:
+ Start \gt{} Control Panel \gt{} Network Connections
+
+ Right click the connection for the nvidia adapter and select properties.
+ Under the General tab, click "Configure...". Under the Advanced tab set
+ "Checksum Offload" to disabled and click OK to save the change.
+
+ Lack of communications, or communications that get interrupted can
+ also be caused by Linux firewalls where you have a rule that throttles
+ connections or traffic. For example, if you have:
+
+\footnotesize
+\begin{verbatim}
+iptables -t filter -A INPUT -m limit --limit 3/second --limit-burst 3 -j DROP
+\end{verbatim}
+\normalsize
+
+ you will want to add the following rules {\bf before} the above rule:
+\footnotesize
+\begin{verbatim}
+iptables -t filter -A INPUT --dport 9101 -j ACCEPT
+iptables -t filter -A INPUT --dport 9102 -j ACCEPT
+iptables -t filter -A INPUT --dport 9103 -j ACCEPT
+\end{verbatim}
+\normalsize
+ This will ensure that any Bacula traffic will not get terminated because
+ of high usage rates.
+
+\section{How do I tell the Job which Volume to use?}
+\item[I can't figure out how to tell the job which volume to use]
+ \index[general]{What tape to mount}
+ This is an interesting statement. I now see that a number of people new to
+ Bacula have the same problem as you, probably from using programs like tar.
+
+ In fact, you do not tell Bacula what tapes to use. It is the inverse. Bacula
+ tells you want tapes it wants. You put tapes at its disposition and it
+ chooses.
+
+ Now, if you *really* want to be tricky and try to tell Bacula what to do, it
+ will be reasonable if for example you mount a valid tape that it can use on a
+ drive, it will most likely go ahead and use it. It also has a documented
+ algorithm for choosing tapes -- but you are asking for problems ...
+
+ So, the trick is to invert your concept of things and put Bacula in charge of
+ handling the tapes. Once you do that, you will be fine. If you want to
+ anticipate what it is going to do, you can generally figure it out correctly
+ and get what you want.
+
+ If you start with the idea that you are going to force or tell Bacula to use
+ particular tapes or you insist on trying to run in that kind of mode, you will
+ probably not be too happy.
+
+ I don't want to worry about what tape has what data. That is what Bacula is
+ designed for.
+
+ If you have an application where you *really* need to remove a tape each day
+ and insert a new one, it can be done the directives exist to accomplish that.
+ In such a case, one little "trick" to knowing what tape Bacula will want at
+ 2am while you are asleep is to run a tiny job at 4pm while you are still at
+ work that backs up say one directory, or even one file. You will quickly find
+ out what tape it wants, and you can mount it before you go home ...
+
+\label{Password generation}
+\section{Password generation}
+\item [How do I generate a password?]
+\index[general]{MaxVolumeSize}
+
+ Each daemon needs a password. This password occurs in the configuration
+ file for that daemon and in the bacula-dir.conf file. These passwords are
+ plain text. There is no special generation procedure. Most people just
+ use random text.
+
+ Passwords are never sent over the wire in plain text. They are always
+ encrypted.
+
+ Security surrounding these passwords is best left security to your
+ operating system. Passwords are not encrypted within Bacula
+ configuration files.
+
+\end{description}
+
--- /dev/null
+% TODO: maybe get rid of centering
+
+\chapter{GNU Free Documentation License}
+\index[general]{GNU Free Documentation License}
+\index[general]{License!GNU Free Documentation}
+
+\label{label_fdl}
+
+ \begin{center}
+
+ Version 1.2, November 2002
+
+
+ Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
+
+ \bigskip
+
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ \bigskip
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+\end{center}
+
+
+\begin{center}
+{\bf\large Preamble}
+\end{center}
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+\begin{center}
+{\Large\bf 1. APPLICABILITY AND DEFINITIONS}
+\end{center}
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The \textbf{"Document"}, below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as \textbf{"you"}. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A \textbf{"Modified Version"} of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The \textbf{"Cover Texts"} are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The \textbf{"Title Page"} means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as \textbf{"Acknowledgements"},
+\textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
+To \textbf{"Preserve the Title"}
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+\begin{center}
+{\Large\bf 2. VERBATIM COPYING}
+\end{center}
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+\begin{center}
+{\Large\bf 3. COPYING IN QUANTITY}
+\end{center}
+
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+\begin{center}
+{\Large\bf 4. MODIFICATIONS}
+\end{center}
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+\begin{itemize}
+\item[A.]
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+
+\item[B.]
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+
+\item[C.]
+ State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+\item[D.]
+ Preserve all the copyright notices of the Document.
+
+\item[E.]
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+\item[F.]
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+
+\item[G.]
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+
+\item[H.]
+ Include an unaltered copy of this License.
+
+\item[I.]
+ Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+
+\item[J.]
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+
+\item[K.]
+ For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+
+\item[L.]
+ Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+
+\item[M.]
+ Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+\item[N.]
+ Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+
+\item[O.]
+ Preserve any Warranty Disclaimers.
+\end{itemize}
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+\begin{center}
+{\Large\bf 5. COMBINING DOCUMENTS}
+\end{center}
+
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+\begin{center}
+{\Large\bf 6. COLLECTIONS OF DOCUMENTS}
+\end{center}
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+\begin{center}
+{\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
+\end{center}
+
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+\begin{center}
+{\Large\bf 8. TRANSLATION}
+\end{center}
+
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+\begin{center}
+{\Large\bf 9. TERMINATION}
+\end{center}
+
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+\begin{center}
+{\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE}
+\end{center}
+
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+\begin{center}
+{\Large\bf ADDENDUM: How to use this License for your documents}
+% TODO: this is too long for table of contents
+\end{center}
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+\bigskip
+\begin{quote}
+ Copyright \copyright YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+\end{quote}
+\bigskip
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+\bigskip
+\begin{quote}
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+\end{quote}
+\bigskip
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+%---------------------------------------------------------------------
--- /dev/null
+%%
+%%
+
+\chapter{Dealing with Firewalls}
+\label{FirewallsChapter}
+\index[general]{Dealing with Firewalls }
+\index[general]{Firewalls!Dealing with }
+
+If you have a firewall or a DMZ installed on your computer, you may experience
+difficulties contacting one or more of the Clients to back them up. This is
+especially true if you are trying to backup a Client across the Internet.
+
+\section{Technical Details}
+\index[general]{Technical Details }
+\index[general]{Details!Technical }
+
+If you are attempting to do this, the sequence of network events in Bacula to
+do a backup are the following:
+
+\footnotesize
+\begin{verbatim}
+Console -> DIR:9101
+DIR -> SD:9103
+DIR -> FD:9102
+FD -> SD:9103
+\end{verbatim}
+\normalsize
+
+Where hopefully it is obvious that DIR represents the Director, FD the File
+daemon or client, and SD the Storage daemon. The numbers that follow those
+names are the standard ports used by Bacula, and the \verb:->: represents the
+left side making a connection to the right side (i.e. the right side is the
+"server" or is listening on the specified port), and the left side is the
+"client" that initiates the conversation.
+
+Note, port 9103 serves both the Director and the File daemon, each having its
+own independent connection.
+
+If you are running {\bf iptables}, you might add something like:
+
+\footnotesize
+\begin{verbatim}
+-A FW-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9101:9103 -j ACCEPT
+\end{verbatim}
+\normalsize
+
+on your server, and
+
+\footnotesize
+\begin{verbatim}
+-A FW-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9102 -j ACCEPT
+\end{verbatim}
+\normalsize
+
+on your client. In both cases, I assume that the machine is allowed to
+initiate connections on any port. If not, you will need to allow outgoing
+connections on ports 9102 and 9103 on your server and 9103 on your client.
+Thanks to Raymond Norton for this tip.
+
+\section{A Concrete Example}
+\index[general]{Example!Concrete }
+\index[general]{Concrete Example }
+
+The following discussion was originally written by
+Jesse Guardiani because he has 'internal' and 'external' requiring the
+Director and the Client to use different IP addresses. His original
+solution was to define two different Storage resources in the Director's
+conf file each pointing to the same Storage daemon but with different
+IP addresses. In Bacula 1.38.x this no longer works, because Bacula makes
+a one-to-one association between a Storage daemon resource and a Device (such
+as an Autochanger). As a consequence, I have modified his original
+text to a method that I believe will work, but is as of yet untested
+(KES - July 2006).
+
+My bacula server is on the 192.168.1.0/24 network at IP address 192.168.1.52.
+For the sake of discussion we will refer to this network as the 'internal'
+network because it connects to the internet through a NAT'd firewall. We will
+call the network on the public (internet) side of the NAT'd firewall the
+'external' network. Also, for the sake of discussion we will call my bacula
+server:
+
+\footnotesize
+\begin{verbatim}
+ server.int.mydomain.tld
+\end{verbatim}
+\normalsize
+
+when a fully qualified domain name is required, or simply:
+
+\footnotesize
+\begin{verbatim}
+ server
+\end{verbatim}
+\normalsize
+
+if a hostname is adequate. We will call the various bacula daemons running on
+the server.int.mydomain.tld machine:
+
+\footnotesize
+\begin{verbatim}
+ server-fd
+ server-sd
+ server-dir
+\end{verbatim}
+\normalsize
+
+In addition, I have two clients that I want to back up with Bacula. The first
+client is on the internal network. Its fully qualified domain name is:
+
+\footnotesize
+\begin{verbatim}
+ private1.int.mydomain.tld
+\end{verbatim}
+\normalsize
+
+And its hostname is:
+
+\footnotesize
+\begin{verbatim}
+ private1
+\end{verbatim}
+\normalsize
+
+This machine is a client and therefore runs just one bacula daemon:
+
+\footnotesize
+\begin{verbatim}
+ private1-fd
+\end{verbatim}
+\normalsize
+
+The second client is on the external network. Its fully qualified domain name
+is:
+
+\footnotesize
+\begin{verbatim}
+ public1.mydomain.tld
+\end{verbatim}
+\normalsize
+
+And its hostname is:
+
+\footnotesize
+\begin{verbatim}
+ public1
+\end{verbatim}
+\normalsize
+
+This machine also runs just one bacula daemon:
+
+\footnotesize
+\begin{verbatim}
+ public1-fd
+\end{verbatim}
+\normalsize
+
+Finally, I have a NAT firewall/gateway with two network interfaces. The first
+interface is on the internal network and serves as a gateway to the internet
+for all the machines attached to the internal network (For example,
+server.int.mydomain.tld and private1.int.mydomain.tld). The second interface
+is on the external (internet) network. The external interface has been
+assigned the name:
+
+\footnotesize
+\begin{verbatim}
+ firewall.mydomain.tld
+\end{verbatim}
+\normalsize
+
+Remember:
+
+\footnotesize
+\begin{verbatim}
+ *.int.mydomain.tld = internal network
+ *.mydomain.tld = external network
+\end{verbatim}
+\normalsize
+
+\subsection{The Bacula Configuration Files for the Above}
+\index[general]{Above!Bacula Configuration Files for the }
+\index[general]{Bacula Configuration Files for the Above }
+
+server-sd manages a 4 tape AIT autoloader. All of my backups are written to
+server-sd. I have just *one* Device resource in my server-sd.conf file:
+
+\footnotesize
+\begin{verbatim}
+Autochanger {
+ Name = "autochanger1";\
+ Device = Drive0
+ Changer Device = /dev/ch0;
+ Changer Command = "/usr/local/sbin/chio-bacula %c %o %S %a";
+}
+Device {
+ Name = Drive0
+ DriveIndex = 0
+ Media Type = AIT-1;
+ Archive Device = /dev/nrsa1;
+ Label Media = yes;
+ AutoChanger = yes;
+ AutomaticMount = yes; # when device opened, read it
+ AlwaysOpen = yes;
+ Hardware End of Medium = No
+ Fast Forward Space File = No
+ BSF at EOM = yes
+}
+\end{verbatim}
+\normalsize
+
+(note, please see
+\ilink{the Tape Testing}{FreeBSDTapes} chapter of this manual
+for important FreeBSD information.) However, unlike previously, there
+is only one Storage definition in my server-dir.conf file:
+
+\footnotesize
+\begin{verbatim}
+Storage {
+ Name = "autochanger1" # Storage device for backing up
+ Address = Storage-server
+ SDPort = 9103
+ Password = "mysecretpassword"
+ Device = "autochanger1"
+ Media Type = AIT-1
+ Autochanger = yes
+}
+\end{verbatim}
+\normalsize
+
+Note that the Storage resource uses neither of the two addresses to
+the Storage daemon -- neither server.int.mydomain.tld nor
+firewall.mydomain.tld, but instead uses the address Storage-server.
+
+What is key is that in the internal net, Storage-server is resolved
+to server.int.mydomain.tld, either with an entry in /etc/hosts, or by
+creating and appropriate DNS entry, and on the external net (the Client
+machine), Storage-server is resolved to firewall.mydomain.tld.
+
+
+In addition to the above, I have two Client resources defined in
+server-dir.conf:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = private1-fd
+ Address = private1.int.mydomain.tld
+ FDPort = 9102
+ Catalog = MyCatalog
+ Password = "mysecretpassword" # password for FileDaemon
+}
+Client {
+ Name = public1-fd
+ Address = public1.mydomain.tld
+ FDPort = 9102
+ Catalog = MyCatalog
+ Password = "mysecretpassword" # password for FileDaemon
+}
+\end{verbatim}
+\normalsize
+
+And finally, to tie it all together, I have two Job resources defined in
+server-dir.conf:
+
+\footnotesize
+\begin{verbatim}
+Job {
+ Name = "Private1-Backup"
+ Type = Backup
+ Client = private1-fd
+ FileSet = "Private1"
+ Schedule = "WeeklyCycle"
+ Storage = "autochanger1-int"
+ Messages = Standard
+ Pool = "Weekly"
+ Write Bootstrap = "/var/db/bacula/Private1-Backup.bsr"
+ Priority = 12
+}
+Job {
+ Name = "Public1-Backup"
+ Type = Backup
+ Client = public1-fd
+ FileSet = "Public1"
+ Schedule = "WeeklyCycle"
+ Storage = "autochanger1-ext"
+ Messages = Standard
+ Pool = "Weekly"
+ Write Bootstrap = "/var/db/bacula/Public1-Backup.bsr"
+ Priority = 13
+}
+\end{verbatim}
+\normalsize
+
+It is important to notice that because the 'Private1-Backup' Job is intended
+to back up a machine on the internal network so it resolves Storage-server
+to contact the Storage daemon via the internal net.
+On the other hand, the 'Public1-Backup' Job is intended to
+back up a machine on the external network, so it resolves Storage-server
+to contact the Storage daemon via the external net.
+
+I have left the Pool, Catalog, Messages, FileSet, Schedule, and Director
+resources out of the above server-dir.conf examples because they are not
+pertinent to the discussion.
+
+\subsection{How Does It Work?}
+\index[general]{How Does It Work? }
+\index[general]{Work!How Does It }
+
+If I want to run a backup of private1.int.mydomain.tld and store that backup
+using server-sd then my understanding of the order of events is this:
+
+\begin{enumerate}
+\item I execute my Bacula 'console' command on server.int.mydomain.tld.
+\item console connects to server-dir.
+\item I tell console to 'run' backup Job 'Private1-Backup'.
+\item console relays this command to server-dir.
+\item server-dir connects to private1-fd at private1.int.mydomain.tld:9102
+\item server-dir tells private1-fd to start sending the files defined in the
+ 'Private1-Backup' Job's FileSet resource to the Storage resource
+ 'autochanger1', which we have defined in server-dir.conf as having the
+address:port of Storage-server, which is mapped by DNS to server.int.mydomain.tld.
+\item private1-fd connects to server.int.mydomain.tld:9103 and begins sending
+ files.
+ \end{enumerate}
+
+Alternatively, if I want to run a backup of public1.mydomain.tld and store
+that backup using server-sd then my understanding of the order of events is
+this:
+
+\begin{enumerate}
+\item I execute my Bacula 'console' command on server.int.mydomain.tld.
+\item console connects to server-dir.
+\item I tell console to 'run' backup Job 'Public1-Backup'.
+\item console relays this command to server-dir.
+\item server-dir connects, through the NAT'd firewall, to public1-fd at
+ public1.mydomain.tld:9102
+\item server-dir tells public1-fd to start sending the files defined in the
+ 'Public1-Backup' Job's FileSet resource to the Storage resource
+ 'autochanger1', which we have defined in server-dir.conf as having the
+ same address:port as above of Storage-server, but which on this machine
+ is resolved to firewall.mydomain.tld:9103.
+\item public1-fd connects to firewall.mydomain.tld:9103 and begins sending
+ files.
+ \end{enumerate}
+
+\subsection{Important Note}
+\index[general]{Important Note }
+\index[general]{Note!Important }
+
+In order for the above 'Public1-Backup' Job to succeed,
+firewall.mydomain.tld:9103 MUST be forwarded using the firewall's
+configuration software to server.int.mydomain.tld:9103. Some firewalls call
+this 'Server Publication'. Others may call it 'Port Forwarding'.
+
+\subsection{Firewall Problems}
+\index[general]{Firewall Problems}
+\index[general]{Problems!Firewalls}
+Either a firewall or a router may decide to timeout and terminate
+open connections if they are not active for a short time. By Internet
+standards the period should be two hours, and should be indefinitely
+extended if KEEPALIVE is set as is the case by Bacula. If your firewall
+or router does not respect these rules, you may find Bacula connections
+terminated. In that case, the first thing to try is turning on the
+{\bf Heart Beat Interval} both in the File daemon and the Storage daemon
+and set an interval of say five minutes.
+
+Also, if you have denial of service rate limiting in your firewall, this
+too can cause Bacula disconnects since Bacula can at times use very high
+access rates. To avoid this, you should implement default accept
+rules for the Bacula ports involved before the rate limiting rules.
+
+Finally, if you have a Windows machine, it will most likely by default
+disallow connections to the Bacula Windows File daemon. See the
+Windows chapter of this manual for additional details.
--- /dev/null
+%%
+%%
+
+\chapter{What To Do When Bacula Crashes (Kaboom)}
+\label{KaboomChapter}
+\index[general]{Kaboom!What To Do When Bacula Crashes }
+\index[general]{What To Do When Bacula Crashes (Kaboom) }
+
+If you are running on a Linux system, and you have a set of working
+configuration files, it is very unlikely that {\bf Bacula} will crash. As with
+all software, however, it is inevitable that someday, it may crash,
+particularly if you are running on another operating system or using a new or
+unusual feature.
+
+This chapter explains what you should do if one of the three {\bf Bacula}
+daemons (Director, File, Storage) crashes. When we speak of crashing, we
+mean that the daemon terminates abnormally because of an error. There are
+many cases where Bacula detects errors (such as PIPE errors) and will fail
+a job. These are not considered crashes. In addition, under certain
+conditions, Bacula will detect a fatal in the configuration, such as
+lack of permission to read/write the working directory. In that case,
+Bacula will force itself to crash with a SEGFAULT. However, before
+crashing, Bacula will normally display a message indicating why.
+For more details, please read on.
+
+
+\section{Traceback}
+\index[general]{Traceback}
+
+Each of the three Bacula daemons has a built-in exception handler which, in
+case of an error, will attempt to produce a traceback. If successful the
+traceback will be emailed to you.
+
+For this to work, you need to ensure that a few things are setup correctly on
+your system:
+
+\begin{enumerate}
+\item You must have a version of Bacula built with debug information turned
+ on and not stripped of debugging symbols.
+
+\item You must have an installed copy of {\bf gdb} (the GNU debugger), and it
+ must be on {\bf Bacula's} path. On some systems such as Solaris, {\bf
+ gdb} may be replaced by {\bf dbx}.
+
+\item The Bacula installed script file {\bf btraceback} must be in the same
+ directory as the daemon which dies, and it must be marked as executable.
+
+\item The script file {\bf btraceback.gdb} must have the correct path to it
+ specified in the {\bf btraceback} file.
+
+\item You must have a {\bf mail} program which is on {\bf Bacula's} path.
+ By default, this {\bf mail} program is set to {\bf bsmtp}, so it must
+ be correctly configured.
+
+\item If you run either the Director or Storage daemon under a non-root
+ userid, you will most likely need to modify the {\bf btraceback} file
+ to do something like {\bf sudo} (raise to root priority) for the
+ call to {\bf gdb} so that it has the proper permissions to debug
+ Bacula.
+\end{enumerate}
+
+If all the above conditions are met, the daemon that crashes will produce a
+traceback report and email it to you. If the above conditions are not true,
+you can either run the debugger by hand as described below, or you may be able
+to correct the problems by editing the {\bf btraceback} file. I recommend not
+spending too much time on trying to get the traceback to work as it can be
+very difficult.
+
+The changes that might be needed are to add a correct path to the {\bf gdb}
+program, correct the path to the {\bf btraceback.gdb} file, change the {\bf
+mail} program or its path, or change your email address. The key line in the
+{\bf btraceback} file is:
+
+\footnotesize
+\begin{verbatim}
+gdb -quiet -batch -x /home/kern/bacula/bin/btraceback.gdb \
+ $1 $2 2>\&1 | bsmtp -s "Bacula traceback" your-address@xxx.com
+\end{verbatim}
+\normalsize
+
+Since each daemon has the same traceback code, a single btraceback file is
+sufficient if you are running more than one daemon on a machine.
+
+\section{Testing The Traceback}
+\index[general]{Traceback!Testing The }
+\index[general]{Testing The Traceback }
+
+To "manually" test the traceback feature, you simply start {\bf Bacula} then
+obtain the {\bf PID} of the main daemon thread (there are multiple threads).
+The output produced here will look different depending on what OS and what
+version of the kernel you are running.
+Unfortunately, the output had to be split to fit on this page:
+
+\footnotesize
+\begin{verbatim}
+[kern@rufus kern]$ ps fax --columns 132 | grep bacula-dir
+ 2103 ? S 0:00 /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+ 2104 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+ 2106 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+ 2105 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+\end{verbatim}
+\normalsize
+
+which in this case is 2103. Then while Bacula is running, you call the program
+giving it the path to the Bacula executable and the {\bf PID}. In this case,
+it is:
+
+\footnotesize
+\begin{verbatim}
+./btraceback /home/kern/bacula/k/src/dird 2103
+\end{verbatim}
+\normalsize
+
+It should produce an email showing you the current state of the daemon (in
+this case the Director), and then exit leaving {\bf Bacula} running as if
+nothing happened. If this is not the case, you will need to correct the
+problem by modifying the {\bf btraceback} script.
+
+Typical problems might be that {\bf gdb} or {\bf dbx} for Solaris is not on
+the default path. Fix this by specifying the full path to it in the {\bf
+btraceback} file. Another common problem is that you haven't modified the
+script so that the {\bf bsmtp} program has an appropriate smtp server or
+the proper syntax for your smtp server. If you use the {\bf mail} program
+and it is not on the default path, it will also fail. On some systems, it
+is preferable to use {\bf Mail} rather than {\bf mail}.
+
+\section{Getting A Traceback On Other Systems}
+\index[general]{Getting A Traceback On Other Systems}
+\index[general]{Systems!Getting A Traceback On Other}
+
+It should be possible to produce a similar traceback on systems other than
+Linux, either using {\bf gdb} or some other debugger. Solaris with {\bf dbx}
+loaded works quite fine. On other systems, you will need to modify the {\bf
+btraceback} program to invoke the correct debugger, and possibly correct the
+{\bf btraceback.gdb} script to have appropriate commands for your debugger. If
+anyone succeeds in making this work with another debugger, please send us a
+copy of what you modified. Please keep in mind that for any debugger to
+work, it will most likely need to run as root, so you may need to modify
+the {\bf btraceback} script accordingly.
+
+\label{ManuallyDebugging}
+\section{Manually Running Bacula Under The Debugger}
+\index[general]{Manually Running Bacula Under The Debugger}
+\index[general]{Debugger!Manually Running Bacula Under The}
+
+If for some reason you cannot get the automatic traceback, or if you want to
+interactively examine the variable contents after a crash, you can run Bacula
+under the debugger. Assuming you want to run the Storage daemon under the
+debugger (the technique is the same for the other daemons, only the name
+changes), you would do the following:
+
+\begin{enumerate}
+\item Start the Director and the File daemon. If the Storage daemon also
+ starts, you will need to find its PID as shown above (ps fax | grep
+ bacula-sd) and kill it with a command like the following:
+
+\footnotesize
+\begin{verbatim}
+ kill -15 PID
+\end{verbatim}
+\normalsize
+
+where you replace {\bf PID} by the actual value.
+
+\item At this point, the Director and the File daemon should be running but
+ the Storage daemon should not.
+
+\item cd to the directory containing the Storage daemon
+
+\item Start the Storage daemon under the debugger:
+
+ \footnotesize
+\begin{verbatim}
+ gdb ./bacula-sd
+\end{verbatim}
+\normalsize
+
+\item Run the Storage daemon:
+
+ \footnotesize
+\begin{verbatim}
+ run -s -f -c ./bacula-sd.conf
+\end{verbatim}
+\normalsize
+
+You may replace the {\bf ./bacula-sd.conf} with the full path to the Storage
+daemon's configuration file.
+
+\item At this point, Bacula will be fully operational.
+
+\item In another shell command window, start the Console program and do what
+ is necessary to cause Bacula to die.
+
+\item When Bacula crashes, the {\bf gdb} shell window will become active and
+ {\bf gdb} will show you the error that occurred.
+
+\item To get a general traceback of all threads, issue the following command:
+
+
+\footnotesize
+\begin{verbatim}
+ thread apply all bt
+\end{verbatim}
+\normalsize
+
+After that you can issue any debugging command.
+\end{enumerate}
+
+\section{Getting Debug Output from Bacula}
+\index[general]{Getting Debug Output from Bacula }
+Each of the daemons normally has debug compiled into the program, but
+disabled. There are two ways to enable the debug output. One is to add the
+{\bf -d nnn} option on the command line when starting the debugger. The {\bf
+nnn} is the debug level, and generally anything between 50 and 200 is
+reasonable. The higher the number, the more output is produced. The output is
+written to standard output.
+
+The second way of getting debug output is to dynamically turn it on using the
+Console using the {\bf setdebug} command. The full syntax of the command is:
+
+\footnotesize
+\begin{verbatim}
+ setdebug level=nnn client=client-name storage=storage-name dir
+\end{verbatim}
+\normalsize
+
+If none of the options are given, the command will prompt you. You can
+selectively turn on/off debugging in any or all the daemons (i.e. it is not
+necessary to specify all the components of the above command).
--- /dev/null
+%%
+%%
+%% The following characters must be preceded by a backslash
+%% to be entered as printable characters:
+%%
+%% # $ % & ~ _ ^ \ { }
+%%
+
+\documentclass[10pt,a4paper]{book}
+
+\topmargin -0.5in
+\oddsidemargin 0.0in
+\evensidemargin 0.0in
+\textheight 10in
+\textwidth 6.5in
+
+\usepackage{html}
+\usepackage{float}
+\usepackage{graphicx}
+\usepackage{bacula}
+\usepackage{longtable}
+\usepackage{makeidx}
+\usepackage{index}
+\usepackage{setspace}
+\usepackage{hyperref}
+\usepackage{url}
+
+
+\makeindex
+\newindex{general}{idx}{ind}{General Index}
+
+\sloppy
+
+\begin{document}
+\sloppy
+
+\newfont{\bighead}{cmr17 at 36pt}
+\parskip 10pt
+\parindent 0pt
+
+\title{\includegraphics{\idir bacula-logo.eps} \\ \bigskip
+ \Huge{Bacula Problem Resolution Guide}
+ \begin{center}
+ \large{It comes in the night and sucks
+ the essence from your computers. }
+ \end{center}
+}
+
+
+\author{Kern Sibbald}
+\date{\vspace{1.0in}\today \\
+ This manual documents Bacula version \input{version} \\
+ \vspace{0.2in}
+ Copyright \copyright 1999-2010, Free Software Foundation Europe
+ e.V. \\
+ \vspace{0.2in}
+ Permission is granted to copy, distribute and/or modify this document under the terms of the
+ GNU Free Documentation License, Version 1.2 published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU Free Documentation License".
+}
+
+\maketitle
+
+\clearpage
+\tableofcontents
+\clearpage
+
+\include{faq}
+\include{tips}
+\include{tapetesting}
+\include{firewalls}
+\include{kaboom}
+\include{fdl}
+
+
+% The following line tells link_resolver.pl to not include these files:
+% nolinks developersi baculai-dir baculai-fd baculai-sd baculai-console baculai-main
+
+% pull in the index
+\clearpage
+\printindex[general]
+
+\end{document}
--- /dev/null
+%%
+%%
+
+\chapter{Bacula RPM Packaging FAQ}
+\label{RpmFaqChapter}
+\index[general]{FAQ!Bacula\textsuperscript{\textregistered} - RPM Packaging }
+\index[general]{Bacula\textsuperscript{\textregistered} - RPM Packaging FAQ }
+
+\begin{enumerate}
+\item
+ \ilink{How do I build Bacula for platform xxx?}{faq1}
+\item
+ \ilink{How do I control which database support gets built?}{faq2}
+
+\item
+ \ilink{What other defines are used?}{faq3}
+\item
+ \ilink{I'm getting errors about not having permission when I try to build the
+ packages. Do I need to be root?}{faq4}
+\item
+ \ilink{I'm building my own rpms but on all platforms and compiles I get an
+ unresolved dependency for something called
+ /usr/afsws/bin/pagsh.}{faq5}
+\item
+ \ilink{I'm building my own rpms because you don't publish for my platform.
+ Can I get my packages released to sourceforge for other people to use?}{faq6}
+\item
+ \ilink{Is there an easier way than sorting out all these command line options?}{faq7}
+\item
+ \ilink{I just upgraded from 1.36.x to 1.38.x and now my director daemon won't start. It appears to start but dies silently and I get a "connection refused" error when starting the console. What is wrong?}{faq8}
+\item
+ \ilink{There are a lot of rpm packages. Which packages do I need for what?}{faq9}
+\end{enumerate}
+
+\section{Answers}
+\index[general]{Answers }
+
+\begin{enumerate}
+\item
+ \label{faq1}
+ {\bf How do I build Bacula for platform xxx?}
+ The bacula spec file contains defines to build for several platforms:
+ Red Hat 7.x (rh7), Red Hat 8.0 (rh8), Red Hat 9 (rh9), Fedora Core (fc1,
+ fc3, fc4, fc5, fc6, fc7), Whitebox Enterprise Linux 3.0 (wb3), Red Hat Enterprise Linux
+ (rhel3, rhel4, rhel5), Mandrake 10.x (mdk), Mandriva 2006.x (mdv) CentOS (centos3, centos4, centos5)
+ Scientific Linux (sl3, sl4, sl5) and SuSE (su9, su10, su102, su103). The package build is controlled by a mandatory define set at the beginning of the file. These defines basically just control the dependency information that gets coded into the finished rpm package as well
+ as any special configure options required. The platform define may be edited
+ in the spec file directly (by default all defines are set to 0 or "not set").
+ For example, to build the Red Hat 7.x package find the line in the spec file
+ which reads
+
+\footnotesize
+\begin{verbatim}
+ %define rh7 0
+
+\end{verbatim}
+\normalsize
+
+and edit it to read
+
+\footnotesize
+\begin{verbatim}
+ %define rh7 1
+
+\end{verbatim}
+\normalsize
+
+Alternately you may pass the define on the command line when calling rpmbuild:
+
+
+\footnotesize
+\begin{verbatim}
+ rpmbuild -ba --define "build_rh7 1" bacula.spec
+ rpmbuild --rebuild --define build_rh7 1" bacula-x.x.x-x.src.rpm
+
+\end{verbatim}
+\normalsize
+
+\item
+ \label{faq2}
+ {\bf How do I control which database support gets built?}
+ Another mandatory build define controls which database support is compiled,
+ one of build\_sqlite, build\_mysql or build\_postgresql. To get the MySQL
+ package and support either set the
+
+\footnotesize
+\begin{verbatim}
+ %define mysql 0
+ OR
+ %define mysql4 0
+ OR
+ %define mysql5 0
+
+\end{verbatim}
+\normalsize
+
+to
+
+\footnotesize
+\begin{verbatim}
+ %define mysql 1
+ OR
+ %define mysql4 1
+ OR
+ %define mysql5 1
+
+\end{verbatim}
+\normalsize
+
+in the spec file directly or pass it to rpmbuild on the command line:
+
+\footnotesize
+\begin{verbatim}
+ rpmbuild -ba --define "build_rh7 1" --define "build_mysql 1" bacula.spec
+ rpmbuild -ba --define "build_rh7 1" --define "build_mysql4 1" bacula.spec
+ rpmbuild -ba --define "build_rh7 1" --define "build_mysql5 1" bacula.spec
+
+\end{verbatim}
+\normalsize
+
+\item
+ \label{faq3}
+ {\bf What other defines are used?}
+ Three other building defines of note are the depkgs\_version, docs\_version and
+ \_rescuever identifiers. These two defines are set with each release and must
+ match the version of those sources that are being used to build the packages.
+ You would not ordinarily need to edit these. See also the Build Options section
+ below for other build time options that can be passed on the command line.
+\item
+ \label{faq4}
+ {\bf I'm getting errors about not having permission when I try to build the
+ packages. Do I need to be root?}
+ No, you do not need to be root and, in fact, it is better practice to
+ build rpm packages as a non-root user. Bacula packages are designed to
+ be built by a regular user but you must make a few changes on your
+ system to do this. If you are building on your own system then the
+ simplest method is to add write permissions for all to the build
+ directory (/usr/src/redhat/, /usr/src/RPM or /usr/src/packages).
+ To accomplish this, execute the following command as root:
+
+\footnotesize
+\begin{verbatim}
+ chmod -R 777 /usr/src/redhat
+ chmod -R 777 /usr/src/RPM
+ chmod -R 777 /usr/src/packages
+
+\end{verbatim}
+\normalsize
+
+If you are working on a shared system where you can not use the method
+above then you need to recreate the appropriate above directory tree with all
+of its subdirectories inside your home directory. Then create a file named
+
+{\tt .rpmmacros}
+
+in your home directory (or edit the file if it already exists)
+and add the following line:
+
+\footnotesize
+\begin{verbatim}
+ %_topdir /home/myuser/redhat
+ %_tmppath /tmp
+
+\end{verbatim}
+\normalsize
+
+Another handy directive for the .rpmmacros file if you wish to suppress the
+creation of debug rpm packages is:
+
+\footnotesize
+\begin{verbatim}
+ %debug_package %{nil}
+
+\end{verbatim}
+
+\normalsize
+
+\item
+ \label{faq5}
+ {\bf I'm building my own rpms but on all platforms and compiles I get an
+ unresolved dependency for something called /usr/afsws/bin/pagsh.} This
+ is a shell from the OpenAFS (Andrew File System). If you are seeing
+ this then you chose to include the docs/examples directory in your
+ package. One of the example scripts in this directory is a pagsh
+ script. Rpmbuild, when scanning for dependencies, looks at the shebang
+ line of all packaged scripts in addition to checking shared libraries.
+ To avoid this do not package the examples directory. If you are seeing this
+ problem you are building a very old bacula package as the examples have been
+ removed from the doc packaging.
+
+\item
+ \label{faq6}
+ {\bf I'm building my own rpms because you don't publish for my platform.
+ Can I get my packages released to sourceforge for other people to use?} Yes,
+ contributions from users are accepted and appreciated. Please examine the
+ directory platforms/contrib-rpm in the source code for further information.
+
+\item
+ \label{faq7}
+ {\bf Is there an easier way than sorting out all these command line options?} Yes,
+ there is a gui wizard shell script which you can use to rebuild the src rpm package.
+ Look in the source archive for platforms/contrib-rpm/rpm\_wizard.sh. This script will
+ allow you to specify build options using GNOME dialog screens. It requires zenity.
+
+\item
+ \label{faq8}
+ {\bf I just upgraded from 1.36.x to 1.38.x and now my director daemon
+won't start. It appears to start but dies silently and I get a "connection
+refused" error when starting the console. What is wrong?} Beginning with
+1.38 the rpm packages are configured to run the director and storage
+daemons as a non-root user. The file daemon runs as user root and group
+bacula, the storage daemon as user bacula and group disk, and the director
+as user bacula and group bacula. If you are upgrading you will need to
+change some file permissions for things to work. Execute the following
+commands as root:
+
+\footnotesize
+\begin{verbatim}
+ chown bacula.bacula /var/bacula/*
+ chown root.bacula /var/bacula/bacula-fd.9102.state
+ chown bacula.disk /var/bacula/bacula-sd.9103.state
+
+\end{verbatim}
+\normalsize
+
+Further, if you are using File storage volumes rather than tapes those
+files will also need to have ownership set to user bacula and group bacula.
+
+\item
+ \label{faq9}
+ {\bf There are a lot of rpm packages. Which packages do I need for
+what?} For a bacula server you need to select the packsge based upon your
+preferred catalog database: one of bacula-mysql, bacula-postgresql or
+bacula-sqlite. If your system does not provide an mtx package you also
+need bacula-mtx to satisfy that dependancy. For a client machine you need
+only install bacula-client. Optionally, for either server or client
+machines, you may install a graphical console bacula-gconsole and/or
+bacula-wxconsole. The Bacula Administration Tool is installed with the
+bacula-bat package. One last package, bacula-updatedb is required only when
+upgrading a server more than one database revision level.
+
+
+
+\item {\bf Support for RHEL3/4/5, CentOS 3/4/5, Scientific Linux 3/4/5 and x86\_64}
+ The examples below show
+ explicit build support for RHEL4 and CentOS 4. Build support
+ for x86\_64 has also been added.
+\end{enumerate}
+
+\footnotesize
+\begin{verbatim}
+Build with one of these 3 commands:
+
+rpmbuild --rebuild \
+ --define "build_rhel4 1" \
+ --define "build_sqlite 1" \
+ bacula-1.38.3-1.src.rpm
+
+rpmbuild --rebuild \
+ --define "build_rhel4 1" \
+ --define "build_postgresql 1" \
+ bacula-1.38.3-1.src.rpm
+
+rpmbuild --rebuild \
+ --define "build_rhel4 1" \
+ --define "build_mysql4 1" \
+ bacula-1.38.3-1.src.rpm
+
+For CentOS substitute '--define "build_centos4 1"' in place of rhel4.
+For Scientific Linux substitute '--define "build_sl4 1"' in place of rhel4.
+
+For 64 bit support add '--define "build_x86_64 1"'
+\end{verbatim}
+\normalsize
+
+\section{Build Options}
+\index[general]{Build Options}
+The spec file currently supports building on the following platforms:
+\footnotesize
+\begin{verbatim}
+Red Hat builds
+--define "build_rh7 1"
+--define "build_rh8 1"
+--define "build_rh9 1"
+
+Fedora Core build
+--define "build_fc1 1"
+--define "build_fc3 1"
+--define "build_fc4 1"
+--define "build_fc5 1"
+--define "build_fc6 1"
+--define "build_fc7 1"
+
+Whitebox Enterprise build
+--define "build_wb3 1"
+
+Red Hat Enterprise builds
+--define "build_rhel3 1"
+--define "build_rhel4 1"
+--define "build_rhel5 1"
+
+CentOS build
+--define "build_centos3 1"
+--define "build_centos4 1"
+--define "build_centos5 1"
+
+Scientific Linux build
+--define "build_sl3 1"
+--define "build_sl4 1"
+--define "build_sl5 1"
+
+SuSE build
+--define "build_su9 1"
+--define "build_su10 1"
+--define "build_su102 1"
+--define "build_su103 1"
+
+Mandrake 10.x build
+--define "build_mdk 1"
+
+Mandriva build
+--define "build_mdv 1"
+
+MySQL support:
+for mysql 3.23.x support define this
+--define "build_mysql 1"
+if using mysql 4.x define this,
+currently: Mandrake 10.x, Mandriva 2006.0, SuSE 9.x & 10.0, FC4 & RHEL4
+--define "build_mysql4 1"
+if using mysql 5.x define this,
+currently: SuSE 10.1 & FC5
+--define "build_mysql5 1"
+
+PostgreSQL support:
+--define "build_postgresql 1"
+
+Sqlite support:
+--define "build_sqlite 1"
+
+Build the client rpm only in place of one of the above database full builds:
+--define "build_client_only 1"
+
+X86-64 support:
+--define "build_x86_64 1"
+
+Supress build of bgnome-console:
+--define "nobuild_gconsole 1"
+
+Build the WXWindows console:
+requires wxGTK >= 2.6
+--define "build_wxconsole 1"
+
+Build the Bacula Administration Tool:
+requires QT >= 4.2
+--define "build_bat 1"
+
+Build python scripting support:
+--define "build_python 1"
+
+Modify the Packager tag for third party packages:
+--define "contrib_packager Your Name <youremail@site.org>"
+
+\end{verbatim}
+\normalsize
+
+\section{RPM Install Problems}
+\index[general]{RPM Install Problems}
+In general the RPMs, once properly built should install correctly.
+However, when attempting to run the daemons, a number of problems
+can occur:
+\begin{itemize}
+\item [Wrong /var/bacula Permissions]
+ By default, the Director and Storage daemon do not run with
+ root permission. If the /var/bacula is owned by root, then it
+ is possible that the Director and the Storage daemon will not
+ be able to access this directory, which is used as the Working
+ Directory. To fix this, the easiest thing to do is:
+\begin{verbatim}
+ chown bacula:bacula /var/bacula
+\end{verbatim}
+ Note: as of 1.38.8 /var/bacula is installed root:bacula with
+ permissions 770.
+\item [The Storage daemon cannot Access the Tape drive]
+ This can happen in some older RPM releases where the Storage
+ daemon ran under userid bacula, group bacula. There are two
+ ways of fixing this: the best is to modify the /etc/init.d/bacula-sd
+ file so that it starts the Storage daemon with group "disk".
+ The second way to fix the problem is to change the permissions
+ of your tape drive (usually /dev/nst0) so that Bacula can access it.
+ You will probably need to change the permissions of the SCSI control
+ device as well, which is usually /dev/sg0. The exact names depend
+ on your configuration, please see the Tape Testing chapter for
+ more information on devices.
+\end{itemize}
+
--- /dev/null
+%%
+%%
+
+\chapter{Testing Your Tape Drive With Bacula}
+\label{TapeTestingChapter}
+\index[general]{Testing Your Tape Drive With Bacula}
+
+This chapter is concerned with testing and configuring your tape drive to make
+sure that it will work properly with Bacula using the {\bf btape} program.
+\label{summary}
+
+\section{Get Your Tape Drive Working}
+
+In general, you should follow the following steps to get your tape drive to
+work with Bacula. Start with a tape mounted in your drive. If you have an
+autochanger, load a tape into the drive. We use {\bf /dev/nst0} as the tape
+drive name, you will need to adapt it according to your system.
+
+Do not proceed to the next item until you have succeeded with the previous
+one.
+
+\begin{enumerate}
+\item Make sure that Bacula (the Storage daemon) is not running
+ or that you have {\bf unmount}ed the drive you will use
+ for testing.
+
+\item Use tar to write to, then read from your drive:
+
+ \footnotesize
+\begin{verbatim}
+ mt -f /dev/nst0 rewind
+ tar cvf /dev/nst0 .
+ mt -f /dev/nst0 rewind
+ tar tvf /dev/nst0
+
+\end{verbatim}
+\normalsize
+
+\item Make sure you have a valid and correct Device resource corresponding
+ to your drive. For Linux users, generally, the default one works. For
+ FreeBSD users, there are two possible Device configurations (see below).
+ For other drives and/or OSes, you will need to first ensure that your
+ system tape modes are properly setup (see below), then possibly modify
+ you Device resource depending on the output from the btape program (next
+ item). When doing this, you should consult the \ilink{Storage Daemon
+ Configuration}{StoredConfChapter} of this manual.
+
+\item If you are using a Fibre Channel to connect your tape drive to
+ Bacula, please be sure to disable any caching in the NSR (network
+ storage router, which is a Fibre Channel to SCSI converter).
+
+\item Run the btape {\bf test} command:
+
+ \footnotesize
+\begin{verbatim}
+ ./btape -c bacula-sd.conf /dev/nst0
+ test
+
+\end{verbatim}
+\normalsize
+
+ It isn't necessary to run the autochanger part of the test at this time,
+ but do not go past this point until the basic test succeeds. If you do
+ have an autochanger, please be sure to read the \ilink{Autochanger
+ chapter}{AutochangersChapter} of this manual.
+
+\item Run the btape {\bf fill} command, preferably with two volumes. This
+ can take a long time. If you have an autochanger and it is configured, Bacula
+ will automatically use it. If you do not have it configured, you can manually
+ issue the appropriate {\bf mtx} command, or press the autochanger buttons to
+ change the tape when requested to do so.
+
+\item FreeBSD users, if you have a pre-5.0 system run the {\bf tapetest}
+ program, and make sure your system is patched if necessary. The tapetest
+ program can be found in the platform/freebsd directory. The instructions
+ for its use are at the top of the file.
+
+\item Run Bacula, and backup a reasonably small directory, say 60
+ Megabytes. Do three successive backups of this directory.
+
+\item Stop Bacula, then restart it. Do another full backup of the same
+ directory. Then stop and restart Bacula.
+
+\item Do a restore of the directory backed up, by entering the following
+ restore command, being careful to restore it to an alternate location:
+
+
+\footnotesize
+\begin{verbatim}
+ restore select all done
+ yes
+
+\end{verbatim}
+\normalsize
+
+ Do a {\bf diff} on the restored directory to ensure it is identical to the
+ original directory. If you are going to backup multiple different systems
+ (Linux, Windows, Mac, Solaris, FreeBSD, ...), be sure you test the restore
+ on each system type.
+
+\item If you have an autochanger, you should now go back to the btape program
+ and run the autochanger test:
+
+\footnotesize
+\begin{verbatim}
+ ./btape -c bacula-sd.conf /dev/nst0
+ auto
+
+\end{verbatim}
+\normalsize
+
+ Adjust your autochanger as necessary to ensure that it works correctly. See
+ the Autochanger chapter of this manual for a complete discussion of testing
+ your autochanger.
+
+\item We strongly recommend that you use a dedicated SCSI
+ controller for your tape drives. Scanners are known to induce
+ serious problems with the SCSI bus, causing it to reset. If the
+ SCSI bus is reset while Bacula has the tape drive open, it will
+ most likely be fatal to your tape since the drive will rewind.
+ These kinds of problems show up in the system log. For example,
+ the following was most likely caused by a scanner:
+
+\footnotesize
+\begin{verbatim}
+Feb 14 17:29:55 epohost kernel: (scsi0:A:2:0): No or incomplete CDB sent to device.
+Feb 14 17:29:55 epohost kernel: scsi0: Issued Channel A Bus Reset. 1 SCBs aborted
+\end{verbatim}
+\normalsize
+
+\end{enumerate}
+
+If you have reached this point, you stand a good chance of having everything
+work. If you get into trouble at any point, {\bf carefully} read the
+documentation given below. If you cannot get past some point, ask the {\bf
+bacula-users} email list, but specify which of the steps you have successfully
+completed. In particular, you may want to look at the
+\ilink{ Tips for Resolving Problems}{problems1} section below.
+
+
+\label{NoTapeInDrive}
+\subsection{Problems When no Tape in Drive}
+\index[general]{Problems When no Tape in Drive}
+When Bacula was first written the Linux 2.4 kernel permitted opening the
+drive whether or not there was a tape in the drive. Thus the Bacula code is
+based on the concept that if the drive cannot be opened, there is a serious
+problem, and the job is failed.
+
+With version 2.6 of the Linux kernel, if there is no tape in the drive, the
+OS will wait two minutes (default) and then return a failure, and consequently,
+Bacula version 1.36 and below will fail the job. This is important to keep
+in mind, because if you use an option such as {\bf Offline on Unmount =
+yes}, there will be a point when there is no tape in the drive, and if
+another job starts or if Bacula asks the operator to mount a tape, when
+Bacula attempts to open the drive (about a 20 minute delay), it will fail
+and Bacula will fail the job.
+
+In version 1.38.x, the Bacula code partially gets around this problem -- at
+least in the initial open of the drive. However, functions like Polling
+the drive do not work correctly if there is no tape in the drive.
+Providing you do not use {\bf Offline on Unmount = yes}, you should not
+experience job failures as mentioned above. If you do experience such
+failures, you can also increase the {\bf Maximum Open Wait} time interval,
+which will give you more time to mount the next tape before the job is
+failed.
+
+\subsection{Specifying the Configuration File}
+\index[general]{File!Specifying the Configuration}
+\index[general]{Specifying the Configuration File}
+
+Starting with version 1.27, each of the tape utility programs including the
+{\bf btape} program requires a valid Storage daemon configuration file
+(actually, the only part of the configuration file that {\bf btape} needs is
+the {\bf Device} resource definitions). This permits {\bf btape} to find the
+configuration parameters for your archive device (generally a tape drive).
+Without those parameters, the testing and utility programs do not know how to
+properly read and write your drive. By default, they use {\bf bacula-sd.conf}
+in the current directory, but you may specify a different configuration file
+using the {\bf -c} option.
+
+\subsection{Specifying a Device Name For a Tape}
+\index[general]{Tape!Specifying a Device Name For a}
+\index[general]{Specifying a Device Name For a Tape}
+
+{\bf btape} {\bf device-name} where the Volume can be found. In the case of a
+tape, this is the physical device name such as {\bf /dev/nst0} or {\bf
+/dev/rmt/0ubn} depending on your system that you specify on the Archive Device
+directive. For the program to work, it must find the identical name in the
+Device resource of the configuration file. If the name is not found in the
+list of physical names, the utility program will compare the name you entered
+to the Device names (rather than the Archive device names).
+
+When specifying a tape device, it is preferable that the "non-rewind"
+variant of the device file name be given. In addition, on systems such as
+Sun, which have multiple tape access methods, you must be sure to specify
+to use Berkeley I/O conventions with the device. The
+{\bf b} in the Solaris (Sun) archive specification {\bf /dev/rmt/0mbn} is
+what is needed in this case. Bacula does not support SysV tape drive
+behavior.
+
+See below for specifying Volume names.
+
+\subsection{Specifying a Device Name For a File}
+\index[general]{File!Specifying a Device Name For a}
+\index[general]{Specifying a Device Name For a File}
+
+If you are attempting to read or write an archive file rather than a tape, the
+{\bf device-name} should be the full path to the archive location including
+the filename. The filename (last part of the specification) will be stripped
+and used as the Volume name, and the path (first part before the filename)
+must have the same entry in the configuration file. So, the path is equivalent
+to the archive device name, and the filename is equivalent to the volume name.
+
+
+\section{btape}
+\label{btape1}
+\index[general]{Btape}
+
+This program permits a number of elementary tape operations via a tty command
+interface. The {\bf test} command, described below, can be very useful for
+testing tape drive compatibility problems. Aside from initial testing of tape
+drive compatibility with {\bf Bacula}, {\bf btape} will be mostly used by
+developers writing new tape drivers.
+
+{\bf btape} can be dangerous to use with existing {\bf Bacula} tapes because
+it will relabel a tape or write on the tape if so requested regardless of
+whether or not the tape contains valuable data, so please be careful and use
+it only on blank tapes.
+
+To work properly, {\bf btape} needs to read the Storage daemon's configuration
+file. As a default, it will look for {\bf bacula-sd.conf} in the current
+directory. If your configuration file is elsewhere, please use the {\bf -c}
+option to specify where.
+
+The physical device name or the Device resource name must be specified on the
+command line, and this same device name must be present in the Storage
+daemon's configuration file read by {\bf btape}
+
+\footnotesize
+\begin{verbatim}
+Usage: btape [options] device_name
+ -b <file> specify bootstrap file
+ -c <file> set configuration file to file
+ -d <nn> set debug level to nn
+ -p proceed inspite of I/O errors
+ -s turn off signals
+ -v be verbose
+ -? print this message.
+\end{verbatim}
+\normalsize
+
+\subsection{Using btape to Verify your Tape Drive}
+\index[general]{Using btape to Verify your Tape Drive}
+\index[general]{Drive!Using btape to Verify your Tape}
+
+An important reason for this program is to ensure that a Storage daemon
+configuration file is defined so that Bacula will correctly read and write
+tapes.
+
+It is highly recommended that you run the {\bf test} command before running
+your first Bacula job to ensure that the parameters you have defined for your
+storage device (tape drive) will permit {\bf Bacula} to function properly. You
+only need to mount a blank tape, enter the command, and the output should be
+reasonably self explanatory. For example:
+
+\footnotesize
+\begin{verbatim}
+(ensure that Bacula is not running)
+./btape -c /usr/bin/bacula/bacula-sd.conf /dev/nst0
+\end{verbatim}
+\normalsize
+
+The output will be:
+
+\footnotesize
+\begin{verbatim}
+Tape block granularity is 1024 bytes.
+btape: btape.c:376 Using device: /dev/nst0
+*
+\end{verbatim}
+\normalsize
+
+Enter the test command:
+
+\footnotesize
+\begin{verbatim}
+test
+\end{verbatim}
+\normalsize
+
+The output produced should be something similar to the following: I've cut the
+listing short because it is frequently updated to have new tests.
+
+\footnotesize
+\begin{verbatim}
+=== Append files test ===
+This test is essential to Bacula.
+I'm going to write one record in file 0,
+ two records in file 1,
+ and three records in file 2
+btape: btape.c:387 Rewound /dev/nst0
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:410 Wrote EOF to /dev/nst0
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:410 Wrote EOF to /dev/nst0
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:410 Wrote EOF to /dev/nst0
+btape: btape.c:387 Rewound /dev/nst0
+btape: btape.c:693 Now moving to end of media.
+btape: btape.c:427 Moved to end of media
+We should be in file 3. I am at file 3. This is correct!
+Now the important part, I am going to attempt to append to the tape.
+...
+=== End Append files test ===
+\end{verbatim}
+\normalsize
+
+If you do not successfully complete the above test, please resolve the
+problem(s) before attempting to use {\bf Bacula}. Depending on your tape
+drive, the test may recommend that you add certain records to your
+configuration. We strongly recommend that you do so and then re-run the above
+test to insure it works the first time.
+
+Some of the suggestions it provides for resolving the problems may or may not
+be useful. If at all possible avoid using fixed blocking. If the test suddenly
+starts to print a long series of:
+
+\footnotesize
+\begin{verbatim}
+Got EOF on tape.
+Got EOF on tape.
+...
+\end{verbatim}
+\normalsize
+
+then almost certainly, you are running your drive in fixed block mode rather
+than variable block mode. See below for more help of resolving fix
+versus variable block problems.
+
+It is also possible that you have your drive
+set in SysV tape drive mode. The drive must use BSD tape conventions.
+See the section above on setting your {\bf Archive device} correctly.
+
+For FreeBSD users, please see the notes below for doing further testing of
+your tape drive.
+
+\subsection{Testing tape drive speed}
+\label{sec:btapespeed}
+
+To determine the best configuration of your tape drive, you can run the
+\texttt{speed} command available in the \texttt{btape} program.
+
+This command can have the following arguments:
+\begin{itemize}
+\item[\texttt{file\_size=n}] Specify the Maximum File Size for this test
+ (between 1 and 5GB). This counter is in GB.
+\item[\texttt{nb\_file=n}] Specify the number of file to be written. The amount
+ of data should be greater than your memory ($file\_size*nb\_file$).
+\item[\texttt{skip\_zero}] This flag permits to skip tests with constant
+ data.
+\item[\texttt{skip\_random}] This flag permits to skip tests with random
+ data.
+\item[\texttt{skip\_raw}] This flag permits to skip tests with raw access.
+\item[\texttt{skip\_block}] This flag permits to skip tests with Bacula block
+ access.
+\end{itemize}
+
+\begin{verbatim}
+*speed file_size=3 skip_raw
+btape.c:1078 Test with zero data and bacula block structure.
+btape.c:956 Begin writing 3 files of 3.221 GB with blocks of 129024 bytes.
+++++++++++++++++++++++++++++++++++++++++++
+btape.c:604 Wrote 1 EOF to "Drive-0" (/dev/nst0)
+btape.c:406 Volume bytes=3.221 GB. Write rate = 44.128 MB/s
+...
+btape.c:383 Total Volume bytes=9.664 GB. Total Write rate = 43.531 MB/s
+
+btape.c:1090 Test with random data, should give the minimum throughput.
+btape.c:956 Begin writing 3 files of 3.221 GB with blocks of 129024 bytes.
++++++++++++++++++++++++++++++++++++++++++++
+btape.c:604 Wrote 1 EOF to "Drive-0" (/dev/nst0)
+btape.c:406 Volume bytes=3.221 GB. Write rate = 7.271 MB/s
++++++++++++++++++++++++++++++++++++++++++++
+...
+btape.c:383 Total Volume bytes=9.664 GB. Total Write rate = 7.365 MB/s
+
+\end{verbatim}
+
+When using compression, the random test will give your the minimum throughput
+of your drive . The test using constant string will give you the maximum speed
+of your hardware chain. (cpu, memory, scsi card, cable, drive, tape).
+
+You can change the block size in the Storage Daemon configuration file.
+
+\label{SCSITricks}
+\subsection{Linux SCSI Tricks}
+\index[general]{Tricks!Linux SCSI}
+\index[general]{Linux SCSI Tricks}
+
+You can find out what SCSI devices you have by doing:
+
+\footnotesize
+\begin{verbatim}
+lsscsi
+\end{verbatim}
+\normalsize
+
+Typical output is:
+
+\footnotesize
+\begin{verbatim}
+[0:0:0:0] disk ATA ST3160812AS 3.AD /dev/sda
+[2:0:4:0] tape HP Ultrium 2-SCSI F6CH /dev/st0
+[2:0:5:0] tape HP Ultrium 2-SCSI F6CH /dev/st1
+[2:0:6:0] mediumx OVERLAND LXB 0107 -
+[2:0:9:0] tape HP Ultrium 1-SCSI E50H /dev/st2
+[2:0:10:0] mediumx OVERLAND LXB 0107 -
+\end{verbatim}
+\normalsize
+
+There are two drives in one autochanger: /dev/st0 and /dev/st1
+and a third tape drive at /dev/st2. For using them with Bacula, one
+would normally reference them as /dev/nst0 ... /dev/nst2. Not also,
+there are two different autochangers identified as "mediumx OVERLAND LXB".
+They can be addressed via their /dev/sgN designation, which can be
+obtained by counting from the beginning as 0 to each changer. In the
+above case, the two changers are located on /dev/sg3 and /dev/sg5. The one
+at /dev/sg3, controls drives /dev/nst0 and /dev/nst1; and the one at
+/dev/sg5 controles drive /dev/nst2.
+
+If you do not have the {\bf lsscsi} command, you can obtain the same
+information as follows:
+
+\footnotesize
+\begin{verbatim}
+cat /proc/scsi/scsi
+\end{verbatim}
+\normalsize
+
+For the above example with the three drives and two autochangers,
+I get:
+
+\footnotesize
+\begin{verbatim}
+Attached devices:
+Host: scsi0 Channel: 00 Id: 00 Lun: 00
+ Vendor: ATA Model: ST3160812AS Rev: 3.AD
+ Type: Direct-Access ANSI SCSI revision: 05
+Host: scsi2 Channel: 00 Id: 04 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 05 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 06 Lun: 00
+ Vendor: OVERLAND Model: LXB Rev: 0107
+ Type: Medium Changer ANSI SCSI revision: 02
+Host: scsi2 Channel: 00 Id: 09 Lun: 00
+ Vendor: HP Model: Ultrium 1-SCSI Rev: E50H
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 10 Lun: 00
+ Vendor: OVERLAND Model: LXB Rev: 0107
+ Type: Medium Changer ANSI SCSI revision: 02
+\end{verbatim}
+\normalsize
+
+
+As an additional example, I get the following (on a different machine from the
+above example):
+
+\footnotesize
+\begin{verbatim}
+Attached devices:
+Host: scsi2 Channel: 00 Id: 01 Lun: 00
+ Vendor: HP Model: C5713A Rev: H107
+ Type: Sequential-Access ANSI SCSI revision: 02
+Host: scsi2 Channel: 00 Id: 04 Lun: 00
+ Vendor: SONY Model: SDT-10000 Rev: 0110
+ Type: Sequential-Access ANSI SCSI revision: 02
+\end{verbatim}
+\normalsize
+
+The above represents first an autochanger and second a simple
+tape drive. The HP changer (the first entry) uses the same SCSI channel
+for data and for control, so in Bacula, you would use:
+\footnotesize
+\begin{verbatim}
+Archive Device = /dev/nst0
+Changer Device = /dev/sg0
+\end{verbatim}
+\normalsize
+
+If you want to remove the SDT-10000 device, you can do so as root with:
+
+\footnotesize
+\begin{verbatim}
+echo "scsi remove-single-device 2 0 4 0">/proc/scsi/scsi
+\end{verbatim}
+\normalsize
+
+and you can put add it back with:
+
+\footnotesize
+\begin{verbatim}
+echo "scsi add-single-device 2 0 4 0">/proc/scsi/scsi
+\end{verbatim}
+\normalsize
+
+where the 2 0 4 0 are the Host, Channel, Id, and Lun as seen on the output
+from {\bf cat /proc/scsi/scsi}. Note, the Channel must be specified as
+numeric.
+
+Below is a slightly more complicated output, which is a single autochanger
+with two drives, and which operates the changer on a different channel
+from from the drives:
+
+\footnotesize
+\begin{verbatim}
+Attached devices:
+Host: scsi0 Channel: 00 Id: 00 Lun: 00
+ Vendor: ATA Model: WDC WD1600JD-75H Rev: 08.0
+ Type: Direct-Access ANSI SCSI revision: 05
+Host: scsi2 Channel: 00 Id: 04 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 05 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 06 Lun: 00
+ Vendor: OVERLAND Model: LXB Rev: 0106
+ Type: Medium Changer ANSI SCSI revision: 02
+\end{verbatim}
+\normalsize
+
+The above tape drives are accessed on /dev/nst0 and /dev/nst1, while
+the control channel for those two drives is /dev/sg3.
+
+
+
+\label{problems1}
+\section{Tips for Resolving Problems}
+\index[general]{Problems!Tips for Resolving}
+\index[general]{Tips for Resolving Problems}
+
+\label{CannotRestore}
+\subsection{Bacula Saves But Cannot Restore Files}
+\index[general]{Files!Bacula Saves But Cannot Restore}
+\index[general]{Bacula Saves But Cannot Restore Files}
+
+If you are getting error messages such as:
+
+\footnotesize
+\begin{verbatim}
+Volume data error at 0:1! Wanted block-id: "BB02", got "". Buffer discarded
+\end{verbatim}
+\normalsize
+
+It is very likely that Bacula has tried to do block positioning and ended up
+at an invalid block. This can happen if your tape drive is in fixed block mode
+while Bacula's default is variable blocks. Note that in such cases, Bacula is
+perfectly able to write to your Volumes (tapes), but cannot position to read
+them.
+
+There are two possible solutions.
+
+\begin{enumerate}
+\item The first and best is to always ensure that your drive is in variable
+ block mode. Note, it can switch back to fixed block mode on a reboot or if
+ another program uses the drive. So on such systems you need to modify the
+ Bacula startup files to explicitly set:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nst0 defblksize 0
+\end{verbatim}
+\normalsize
+
+or whatever is appropriate on your system. Note, if you are running a Linux
+system, and the above command does not work, it is most likely because you
+have not loaded the appropriate {\bf mt} package, which is often called
+{\bf mt\_st}, but may differ according to your distribution.
+
+\item The second possibility, especially, if Bacula wrote while the drive was
+ in fixed block mode, is to turn off block positioning in Bacula. This is done
+ by adding:
+
+\footnotesize
+\begin{verbatim}
+Block Positioning = no
+\end{verbatim}
+\normalsize
+
+to the Device resource. This is not the recommended procedure because it can
+enormously slow down recovery of files, but it may help where all else
+fails. This directive is available in version 1.35.5 or later (and not yet
+tested).
+\end{enumerate}
+
+If you are getting error messages such as:
+\footnotesize
+\begin{verbatim}
+Volume data error at 0:0!
+Block checksum mismatch in block=0 len=32625 calc=345678 blk=123456
+\end{verbatim}
+\normalsize
+
+You are getting tape read errors, and this is most likely due to
+one of the following things:
+\begin{enumerate}
+\item An old or bad tape.
+\item A dirty drive that needs cleaning (particularly for DDS drives).
+\item A loose SCSI cable.
+\item Old firmware in your drive. Make sure you have the latest firmware
+ loaded.
+\item Computer memory errors.
+\item Over-clocking your CPU.
+\item A bad SCSI card.
+\end{enumerate}
+
+
+\label{opendevice}
+\subsection{Bacula Cannot Open the Device}
+\index[general]{Device!Bacula Cannot Open the}
+\index[general]{Bacula Cannot Open the Device}
+
+If you get an error message such as:
+
+\footnotesize
+\begin{verbatim}
+dev open failed: dev.c:265 stored: unable to open
+device /dev/nst0:> ERR=No such device or address
+\end{verbatim}
+\normalsize
+
+the first time you run a job, it is most likely due to the fact that you
+specified the incorrect device name on your {\bf Archive Device}.
+
+If Bacula works fine with your drive, then all off a sudden you get error
+messages similar to the one shown above, it is quite possible that your driver
+module is being removed because the kernel deems it idle. This is done via
+{\bf crontab} with the use of {\bf rmmod -a}. To fix the problem, you can
+remove this entry from {\bf crontab}, or you can manually {\bf modprob} your
+driver module (or add it to the local startup script). Thanks to Alan Brown
+for this tip.
+\label{IncorrectFiles}
+
+\subsection{Incorrect File Number}
+\index[general]{Number!Incorrect File}
+\index[general]{Incorrect File Number}
+
+When Bacula moves to the end of the medium, it normally uses the {\bf
+ioctl(MTEOM)} function. Then Bacula uses the {\bf ioctl(MTIOCGET)} function to
+retrieve the current file position from the {\bf mt\_fileno} field. Some SCSI
+tape drivers will use a fast means of seeking to the end of the medium and in
+doing so, they will not know the current file position and hence return a {\bf
+-1}. As a consequence, if you get {\bf "This is NOT correct!"} in the
+positioning tests, this may be the cause. You must correct this condition in
+order for Bacula to work.
+
+There are two possible solutions to the above problem of incorrect file
+number:
+
+\begin{itemize}
+\item Figure out how to configure your SCSI driver to keep track of the file
+ position during the MTEOM request. This is the preferred solution.
+\item Modify the {\bf Device} resource of your {\bf bacula-sd.conf} file to
+ include:
+
+\footnotesize
+\begin{verbatim}
+Hardware End of File = no
+\end{verbatim}
+\normalsize
+
+This will cause Bacula to use the MTFSF request to seek to the end of the
+medium, and Bacula will keep track of the file number itself.
+\end{itemize}
+
+\label{IncorrectBlocks}
+\subsection{Incorrect Number of Blocks or Positioning Errors}
+\index[general]{Testing!Incorrect Number of Blocks or Positioning Errors}
+\index[general]{Incorrect Number of Blocks or Positioning Errors}
+
+{\bf Bacula's} preferred method of working with tape drives (sequential
+devices) is to run in variable block mode, and this is what is set by default.
+You should first ensure that your tape drive is set for variable block mode
+(see below).
+
+If your tape drive is in fixed block mode and you have told Bacula to use
+different fixed block sizes or variable block sizes (default), you will get
+errors when Bacula attempts to forward space to the correct block (the kernel
+driver's idea of tape blocks will not correspond to Bacula's).
+
+All modern tape drives support variable tape blocks, but some older drives (in
+particular the QIC drives) as well as the ATAPI ide-scsi driver run only in
+fixed block mode. The Travan tape drives also apparently must run in fixed
+block mode (to be confirmed).
+
+Even in variable block mode, with the exception of the first record on the
+second or subsequent volume of a multi-volume backup, Bacula will write blocks
+of a fixed size. However, in reading a tape, Bacula will assume that for each
+read request, exactly one block from the tape will be transferred. This the
+most common way that tape drives work and is well supported by {\bf Bacula}.
+
+Drives that run in fixed block mode can cause serious problems for Bacula if
+the drive's block size does not correspond exactly to {\bf Bacula's} block
+size. In fixed block size mode, drivers may transmit a partial block or
+multiple blocks for a single read request. From {\bf Bacula's} point of view,
+this destroys the concept of tape blocks. It is much better to run in variable
+block mode, and almost all modern drives (the OnStream is an exception) run in
+variable block mode. In order for Bacula to run in fixed block mode, you must
+include the following records in the Storage daemon's Device resource
+definition:
+
+\footnotesize
+\begin{verbatim}
+Minimum Block Size = nnn
+Maximum Block Size = nnn
+\end{verbatim}
+\normalsize
+
+where {\bf nnn} must be the same for both records and must be identical to the
+driver's fixed block size.
+
+We recommend that you avoid this configuration if at all possible by using
+variable block sizes.
+
+If you must run with fixed size blocks, make sure they are not 512 bytes. This
+is too small and the overhead that Bacula has with each record will become
+excessive. If at all possible set any fixed block size to something like
+64,512 bytes or possibly 32,768 if 64,512 is too large for your drive. See
+below for the details on checking and setting the default drive block size.
+
+To recover files from tapes written in fixed block mode, see below.
+
+\label{TapeModes}
+\subsection{Ensuring that the Tape Modes Are Properly Set -- {\bf Linux
+Only}}
+\index[general]{Ensuring that the Tape Modes Are Properly Set -- Linux Only}
+
+If you have a modern SCSI tape drive and you are having problems with the {\bf
+test} command as noted above, it may be that some program has set one or more
+of your SCSI driver's options to non-default values. For example, if your
+driver is set to work in SysV manner, Bacula will not work correctly because
+it expects BSD behavior. To reset your tape drive to the default values, you
+can try the following, but {\bf ONLY} if you have a SCSI tape drive on a {\bf
+Linux} system:
+
+\footnotesize
+\begin{verbatim}
+become super user
+mt -f /dev/nst0 rewind
+mt -f /dev/nst0 stoptions buffer-writes async-writes read-ahead
+\end{verbatim}
+\normalsize
+
+The above commands will clear all options and then set those specified. None
+of the specified options are required by Bacula, but a number of other options
+such as SysV behavior must not be set. Bacula does not support SysV tape
+behavior. On systems other than Linux, you will need to consult your {\bf mt}
+man pages or documentation to figure out how to do the same thing. This should
+not really be necessary though -- for example, on both Linux and Solaris
+systems, the default tape driver options are compatible with Bacula.
+On Solaris systems, you must take care to specify the correct device
+name on the {\bf Archive device} directive. See above for more details.
+
+You may also want to ensure that no prior program has set the default block
+size, as happened to one user, by explicitly turning it off with:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nst0 defblksize 0
+\end{verbatim}
+\normalsize
+
+If you are running a Linux
+system, and the above command does not work, it is most likely because you
+have not loaded the appropriate {\bf mt} package, which is often called
+{\bf mt\_st}, but may differ according to your distribution.
+
+If you would like to know what options you have set before making any of the
+changes noted above, you can now view them on Linux systems, thanks to a tip
+provided by Willem Riede. Do the following:
+
+\footnotesize
+\begin{verbatim}
+become super user
+mt -f /dev/nst0 stsetoptions 0
+grep st0 /var/log/messages
+\end{verbatim}
+\normalsize
+
+and you will get output that looks something like the following:
+
+\footnotesize
+\begin{verbatim}
+kernel: st0: Mode 0 options: buffer writes: 1, async writes: 1, read ahead: 1
+kernel: st0: can bsr: 0, two FMs: 0, fast mteom: 0, auto lock: 0,
+kernel: st0: defs for wr: 0, no block limits: 0, partitions: 0, s2 log: 0
+kernel: st0: sysv: 0 nowait: 0
+\end{verbatim}
+\normalsize
+
+Note, I have chopped off the beginning of the line with the date and machine
+name for presentation purposes.
+
+Some people find that the above settings only last until the next reboot, so
+please check this otherwise you may have unexpected problems.
+
+Beginning with Bacula version 1.35.8, if Bacula detects that you are running
+in variable block mode, it will attempt to set your drive appropriately. All
+OSes permit setting variable block mode, but some OSes do not permit setting
+the other modes that Bacula needs to function properly.
+
+\label{compression}
+\subsection{Tape Hardware Compression and Blocking Size}
+\index[general]{Tape Hardware Compression and Blocking Size}
+\index[general]{Size!Tape Hardware Compression and Blocking Size}
+
+You should be able to verify the tape compression status with sysfs on Linux.
+\begin{verbatim}
+cat /sys/class/scsi_tape/nst0/default_compression
+\end{verbatim}
+
+You can, turn it on by using (on Linux):
+
+\footnotesize
+\begin{verbatim}
+become super user
+mt -f /dev/nst0 defcompression 1
+\end{verbatim}
+\normalsize
+
+and of course, if you use a zero instead of the one at the end, you will turn
+it off.
+
+If you have built the {\bf mtx} program in the {\bf depkgs} package, you can
+use tapeinfo to get quite a bit of information about your tape drive even if
+it is not an autochanger. This program is called using the SCSI control
+device. On Linux for tape drive /dev/nst0, this is usually /dev/sg0, while on
+FreeBSD for /dev/nsa0, the control device is often /dev/pass2. For example on
+my DDS-4 drive (/dev/nst0), I get the following:
+
+\footnotesize
+\begin{verbatim}
+tapeinfo -f /dev/sg0
+Product Type: Tape Drive
+Vendor ID: 'HP '
+Product ID: 'C5713A '
+Revision: 'H107'
+Attached Changer: No
+MinBlock:1
+MaxBlock:16777215
+SCSI ID: 5
+SCSI LUN: 0
+Ready: yes
+BufferedMode: yes
+Medium Type: Not Loaded
+Density Code: 0x26
+BlockSize: 0
+\end{verbatim}
+\normalsize
+
+where the {\bf DataCompEnabled: yes} means that tape hardware compression is
+turned on. You can turn it on and off (yes|no) by using the {\bf mt}
+commands given above. Also, this output will tell you if the {\bf BlockSize}
+is non-zero and hence set for a particular block size. Bacula is not likely to
+work in such a situation because it will normally attempt to write blocks of
+64,512 bytes, except the last block of the job which will generally be
+shorter. The first thing to try is setting the default block size to zero
+using the {\bf mt -f /dev/nst0 defblksize 0} command as shown above.
+On FreeBSD, this would be something like: {\bf mt -f /dev/nsa0 blocksize 0}.
+
+On some operating systems with some tape drives, the amount of data that
+can be written to the tape and whether or not compression is enabled is
+determined by the density usually the {\bf mt -f /dev/nst0 setdensity xxx} command.
+Often {\bf mt -f /dev/nst0 status} will print out the current
+density code that is used with the drive. Most systems, but unfortunately
+not all, set the density to the maximum by default. On some systems, you
+can also get a list of all available density codes with:
+{\bf mt -f /dev/nst0 densities} or a similar {\bf mt} command.
+Note, for DLT and SDLT devices, no-compression versus compression is very
+often controlled by the density code. On FreeBSD systems, the compression
+mode is set using {\bf mt -f /dev/nsa0 comp xxx} where xxx is the
+mode you want. In general, see {\bf man mt} for the options available on
+your system.
+
+Note, some of the above {\bf mt} commands may not be persistent depending
+on your system configuration. That is they may be reset if a program
+other than Bacula uses the drive or, as is frequently the case, on reboot
+of your system.
+
+If your tape drive requires fixed block sizes (very unusual), you can use the
+following records:
+
+\footnotesize
+\begin{verbatim}
+Minimum Block Size = nnn
+Maximum Block Size = nnn
+\end{verbatim}
+\normalsize
+
+in your Storage daemon's Device resource to force Bacula to write fixed size
+blocks (where you sent nnn to be the same for both of the above records). This
+should be done only if your drive does not support variable block sizes, or
+you have some other strong reasons for using fixed block sizes. As mentioned
+above, a small fixed block size of 512 or 1024 bytes will be very inefficient.
+Try to set any fixed block size to something like 64,512 bytes or larger if
+your drive will support it.
+
+Also, note that the {\bf Medium Type} field of the output of {\bf tapeinfo}
+reports {\bf Not Loaded}, which is not correct. As a consequence, you should
+ignore that field as well as the {\bf Attached Changer} field.
+
+To recover files from tapes written in fixed block mode, see below.
+\label{FreeBSDTapes}
+
+\subsection{Tape Modes on FreeBSD}
+\index[general]{FreeBSD!Tape Modes on}
+\index[general]{Tape Modes on FreeBSD}
+
+On most FreeBSD systems such as 4.9 and most tape drives, Bacula should run
+with:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nsa0 seteotmodel 2
+mt -f /dev/nsa0 blocksize 0
+mt -f /dev/nsa0 comp enable
+\end{verbatim}
+\normalsize
+
+You might want to put those commands in a startup script to make sure your
+tape driver is properly initialized before running Bacula, because
+depending on your system configuration, these modes may be reset if a
+program other than Bacula uses the drive or when your system is rebooted.
+
+Then according to what the {\bf btape test} command returns, you will probably
+need to set the following (see below for an alternative):
+
+\footnotesize
+\begin{verbatim}
+ Hardware End of Medium = no
+ BSF at EOM = yes
+ Backward Space Record = no
+ Backward Space File = no
+ Fast Forward Space File = no
+ TWO EOF = yes
+\end{verbatim}
+\normalsize
+
+Then be sure to run some append tests with Bacula where you start and stop
+Bacula between appending to the tape, or use {\bf btape} version 1.35.1 or
+greater, which includes simulation of stopping/restarting Bacula.
+
+Please see the file {\bf platforms/freebsd/pthreads-fix.txt} in the main
+Bacula directory concerning {\bf important} information concerning
+compatibility of Bacula and your system. A much more optimal Device
+configuration is shown below, but does not work with all tape drives. Please
+test carefully before putting either into production.
+
+Note, for FreeBSD 4.10-RELEASE, using a Sony TSL11000 L100 DDS4 with an
+autochanger set to variable block size and DCLZ compression, Brian McDonald
+reports that to get Bacula to append correctly between Bacula executions,
+the correct values to use are:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nsa0 seteotmodel 1
+mt -f /dev/nsa0 blocksize 0
+mt -f /dev/nsa0 comp enable
+\end{verbatim}
+\normalsize
+
+and
+
+\footnotesize
+\begin{verbatim}
+ Hardware End of Medium = no
+ BSF at EOM = no
+ Backward Space Record = no
+ Backward Space File = no
+ Fast Forward Space File = yes
+ TWO EOF = no
+\end{verbatim}
+\normalsize
+
+This has been confirmed by several other people using different hardware. This
+configuration is the preferred one because it uses one EOF and no backspacing
+at the end of the tape, which works much more efficiently and reliably with
+modern tape drives.
+
+Finally, here is a Device configuration that Danny Butroyd reports to work
+correctly with the Overland Powerloader tape library using LT0-2 and
+FreeBSD 5.4-Stable:
+
+\footnotesize
+\begin{verbatim}
+# Overland Powerloader LT02 - 17 slots single drive
+Device {
+ Name = Powerloader
+ Media Type = LT0-2
+ Archive Device = /dev/nsa0
+ AutomaticMount = yes;
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+ RandomAccess = no;
+ Changer Command = "/usr/local/sbin/mtx-changer %c %o %S %a %d"
+ Changer Device = /dev/pass2
+ AutoChanger = yes
+ Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
+
+ # FreeBSD Specific Settings
+ Offline On Unmount = no
+ Hardware End of Medium = no
+ BSF at EOM = yes
+ Backward Space Record = no
+ Fast Forward Space File = no
+ TWO EOF = yes
+}
+
+The following Device resource works fine with Dell PowerVault 110T and
+120T devices on both FreeBSD 5.3 and on NetBSD 3.0. It also works
+with Sony AIT-2 drives on FreeBSD.
+\footnotesize
+\begin{verbatim}
+Device {
+ ...
+ # FreeBSD/NetBSD Specific Settings
+ Hardware End of Medium = no
+ BSF at EOM = yes
+ Backward Space Record = no
+ Fast Forward Space File = yes
+ TWO EOF = yes
+}
+\end{verbatim}
+\normalsize
+
+On FreeBSD version 6.0, it is reported that you can even set
+Backward Space Record = yes.
+
+
+
+\subsection{Finding your Tape Drives and Autochangers on FreeBSD}
+\index[general]{FreeBSD!Finding Tape Drives and Autochangers}
+\index[general]{Finding Tape Drives and Autochangers on FreeBSD}
+
+On FreeBSD, you can do a {\bf camcontrol devlist} as root to determine what
+drives and autochangers you have. For example,
+
+\footnotesize
+\begin{verbatim}
+undef# camcontrol devlist
+ at scbus0 target 2 lun 0 (pass0,sa0)
+ at scbus0 target 4 lun 0 (pass1,sa1)
+ at scbus0 target 4 lun 1 (pass2)
+\end{verbatim}
+\normalsize
+
+from the above, you can determine that there is a tape drive on {\bf /dev/sa0}
+and another on {\bf /dev/sa1} in addition since there is a second line for the
+drive on {\bf /dev/sa1}, you know can assume that it is the control device for
+the autochanger (i.e. {\bf /dev/pass2}). It is also the control device name to
+use when invoking the tapeinfo program. E.g.
+
+\footnotesize
+\begin{verbatim}
+tapeinfo -f /dev/pass2
+\end{verbatim}
+\normalsize
+
+\label{onstream}
+
+\subsection{Using the OnStream driver on Linux Systems}
+\index[general]{Using the OnStream driver on Linux Systems}
+\index[general]{Systems!Using the OnStream driver on Linux}
+
+Bacula version 1.33 (not 1.32x) is now working and ready for testing with the
+OnStream kernel osst driver version 0.9.14 or above. Osst is available from:
+\elink{http://sourceforge.net/projects/osst/}
+{http://sourceforge.net/projects/osst/}.
+
+To make Bacula work you must first load the new driver then, as root, do:
+
+\footnotesize
+\begin{verbatim}
+ mt -f /dev/nosst0 defblksize 32768
+\end{verbatim}
+\normalsize
+
+Also you must add the following to your Device resource in your Storage
+daemon's conf file:
+
+\footnotesize
+\begin{verbatim}
+ Minimum Block Size = 32768
+ Maximum Block Size = 32768
+\end{verbatim}
+\normalsize
+
+Here is a Device specification provided by Michel Meyers that is known to
+work:
+
+\footnotesize
+\begin{verbatim}
+Device {
+ Name = "Onstream DI-30"
+ Media Type = "ADR-30"
+ Archive Device = /dev/nosst0
+ Minimum Block Size = 32768
+ Maximum Block Size = 32768
+ Hardware End of Medium = yes
+ BSF at EOM = no
+ Backward Space File = yes
+ Fast Forward Space File = yes
+ Two EOF = no
+ AutomaticMount = yes
+ AlwaysOpen = yes
+ Removable Media = yes
+}
+\end{verbatim}
+\normalsize
+
+\section{Hardware Compression on EXB-8900}
+\index[general]{Hardware Compression on EXB-8900}
+\index[general]{EXB-8900!Hardware Compression}
+
+To active, check, or disable the hardware compression feature
+on an EXB-8900, use the exabyte MammothTool. You can get it here:
+\elink{http://www.exabyte.com/support/online/downloads/index.cfm}
+{http://www.exabyte.com/support/online/downloads/index.cfm}.
+There is a Solaris version of this tool. With option -C 0 or 1 you
+can disable or activate compression. Start this tool without any
+options for a small reference.
+
+\label{fill}
+\subsection{Using btape to Simulate Filling a Tape}
+\index[general]{Using btape to Simulate Filling a Tape}
+\index[general]{Tape!Using btape to Simulate Filling}
+
+Because there are often problems with certain tape drives or systems when end
+of tape conditions occur, {\bf btape} has a special command {\bf fill} that
+causes it to write random data to a tape until the tape fills. It then writes
+at least one more Bacula block to a second tape. Finally, it reads back both
+tapes to ensure that the data has been written in a way that Bacula can
+recover it. Note, there is also a single tape option as noted below, which you
+should use rather than the two tape test. See below for more details.
+
+This can be an extremely time consuming process (here it is about 6 hours) to
+fill a full tape. Note, that btape writes random data to the tape when it is
+filling it. This has two consequences: 1. it takes a bit longer to generate
+the data, especially on slow CPUs. 2. the total amount of data is
+approximately the real physical capacity of your tape, regardless of whether
+or not the tape drive compression is on or off. This is because random data
+does not compress very much.
+
+To begin this test, you enter the {\bf fill} command and follow the
+instructions. There are two options: the simple single tape option and the
+multiple tape option. Please use only the simple single tape option because
+the multiple tape option still doesn't work totally correctly. If the single
+tape option does not succeed, you should correct the problem before using
+Bacula.
+\label{RecoveringFiles}
+
+\section{Recovering Files Written With Fixed Block Sizes}
+\index[general]{Recovering Files Written With Fixed Block Sizes}
+
+If you have been previously running your tape drive in fixed block mode
+(default 512) and Bacula with variable blocks (default), then in version
+1.32f-x and 1.34 and above, Bacula will fail to recover files because it does
+block spacing, and because the block sizes don't agree between your tape drive
+and Bacula it will not work.
+
+The long term solution is to run your drive in variable block mode as
+described above. However, if you have written tapes using fixed block sizes,
+this can be a bit of a pain. The solution to the problem is: while you are
+doing a restore command using a tape written in fixed block size, ensure that
+your drive is set to the fixed block size used while the tape was written.
+Then when doing the {\bf restore} command in the Console program, do not
+answer the prompt {\bf yes/mod/no}. Instead, edit the bootstrap file (the
+location is listed in the prompt) using any ASCII editor. Remove all {\bf
+VolBlock} lines in the file. When the file is re-written, answer the question,
+and Bacula will run without using block positioning, and it should recover
+your files.
+
+\label{BlockModes}
+\section{Tape Blocking Modes}
+\index[general]{Modes!Tape Blocking}
+\index[general]{Tape Blocking Modes}
+
+SCSI tapes may either be written in {\bf variable} or {\bf fixed} block sizes.
+Newer drives support both modes, but some drives such as the QIC devices
+always use fixed block sizes. Bacula attempts to fill and write complete
+blocks (default 65K), so that in normal mode (variable block size), Bacula
+will always write blocks of the same size except the last block of a Job. If
+Bacula is configured to write fixed block sizes, it will pad the last block of
+the Job to the correct size. Bacula expects variable tape block size drives to
+behave as follows: Each write to the drive results in a single record being
+written to the tape. Each read returns a single record. If you request less
+bytes than are in the record, only those number of bytes will be returned, but
+the entire logical record will have been read (the next read will retrieve the
+next record). Thus data from a single write is always returned in a single
+read, and sequentially written records are returned by sequential reads.
+
+Bacula expects fixed block size tape drives to behave as follows: If a write
+length is greater than the physical block size of the drive, the write will be
+written as two blocks each of the fixed physical size. This single write may
+become multiple physical records on the tape. (This is not a good situation).
+According to the documentation, one may never write an amount of data that is
+not the exact multiple of the blocksize (it is not specified if an error
+occurs or if the the last record is padded). When reading, it is my
+understanding that each read request reads one physical record from the tape.
+Due to the complications of fixed block size tape drives, you should avoid
+them if possible with Bacula, or you must be ABSOLUTELY certain that you use
+fixed block sizes within Bacula that correspond to the physical block size of
+the tape drive. This will ensure that Bacula has a one to one correspondence
+between what it writes and the physical record on the tape.
+
+Please note that Bacula will not function correctly if it writes a block and
+that block is split into two or more physical records on the tape. Bacula
+assumes that each write causes a single record to be written, and that it can
+sequentially recover each of the blocks it has written by using the same
+number of sequential reads as it had written.
+
+\section{Details of Tape Modes}
+\index[general]{Modes!Details}
+\index[general]{Details of Tape Modes}
+Rudolf Cejka has provided the following information concerning
+certain tape modes and MTEOM.
+
+\begin{description}
+\item[Tape level]
+ It is always possible to position filemarks or blocks, whereas
+ positioning to the end-of-data is only optional feature, however it is
+ implemented very often. SCSI specification also talks about optional
+ sequential filemarks, setmarks and sequential setmarks, but these are not
+ implemented so often. Modern tape drives keep track of file positions in
+ built-in chip (AIT, LTO) or at the beginning of the tape (SDLT), so there
+ is not any speed difference, if end-of-data or filemarks is used (I have
+ heard, that LTO-1 from all 3 manufacturers do not use its chip for file
+ locations, but a tape as in SDLT case, and I'm not sure about LTO-2 and
+ LTO-3 case). However there is a big difference, that end-of-data ignores
+ file position, whereas filemarks returns the real number of skipped
+ files, so OS can track current file number just in filemarks case.
+
+\item[OS level]
+ Solaris does use just SCSI SPACE Filemarks, it does not support SCSI
+ SPACE End-of-data. When MTEOM is called, Solaris does use SCSI SPACE
+ Filemarks with count = 1048576 for fast mode, and combination of SCSI
+ SPACE Filemarks with count = 1 with SCSI SPACE Blocks with count = 1 for
+ slow mode, so EOD mark on the tape on some older tape drives is not
+ skipped. File number is always tracked for MTEOM.
+
+ Linux does support both SCSI SPACE Filemarks and End-of-data: When MTEOM
+ is called in MT\_ST\_FAST\_MTEOM mode, SCSI SPACE End-of-data is used.
+ In the other case, SCSI SPACE Filemarks with count =
+ 8388607 is used.
+ There is no real slow mode like in Solaris - I just expect, that for
+ older tape drives Filemarks may be slower than End-of-data, but not so
+ much as in Solaris slow mode. File number is tracked for MTEOM just
+ without MT\_ST\_FAST\_MTEOM - when MT\_ST\_FAST\_MTEOM is used, it is not.
+
+ FreeBSD does support both SCSI SPACE Filemarks and End-of-data, but when
+ MTEOD (MTEOM) is called, SCSI SPACE End-of-data is always used. FreeBSD
+ never use SCSI SPACE Filemarks for MTEOD. File number is never tracked
+ for MTEOD.
+
+\item[Bacula level]
+ When {\bf Hardware End of Medium = Yes} is used, MTEOM is called, but it
+ does not mean, that hardware End-of-data must be used. When Hardware End
+ of Medium = No, if Fast Forward Space File = Yes, MTFSF with count =
+ 32767 is used, else Block Read with count = 1 with Forward Space File
+ with count = 1 is used, which is really very slow.
+
+\item [Hardware End of Medium = Yes|No]
+ The name of this option is misleading and is the source of confusion,
+ because it is not the hardware EOM, what is really switched here.
+
+ If I use Yes, OS must not use SCSI SPACE End-of-data, because Bacula
+ expects, that there is tracked file number, which is not supported by
+ SCSI specification. Instead, the OS have to use SCSI SPACE Filemarks.
+
+ If I use No, an action depends on Fast Forward Space File.
+
+ When I set {\bf Hardware End of Medium = no}
+ and {\bf Fast Forward Space File = no}
+ file positioning was very slow
+ on my LTO-3 (about ten to 100 minutes), but
+
+ with {\bf Hardware End of Medium = no} and
+{\bf Fast Forward Space File = yes}, the time is ten to
+100 times faster (about one to two minutes).
+
+\end{description}
+
+\section{Tape Performance Problems}
+\index[general]{Tape Performance}
+If you have LTO-3 or LTO-4 drives, you should be able to
+fairly good transfer rates; from 60 to 150 MB/second, providing
+you have fast disks; GigaBit Ethernet connections (probably 2); you are
+running multiple simultaneous jobs; you have Bacula data spooling
+enabled; your tape block size is set to 131072 or 262144; and
+you have set {\bf Maximum File Size = 5G}.
+
+If you are not getting good performance, consider some of the following
+suggestions from the Allen Balck on the Bacula Users email list:
+
+\begin{enumerate}
+\item You are using an old HBA (i.e. SCSI-1, which only does 5 MB/s)
+
+\item There are other, slower, devices on the SCSI bus. The HBA will
+ negotiate the speed of every device down to the speed of the
+ slowest.
+
+\item There is a termination problem on the bus (either too much or
+ too little termination). The HBA will drop the bus speed in an
+ attempt to increase the reliability of the bus.
+
+\item Loose or damaged cabling - this will probably make the HBA "think"
+ you have a termination problem and it will react as in 3 above.
+\end{enumerate}
+
+See if /var/adm/messages (or /var/log/messages) tells you what the sync
+rate of the SCSI devices/bus are. Also, the next time you reboot, the
+BIOS may be able to tell you what the rate of each device is.
+
+
+\section{Autochanger Errors}
+\index[general]{Errors!Autochanger}
+\index[general]{Autochanger Errors}
+
+If you are getting errors such as:
+
+\footnotesize
+\begin{verbatim}
+3992 Bad autochanger "load slot 1, drive 1": ERR=Child exited with code 1.
+\end{verbatim}
+\normalsize
+
+and you are running your Storage daemon as non-root, then most likely
+you are having permissions problems with the control channel. Running
+as root, set permissions on /dev/sgX so that the userid and group of
+your Storage daemon can access the device. You need to ensure that you
+all access to the proper control device, and if you don't have any
+SCSI disk drives (including SATA drives), you might want to change
+the permissions on /dev/sg*.
+
+\section{Syslog Errors}
+\index[general]{Errors!Syslog}
+\index[general]{Syslog Errors}
+
+If you are getting errors such as:
+
+\footnotesize
+\begin{verbatim}
+: kernel: st0: MTSETDRVBUFFER only allowed for root
+\end{verbatim}
+\normalsize
+
+you are most likely running your Storage daemon as non-root, and
+Bacula is attempting to set the correct OS buffering to correspond
+to your Device resource. Most OSes allow only root to issue this
+ioctl command. In general, the message can be ignored providing
+you are sure that your OS parameters are properly configured as
+described earlier in this manual. If you are running your Storage daemon
+as root, you should not be getting these system log messages, and if
+you are, something is probably wrong.
--- /dev/null
+%%
+%%
+
+\chapter{Tips and Suggestions}
+\label{TipsChapter}
+\index[general]{Tips and Suggestions }
+\index[general]{Suggestions!Tips and }
+\label{examples}
+\index[general]{Examples }
+
+There are a number of example scripts for various things that can be found in
+the {\bf example} subdirectory and its subdirectories of the Bacula source
+distribution.
+
+For additional tips, please see the \elink{Bacula
+wiki}{http://wiki.bacula.org}.
+
+\section{Upgrading Bacula Versions}
+\label{upgrading}
+\index[general]{Upgrading Bacula Versions }
+\index[general]{Versions!Upgrading Bacula }
+\index[general]{Upgrading}
+
+The first thing to do before upgrading from one version to another is to
+ensure that you don't overwrite or delete your production (current) version
+of Bacula until you have tested that the new version works.
+
+If you have installed Bacula into a single directory, this is simple: simply
+make a copy of your Bacula directory.
+
+If you have done a more typical Unix installation where the binaries are
+placed in one directory and the configuration files are placed in another,
+then the simplest way is to configure your new Bacula to go into a single
+file. Alternatively, make copies of all your binaries and especially your
+conf files.
+
+Whatever your situation may be (one of the two just described), you should
+probably start with the {\bf defaultconf} script that can be found in the {\bf
+examples} subdirectory. Copy this script to the main Bacula directory, modify
+it as necessary (there should not need to be many modifications), configure
+Bacula, build it, install it, then stop your production Bacula, copy all the
+{\bf *.conf} files from your production Bacula directory to the test Bacula
+directory, start the test version, and run a few test backups. If all seems
+good, then you can proceed to install the new Bacula in place of or possibly
+over the old Bacula.
+
+When installing a new Bacula you need not worry about losing the changes you
+made to your configuration files as the installation process will not
+overwrite them providing that you do not do a {\bf make uninstall}.
+
+If the new version of Bacula requires an upgrade to the database,
+you can upgrade it with the script {\bf update\_bacula\_tables}, which
+will be installed in your scripts directory (default {\bf /etc/bacula}),
+or alternatively, you can find it in the
+{\bf \lt{}bacula-source\gt{}/src/cats} directory.
+
+\section{Getting Notified of Job Completion}
+\label{notification}
+\index[general]{Getting Notified of Job Completion }
+\index[general]{Completion!Getting Notified of Job }
+
+One of the first things you should do is to ensure that you are being properly
+notified of the status of each Job run by Bacula, or at a minimum of each Job
+that terminates with an error.
+
+Until you are completely comfortable with {\bf Bacula}, we recommend that you
+send an email to yourself for each Job that is run. This is most easily
+accomplished by adding an email notification address in the {\bf Messages}
+resource of your Director's configuration file. An email is automatically
+configured in the default configuration files, but you must ensure that the
+default {\bf root} address is replaced by your email address.
+
+For additional examples of how to configure a Bacula, please take a look at the
+{\bf .conf} files found in the {\bf examples} sub-directory. We recommend the
+following configuration (where you change the paths and email address to
+correspond to your setup). Note, the {\bf mailcommand} and {\bf
+operatorcommand} should be on a single line. They were split here for
+presentation:
+
+\footnotesize
+\begin{verbatim}
+Messages {
+ Name = Standard
+ mailcommand = "/home/bacula/bin/bsmtp -h localhost
+ -f \"\(Bacula\) %r\"
+ -s \"Bacula: %t %e of %c %l\" %r"
+ operatorcommand = "/home/bacula/bin/bsmtp -h localhost
+ -f \"\(Bacula\) %r\"
+ -s \"Bacula: Intervention needed for %j\" %r"
+ Mail = your-email-address = all, !skipped, !terminate
+ append = "/home/bacula/bin/log" = all, !skipped, !terminate
+ operator = your-email-address = mount
+ console = all, !skipped, !saved
+}
+\end{verbatim}
+\normalsize
+
+You will need to ensure that the {\bf /home/bacula/bin} path on the {\bf
+mailcommand} and the {\bf operatorcommand} lines point to your {\bf Bacula}
+binary directory where the {\bf bsmtp} program will be installed. You will
+also want to ensure that the {\bf your-email-address} is replaced by your
+email address, and finally, you will also need to ensure that the {\bf
+/home/bacula/bin/log} points to the file where you want to log all messages.
+
+With the above Messages resource, you will be notified by email of every Job
+that ran, all the output will be appended to the {\bf log} file you specify,
+all output will be directed to the console program, and all mount messages
+will be emailed to you. Note, some messages will be sent to multiple
+destinations.
+
+The form of the mailcommand is a bit complicated, but it allows you to
+distinguish whether the Job terminated in error or terminated normally. Please
+see the
+\ilink{Mail Command}{mailcommand} section of the Messages
+Resource chapter of this manual for the details of the substitution characters
+used above.
+
+Once you are totally comfortable with Bacula as I am, or if you have a large
+number of nightly Jobs as I do (eight), you will probably want to change the
+{\bf Mail} command to {\bf Mail On Error} which will generate an email message
+only if the Job terminates in error. If the Job terminates normally, no email
+message will be sent, but the output will still be appended to the log file as
+well as sent to the Console program.
+
+\section{Getting Email Notification to Work}
+\label{email}
+\index[general]{Work!Getting Email Notification to }
+\index[general]{Getting Email Notification to Work }
+
+The section above describes how to get email notification of job status.
+Occasionally, however, users have problems receiving any email at all. In that
+case, the things to check are the following:
+
+\begin{itemize}
+\item Ensure that you have a valid email address specified on your {\bf Mail}
+ record in the Director's Messages resource. The email address should be fully
+ qualified. Simply using {\bf root} generally will not work, rather you should
+use {\bf root@localhost} or better yet your full domain.
+\item Ensure that you do not have a {\bf Mail} record in the Storage daemon's
+ or File daemon's configuration files. The only record you should have is {\bf
+ director}:
+
+\footnotesize
+\begin{verbatim}
+ director = director-name = all
+
+\end{verbatim}
+\normalsize
+
+\item If all else fails, try replacing the {\bf mailcommand} with
+
+ \footnotesize
+\begin{verbatim}
+mailcommand = "mail -s test your@domain.com"
+\end{verbatim}
+\normalsize
+
+\item Once the above is working, assuming you want to use {\bf bsmtp}, submit
+ the desired bsmtp command by hand and ensure that the email is delivered,
+ then put that command into {\bf Bacula}. Small differences in things such as
+the parenthesis around the word Bacula can make a big difference to some
+bsmtp programs. For example, you might start simply by using:
+
+\footnotesize
+\begin{verbatim}
+mailcommand = "/home/bacula/bin/bsmtp -f \"root@localhost\" %r"
+\end{verbatim}
+\normalsize
+
+\end{itemize}
+
+\section{Getting Notified that Bacula is Running}
+\label{JobNotification}
+\index[general]{Running!Getting Notified that Bacula is }
+\index[general]{Getting Notified that Bacula is Running }
+
+If like me, you have setup Bacula so that email is sent only when a Job has
+errors, as described in the previous section of this chapter, inevitably, one
+day, something will go wrong and {\bf Bacula} can stall. This could be because
+Bacula crashes, which is vary rare, or more likely the network has caused {\bf
+Bacula} to {\bf hang} for some unknown reason.
+
+To avoid this, you can use the {\bf RunAfterJob} command in the Job resource
+to schedule a Job nightly, or weekly that simply emails you a message saying
+that Bacula is still running. For example, I have setup the following Job in
+my Director's configuration file:
+
+\footnotesize
+\begin{verbatim}
+Schedule {
+ Name = "Watchdog"
+ Run = Level=Full sun-sat at 6:05
+}
+Job {
+ Name = "Watchdog"
+ Type = Admin
+ Client=Watchdog
+ FileSet="Verify Set"
+ Messages = Standard
+ Storage = DLTDrive
+ Pool = Default
+ Schedule = "Watchdog"
+ RunAfterJob = "/home/kern/bacula/bin/watchdog %c %d"
+}
+Client {
+ Name = Watchdog
+ Address = rufus
+ FDPort = 9102
+ Catalog = Verify
+ Password = ""
+ File Retention = 1day
+ Job Retention = 1 month
+ AutoPrune = yes
+}
+\end{verbatim}
+\normalsize
+
+Where I established a schedule to run the Job nightly. The Job itself is type
+{\bf Admin} which means that it doesn't actually do anything, and I've defined
+a FileSet, Pool, Storage, and Client, all of which are not really used (and
+probably don't need to be specified). The key aspect of this Job is the
+command:
+
+\footnotesize
+\begin{verbatim}
+ RunAfterJob = "/home/kern/bacula/bin/watchdog %c %d"
+\end{verbatim}
+\normalsize
+
+which runs my "watchdog" script. As an example, I have added the Job codes
+\%c and \%d which will cause the Client name and the Director's name to be
+passed to the script. For example, if the Client's name is {\bf Watchdog} and
+the Director's name is {\bf main-dir} then referencing \$1 in the script would
+get {\bf Watchdog} and referencing \$2 would get {\bf main-dir}. In this case,
+having the script know the Client and Director's name is not really useful,
+but in other situations it may be.
+
+You can put anything in the watchdog script. In my case, I like to monitor the
+size of my catalog to be sure that {\bf Bacula} is really pruning it. The
+following is my watchdog script:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+cd /home/kern/mysql/var/bacula
+du . * |
+/home/kern/bacula/bin/bsmtp \
+ -f "\(Bacula\) abuse@whitehouse.com" -h mail.yyyy.com \
+ -s "Bacula running" abuse@whitehouse.com
+\end{verbatim}
+\normalsize
+
+If you just wish to send yourself a message, you can do it with:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+cd /home/kern/mysql/var/bacula
+/home/kern/bacula/bin/bsmtp \
+ -f "\(Bacula\) abuse@whitehouse.com" -h mail.yyyy.com \
+ -s "Bacula running" abuse@whitehouse.com <<END-OF-DATA
+Bacula is still running!!!
+END-OF-DATA
+\end{verbatim}
+\normalsize
+
+\section{Maintaining a Valid Bootstrap File}
+\label{bootstrap}
+\index[general]{Maintaining a Valid Bootstrap File }
+\index[general]{File!Maintaining a Valid Bootstrap }
+
+By using a
+\ilink{ WriteBootstrap}{writebootstrap} record in each of your
+Director's Job resources, you can constantly maintain a
+\ilink{bootstrap}{BootstrapChapter} file that will enable you to
+recover the state of your system as of the last backup without having the
+Bacula catalog. This permits you to more easily recover from a disaster that
+destroys your Bacula catalog.
+
+When a Job resource has a {\bf WriteBootstrap} record, Bacula will maintain
+the designated file (normally on another system but mounted by NFS) with up to
+date information necessary to restore your system. For example, in my
+Director's configuration file, I have the following record:
+
+\footnotesize
+\begin{verbatim}
+ Write Bootstrap = "/mnt/deuter/files/backup/client-name.bsr"
+\end{verbatim}
+\normalsize
+
+where I replace {\bf client-name} by the actual name of the client that is
+being backed up. Thus, Bacula automatically maintains one file for each of my
+clients. The necessary bootstrap information is appended to this file during
+each {\bf Incremental} backup, and the file is totally rewritten during each
+{\bf Full} backup.
+
+Note, one disadvantage of writing to an NFS mounted volume as I do is
+that if the other machine goes down, the OS will wait forever on the fopen()
+call that Bacula makes. As a consequence, Bacula will completely stall until
+the machine exporting the NFS mounts comes back up. A possible solution to this
+problem was provided by Andrew Hilborne, and consists of using the {\bf soft}
+option instead of the {\bf hard} option when mounting the NFS volume, which is
+typically done in {\bf /etc/fstab}/. The NFS documentation explains these
+options in detail. However, I found that with the {\bf soft} option
+NFS disconnected frequently causing even more problems.
+
+If you are starting off in the middle of a cycle (i.e. with Incremental
+backups) rather than at the beginning (with a Full backup), the {\bf
+bootstrap} file will not be immediately valid as it must always have the
+information from a Full backup as the first record. If you wish to synchronize
+your bootstrap file immediately, you can do so by running a {\bf restore}
+command for the client and selecting a full restore, but when the restore
+command asks for confirmation to run the restore Job, you simply reply no,
+then copy the bootstrap file that was written to the location specified on the
+{\bf Write Bootstrap} record. The restore bootstrap file can be found in {\bf
+restore.bsr} in the working directory that you defined. In the example given
+below for the client {\bf rufus}, my input is shown in bold. Note, the JobId
+output has been partially truncated to fit on the page here:
+
+\footnotesize
+\begin{verbatim}
+(in the Console program)
+*restore
+First you select one or more JobIds that contain files
+to be restored. You will then be presented several methods
+of specifying the JobIds. Then you will be allowed to
+select which files from those JobIds are to be restored.
+To select the JobIds, you have the following choices:
+ 1: List last 20 Jobs run
+ 2: List Jobs where a given File is saved
+ 3: Enter list of JobIds to select
+ 4: Enter SQL list command
+ 5: Select the most recent backup for a client
+ 6: Cancel
+Select item: (1-6): 5
+The defined Client resources are:
+ 1: Minimatou
+ 2: Rufus
+ 3: Timmy
+Select Client (File daemon) resource (1-3): 2
+The defined FileSet resources are:
+ 1: Other Files
+Item 1 selected automatically.
++-------+------+-------+---------+---------+------+-------+------------+
+| JobId | Levl | Files | StrtTim | VolName | File | SesId | VolSesTime |
++-------+------+-------+---------+---------+------+-------+------------+
+| 2 | F | 84 | ... | test1 | 0 | 1 | 1035645259 |
++-------+------+-------+---------+---------+------+-------+------------+
+You have selected the following JobId: 2
+Building directory tree for JobId 2 ...
+The defined Storage resources are:
+ 1: File
+Item 1 selected automatically.
+You are now entering file selection mode where you add and
+remove files to be restored. All files are initially added.
+Enter "done" to leave this mode.
+cwd is: /
+$ done
+84 files selected to restore.
+Run Restore job
+JobName: kernsrestore
+Bootstrap: /home/kern/bacula/working/restore.bsr
+Where: /tmp/bacula-restores
+FileSet: Other Files
+Client: Rufus
+Storage: File
+JobId: *None*
+OK to run? (yes/mod/no): no
+quit
+(in a shell window)
+cp ../working/restore.bsr /mnt/deuter/files/backup/rufus.bsr
+\end{verbatim}
+\normalsize
+
+\section{Rejected Volumes After a Crash}
+\label{RejectedVolumes}
+\index[general]{Crash!Rejected Volumes After a }
+\index[general]{Rejected Volumes After a Crash }
+
+Bacula keeps a count of the number of files on each Volume in its Catalog
+database so that before appending to a tape, it can verify that the number of
+files are correct, and thus prevent overwriting valid data. If the Director or
+the Storage daemon crashes before the job has completed, the tape will contain
+one more file than is noted in the Catalog, and the next time you attempt to
+use the same Volume, Bacula will reject it due to a mismatch between the
+physical tape (Volume) and the catalog.
+
+The easiest solution to this problem is to label a new tape and start fresh.
+If you wish to continue appending to the current tape, you can do so by using
+the {\bf update} command in the console program to change the {\bf Volume
+Files} entry in the catalog. A typical sequence of events would go like the
+following:
+
+\footnotesize
+\begin{verbatim}
+- Bacula crashes
+- You restart Bacula
+\end{verbatim}
+\normalsize
+
+Bacula then prints:
+
+\footnotesize
+\begin{verbatim}
+17-Jan-2003 16:45 rufus-dir: Start Backup JobId 13,
+ Job=kernsave.2003-01-17_16.45.46
+17-Jan-2003 16:45 rufus-sd: Volume test01 previously written,
+ moving to end of data.
+17-Jan-2003 16:46 rufus-sd: kernsave.2003-01-17_16.45.46 Error:
+ I cannot write on this volume because:
+ The number of files mismatch! Volume=11 Catalog=10
+17-Jan-2003 16:46 rufus-sd: Job kernsave.2003-01-17_16.45.46 waiting.
+ Cannot find any appendable volumes.
+Please use the "label" command to create a new Volume for:
+ Storage: SDT-10000
+ Media type: DDS-4
+ Pool: Default
+\end{verbatim}
+\normalsize
+
+(note, lines wrapped for presentation)
+The key here is the line that reads:
+
+\footnotesize
+\begin{verbatim}
+ The number of files mismatch! Volume=11 Catalog=10
+\end{verbatim}
+\normalsize
+
+It says that Bacula found eleven files on the volume, but that the catalog
+says there should be ten. When you see this, you can be reasonably sure that
+the SD was interrupted while writing before it had a chance to update the
+catalog. As a consequence, you can just modify the catalog count to eleven,
+and even if the catalog contains references to files saved in file 11,
+everything will be OK and nothing will be lost. Note that if the SD had
+written several file marks to the volume, the difference between the Volume
+count and the Catalog count could be larger than one, but this is unusual.
+
+If on the other hand the catalog is marked as having more files than Bacula
+found on the tape, you need to consider the possible negative consequences of
+modifying the catalog. Please see below for a more complete discussion of
+this.
+
+Continuing with the example of {\bf Volume = 11 Catalog = 10}, to enable to
+Bacula to append to the tape, you do the following:
+
+\footnotesize
+\begin{verbatim}
+update
+Update choice:
+ 1: Volume parameters
+ 2: Pool from resource
+ 3: Slots from autochanger
+Choose catalog item to update (1-3): 1
+Defined Pools:
+ 1: Default
+ 2: File
+Select the Pool (1-2):
++-------+---------+--------+---------+-----------+------+----------+------+-----+
+| MedId | VolName | MedTyp | VolStat | VolBytes | Last | VolReten | Recy | Slt |
++-------+---------+--------+---------+-----------+------+----------+------+-----+
+| 1 | test01 | DDS-4 | Error | 352427156 | ... | 31536000 | 1 | 0 |
++-------+---------+--------+---------+-----------+------+----------+------+-----+
+Enter MediaId or Volume name: 1
+\end{verbatim}
+\normalsize
+
+(note table output truncated for presentation) First, you chose to update the
+Volume parameters by entering a {\bf 1}. In the volume listing that follows,
+notice how the VolStatus is {\bf Error}. We will correct that after changing
+the Volume Files. Continuing, you respond 1,
+
+\footnotesize
+\begin{verbatim}
+Updating Volume "test01"
+Parameters to modify:
+ 1: Volume Status
+ 2: Volume Retention Period
+ 3: Volume Use Duration
+ 4: Maximum Volume Jobs
+ 5: Maximum Volume Files
+ 6: Maximum Volume Bytes
+ 7: Recycle Flag
+ 8: Slot
+ 9: Volume Files
+ 10: Pool
+ 11: Done
+Select parameter to modify (1-11): 9
+Warning changing Volume Files can result
+in loss of data on your Volume
+Current Volume Files is: 10
+Enter new number of Files for Volume: 11
+New Volume Files is: 11
+Updating Volume "test01"
+Parameters to modify:
+ 1: Volume Status
+ 2: Volume Retention Period
+ 3: Volume Use Duration
+ 4: Maximum Volume Jobs
+ 5: Maximum Volume Files
+ 6: Maximum Volume Bytes
+ 7: Recycle Flag
+ 8: Slot
+ 9: Volume Files
+ 10: Pool
+ 11: Done
+Select parameter to modify (1-10): 1
+\end{verbatim}
+\normalsize
+
+Here, you have selected {\bf 9} in order to update the Volume Files, then you
+changed it from {\bf 10} to {\bf 11}, and you now answer {\bf 1} to change the
+Volume Status.
+
+\footnotesize
+\begin{verbatim}
+Current Volume status is: Error
+Possible Values are:
+ 1: Append
+ 2: Archive
+ 3: Disabled
+ 4: Full
+ 5: Used
+ 6: Read-Only
+Choose new Volume Status (1-6): 1
+New Volume status is: Append
+Updating Volume "test01"
+Parameters to modify:
+ 1: Volume Status
+ 2: Volume Retention Period
+ 3: Volume Use Duration
+ 4: Maximum Volume Jobs
+ 5: Maximum Volume Files
+ 6: Maximum Volume Bytes
+ 7: Recycle Flag
+ 8: Slot
+ 9: Volume Files
+ 10: Pool
+ 11: Done
+Select parameter to modify (1-11): 11
+Selection done.
+\end{verbatim}
+\normalsize
+
+At this point, you have changed the Volume Files from {\bf 10} to {\bf 11} to
+account for the last file that was written but not updated in the database,
+and you changed the Volume Status back to {\bf Append}.
+
+This was a lot of words to describe something quite simple.
+
+The {\bf Volume Files} option exists only in version 1.29 and later, and you
+should be careful using it. Generally, if you set the value to that which
+Bacula said is on the tape, you will be OK, especially if the value is one
+more than what is in the catalog.
+
+Now lets consider the case:
+
+\footnotesize
+\begin{verbatim}
+ The number of files mismatch! Volume=10 Catalog=12
+\end{verbatim}
+\normalsize
+
+Here the Bacula found fewer files on the volume than what is marked in the
+catalog. Now, in this case, you should hesitate a lot before modifying the count
+in the catalog, because if you force the catalog from 12 to 10, Bacula will
+start writing after the file 10 on the tape, possibly overwriting valid data,
+and if you ever try to restore any of the files that the catalog has marked as
+saved on Files 11 and 12, all chaos will break out. In this case, you will
+probably be better off using a new tape. In fact, you might want to see what
+files the catalog claims are actually stored on that Volume, and back them up
+to another tape and recycle this tape.
+
+\section{Security Considerations}
+\label{security}
+\index[general]{Considerations!Security }
+\index[general]{Security Considerations }
+
+Only the File daemon needs to run with root permission (so that it can access
+all files). As a consequence, you may run your Director, Storage daemon, and
+MySQL or PostgreSQL database server as non-root processes. Version 1.30 has
+the {\bf -u} and the {\bf -g} options that allow you to specify a userid and
+groupid on the command line to be used after Bacula starts.
+
+As of version 1.33, thanks to Dan Langille, it is easier to configure the
+Bacula Director and Storage daemon to run as non-root.
+
+You should protect the Bacula port addresses (normally 9101, 9102, and 9103)
+from outside access by a firewall or other means of protection to prevent
+unauthorized use of your daemons.
+
+You should ensure that the configuration files are not world readable since
+they contain passwords that allow access to the daemons. Anyone who can access
+the Director using a console program can restore any file from a backup
+Volume.
+
+You should protect your Catalog database. If you are using SQLite, make sure
+that the working directory is readable only by root (or your Bacula userid),
+and ensure that {\bf bacula.db} has permissions {\bf -rw-r\verb:--:r\verb:--:} (i.e. 640) or
+more strict. If you are using MySQL or PostgreSQL, please note that the Bacula
+setup procedure leaves the database open to anyone. At a minimum, you should
+assign the user {\bf bacula} a userid and add it to your Director's
+configuration file in the appropriate Catalog resource.
+
+If you use the make\_catalog\_backup script provided by Bacula, remember that
+you should take care when supplying passwords on the command line. Read the
+\ilink{Backing Up Your Bacula
+Database - Security Considerations }{BackingUpBaculaSecurityConsiderations}
+section for more information.
+
+\section{Creating Holiday Schedules}
+\label{holiday}
+\index[general]{Schedules!Creating Holiday }
+\index[general]{Creating Holiday Schedules }
+
+If you normally change tapes every day or at least every Friday, but Thursday
+is a holiday, you can use a trick proposed by Lutz Kittler to ensure that no
+job runs on Thursday so that you can insert Friday's tape and be sure it will
+be used on Friday. To do so, define a {\bf RunJobBefore} script that normally
+returns zero, so that the Bacula job will normally continue. You can then
+modify the script to return non-zero on any day when you do not want Bacula to
+run the job.
+
+\section{Automatic Labeling Using Your Autochanger}
+\label{autolabel}
+\index[general]{Automatic Labeling Using Your Autochanger }
+\index[general]{Autochanger!Automatic Labeling Using Your }
+
+If you have an autochanger but it does not support barcodes, using a "trick"
+you can make Bacula automatically label all the volumes in your autochanger's
+magazine.
+
+First create a file containing one line for each slot in your autochanger that
+has a tape to be labeled. The line will contain the slot number a colon (:)
+then the Volume name you want to use. For example, create a file named {\bf
+volume-list}, which contains:
+
+\footnotesize
+\begin{verbatim}
+1:Volume001
+2:TestVolume02
+5:LastVolume
+\end{verbatim}
+\normalsize
+
+The records do not need to be in any order and you don't need to mention all
+the slots. Normally, you will have a consistent set of Volume names and a
+sequential set of numbers for each slot you want labeled. In the example
+above, I've left out slots 3 and 4 just as an example. Now, modify your {\bf
+mtx-changer} script and comment out all the lines in the {\bf list)} case by
+putting a \# in column 1. Then add the following two lines:
+
+\footnotesize
+\begin{verbatim}
+ cat <absolute-path>/volume-list
+ exit 0
+\end{verbatim}
+\normalsize
+
+so that the whole case looks like:
+
+\footnotesize
+\begin{verbatim}
+ list)
+#
+# commented out lines
+ cat <absolute-path>/volume-list
+ exit 0
+ ;;
+\end{verbatim}
+\normalsize
+
+where you replace \lt{}absolute-path\gt{} with the full path to the
+volume-list file. Then using the console, you enter the following command:
+
+\footnotesize
+\begin{verbatim}
+ label barcodes
+\end{verbatim}
+\normalsize
+
+and Bacula will proceed to mount the autochanger Volumes in the list and label
+them with the Volume names you have supplied. Bacula will think that the list
+was provided by the autochanger barcodes, but in reality, it was you who
+supplied the \lt{}barcodes\gt{}.
+
+If it seems to work, when it finishes, enter:
+
+\footnotesize
+\begin{verbatim}
+ list volumes
+\end{verbatim}
+\normalsize
+
+and you should see all the volumes nicely created.
+
+\section{Backing Up Portables Using DHCP}
+\label{DNS}
+\index[general]{DHCP!Backing Up Portables Using }
+\index[general]{Backing Up Portables Using DHCP }
+
+You may want to backup laptops or portables that are not always connected to
+the network. If you are using DHCP to assign an IP address to those machines
+when they connect, you will need to use the Dynamic Update capability of DNS
+to assign a name to those machines that can be used in the Address field of
+the Client resource in the Director's conf file.
+
+\section{Going on Vacation}
+\label{Vacation}
+\index[general]{Vacation!Going on }
+\index[general]{Going on Vacation }
+
+At some point, you may want to be absent for a week or two and you want to
+make sure Bacula has enough tape left so that the backups will complete. You
+start by doing a {\bf list volumes} in the Console program:
+
+\footnotesize
+\begin{verbatim}
+list volumes
+
+Using default Catalog name=BackupDB DB=bacula
+Pool: Default
++---------+---------------+-----------+-----------+----------------+-
+| MediaId | VolumeName | MediaType | VolStatus | VolBytes |
++---------+---------------+-----------+-----------+----------------+-
+| 23 | DLT-30Nov02 | DLT8000 | Full | 54,739,278,128 |
+| 24 | DLT-21Dec02 | DLT8000 | Full | 56,331,524,629 |
+| 25 | DLT-11Jan03 | DLT8000 | Full | 67,863,514,895 |
+| 26 | DLT-02Feb03 | DLT8000 | Full | 63,439,314,216 |
+| 27 | DLT-03Mar03 | DLT8000 | Full | 66,022,754,598 |
+| 28 | DLT-04Apr03 | DLT8000 | Full | 60,792,559,924 |
+| 29 | DLT-28Apr03 | DLT8000 | Full | 62,072,494,063 |
+| 30 | DLT-17May03 | DLT8000 | Full | 65,901,767,839 |
+| 31 | DLT-07Jun03 | DLT8000 | Used | 56,558,490,015 |
+| 32 | DLT-28Jun03 | DLT8000 | Full | 64,274,871,265 |
+| 33 | DLT-19Jul03 | DLT8000 | Full | 64,648,749,480 |
+| 34 | DLT-08Aug03 | DLT8000 | Full | 64,293,941,255 |
+| 35 | DLT-24Aug03 | DLT8000 | Append | 9,999,216,782 |
++---------+---------------+-----------+-----------+----------------+
+\end{verbatim}
+\normalsize
+
+Note, I have truncated the output for presentation purposes. What is
+significant, is that I can see that my current tape has almost 10 Gbytes of
+data, and that the average amount of data I get on my tapes is about 60
+Gbytes. So if I go on vacation now, I don't need to worry about tape capacity
+(at least not for short absences).
+
+Equally significant is the fact that I did go on vacation the 28th of June
+2003, and when I did the {\bf list volumes} command, my current tape at that
+time, DLT-07Jun03 MediaId 31, had 56.5 Gbytes written. I could see that the
+tape would fill shortly. Consequently, I manually marked it as {\bf Used} and
+replaced it with a fresh tape that I labeled as DLT-28Jun03, thus assuring
+myself that the backups would all complete without my intervention.
+
+\section{Exclude Files on Windows Regardless of Case}
+\label{Case}
+\index[general]{Exclude Files on Windows Regardless of Case}
+% TODO: should this be put in the win32 chapter?
+% TODO: should all these tips be placed in other chapters?
+
+This tip was submitted by Marc Brueckner who wasn't sure of the case of some
+of his files on Win32, which is case insensitive. The problem is that Bacula
+thinks that {\bf /UNIMPORTANT FILES} is different from {\bf /Unimportant
+Files}. Marc was aware that the file exclusion permits wild-cards. So, he
+specified:
+
+\footnotesize
+\begin{verbatim}
+"/[Uu][Nn][Ii][Mm][Pp][Oo][Rr][Tt][Aa][Nn][Tt] [Ff][Ii][Ll][Ee][Ss]"
+\end{verbatim}
+\normalsize
+
+As a consequence, the above exclude works for files of any case.
+
+Please note that this works only in Bacula Exclude statement and not in
+Include.
+
+\section{Executing Scripts on a Remote Machine}
+\label{RemoteExecution}
+\index[general]{Machine!Executing Scripts on a Remote }
+\index[general]{Executing Scripts on a Remote Machine }
+
+This tip also comes from Marc Brueckner. (Note, this tip is probably outdated
+by the addition of {\bf ClientRunBeforJob} and {\bf ClientRunAfterJob} Job
+records, but the technique still could be useful.) First I thought the "Run
+Before Job" statement in the Job-resource is for executing a script on the
+remote machine (the machine to be backed up). (Note, this is possible as mentioned
+above by using {\bf ClientRunBeforJob} and {\bf ClientRunAfterJob}).
+It could be useful to execute
+scripts on the remote machine e.g. for stopping databases or other services
+while doing the backup. (Of course I have to start the services again when the
+backup has finished) I found the following solution: Bacula could execute
+scripts on the remote machine by using ssh. The authentication is done
+automatically using a private key. First you have to generate a keypair. I've
+done this by:
+
+\footnotesize
+\begin{verbatim}
+ssh-keygen -b 4096 -t dsa -f Bacula_key
+\end{verbatim}
+\normalsize
+
+This statement may take a little time to run. It creates a public/private key
+pair with no passphrase. You could save the keys in /etc/bacula. Now you have
+two new files : Bacula\_key which contains the private key and Bacula\_key.pub
+which contains the public key.
+
+Now you have to append the Bacula\_key.pub file to the file authorized\_keys
+in the \textbackslash{}root\textbackslash{}.ssh directory of the remote
+machine. Then you have to add (or uncomment) the line
+
+\footnotesize
+\begin{verbatim}
+AuthorizedKeysFile %h/.ssh/authorized_keys
+\end{verbatim}
+\normalsize
+
+to the sshd\_config file on the remote machine. Where the \%h stands for the
+home-directory of the user (root in this case).
+
+Assuming that your sshd is already running on the remote machine, you can now
+enter the following on the machine where Bacula runs:
+
+\footnotesize
+\begin{verbatim}
+ssh -i Bacula_key -l root <machine-name-or-ip-address> "ls -la"
+\end{verbatim}
+\normalsize
+
+This should execute the "ls -la" command on the remote machine.
+
+Now you could add lines like the following to your Director's conf file:
+
+\footnotesize
+\begin{verbatim}
+...
+Run Before Job = ssh -i /etc/bacula/Bacula_key 192.168.1.1 \
+ "/etc/init.d/database stop"
+Run After Job = ssh -i /etc/bacula/Bacula_key 192.168.1.1 \
+ "/etc/init.d/database start"
+...
+\end{verbatim}
+\normalsize
+
+Even though Bacula version 1.32 and later has a ClientRunBeforeJob, the ssh method still
+could be useful for updating all the Bacula clients on several remote machines
+in a single script.
+
+\section{Recycling All Your Volumes}
+\label{recycle}
+\index[general]{Recycling All Your Volumes }
+\index[general]{Volumes!Recycling All Your }
+
+This tip comes from Phil Stracchino.
+
+If you decide to blow away your catalog and start over, the simplest way to
+re-add all your prelabeled tapes with a minimum of fuss (provided you don't
+care about the data on the tapes) is to add the tape labels using the console
+{\bf add} command, then go into the catalog and manually set the VolStatus of
+every tape to {\bf Recycle}.
+
+The SQL command to do this is very simple, either use your vendor's
+command line interface (mysql, postgres, sqlite, ...) or use the sql
+command in the Bacula console:
+
+\footnotesize
+\begin{verbatim}
+update Media set VolStatus='Recycle';
+\end{verbatim}
+\normalsize
+
+Bacula will then ignore the data already stored on the tapes and just re-use
+each tape without further objection.
+
+\section{Backing up ACLs on ext3 or XFS filesystems}
+\label{ACLs}
+\index[general]{Filesystems!Backing up ACLs on ext3 or XFS }
+\index[general]{Backing up ACLs on ext3 or XFS filesystems }
+
+This tip comes from Volker Sauer.
+
+Note, this tip was given prior to implementation of ACLs in Bacula (version
+1.34.5). It is left here because dumping/displaying ACLs can still be useful
+in testing/verifying that Bacula is backing up and restoring your ACLs
+properly. Please see the
+\ilink{aclsupport}{ACLSupport} FileSet option in the
+configuration chapter of this manual.
+
+For example, you could dump the ACLs to a file with a script similar to the
+following:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+BACKUP_DIRS="/foo /bar"
+STORE_ACL=/root/acl-backup
+umask 077
+for i in $BACKUP_DIRS; do
+ cd $i /usr/bin/getfacl -R --skip-base .>$STORE_ACL/${i//\//_}
+done
+\end{verbatim}
+\normalsize
+
+Then use Bacula to backup {\bf /root/acl-backup}.
+
+The ACLs could be restored using Bacula to the {\bf /root/acl-backup} file,
+then restored to your system using:
+
+\footnotesize
+\begin{verbatim}
+setfacl --restore/root/acl-backup
+\end{verbatim}
+\normalsize
+
+\section{Total Automation of Bacula Tape Handling}
+\label{automate}
+\index[general]{Handling!Total Automation of Bacula Tape }
+\index[general]{Total Automation of Bacula Tape Handling }
+
+This tip was provided by Alexander Kuehn.
+
+\elink{Bacula}{http://www.bacula.org/} is a really nice backup program except
+that the manual tape changing requires user interaction with the bacula
+console.
+
+Fortunately I can fix this.
+NOTE!!! This suggestion applies for people who do *NOT* have tape autochangers
+and must change tapes manually.!!!!!
+
+Bacula supports a variety of tape changers through the use of mtx-changer
+scripts/programs. This highly flexible approach allowed me to create
+\elink{this shell script}{http://www.bacula.org/en/rel-manual/mtx-changer.txt} which does the following:
+% TODO: We need to include this in book appendix and point to it.
+% TODO:
+Whenever a new tape is required it sends a mail to the operator to insert the
+new tape. Then it waits until a tape has been inserted, sends a mail again to
+say thank you and let's bacula continue its backup.
+So you can schedule and run backups without ever having to log on or see the
+console.
+To make the whole thing work you need to create a Device resource which looks
+something like this ("Archive Device", "Maximum Changer Wait", "Media
+Type" and "Label media" may have different values):
+
+\footnotesize
+\begin{verbatim}
+Device {
+ Name=DDS3
+ Archive Device = # use yours not mine! ;)/dev/nsa0
+ Changer Device = # not really required/dev/nsa0
+ Changer Command = "# use this (maybe change the path)!
+ /usr/local/bin/mtx-changer %o %a %S"
+ Maximum Changer Wait = 3d # 3 days in seconds
+ AutomaticMount = yes; # mount on start
+ AlwaysOpen = yes; # keep device locked
+ Media Type = DDS3 # it's just a name
+ RemovableMedia = yes; #
+ Offline On Unmount = Yes; # keep this too
+ Label media = Yes; #
+}
+\end{verbatim}
+\normalsize
+
+As the script has to emulate the complete wisdom of a mtx-changer it has an
+internal "database" containing where which tape is stored, you can see this on
+the following line:
+
+\footnotesize
+\begin{verbatim}
+labels="VOL-0001 VOL-0002 VOL-0003 VOL-0004 VOL-0005 VOL-0006
+VOL-0007 VOL-0008 VOL-0009 VOL-0010 VOL-0011 VOL-0012"
+\end{verbatim}
+\normalsize
+
+The above should be all on one line, and it effectively tells Bacula that
+volume "VOL-0001" is located in slot 1 (which is our lowest slot), that
+volume "VOL-0002" is located in slot 2 and so on..
+The script also maintains a logfile (/var/log/mtx.log) where you can monitor
+its operation.
+
+\section{Running Concurrent Jobs}
+\label{ConcurrentJobs}
+\index[general]{Jobs!Running Concurrent}
+\index[general]{Running Concurrent Jobs}
+\index[general]{Concurrent Jobs}
+
+Bacula can run multiple concurrent jobs, but the default configuration files
+do not enable it. Using the {\bf Maximum Concurrent Jobs} directive, you
+can configure how many and which jobs can be run simultaneously.
+The Director's default value for {\bf Maximum Concurrent Jobs} is "1".
+
+To initially setup concurrent jobs you need to define {\bf Maximum Concurrent Jobs} in
+the Director's configuration file (bacula-dir.conf) in the
+Director, Job, Client, and Storage resources.
+
+Additionally the File daemon, and the Storage daemon each have their own
+{\bf Maximum Concurrent Jobs} directive that sets the overall maximum
+number of concurrent jobs the daemon will run. The default for both the
+File daemon and the Storage daemon is "20".
+
+For example, if you want two different jobs to run simultaneously backing up
+the same Client to the same Storage device, they will run concurrently only if
+you have set {\bf Maximum Concurrent Jobs} greater than one in the Director
+resource, the Client resource, and the Storage resource in bacula-dir.conf.
+
+We recommend that you read the \ilink{Data
+Spooling}{SpoolingChapter} of this manual first, then test your multiple
+concurrent backup including restore testing before you put it into
+production.
+
+Below is a super stripped down bacula-dir.conf file showing you the four
+places where the the file must be modified to allow the same job {\bf
+NightlySave} to run up to four times concurrently. The change to the Job
+resource is not necessary if you want different Jobs to run at the same time,
+which is the normal case.
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula Director Configuration file -- bacula-dir.conf
+#
+Director {
+ Name = rufus-dir
+ Maximum Concurrent Jobs = 4
+ ...
+}
+Job {
+ Name = "NightlySave"
+ Maximum Concurrent Jobs = 4
+ Client = rufus-fd
+ Storage = File
+ ...
+}
+Client {
+ Name = rufus-fd
+ Maximum Concurrent Jobs = 4
+ ...
+}
+Storage {
+ Name = File
+ Maximum Concurrent Jobs = 4
+ ...
+}
+\end{verbatim}
+\normalsize
--- /dev/null
+5.1.2 (26 February 2010)
--- /dev/null
+%%
+%%
+% TODO: maybe merge all this FAQ in with the appropriate section?
+% TODO: and use detailed indexing to help reader
+
+\chapter{Bacula Frequently Asked Questions}
+\label{FaqChapter}
+\index[general]{Questions!Bacula Frequently Asked }
+\index[general]{Bacula Frequently Asked Questions }
+
+These are questions that have been submitted over time by the
+Bacula users. The following
+FAQ is very useful, but it is not always up to date
+with newer information, so after reading it, if you don't find what you
+want, you might try the Bacula wiki maintained by Frank Sweetser, which
+contains more than just a FAQ:
+\elink{http://wiki.bacula.org}{http://wiki.bacula.org}
+or go directly to the FAQ at:
+\elink{http://wiki.bacula.org/doku.php?id=faq}
+{http://wiki.bacula.org/doku.php?id=faq}.
+
+Please also see
+\ilink{the bugs section}{BugsChapter} of this document for a list
+of known bugs and solutions.
+
+\begin{description}
+\label{what}
+\section{What is Bacula?}
+\item [What is {\bf Bacula}? ]
+ \index[general]{What is Bacula? }
+ {\bf Bacula} is a network backup and restore program.
+
+\section{Does Bacula support Windows?}
+\item [Does Bacula support Windows?]
+\index[general]{Does Bacula support Windows? }
+ Yes, Bacula compiles and runs on Windows machines (Win98, WinMe, WinXP,
+ WinNT, Win2003, and Win2000). We provide a binary version of the Client
+ (bacula-fd), but have not tested the Director nor the Storage daemon.
+ Note, Win95 is no longer supported because it doesn't have the
+ GetFileAttributesExA API call.
+
+
+\label{lang}
+\section{What language is Bacula written in?}
+\item [What language is Bacula written in?]
+\index[general]{What language is Bacula written in? }
+ It is written in C++, but it is mostly C code using only a limited set of
+ the C++ extensions over C. Thus Bacula is completely compiled using the
+ C++ compiler. There are several modules, including the Win32 interface, that
+ are written using the object oriented C++ features. Over time, we are slowly
+ adding a larger subset of C++.
+
+\label{run}
+\section{On what machines does Bacula run?}
+\item [On what machines does Bacula run? ]
+ \index[general]{On what machines does Bacula run? }
+ {\bf Bacula} builds and executes on Red Hat Linux (versions RH7.1-RHEL
+ 4.0, Fedora, SuSE, Gentoo, Debian, Mandriva, ...), FreeBSD, Solaris,
+ Alpha, SGI (client), NetBSD, OpenBSD, Mac OS X (client), and Win32.
+
+ Bacula has been my only backup tool for over seven years backing up 8
+ machines nightly (6 Linux boxes running SuSE, previously
+ Red Hat and Fedora, a WinXP machine, and a WinNT machine).
+
+
+\label{stable}
+\section{Is Bacula Stable?}
+\item [Is Bacula Stable? ]
+\index[general]{Is Bacula Stable? }
+ Yes, it is remarkably stable, but remember, there are still a lot of
+ unimplemented or partially implemented features. With a program of this
+ size (150,000+ lines of C++ code not including the SQL programs) there
+ are bound to be bugs. The current test environment (a twisted pair
+ local network and a HP DLT backup tape) is not exactly ideal, so
+ additional testing on other sites is necessary. The File daemon has
+ never crashed -- running months at a time with no intervention. The
+ Storage daemon is remarkably stable with most of the problems arising
+ during labeling or switching tapes. Storage daemon crashes are rare
+ but running multiple drives and simultaneous jobs sometimes (rarely)
+ problems.
+ The Director, given the multitude of functions it fulfills is also
+ relatively stable. In a production environment, it rarely if ever
+ crashes. Of the three daemons, the Director is the most prone to having
+ problems. Still, it frequently runs several months with no problems.
+
+ There are a number of reasons for this stability.
+
+ \begin{enumerate}
+ \item The program is constantly checking the chain of allocated
+ memory buffers to ensure that no overruns have occurred. \\
+ \item All memory leaks (orphaned buffers) are reported each time the
+ program terminates.\\
+ \item Any signal (segmentation fault, ...) generates a
+ traceback that is emailed to the developer. This permits quick
+ resolution of bugs even if they only show up rarely in a production
+ system.\\
+ \item There is a reasonably comprehensive set of regression tests
+ that avoids re-creating the most common errors in new versions of
+ Bacula.
+ \end{enumerate}
+
+\label{AuthorizationErrors}
+\section{I'm Getting Authorization Errors. What is Going On? }
+\item [I'm Getting Authorization Errors. What is Going On? ]
+\index[general]{Authorization Errors}
+\index[general]{Concurrent Jobs}
+ For security reasons, Bacula requires that both the File daemon and the
+ Storage daemon know the name of the Director as well as its password. As a
+ consequence, if you change the Director's name or password, you must make
+ the corresponding change in the Storage daemon's and in the File daemon's
+ configuration files.
+
+ During the authorization process, the Storage daemon and File daemon
+ also require that the Director authenticates itself, so both ends
+ require the other to have the correct name and password.
+
+ If you have edited the conf files and modified any name or any password,
+ and you are getting authentication errors, then your best bet is to go
+ back to the original conf files generated by the Bacula installation
+ process. Make only the absolutely necessary modifications to these
+ files -- e.g. add the correct email address. Then follow the
+ instructions in the \ilink{ Running Bacula}{TutorialChapter} chapter of
+ this manual. You will run a backup to disk and a restore. Only when
+ that works, should you begin customization of the conf files.
+
+ Another reason that you can get authentication errors is if you are
+ running Multiple Concurrent Jobs in the Director, but you have not set
+ them in the File daemon or the Storage daemon. Once you reach their
+ limit, they will reject the connection producing authentication (or
+ connection) errors.
+
+ If you are having problems connecting to a Windows machine that
+ previously worked, you might try restarting the Bacula service since
+ Windows frequently encounters networking connection problems.
+
+ Some users report that authentication fails if there is not a proper
+ reverse DNS lookup entry for the machine. This seems to be a
+ requirement of gethostbyname(), which is what Bacula uses to translate
+ names into IP addresses. If you cannot add a reverse DNS entry, or you
+ don't know how to do so, you can avoid the problem by specifying an IP
+ address rather than a machine name in the appropriate Bacula conf file.
+
+ Here is a picture that indicates what names/passwords in which
+ files/Resources must match up:
+
+ \includegraphics{\idir Conf-Diagram.eps}
+
+ In the left column, you will find the Director, Storage, and Client
+ resources, with their names and passwords -- these are all in {\bf
+ bacula-dir.conf}. The right column is where the corresponding values
+ should be found in the Console, Storage daemon (SD), and File daemon (FD)
+ configuration files.
+
+ Another thing to check is to ensure that the Bacula component you are
+ trying to access has {\bf Maximum Concurrent Jobs} set large enough to
+ handle each of the Jobs and the Console that want to connect
+ simultaneously. Once the maximum connections has been reached, each
+ Bacula component will reject all new connections.
+
+ Finally, make sure you have no {\bf hosts.allow} or {\bf hosts.deny}
+ file that is not permitting access to the site trying to connect.
+
+\label{AccessProblems}
+\section{Bacula Runs Fine but Cannot Access a Client on a Different Machine.
+ Why? }
+\item [Bacula Runs Fine but Cannot Access a Client on a Different Machine.
+ Why? ]
+\index[general]{Cannot Access a Client}
+ There are several reasons why Bacula could not contact a client on a
+ different machine. They are:
+
+\begin{itemize}
+\item It is a Windows Client, and the client died because of an improper
+ configuration file. Check that the Bacula icon is in the system tray and the
+ the menu items work. If the client has died, the icon will disappear only
+ when you move the mouse over the icon.
+\item The Client address or port is incorrect or not resolved by DNS. See if
+ you can ping the client machine using the same address as in the Client
+ record.
+\item You have a firewall, and it is blocking traffic on port 9102 between
+ the Director's machine and the Client's machine (or on port 9103 between the
+ Client and the Storage daemon machines).
+\item Your password or names are not correct in both the Director and the
+ Client machine. Try configuring everything identical to how you run the
+ client on the same machine as the Director, but just change the Address. If
+ that works, make the other changes one step at a time until it works.
+\item You may also be having problems between your File daemon and your
+ Storage daemon. The name you use in the Storage resource of your
+ Director's conf file must be known (resolvable) by the File daemon,
+ because it is passed symbolically to the File daemon, which then
+ resolves it to get an IP address used to contact the Storage daemon.
+\item You may have a {\bf hosts.allow} or {\bf hosts.deny} file that is
+ not permitting access.
+\end{itemize}
+
+\label{startover}
+\section{My Catalog is Full of Test Runs, How Can I Start Over?}
+\item [My Catalog is Full of Test Runs, How Can I Start Over? ]
+ \index[general]{My Catalog is Full of Test Runs, How Can I Start Over? }
+ If you are using MySQL do the following:
+
+\footnotesize
+\begin{verbatim}
+ cd <bacula-source>/src/cats
+ ./drop_mysql_tables
+ ./make_mysql_tables
+
+\end{verbatim}
+\normalsize
+
+If you are using SQLite, do the following:
+
+\footnotesize
+\begin{verbatim}
+ Delete bacula.db from your working directory.
+ cd <bacula-source>/src/cats
+ ./drop_sqlite_tables
+ ./make_sqlite_tables
+
+\end{verbatim}
+\normalsize
+
+Then write an EOF on each tape you used with {\bf Bacula} using:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/st0 rewind
+mt -f /dev/st0 weof
+\end{verbatim}
+\normalsize
+
+where you need to adjust the device name for your system.
+
+\label{restorehang}
+\section{I Run a Restore Job and Bacula Hangs. What do I do?}
+\item [I Run a Restore Job and Bacula Hangs. What do I do?]
+\index[general]{I Run a Restore Job and Bacula Hangs. What do I do? }
+ On Bacula version 1.25 and prior, it expects you to have the correct
+ tape mounted prior to a restore. On Bacula version 1.26 and higher, it
+ will ask you for the tape, and if the wrong one is mounted, it will
+ inform you.
+
+ If you have previously done an {\bf unmount} command, all Storage daemon
+ sessions (jobs) will be completely blocked from using the drive
+ unmounted, so be sure to do a {\bf mount} after your unmount. If in
+ doubt, do a second {\bf mount}, it won't cause any harm.
+
+\label{windowstart}
+\section{I Cannot Get My Windows Client to Start Automatically? }
+\item [I Cannot Get My Windows Client to Start Automatically? ]
+\index[general]{Windows Auto Start}
+ You are probably having one of two problems: either the Client is dying
+ due to an incorrect configuration file, or you didn't do the
+ Installation commands necessary to install it as a Windows Service.
+
+ For the first problem, see the next FAQ question. For the second
+ problem, please review the \ilink{ Windows Installation
+ instructions}{Win32Chapter} in this manual.
+
+\label{windowsdie}
+\section{My Windows Client Immediately Dies When I Start It}
+\item [My Windows Client Immediately Dies When I Start It]
+\index[general]{Windows Client Dies}
+The most common problem is either that the configuration file is not where
+it expects it to be, or that there is an error in the configuration file.
+You must have the configuration file in {\bf
+c:\textbackslash{}bacula\textbackslash{}bin\textbackslash{}bacula-fd.conf}.
+
+To {\bf see} what is going on when the File daemon starts on Windows, do the
+following:
+
+\footnotesize
+\begin{verbatim}
+ Start a DOS shell Window.
+ cd c:\bacula\bin
+ bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf
+
+\end{verbatim}
+\normalsize
+
+This will cause the FD to write a file {\bf bacula.trace} in the current
+directory, which you can examine and thereby determine the problem.
+
+\label{scroll}
+\item [When I Start the Console, the Error Messages Fly By. How can I see
+ them? ]
+\index[general]{Error Messages}
+ Either use a shell window with a scroll bar, or use the gnome-console.
+ In any case, you probably should be logging all output to a file, and
+ then you can simply view the file using an editor or the {\bf less}
+ program. To log all output, I have the following in my Director's
+ Message resource definition:
+
+\footnotesize
+\begin{verbatim}
+ append = "/home/kern/bacula/bin/log" = all, !skipped
+
+\end{verbatim}
+\normalsize
+
+Obviously you will want to change the filename to be appropriate for your
+system.
+
+\label{nobackup}
+\section{My backups are not working on my Windows
+ Client. What should I do?}
+\item [I didn't realize that the backups were not working on my Windows
+ Client. What should I do? ]
+\index[general]{Backups Failing}
+You should be sending yourself an email message for each job. This will avoid
+the possibility of not knowing about a failed backup. To do so put something
+like:
+
+\footnotesize
+\begin{verbatim}
+ Mail = yourname@yourdomain = all, !skipped
+
+\end{verbatim}
+\normalsize
+
+in your Director's message resource. You should then receive one email for
+each Job that ran. When you are comfortable with what is going on (it took
+me 9 months), you might change that to:
+
+\footnotesize
+\begin{verbatim}
+ MailOnError = yourname@yourdomain = all, !skipped
+
+\end{verbatim}
+\normalsize
+
+then you only get email messages when a Job errors as is the case for your
+Windows machine.
+
+You should also be logging the Director's messages, please see the previous
+FAQ for how to do so.
+
+\label{sched}
+\section{All my Jobs are scheduled for the same time. Will this cause
+ problems?}
+\item [All my Jobs are scheduled for the same time. Will this cause
+ problems? ]
+\index[general]{Schedule problems}
+ No, not at all. Bacula will schedule all the Jobs at the same time, but
+ will run them one after another unless you have increased the number of
+ simultaneous jobs in the configuration files for the Director, the File
+ daemon, and the Storage daemon. The appropriate configuration record is
+ {\bf Maximum Concurrent Jobs = nn}. At the current time, we recommend
+ that you leave this set to {\bf 1} for the Director.
+
+\label{disk}
+\section{Can Bacula Backup My System To Files instead of Tape?}
+\item [Can Bacula Backup My System To Files instead of Tape? ]
+\index[general]{Backup to Disk}
+ Yes, in principle, Bacula can backup to any storage medium as long as
+ you have correctly defined that medium in the Storage daemon's Device
+ resource. For an example of how to backup to files, please see the
+ \ilink{Pruning Example}{PruningExample} in the Recycling chapter of this
+ manual. Also, there is a whole chapter devoted to \ilink{Basic Volume
+ Management}{DiskChapter}. This chapter was originally written to
+ explain how to write to disk, but was expanded to include volume
+ management. It is, however, still quite a good chapter to read.
+
+\label{testbackup}
+\section{Can I use a dummy device to test the backup?}
+ Yes, to have a {\sl Virtual} device which just consumes data, you can use a
+ FIFO device (see \ilink{Stored configuration}{SetupFifo}).
+ It's useful to test a backup.
+\footnotesize
+\begin{verbatim}
+Device {
+ Name = NULL
+ Media Type = NULL
+ Device Type = Fifo
+ Archive Device = /dev/null
+ LabelMedia = yes
+ Random Access = no
+ AutomaticMount = no
+ RemovableMedia = no
+ MaximumOpenWait = 60
+ AlwaysOpen = no
+}
+\end{verbatim}
+\normalsize
+
+\label{bigfiles}
+\section{Can Bacula Backup and Restore Files Bigger than 2 Gigabytes?}
+\item [Can Bacula Backup and Restore Files Bigger than 2 Gigabytes?]
+\index[general]{Large file support}
+If your operating system permits it, and you are running Bacula version
+1.26 or later, the answer is yes. To the best of our knowledge all client
+system supported by Bacula can handle files bigger 2 Gigabytes.
+
+\label{cancel}
+\section{I want to stop a job.}
+%% Is there a better way than "./bacula stop" to stop it?}
+\item [I Started A Job then Decided I Really Did Not Want to Run It. Is
+ there a better way than {\bf ./bacula stop} to stop it?]
+\index[general]{Cancelling jobs}
+ Yes, you normally should use the Console command {\bf cancel} to cancel
+ a Job that is either scheduled or running. If the Job is scheduled, it
+ will be marked for cancellation and will be canceled when it is
+ scheduled to start. If it is running, it will normally terminate after
+ a few minutes. If the Job is waiting on a tape mount, you may need to
+ do a {\bf mount} command before it will be canceled.
+
+\label{trademark}
+\section{Why have You Trademarked the Name Bacula?}
+\item [Why have You Trademarked the Name
+ Bacula\raisebox{.6ex}{{\footnotesize \textsuperscript{\textregistered}}}?]
+\index[general]{Bacula Trademark}
+We have trademarked the name Bacula to ensure that all media written by any
+program named Bacula will always be compatible. Anyone may use the name
+Bacula, even in a derivative product as long as it remains totally compatible
+in all respects with the program defined here.
+
+\label{docversion}
+\section{Why is the Online Document for Version 1.39 but the Released Version is 1.38?}
+\item [Why is the Online Document for Version 1.39 of Bacula when the
+ Current Version is 1.38?]
+\index[general]{Multiple manuals}
+As Bacula is being developed, the document is also being enhanced, more
+often than not it has clarifications of existing features that can be very
+useful to our users, so we publish the very latest document. Fortunately
+it is rare that there are confusions with new features.
+
+If you want to read a document that pertains only to a specific version,
+please use the one distributed in the source code. The web site also has
+online versions of both the released manual and the current development
+manual.
+
+\label{sure}
+\section{Does Bacula really save and restore all files?}
+\item [How Can I Be Sure that Bacula Really Saves and Restores All Files? ]
+\index[general]{Checking Restores}
+ It is really quite simple, but took me a while to figure
+ out how to "prove" it. First make a Bacula Rescue disk, see the
+ \ilink{Disaster Recovery Using Bacula}{RescueChapter} chapter
+ of this manual.
+ Second, you run a full backup of all your files on all partitions.
+ Third, you run an Verify InitCatalog Job on the same FileSet, which
+ effectively makes a record of all the files on your system. Fourth, you
+ run a Verify Catalog job and assure yourself that nothing has changed
+ (well, between an InitCatalog and Catalog one doesn't expect anything).
+ Then do the unthinkable, write zeros on your MBR (master boot record)
+ wiping out your hard disk. Now, restore your whole system using your
+ Bacula Rescue disk and the Full backup you made, and finally re-run the
+ Verify Catalog job. You will see that with the exception of the
+ directory modification and access dates and the files changed during the
+ boot, your system is identical to what it was before you wiped your hard
+ disk.
+ Alternatively you could do the wiping and restoring to another computer
+ of the same type.
+
+\label{upgrade}
+\section{I want an Incremental but Bacula runs it as a Full backup. Why?}
+\item [I did a Full backup last week, but now in running an Incremental,
+ Bacula says it did not find a FULL backup, so it did a FULL backup. Why?]
+\index[general]{FULL backup not found}
+ Before doing an Incremental or a Differential
+ backup, Bacula checks to see if there was a prior Full backup of the
+ same Job that terminated successfully. If so, it uses the date that
+ full backup started as the time for comparing if files have changed. If
+ Bacula does not find a successful full backup, it proceeds to do one.
+ Perhaps you canceled the full backup, or it terminated in error. In
+ such cases, the full backup will not be successful. You can check by
+ entering {\bf list jobs} and look to see if there is a prior Job with
+ the same Name that has Level F and JobStatus T (normal termination).
+
+ Another reason why Bacula may not find a suitable Full backup is that
+ every time you change the FileSet, Bacula will require a new Full
+ backup. This is necessary to ensure that all files are properly backed
+ up in the case where you have added more files to the FileSet.
+ Beginning with version 1.31, the FileSets are also dated when they are
+ created, and this date is displayed with the name when you are listing
+ or selecting a FileSet. For more on backup levels see below.
+
+ See also {\bf Ignore FileSet Changes} in the
+ \ilink{FileSet Resource definition}{FileSetResource} in the Director
+ chapter of this document.
+
+\label{filenamelengths}
+\section{Do you really handle unlimited path lengths?}
+\item [How Can You Claim to Handle Unlimited Path and Filename Lengths
+ when All Other Programs Have Fixed Limits?]
+\index[general]{Path and Filename Lengths}
+ Most of those other programs have been around for a long time, in fact
+ since the beginning of Unix, which means that they were designed for
+ rather small fixed length path and filename lengths. Over the years,
+ these restrictions have been relaxed allowing longer names. Bacula on
+ the other hand was designed in 2000, and so from the start, Path and
+ Filenames have been kept in buffers that start at 256 bytes in length,
+ but can grow as needed to handle any length. Most of the work is
+ carried out by lower level routines making the coding rather easy.
+
+ Note that due to limitations Win32 path and filenames cannot exceed
+ 260 characters. By using Win32 Unicode functions, we will remove this
+ restriction in later versions of Bacula.
+
+\label{unique}
+\section{What Is the Really Unique Feature of Bacula?}
+\item [What Is the Really Unique Feature of Bacula?]
+\index[general]{Unique Feature of Bacula}
+ Well, it is hard to come up with unique features when backup programs
+ for Unix machines have been around since the 1960s. That said, I
+ believe that Bacula is the first and only program to use a standard SQL
+ interface to catalog its database. Although this adds a bit of
+ complexity and possibly overhead, it provides an amazingly rich set of
+ features that are easy to program and enhance. The current code has
+ barely scratched the surface in this regard (version 1.38).
+
+ The second feature, which gives a lot of power and flexibility to Bacula
+ is the Bootstrap record definition.
+
+ The third unique feature, which is currently (1.30) unimplemented, and
+ thus can be called vaporware :-), is Base level saves. When
+ implemented, this will enormously reduce tape usage.
+
+\label{sequence}
+\section{How can I force one job to run after another?}
+\item [If I Run Multiple Simultaneous Jobs, How Can I Force One
+ Particular Job to Run After Another Job? ]
+\index[general]{Multiple Simultaneous Jobs}
+Yes, you can set Priorities on your jobs so that they run in the order you
+specify. Please see:
+\ilink{the Priority record}{Priority} in the Job resource.
+
+\label{nomail}
+\section{I Am Not Getting Email Notification, What Can I Do? }
+\item [I Am Not Getting Email Notification, What Can I Do? ]
+\index[general]{No Email Notification}
+ The most common problem is that you have not specified a fully qualified
+ email address and your bsmtp server is rejecting the mail. The next
+ most common problem is that your bsmtp server doesn't like the syntax on
+ the From part of the message. For more details on this and other
+ problems, please see the \ilink{ Getting Email Notification to
+ Work}{email} section of the Tips chapter of this manual. The section
+ \ilink{ Getting Notified of Job Completion}{notification} of the Tips
+ chapter may also be useful. For more information on the {\bf bsmtp}
+ mail program, please see \ilink{bsmtp in the Volume Utility Tools
+ chapter}{bsmtp} of this manual.
+
+\label{periods}
+\section{My retention periods don't work}
+\item [I Change Recycling, Retention Periods, or File Sizes in my Pool
+ Resource and they Still Don't Work.]
+\index[general]{Recycling}
+\index[general]{Retention Periods}
+\index[general]{Pool changes}
+ The different variables associated with a Pool are defined in the Pool
+ Resource, but are actually read by Bacula from the Catalog database. On
+ Bacula versions prior to 1.30, after changing your Pool Resource, you must
+ manually update the corresponding values in the Catalog by using the {\bf
+ update pool} command in the Console program. In Bacula version 1.30, Bacula
+ does this for you automatically every time it starts.
+
+ When Bacula creates a Media record (Volume), it uses many default values from
+ the Pool record. If you subsequently change the Pool record, the new values
+ will be used as a default for the next Volume that is created, but if you
+ want the new values to apply to existing Volumes, you must manually update
+ the Volume Catalog entry using the {\bf update volume} command in the Console
+ program.
+
+\label{CompressionNotWorking}
+\section{Why aren't my files compressed?}
+\item [I Have Configured Compression On, But None of My Files Are
+ Compressed. Why?]
+\index[general]{Compression}
+ There are two kinds of compression. One is tape compression. This is done by
+ the tape drive hardware, and you either enable or disable it with system
+ tools such as {\bf mt}. This compression works independently of Bacula,
+ and when it is enabled, you should not use the Bacula software
+ compression.
+
+ Bacula also has software compression code in the File daemons, which you
+ normally need to enable only when backing up to file Volumes. There are
+ two conditions necessary to enable the Bacula software compression.
+
+\begin{enumerate}
+\item You must have the zip development libraries loaded on your system
+ when building Bacula and Bacula must find this library, normally {\bf
+ /usr/lib/libz.a}. On Red Hat systems, this library is provided by the
+ {\bf zlib-devel} rpm.
+
+ If the library is found by Bacula during the {\bf ./configure} it will
+ be mentioned in the {\bf config.out} line by:
+
+\footnotesize
+\begin{verbatim}
+ ZLIB support: yes
+
+\end{verbatim}
+\normalsize
+
+\item You must add the {\bf compression=gzip} option on your Include
+ statement in the Director's configuration file.
+\end{enumerate}
+
+\label{NewTape}
+\item [Bacula is Asking for a New Tape After 2 GB of Data but My Tape
+ holds 33 GB. Why?]
+\index[general]{Tape capacity}
+There are several reasons why Bacula will request a new tape.
+
+\begin{itemize}
+\item There is an I/O error on the tape. Bacula prints an error message and
+ requests a new tape. Bacula does not attempt to continue writing after an
+ I/O error.
+\item Bacula encounters and end of medium on the tape. This is not always
+ distinguishable from an I/O error.
+\item You have specifically set some size limitation on the tape. For example
+ the {\bf Maximum Volume Bytes} or {\bf Maximum Volume Files} in the
+ Director's Pool resource, or {\bf Maximum Volume Size} in the Storage
+ daemon's Device resource.
+\end{itemize}
+
+\label{LevelChanging}
+\section{Incremental backups are not working}
+\item [Bacula is Not Doing the Right Thing When I Request an Incremental
+ Backup. Why?]
+\index[general]{Incremental backups}
+ As explained in one of the previous questions, Bacula will automatically
+ upgrade an Incremental or Differential job to a Full backup if it cannot
+ find a prior Full backup or a suitable Full backup. For the gory
+ details on how/when Bacula decides to upgrade levels please see the
+ \ilink{Level record}{Level} in the Director's configuration chapter of
+ this manual.
+
+ If after reading the above mentioned section, you believe that Bacula is not
+ correctly handling the level (Differential/Incremental), please send us the
+ following information for analysis:
+
+\begin{itemize}
+\item Your Director's configuration file.
+\item The output from {\bf list jobs} covering the period where you are
+ having the problem.
+\item The Job report output from the prior Full save (not critical).
+\item An {\bf llist jobid=nnn} where nnn is the JobId of the prior Full save.
+
+\item The Job report output from the save that is doing the wrong thing (not
+ critical).
+\item An {\bf llist jobid=nnn} where nnn is the JobId of the job that was not
+ correct.
+\item An explanation of what job went wrong and why you think it did.
+ \end{itemize}
+
+The above information can allow us to analyze what happened, without it,
+there is not much we can do.
+
+\label{WaitForever}
+\section{I am waiting forever for a backup of an offsite machine}
+\item [I am Backing Up an Offsite Machine with an Unreliable Connection.
+ The Director Waits Forever for the Client to Contact the SD. What Can I
+ Do?]
+\index[general]{Backing Up Offsite Machines}
+ Bacula was written on the assumption that it will have a good TCP/IP
+ connection between all the daemons. As a consequence, the current
+ Bacula doesn't deal with faulty connections very well. This situation
+ is slowly being corrected over time.
+
+ There are several things you can do to improve the situation.
+
+\begin{itemize}
+\item Upgrade to version 1.32 and use the new SDConnectTimeout record. For
+ example, set:
+
+\footnotesize
+\begin{verbatim}
+ SD Connect Timeout = 5 min
+
+\end{verbatim}
+\normalsize
+
+in the FileDaemon resource.
+\item Run these kinds of jobs after all other jobs.
+ \end{itemize}
+
+\label{sshHanging}
+\section{SSH hangs forever after starting Bacula}
+\item [When I ssh into a machine and start Bacula then attempt to exit,
+ ssh hangs forever.]
+\index[general]{ssh hangs}
+ This happens because Bacula leaves stdin, stdout, and stderr open for
+ debug purposes. To avoid it, the simplest thing to do is to redirect
+ the output of those files to {\bf /dev/null} or another file in your
+ startup script (the Red Hat autostart scripts do this automatically).
+ For example, you start the Director with:
+
+\footnotesize
+\begin{verbatim}
+ bacula-dir -c bacula-dir.conf ... >/dev/null 0>\&1 2>\&1
+
+\end{verbatim}
+\normalsize
+
+and likewise for the other daemons.
+
+\label{RetentionPeriods}
+\section{I'm confused by retention periods}
+\item [I'm confused by the different Retention periods: File Retention,
+ Job Retention, Volume Retention. Why are there so many?]
+\index[general]{Retention Periods}
+ Yes, this certainly can be confusing. The basic reason for so many is
+ to allow flexibility. The File records take quite a lot of space in the
+ catalog, so they are typically records you want to remove rather
+ quickly. The Job records, take very little space, and they can be
+ useful even without the File records to see what Jobs actually ran and
+ when. One must understand that if the File records are removed from the
+ catalog, you cannot use the {\bf restore} command to restore an
+ individual file since Bacula no longer knows where it is. However, as
+ long as the Volume Retention period has not expired, the data will still
+ be on the tape, and can be recovered from the tape.
+
+ For example, I keep a 30 day retention period for my Files to keep my
+ catalog from getting too big, but I keep my tapes for a minimum of one
+ year, just in case.
+
+\label{MaxVolumeSize}
+\section{MaxVolumeSize is ignored}
+\item [Why Does Bacula Ignore the MaxVolumeSize Set in my Pool?]
+\index[general]{MaxVolumeSize}
+ The MaxVolumeSize that Bacula uses comes from the Media record, so most
+ likely you changed your Pool, which is used as the default for creating
+ Media records, {\bf after} you created your Volume. Check what is in
+ the Media record by doing:
+
+\footnotesize
+\begin{verbatim}
+llist Volume=xxx
+\end{verbatim}
+\normalsize
+
+If it doesn't have the right value, you can use:
+
+\footnotesize
+\begin{verbatim}
+update Volume=xxx
+\end{verbatim}
+\normalsize
+
+to change it.
+
+\label{ConnectionRefused}
+\section{I get a Connection refused when connecting to my Client}
+\item [In connecting to my Client, I get "ERR:Connection Refused. Packet
+ Size too big from File daemon:192.168.1.4:9102" Why?]
+\index[general]{ERR:Connection Refused}
+ This is typically a communications error resulting from one of the
+ following:
+
+
+\begin{itemize}
+\item Old versions of Bacula, usually a Win32 client, where two threads were
+ using the same I/O packet. Fixed in more recent versions. Please upgrade.
+\item Some other program such as an HP Printer using the same port (9102 in
+ this case).
+\end{itemize}
+
+If it is neither of the above, please submit a bug report at
+\elink{bugs.bacula.org}{http://bugs.bacula.org}.
+
+Another solution might be to run the daemon with the debug option by:
+
+\footnotesize
+\begin{verbatim}
+ Start a DOS shell Window.
+ cd c:\bacula\bin
+ bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf
+
+\end{verbatim}
+\normalsize
+
+This will cause the FD to write a file {\bf bacula.trace} in the current
+directory, which you can examine to determine the problem.
+
+\section{Long running jobs die with Pipe Error}
+\item [During long running jobs my File daemon dies with Pipe Error, or
+ some other communications error. Why?]
+\index[general]{Communications Errors}
+\index[general]{Pipe Errors}
+\index[general]{slow}
+\index[general]{Backups!slow}
+ There are a number of reasons why a connection might break.
+ Most often, it is a router between your two computers that times out
+ inactive lines (not respecting the keepalive feature that Bacula uses).
+ In that case, you can use the {\bf Heartbeat Interval} directive in
+ both the Storage daemon and the File daemon.
+
+ In at least one case, the problem has been a bad driver for a Win32
+ NVidia NForce 3 ethernet card with driver (4.4.2 17/05/2004).
+ In this case, a good driver is (4.8.2.0 06/04/2005). Moral of
+ the story, make sure you have the latest ethernet drivers
+ loaded, or use the following workaround as suggested by Thomas
+ Simmons for Win32 machines:
+
+ Browse to:
+ Start \gt{} Control Panel \gt{} Network Connections
+
+ Right click the connection for the nvidia adapter and select properties.
+ Under the General tab, click "Configure...". Under the Advanced tab set
+ "Checksum Offload" to disabled and click OK to save the change.
+
+ Lack of communications, or communications that get interrupted can
+ also be caused by Linux firewalls where you have a rule that throttles
+ connections or traffic. For example, if you have:
+
+\footnotesize
+\begin{verbatim}
+iptables -t filter -A INPUT -m limit --limit 3/second --limit-burst 3 -j DROP
+\end{verbatim}
+\normalsize
+
+ you will want to add the following rules {\bf before} the above rule:
+\footnotesize
+\begin{verbatim}
+iptables -t filter -A INPUT --dport 9101 -j ACCEPT
+iptables -t filter -A INPUT --dport 9102 -j ACCEPT
+iptables -t filter -A INPUT --dport 9103 -j ACCEPT
+\end{verbatim}
+\normalsize
+ This will ensure that any Bacula traffic will not get terminated because
+ of high usage rates.
+
+\section{How do I tell the Job which Volume to use?}
+\item[I can't figure out how to tell the job which volume to use]
+ \index[general]{What tape to mount}
+ This is an interesting statement. I now see that a number of people new to
+ Bacula have the same problem as you, probably from using programs like tar.
+
+ In fact, you do not tell Bacula what tapes to use. It is the inverse. Bacula
+ tells you want tapes it wants. You put tapes at its disposition and it
+ chooses.
+
+ Now, if you *really* want to be tricky and try to tell Bacula what to do, it
+ will be reasonable if for example you mount a valid tape that it can use on a
+ drive, it will most likely go ahead and use it. It also has a documented
+ algorithm for choosing tapes -- but you are asking for problems ...
+
+ So, the trick is to invert your concept of things and put Bacula in charge of
+ handling the tapes. Once you do that, you will be fine. If you want to
+ anticipate what it is going to do, you can generally figure it out correctly
+ and get what you want.
+
+ If you start with the idea that you are going to force or tell Bacula to use
+ particular tapes or you insist on trying to run in that kind of mode, you will
+ probably not be too happy.
+
+ I don't want to worry about what tape has what data. That is what Bacula is
+ designed for.
+
+ If you have an application where you *really* need to remove a tape each day
+ and insert a new one, it can be done the directives exist to accomplish that.
+ In such a case, one little "trick" to knowing what tape Bacula will want at
+ 2am while you are asleep is to run a tiny job at 4pm while you are still at
+ work that backs up say one directory, or even one file. You will quickly find
+ out what tape it wants, and you can mount it before you go home ...
+
+\label{Password generation}
+\section{Password generation}
+\item [How do I generate a password?]
+\index[general]{MaxVolumeSize}
+
+ Each daemon needs a password. This password occurs in the configuration
+ file for that daemon and in the bacula-dir.conf file. These passwords are
+ plain text. There is no special generation procedure. Most people just
+ use random text.
+
+ Passwords are never sent over the wire in plain text. They are always
+ encrypted.
+
+ Security surrounding these passwords is best left security to your
+ operating system. Passwords are not encrypted within Bacula
+ configuration files.
+
+\end{description}
+
+++ /dev/null
-%%
-%%
-% TODO: maybe merge all this FAQ in with the appropriate section?
-% TODO: and use detailed indexing to help reader
-
-\chapter{Bacula Frequently Asked Questions}
-\label{FaqChapter}
-\index[general]{Questions!Bacula Frequently Asked }
-\index[general]{Bacula Frequently Asked Questions }
-
-These are questions that have been submitted over time by the
-Bacula users. The following
-FAQ is very useful, but it is not always up to date
-with newer information, so after reading it, if you don't find what you
-want, you might try the Bacula wiki maintained by Frank Sweetser, which
-contains more than just a FAQ:
-\elink{http://wiki.bacula.org}{http://wiki.bacula.org}
-or go directly to the FAQ at:
-\elink{http://wiki.bacula.org/doku.php?id=faq}
-{http://wiki.bacula.org/doku.php?id=faq}.
-
-Please also see
-\ilink{the bugs section}{BugsChapter} of this document for a list
-of known bugs and solutions.
-
-\begin{description}
-\label{what}
-\section{What is Bacula?}
-\item [What is {\bf Bacula}? ]
- \index[general]{What is Bacula? }
- {\bf Bacula} is a network backup and restore program.
-
-\section{Does Bacula support Windows?}
-\item [Does Bacula support Windows?]
-\index[general]{Does Bacula support Windows? }
- Yes, Bacula compiles and runs on Windows machines (Win98, WinMe, WinXP,
- WinNT, Win2003, and Win2000). We provide a binary version of the Client
- (bacula-fd), but have not tested the Director nor the Storage daemon.
- Note, Win95 is no longer supported because it doesn't have the
- GetFileAttributesExA API call.
-
-
-\label{lang}
-\section{What language is Bacula written in?}
-\item [What language is Bacula written in?]
-\index[general]{What language is Bacula written in? }
- It is written in C++, but it is mostly C code using only a limited set of
- the C++ extensions over C. Thus Bacula is completely compiled using the
- C++ compiler. There are several modules, including the Win32 interface, that
- are written using the object oriented C++ features. Over time, we are slowly
- adding a larger subset of C++.
-
-\label{run}
-\section{On what machines does Bacula run?}
-\item [On what machines does Bacula run? ]
- \index[general]{On what machines does Bacula run? }
- {\bf Bacula} builds and executes on Red Hat Linux (versions RH7.1-RHEL
- 4.0, Fedora, SuSE, Gentoo, Debian, Mandriva, ...), FreeBSD, Solaris,
- Alpha, SGI (client), NetBSD, OpenBSD, Mac OS X (client), and Win32.
-
- Bacula has been my only backup tool for over seven years backing up 8
- machines nightly (6 Linux boxes running SuSE, previously
- Red Hat and Fedora, a WinXP machine, and a WinNT machine).
-
-
-\label{stable}
-\section{Is Bacula Stable?}
-\item [Is Bacula Stable? ]
-\index[general]{Is Bacula Stable? }
- Yes, it is remarkably stable, but remember, there are still a lot of
- unimplemented or partially implemented features. With a program of this
- size (150,000+ lines of C++ code not including the SQL programs) there
- are bound to be bugs. The current test environment (a twisted pair
- local network and a HP DLT backup tape) is not exactly ideal, so
- additional testing on other sites is necessary. The File daemon has
- never crashed -- running months at a time with no intervention. The
- Storage daemon is remarkably stable with most of the problems arising
- during labeling or switching tapes. Storage daemon crashes are rare
- but running multiple drives and simultaneous jobs sometimes (rarely)
- problems.
- The Director, given the multitude of functions it fulfills is also
- relatively stable. In a production environment, it rarely if ever
- crashes. Of the three daemons, the Director is the most prone to having
- problems. Still, it frequently runs several months with no problems.
-
- There are a number of reasons for this stability.
-
- \begin{enumerate}
- \item The program is constantly checking the chain of allocated
- memory buffers to ensure that no overruns have occurred. \\
- \item All memory leaks (orphaned buffers) are reported each time the
- program terminates.\\
- \item Any signal (segmentation fault, ...) generates a
- traceback that is emailed to the developer. This permits quick
- resolution of bugs even if they only show up rarely in a production
- system.\\
- \item There is a reasonably comprehensive set of regression tests
- that avoids re-creating the most common errors in new versions of
- Bacula.
- \end{enumerate}
-
-\label{AuthorizationErrors}
-\section{I'm Getting Authorization Errors. What is Going On? }
-\item [I'm Getting Authorization Errors. What is Going On? ]
-\index[general]{Authorization Errors}
-\index[general]{Concurrent Jobs}
- For security reasons, Bacula requires that both the File daemon and the
- Storage daemon know the name of the Director as well as its password. As a
- consequence, if you change the Director's name or password, you must make
- the corresponding change in the Storage daemon's and in the File daemon's
- configuration files.
-
- During the authorization process, the Storage daemon and File daemon
- also require that the Director authenticates itself, so both ends
- require the other to have the correct name and password.
-
- If you have edited the conf files and modified any name or any password,
- and you are getting authentication errors, then your best bet is to go
- back to the original conf files generated by the Bacula installation
- process. Make only the absolutely necessary modifications to these
- files -- e.g. add the correct email address. Then follow the
- instructions in the \ilink{ Running Bacula}{TutorialChapter} chapter of
- this manual. You will run a backup to disk and a restore. Only when
- that works, should you begin customization of the conf files.
-
- Another reason that you can get authentication errors is if you are
- running Multiple Concurrent Jobs in the Director, but you have not set
- them in the File daemon or the Storage daemon. Once you reach their
- limit, they will reject the connection producing authentication (or
- connection) errors.
-
- If you are having problems connecting to a Windows machine that
- previously worked, you might try restarting the Bacula service since
- Windows frequently encounters networking connection problems.
-
- Some users report that authentication fails if there is not a proper
- reverse DNS lookup entry for the machine. This seems to be a
- requirement of gethostbyname(), which is what Bacula uses to translate
- names into IP addresses. If you cannot add a reverse DNS entry, or you
- don't know how to do so, you can avoid the problem by specifying an IP
- address rather than a machine name in the appropriate Bacula conf file.
-
- Here is a picture that indicates what names/passwords in which
- files/Resources must match up:
-
- \includegraphics{\idir Conf-Diagram.eps}
-
- In the left column, you will find the Director, Storage, and Client
- resources, with their names and passwords -- these are all in {\bf
- bacula-dir.conf}. The right column is where the corresponding values
- should be found in the Console, Storage daemon (SD), and File daemon (FD)
- configuration files.
-
- Another thing to check is to ensure that the Bacula component you are
- trying to access has {\bf Maximum Concurrent Jobs} set large enough to
- handle each of the Jobs and the Console that want to connect
- simultaneously. Once the maximum connections has been reached, each
- Bacula component will reject all new connections.
-
- Finally, make sure you have no {\bf hosts.allow} or {\bf hosts.deny}
- file that is not permitting access to the site trying to connect.
-
-\label{AccessProblems}
-\section{Bacula Runs Fine but Cannot Access a Client on a Different Machine.
- Why? }
-\item [Bacula Runs Fine but Cannot Access a Client on a Different Machine.
- Why? ]
-\index[general]{Cannot Access a Client}
- There are several reasons why Bacula could not contact a client on a
- different machine. They are:
-
-\begin{itemize}
-\item It is a Windows Client, and the client died because of an improper
- configuration file. Check that the Bacula icon is in the system tray and the
- the menu items work. If the client has died, the icon will disappear only
- when you move the mouse over the icon.
-\item The Client address or port is incorrect or not resolved by DNS. See if
- you can ping the client machine using the same address as in the Client
- record.
-\item You have a firewall, and it is blocking traffic on port 9102 between
- the Director's machine and the Client's machine (or on port 9103 between the
- Client and the Storage daemon machines).
-\item Your password or names are not correct in both the Director and the
- Client machine. Try configuring everything identical to how you run the
- client on the same machine as the Director, but just change the Address. If
- that works, make the other changes one step at a time until it works.
-\item You may also be having problems between your File daemon and your
- Storage daemon. The name you use in the Storage resource of your
- Director's conf file must be known (resolvable) by the File daemon,
- because it is passed symbolically to the File daemon, which then
- resolves it to get an IP address used to contact the Storage daemon.
-\item You may have a {\bf hosts.allow} or {\bf hosts.deny} file that is
- not permitting access.
-\end{itemize}
-
-\label{startover}
-\section{My Catalog is Full of Test Runs, How Can I Start Over?}
-\item [My Catalog is Full of Test Runs, How Can I Start Over? ]
- \index[general]{My Catalog is Full of Test Runs, How Can I Start Over? }
- If you are using MySQL do the following:
-
-\footnotesize
-\begin{verbatim}
- cd <bacula-source>/src/cats
- ./drop_mysql_tables
- ./make_mysql_tables
-
-\end{verbatim}
-\normalsize
-
-If you are using SQLite, do the following:
-
-\footnotesize
-\begin{verbatim}
- Delete bacula.db from your working directory.
- cd <bacula-source>/src/cats
- ./drop_sqlite_tables
- ./make_sqlite_tables
-
-\end{verbatim}
-\normalsize
-
-Then write an EOF on each tape you used with {\bf Bacula} using:
-
-\footnotesize
-\begin{verbatim}
-mt -f /dev/st0 rewind
-mt -f /dev/st0 weof
-\end{verbatim}
-\normalsize
-
-where you need to adjust the device name for your system.
-
-\label{restorehang}
-\section{I Run a Restore Job and Bacula Hangs. What do I do?}
-\item [I Run a Restore Job and Bacula Hangs. What do I do?]
-\index[general]{I Run a Restore Job and Bacula Hangs. What do I do? }
- On Bacula version 1.25 and prior, it expects you to have the correct
- tape mounted prior to a restore. On Bacula version 1.26 and higher, it
- will ask you for the tape, and if the wrong one is mounted, it will
- inform you.
-
- If you have previously done an {\bf unmount} command, all Storage daemon
- sessions (jobs) will be completely blocked from using the drive
- unmounted, so be sure to do a {\bf mount} after your unmount. If in
- doubt, do a second {\bf mount}, it won't cause any harm.
-
-\label{windowstart}
-\section{I Cannot Get My Windows Client to Start Automatically? }
-\item [I Cannot Get My Windows Client to Start Automatically? ]
-\index[general]{Windows Auto Start}
- You are probably having one of two problems: either the Client is dying
- due to an incorrect configuration file, or you didn't do the
- Installation commands necessary to install it as a Windows Service.
-
- For the first problem, see the next FAQ question. For the second
- problem, please review the \ilink{ Windows Installation
- instructions}{Win32Chapter} in this manual.
-
-\label{windowsdie}
-\section{My Windows Client Immediately Dies When I Start It}
-\item [My Windows Client Immediately Dies When I Start It]
-\index[general]{Windows Client Dies}
-The most common problem is either that the configuration file is not where
-it expects it to be, or that there is an error in the configuration file.
-You must have the configuration file in {\bf
-c:\textbackslash{}bacula\textbackslash{}bin\textbackslash{}bacula-fd.conf}.
-
-To {\bf see} what is going on when the File daemon starts on Windows, do the
-following:
-
-\footnotesize
-\begin{verbatim}
- Start a DOS shell Window.
- cd c:\bacula\bin
- bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf
-
-\end{verbatim}
-\normalsize
-
-This will cause the FD to write a file {\bf bacula.trace} in the current
-directory, which you can examine and thereby determine the problem.
-
-\label{scroll}
-\item [When I Start the Console, the Error Messages Fly By. How can I see
- them? ]
-\index[general]{Error Messages}
- Either use a shell window with a scroll bar, or use the gnome-console.
- In any case, you probably should be logging all output to a file, and
- then you can simply view the file using an editor or the {\bf less}
- program. To log all output, I have the following in my Director's
- Message resource definition:
-
-\footnotesize
-\begin{verbatim}
- append = "/home/kern/bacula/bin/log" = all, !skipped
-
-\end{verbatim}
-\normalsize
-
-Obviously you will want to change the filename to be appropriate for your
-system.
-
-\label{nobackup}
-\section{My backups are not working on my Windows
- Client. What should I do?}
-\item [I didn't realize that the backups were not working on my Windows
- Client. What should I do? ]
-\index[general]{Backups Failing}
-You should be sending yourself an email message for each job. This will avoid
-the possibility of not knowing about a failed backup. To do so put something
-like:
-
-\footnotesize
-\begin{verbatim}
- Mail = yourname@yourdomain = all, !skipped
-
-\end{verbatim}
-\normalsize
-
-in your Director's message resource. You should then receive one email for
-each Job that ran. When you are comfortable with what is going on (it took
-me 9 months), you might change that to:
-
-\footnotesize
-\begin{verbatim}
- MailOnError = yourname@yourdomain = all, !skipped
-
-\end{verbatim}
-\normalsize
-
-then you only get email messages when a Job errors as is the case for your
-Windows machine.
-
-You should also be logging the Director's messages, please see the previous
-FAQ for how to do so.
-
-\label{sched}
-\section{All my Jobs are scheduled for the same time. Will this cause
- problems?}
-\item [All my Jobs are scheduled for the same time. Will this cause
- problems? ]
-\index[general]{Schedule problems}
- No, not at all. Bacula will schedule all the Jobs at the same time, but
- will run them one after another unless you have increased the number of
- simultaneous jobs in the configuration files for the Director, the File
- daemon, and the Storage daemon. The appropriate configuration record is
- {\bf Maximum Concurrent Jobs = nn}. At the current time, we recommend
- that you leave this set to {\bf 1} for the Director.
-
-\label{disk}
-\section{Can Bacula Backup My System To Files instead of Tape?}
-\item [Can Bacula Backup My System To Files instead of Tape? ]
-\index[general]{Backup to Disk}
- Yes, in principle, Bacula can backup to any storage medium as long as
- you have correctly defined that medium in the Storage daemon's Device
- resource. For an example of how to backup to files, please see the
- \ilink{Pruning Example}{PruningExample} in the Recycling chapter of this
- manual. Also, there is a whole chapter devoted to \ilink{Basic Volume
- Management}{DiskChapter}. This chapter was originally written to
- explain how to write to disk, but was expanded to include volume
- management. It is, however, still quite a good chapter to read.
-
-\label{testbackup}
-\section{Can I use a dummy device to test the backup?}
- Yes, to have a {\sl Virtual} device which just consumes data, you can use a
- FIFO device (see \ilink{Stored configuration}{SetupFifo}).
- It's useful to test a backup.
-\footnotesize
-\begin{verbatim}
-Device {
- Name = NULL
- Media Type = NULL
- Device Type = Fifo
- Archive Device = /dev/null
- LabelMedia = yes
- Random Access = no
- AutomaticMount = no
- RemovableMedia = no
- MaximumOpenWait = 60
- AlwaysOpen = no
-}
-\end{verbatim}
-\normalsize
-
-\label{bigfiles}
-\section{Can Bacula Backup and Restore Files Bigger than 2 Gigabytes?}
-\item [Can Bacula Backup and Restore Files Bigger than 2 Gigabytes?]
-\index[general]{Large file support}
-If your operating system permits it, and you are running Bacula version
-1.26 or later, the answer is yes. To the best of our knowledge all client
-system supported by Bacula can handle files bigger 2 Gigabytes.
-
-\label{cancel}
-\section{I want to stop a job.}
-%% Is there a better way than "./bacula stop" to stop it?}
-\item [I Started A Job then Decided I Really Did Not Want to Run It. Is
- there a better way than {\bf ./bacula stop} to stop it?]
-\index[general]{Cancelling jobs}
- Yes, you normally should use the Console command {\bf cancel} to cancel
- a Job that is either scheduled or running. If the Job is scheduled, it
- will be marked for cancellation and will be canceled when it is
- scheduled to start. If it is running, it will normally terminate after
- a few minutes. If the Job is waiting on a tape mount, you may need to
- do a {\bf mount} command before it will be canceled.
-
-\label{trademark}
-\section{Why have You Trademarked the Name Bacula?}
-\item [Why have You Trademarked the Name
- Bacula\raisebox{.6ex}{{\footnotesize \textsuperscript{\textregistered}}}?]
-\index[general]{Bacula Trademark}
-We have trademarked the name Bacula to ensure that all media written by any
-program named Bacula will always be compatible. Anyone may use the name
-Bacula, even in a derivative product as long as it remains totally compatible
-in all respects with the program defined here.
-
-\label{docversion}
-\section{Why is the Online Document for Version 1.39 but the Released Version is 1.38?}
-\item [Why is the Online Document for Version 1.39 of Bacula when the
- Current Version is 1.38?]
-\index[general]{Multiple manuals}
-As Bacula is being developed, the document is also being enhanced, more
-often than not it has clarifications of existing features that can be very
-useful to our users, so we publish the very latest document. Fortunately
-it is rare that there are confusions with new features.
-
-If you want to read a document that pertains only to a specific version,
-please use the one distributed in the source code. The web site also has
-online versions of both the released manual and the current development
-manual.
-
-\label{sure}
-\section{Does Bacula really save and restore all files?}
-\item [How Can I Be Sure that Bacula Really Saves and Restores All Files? ]
-\index[general]{Checking Restores}
- It is really quite simple, but took me a while to figure
- out how to "prove" it. First make a Bacula Rescue disk, see the
- \ilink{Disaster Recovery Using Bacula}{RescueChapter} chapter
- of this manual.
- Second, you run a full backup of all your files on all partitions.
- Third, you run an Verify InitCatalog Job on the same FileSet, which
- effectively makes a record of all the files on your system. Fourth, you
- run a Verify Catalog job and assure yourself that nothing has changed
- (well, between an InitCatalog and Catalog one doesn't expect anything).
- Then do the unthinkable, write zeros on your MBR (master boot record)
- wiping out your hard disk. Now, restore your whole system using your
- Bacula Rescue disk and the Full backup you made, and finally re-run the
- Verify Catalog job. You will see that with the exception of the
- directory modification and access dates and the files changed during the
- boot, your system is identical to what it was before you wiped your hard
- disk.
- Alternatively you could do the wiping and restoring to another computer
- of the same type.
-
-\label{upgrade}
-\section{I want an Incremental but Bacula runs it as a Full backup. Why?}
-\item [I did a Full backup last week, but now in running an Incremental,
- Bacula says it did not find a FULL backup, so it did a FULL backup. Why?]
-\index[general]{FULL backup not found}
- Before doing an Incremental or a Differential
- backup, Bacula checks to see if there was a prior Full backup of the
- same Job that terminated successfully. If so, it uses the date that
- full backup started as the time for comparing if files have changed. If
- Bacula does not find a successful full backup, it proceeds to do one.
- Perhaps you canceled the full backup, or it terminated in error. In
- such cases, the full backup will not be successful. You can check by
- entering {\bf list jobs} and look to see if there is a prior Job with
- the same Name that has Level F and JobStatus T (normal termination).
-
- Another reason why Bacula may not find a suitable Full backup is that
- every time you change the FileSet, Bacula will require a new Full
- backup. This is necessary to ensure that all files are properly backed
- up in the case where you have added more files to the FileSet.
- Beginning with version 1.31, the FileSets are also dated when they are
- created, and this date is displayed with the name when you are listing
- or selecting a FileSet. For more on backup levels see below.
-
- See also {\bf Ignore FileSet Changes} in the
- \ilink{FileSet Resource definition}{FileSetResource} in the Director
- chapter of this document.
-
-\label{filenamelengths}
-\section{Do you really handle unlimited path lengths?}
-\item [How Can You Claim to Handle Unlimited Path and Filename Lengths
- when All Other Programs Have Fixed Limits?]
-\index[general]{Path and Filename Lengths}
- Most of those other programs have been around for a long time, in fact
- since the beginning of Unix, which means that they were designed for
- rather small fixed length path and filename lengths. Over the years,
- these restrictions have been relaxed allowing longer names. Bacula on
- the other hand was designed in 2000, and so from the start, Path and
- Filenames have been kept in buffers that start at 256 bytes in length,
- but can grow as needed to handle any length. Most of the work is
- carried out by lower level routines making the coding rather easy.
-
- Note that due to limitations Win32 path and filenames cannot exceed
- 260 characters. By using Win32 Unicode functions, we will remove this
- restriction in later versions of Bacula.
-
-\label{unique}
-\section{What Is the Really Unique Feature of Bacula?}
-\item [What Is the Really Unique Feature of Bacula?]
-\index[general]{Unique Feature of Bacula}
- Well, it is hard to come up with unique features when backup programs
- for Unix machines have been around since the 1960s. That said, I
- believe that Bacula is the first and only program to use a standard SQL
- interface to catalog its database. Although this adds a bit of
- complexity and possibly overhead, it provides an amazingly rich set of
- features that are easy to program and enhance. The current code has
- barely scratched the surface in this regard (version 1.38).
-
- The second feature, which gives a lot of power and flexibility to Bacula
- is the Bootstrap record definition.
-
- The third unique feature, which is currently (1.30) unimplemented, and
- thus can be called vaporware :-), is Base level saves. When
- implemented, this will enormously reduce tape usage.
-
-\label{sequence}
-\section{How can I force one job to run after another?}
-\item [If I Run Multiple Simultaneous Jobs, How Can I Force One
- Particular Job to Run After Another Job? ]
-\index[general]{Multiple Simultaneous Jobs}
-Yes, you can set Priorities on your jobs so that they run in the order you
-specify. Please see:
-\ilink{the Priority record}{Priority} in the Job resource.
-
-\label{nomail}
-\section{I Am Not Getting Email Notification, What Can I Do? }
-\item [I Am Not Getting Email Notification, What Can I Do? ]
-\index[general]{No Email Notification}
- The most common problem is that you have not specified a fully qualified
- email address and your bsmtp server is rejecting the mail. The next
- most common problem is that your bsmtp server doesn't like the syntax on
- the From part of the message. For more details on this and other
- problems, please see the \ilink{ Getting Email Notification to
- Work}{email} section of the Tips chapter of this manual. The section
- \ilink{ Getting Notified of Job Completion}{notification} of the Tips
- chapter may also be useful. For more information on the {\bf bsmtp}
- mail program, please see \ilink{bsmtp in the Volume Utility Tools
- chapter}{bsmtp} of this manual.
-
-\label{periods}
-\section{My retention periods don't work}
-\item [I Change Recycling, Retention Periods, or File Sizes in my Pool
- Resource and they Still Don't Work.]
-\index[general]{Recycling}
-\index[general]{Retention Periods}
-\index[general]{Pool changes}
- The different variables associated with a Pool are defined in the Pool
- Resource, but are actually read by Bacula from the Catalog database. On
- Bacula versions prior to 1.30, after changing your Pool Resource, you must
- manually update the corresponding values in the Catalog by using the {\bf
- update pool} command in the Console program. In Bacula version 1.30, Bacula
- does this for you automatically every time it starts.
-
- When Bacula creates a Media record (Volume), it uses many default values from
- the Pool record. If you subsequently change the Pool record, the new values
- will be used as a default for the next Volume that is created, but if you
- want the new values to apply to existing Volumes, you must manually update
- the Volume Catalog entry using the {\bf update volume} command in the Console
- program.
-
-\label{CompressionNotWorking}
-\section{Why aren't my files compressed?}
-\item [I Have Configured Compression On, But None of My Files Are
- Compressed. Why?]
-\index[general]{Compression}
- There are two kinds of compression. One is tape compression. This is done by
- the tape drive hardware, and you either enable or disable it with system
- tools such as {\bf mt}. This compression works independently of Bacula,
- and when it is enabled, you should not use the Bacula software
- compression.
-
- Bacula also has software compression code in the File daemons, which you
- normally need to enable only when backing up to file Volumes. There are
- two conditions necessary to enable the Bacula software compression.
-
-\begin{enumerate}
-\item You must have the zip development libraries loaded on your system
- when building Bacula and Bacula must find this library, normally {\bf
- /usr/lib/libz.a}. On Red Hat systems, this library is provided by the
- {\bf zlib-devel} rpm.
-
- If the library is found by Bacula during the {\bf ./configure} it will
- be mentioned in the {\bf config.out} line by:
-
-\footnotesize
-\begin{verbatim}
- ZLIB support: yes
-
-\end{verbatim}
-\normalsize
-
-\item You must add the {\bf compression=gzip} option on your Include
- statement in the Director's configuration file.
-\end{enumerate}
-
-\label{NewTape}
-\item [Bacula is Asking for a New Tape After 2 GB of Data but My Tape
- holds 33 GB. Why?]
-\index[general]{Tape capacity}
-There are several reasons why Bacula will request a new tape.
-
-\begin{itemize}
-\item There is an I/O error on the tape. Bacula prints an error message and
- requests a new tape. Bacula does not attempt to continue writing after an
- I/O error.
-\item Bacula encounters and end of medium on the tape. This is not always
- distinguishable from an I/O error.
-\item You have specifically set some size limitation on the tape. For example
- the {\bf Maximum Volume Bytes} or {\bf Maximum Volume Files} in the
- Director's Pool resource, or {\bf Maximum Volume Size} in the Storage
- daemon's Device resource.
-\end{itemize}
-
-\label{LevelChanging}
-\section{Incremental backups are not working}
-\item [Bacula is Not Doing the Right Thing When I Request an Incremental
- Backup. Why?]
-\index[general]{Incremental backups}
- As explained in one of the previous questions, Bacula will automatically
- upgrade an Incremental or Differential job to a Full backup if it cannot
- find a prior Full backup or a suitable Full backup. For the gory
- details on how/when Bacula decides to upgrade levels please see the
- \ilink{Level record}{Level} in the Director's configuration chapter of
- this manual.
-
- If after reading the above mentioned section, you believe that Bacula is not
- correctly handling the level (Differential/Incremental), please send us the
- following information for analysis:
-
-\begin{itemize}
-\item Your Director's configuration file.
-\item The output from {\bf list jobs} covering the period where you are
- having the problem.
-\item The Job report output from the prior Full save (not critical).
-\item An {\bf llist jobid=nnn} where nnn is the JobId of the prior Full save.
-
-\item The Job report output from the save that is doing the wrong thing (not
- critical).
-\item An {\bf llist jobid=nnn} where nnn is the JobId of the job that was not
- correct.
-\item An explanation of what job went wrong and why you think it did.
- \end{itemize}
-
-The above information can allow us to analyze what happened, without it,
-there is not much we can do.
-
-\label{WaitForever}
-\section{I am waiting forever for a backup of an offsite machine}
-\item [I am Backing Up an Offsite Machine with an Unreliable Connection.
- The Director Waits Forever for the Client to Contact the SD. What Can I
- Do?]
-\index[general]{Backing Up Offsite Machines}
- Bacula was written on the assumption that it will have a good TCP/IP
- connection between all the daemons. As a consequence, the current
- Bacula doesn't deal with faulty connections very well. This situation
- is slowly being corrected over time.
-
- There are several things you can do to improve the situation.
-
-\begin{itemize}
-\item Upgrade to version 1.32 and use the new SDConnectTimeout record. For
- example, set:
-
-\footnotesize
-\begin{verbatim}
- SD Connect Timeout = 5 min
-
-\end{verbatim}
-\normalsize
-
-in the FileDaemon resource.
-\item Run these kinds of jobs after all other jobs.
- \end{itemize}
-
-\label{sshHanging}
-\section{SSH hangs forever after starting Bacula}
-\item [When I ssh into a machine and start Bacula then attempt to exit,
- ssh hangs forever.]
-\index[general]{ssh hangs}
- This happens because Bacula leaves stdin, stdout, and stderr open for
- debug purposes. To avoid it, the simplest thing to do is to redirect
- the output of those files to {\bf /dev/null} or another file in your
- startup script (the Red Hat autostart scripts do this automatically).
- For example, you start the Director with:
-
-\footnotesize
-\begin{verbatim}
- bacula-dir -c bacula-dir.conf ... >/dev/null 0>\&1 2>\&1
-
-\end{verbatim}
-\normalsize
-
-and likewise for the other daemons.
-
-\label{RetentionPeriods}
-\section{I'm confused by retention periods}
-\item [I'm confused by the different Retention periods: File Retention,
- Job Retention, Volume Retention. Why are there so many?]
-\index[general]{Retention Periods}
- Yes, this certainly can be confusing. The basic reason for so many is
- to allow flexibility. The File records take quite a lot of space in the
- catalog, so they are typically records you want to remove rather
- quickly. The Job records, take very little space, and they can be
- useful even without the File records to see what Jobs actually ran and
- when. One must understand that if the File records are removed from the
- catalog, you cannot use the {\bf restore} command to restore an
- individual file since Bacula no longer knows where it is. However, as
- long as the Volume Retention period has not expired, the data will still
- be on the tape, and can be recovered from the tape.
-
- For example, I keep a 30 day retention period for my Files to keep my
- catalog from getting too big, but I keep my tapes for a minimum of one
- year, just in case.
-
-\label{MaxVolumeSize}
-\section{MaxVolumeSize is ignored}
-\item [Why Does Bacula Ignore the MaxVolumeSize Set in my Pool?]
-\index[general]{MaxVolumeSize}
- The MaxVolumeSize that Bacula uses comes from the Media record, so most
- likely you changed your Pool, which is used as the default for creating
- Media records, {\bf after} you created your Volume. Check what is in
- the Media record by doing:
-
-\footnotesize
-\begin{verbatim}
-llist Volume=xxx
-\end{verbatim}
-\normalsize
-
-If it doesn't have the right value, you can use:
-
-\footnotesize
-\begin{verbatim}
-update Volume=xxx
-\end{verbatim}
-\normalsize
-
-to change it.
-
-\label{ConnectionRefused}
-\section{I get a Connection refused when connecting to my Client}
-\item [In connecting to my Client, I get "ERR:Connection Refused. Packet
- Size too big from File daemon:192.168.1.4:9102" Why?]
-\index[general]{ERR:Connection Refused}
- This is typically a communications error resulting from one of the
- following:
-
-
-\begin{itemize}
-\item Old versions of Bacula, usually a Win32 client, where two threads were
- using the same I/O packet. Fixed in more recent versions. Please upgrade.
-\item Some other program such as an HP Printer using the same port (9102 in
- this case).
-\end{itemize}
-
-If it is neither of the above, please submit a bug report at
-\elink{bugs.bacula.org}{http://bugs.bacula.org}.
-
-Another solution might be to run the daemon with the debug option by:
-
-\footnotesize
-\begin{verbatim}
- Start a DOS shell Window.
- cd c:\bacula\bin
- bacula-fd -d100 -c c:\bacula\bin\bacula-fd.conf
-
-\end{verbatim}
-\normalsize
-
-This will cause the FD to write a file {\bf bacula.trace} in the current
-directory, which you can examine to determine the problem.
-
-\section{Long running jobs die with Pipe Error}
-\item [During long running jobs my File daemon dies with Pipe Error, or
- some other communications error. Why?]
-\index[general]{Communications Errors}
-\index[general]{Pipe Errors}
-\index[general]{slow}
-\index[general]{Backups!slow}
- There are a number of reasons why a connection might break.
- Most often, it is a router between your two computers that times out
- inactive lines (not respecting the keepalive feature that Bacula uses).
- In that case, you can use the {\bf Heartbeat Interval} directive in
- both the Storage daemon and the File daemon.
-
- In at least one case, the problem has been a bad driver for a Win32
- NVidia NForce 3 ethernet card with driver (4.4.2 17/05/2004).
- In this case, a good driver is (4.8.2.0 06/04/2005). Moral of
- the story, make sure you have the latest ethernet drivers
- loaded, or use the following workaround as suggested by Thomas
- Simmons for Win32 machines:
-
- Browse to:
- Start \gt{} Control Panel \gt{} Network Connections
-
- Right click the connection for the nvidia adapter and select properties.
- Under the General tab, click "Configure...". Under the Advanced tab set
- "Checksum Offload" to disabled and click OK to save the change.
-
- Lack of communications, or communications that get interrupted can
- also be caused by Linux firewalls where you have a rule that throttles
- connections or traffic. For example, if you have:
-
-\footnotesize
-\begin{verbatim}
-iptables -t filter -A INPUT -m limit --limit 3/second --limit-burst 3 -j DROP
-\end{verbatim}
-\normalsize
-
- you will want to add the following rules {\bf before} the above rule:
-\footnotesize
-\begin{verbatim}
-iptables -t filter -A INPUT --dport 9101 -j ACCEPT
-iptables -t filter -A INPUT --dport 9102 -j ACCEPT
-iptables -t filter -A INPUT --dport 9103 -j ACCEPT
-\end{verbatim}
-\normalsize
- This will ensure that any Bacula traffic will not get terminated because
- of high usage rates.
-
-\section{How do I tell the Job which Volume to use?}
-\item[I can't figure out how to tell the job which volume to use]
- \index[general]{What tape to mount}
- This is an interesting statement. I now see that a number of people new to
- Bacula have the same problem as you, probably from using programs like tar.
-
- In fact, you do not tell Bacula what tapes to use. It is the inverse. Bacula
- tells you want tapes it wants. You put tapes at its disposition and it
- chooses.
-
- Now, if you *really* want to be tricky and try to tell Bacula what to do, it
- will be reasonable if for example you mount a valid tape that it can use on a
- drive, it will most likely go ahead and use it. It also has a documented
- algorithm for choosing tapes -- but you are asking for problems ...
-
- So, the trick is to invert your concept of things and put Bacula in charge of
- handling the tapes. Once you do that, you will be fine. If you want to
- anticipate what it is going to do, you can generally figure it out correctly
- and get what you want.
-
- If you start with the idea that you are going to force or tell Bacula to use
- particular tapes or you insist on trying to run in that kind of mode, you will
- probably not be too happy.
-
- I don't want to worry about what tape has what data. That is what Bacula is
- designed for.
-
- If you have an application where you *really* need to remove a tape each day
- and insert a new one, it can be done the directives exist to accomplish that.
- In such a case, one little "trick" to knowing what tape Bacula will want at
- 2am while you are asleep is to run a tiny job at 4pm while you are still at
- work that backs up say one directory, or even one file. You will quickly find
- out what tape it wants, and you can mount it before you go home ...
-
-\label{Password generation}
-\section{Password generation}
-\item [How do I generate a password?]
-\index[general]{MaxVolumeSize}
-
- Each daemon needs a password. This password occurs in the configuration
- file for that daemon and in the bacula-dir.conf file. These passwords are
- plain text. There is no special generation procedure. Most people just
- use random text.
-
- Passwords are never sent over the wire in plain text. They are always
- encrypted.
-
- Security surrounding these passwords is best left security to your
- operating system. Passwords are not encrypted within Bacula
- configuration files.
-
-\end{description}
-
--- /dev/null
+% TODO: maybe get rid of centering
+
+\chapter{GNU Free Documentation License}
+\index[general]{GNU Free Documentation License}
+\index[general]{License!GNU Free Documentation}
+
+\label{label_fdl}
+
+ \begin{center}
+
+ Version 1.2, November 2002
+
+
+ Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
+
+ \bigskip
+
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+ \bigskip
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+\end{center}
+
+
+\begin{center}
+{\bf\large Preamble}
+\end{center}
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+\begin{center}
+{\Large\bf 1. APPLICABILITY AND DEFINITIONS}
+\end{center}
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The \textbf{"Document"}, below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as \textbf{"you"}. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A \textbf{"Modified Version"} of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall subject
+(or to related matters) and contains nothing that could fall directly
+within that overall subject. (Thus, if the Document is in part a
+textbook of mathematics, a Secondary Section may not explain any
+mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The \textbf{"Cover Texts"} are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The \textbf{"Title Page"} means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as \textbf{"Acknowledgements"},
+\textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
+To \textbf{"Preserve the Title"}
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+
+\begin{center}
+{\Large\bf 2. VERBATIM COPYING}
+\end{center}
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+\begin{center}
+{\Large\bf 3. COPYING IN QUANTITY}
+\end{center}
+
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+
+\begin{center}
+{\Large\bf 4. MODIFICATIONS}
+\end{center}
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+\begin{itemize}
+\item[A.]
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+
+\item[B.]
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+
+\item[C.]
+ State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+\item[D.]
+ Preserve all the copyright notices of the Document.
+
+\item[E.]
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+\item[F.]
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+
+\item[G.]
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+
+\item[H.]
+ Include an unaltered copy of this License.
+
+\item[I.]
+ Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+
+\item[J.]
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+
+\item[K.]
+ For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+
+\item[L.]
+ Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+
+\item[M.]
+ Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+\item[N.]
+ Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+
+\item[O.]
+ Preserve any Warranty Disclaimers.
+\end{itemize}
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+\begin{center}
+{\Large\bf 5. COMBINING DOCUMENTS}
+\end{center}
+
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+\begin{center}
+{\Large\bf 6. COLLECTIONS OF DOCUMENTS}
+\end{center}
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+
+\begin{center}
+{\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
+\end{center}
+
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+\begin{center}
+{\Large\bf 8. TRANSLATION}
+\end{center}
+
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+\begin{center}
+{\Large\bf 9. TERMINATION}
+\end{center}
+
+
+You may not copy, modify, sublicense, or distribute the Document except
+as expressly provided for under this License. Any other attempt to
+copy, modify, sublicense or distribute the Document is void, and will
+automatically terminate your rights under this License. However,
+parties who have received copies, or rights, from you under this
+License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+
+\begin{center}
+{\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE}
+\end{center}
+
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.
+
+
+\begin{center}
+{\Large\bf ADDENDUM: How to use this License for your documents}
+% TODO: this is too long for table of contents
+\end{center}
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+\bigskip
+\begin{quote}
+ Copyright \copyright YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.2
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+\end{quote}
+\bigskip
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+\bigskip
+\begin{quote}
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+\end{quote}
+\bigskip
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+%---------------------------------------------------------------------
+++ /dev/null
-% TODO: maybe get rid of centering
-
-\chapter{GNU Free Documentation License}
-\index[general]{GNU Free Documentation License}
-\index[general]{License!GNU Free Documentation}
-
-\label{label_fdl}
-
- \begin{center}
-
- Version 1.2, November 2002
-
-
- Copyright \copyright 2000,2001,2002 Free Software Foundation, Inc.
-
- \bigskip
-
- 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-
- \bigskip
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-\end{center}
-
-
-\begin{center}
-{\bf\large Preamble}
-\end{center}
-
-The purpose of this License is to make a manual, textbook, or other
-functional and useful document "free" in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-\begin{center}
-{\Large\bf 1. APPLICABILITY AND DEFINITIONS}
-\end{center}
-
-This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The \textbf{"Document"}, below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as \textbf{"you"}. You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
-A \textbf{"Modified Version"} of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A \textbf{"Secondary Section"} is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall subject
-(or to related matters) and contains nothing that could fall directly
-within that overall subject. (Thus, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any
-mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The \textbf{"Invariant Sections"} are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
-The \textbf{"Cover Texts"} are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
-A \textbf{"Transparent"} copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not "Transparent" is called \textbf{"Opaque"}.
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML, PostScript or PDF designed for human modification. Examples of
-transparent image formats include PNG, XCF and JPG. Opaque formats
-include proprietary formats that can be read and edited only by
-proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML, PostScript or PDF produced by some word
-processors for output purposes only.
-
-The \textbf{"Title Page"} means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-A section \textbf{"Entitled XYZ"} means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as \textbf{"Acknowledgements"},
-\textbf{"Dedications"}, \textbf{"Endorsements"}, or \textbf{"History"}.)
-To \textbf{"Preserve the Title"}
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-
-The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
-
-\begin{center}
-{\Large\bf 2. VERBATIM COPYING}
-\end{center}
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-\begin{center}
-{\Large\bf 3. COPYING IN QUANTITY}
-\end{center}
-
-
-If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-
-\begin{center}
-{\Large\bf 4. MODIFICATIONS}
-\end{center}
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-\begin{itemize}
-\item[A.]
- Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-
-\item[B.]
- List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has fewer than five),
- unless they release you from this requirement.
-
-\item[C.]
- State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-
-\item[D.]
- Preserve all the copyright notices of the Document.
-
-\item[E.]
- Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-
-\item[F.]
- Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-
-\item[G.]
- Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-
-\item[H.]
- Include an unaltered copy of this License.
-
-\item[I.]
- Preserve the section Entitled "History", Preserve its Title, and add
- to it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section Entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-
-\item[J.]
- Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the "History" section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-
-\item[K.]
- For any section Entitled "Acknowledgements" or "Dedications",
- Preserve the Title of the section, and preserve in the section all
- the substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-
-\item[L.]
- Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-
-\item[M.]
- Delete any section Entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-
-\item[N.]
- Do not retitle any existing section to be Entitled "Endorsements"
- or to conflict in title with any Invariant Section.
-
-\item[O.]
- Preserve any Warranty Disclaimers.
-\end{itemize}
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-\begin{center}
-{\Large\bf 5. COMBINING DOCUMENTS}
-\end{center}
-
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications". You must delete all sections
-Entitled "Endorsements".
-
-\begin{center}
-{\Large\bf 6. COLLECTIONS OF DOCUMENTS}
-\end{center}
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-
-\begin{center}
-{\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS}
-\end{center}
-
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included in an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
-
-\begin{center}
-{\Large\bf 8. TRANSLATION}
-\end{center}
-
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warranty Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
-If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
-
-\begin{center}
-{\Large\bf 9. TERMINATION}
-\end{center}
-
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-\begin{center}
-{\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE}
-\end{center}
-
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-
-
-\begin{center}
-{\Large\bf ADDENDUM: How to use this License for your documents}
-% TODO: this is too long for table of contents
-\end{center}
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-\bigskip
-\begin{quote}
- Copyright \copyright YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License".
-\end{quote}
-\bigskip
-
-If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-
-\bigskip
-\begin{quote}
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
-\end{quote}
-\bigskip
-
-If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
-%---------------------------------------------------------------------
--- /dev/null
+%%
+%%
+
+\chapter{Dealing with Firewalls}
+\label{FirewallsChapter}
+\index[general]{Dealing with Firewalls }
+\index[general]{Firewalls!Dealing with }
+
+If you have a firewall or a DMZ installed on your computer, you may experience
+difficulties contacting one or more of the Clients to back them up. This is
+especially true if you are trying to backup a Client across the Internet.
+
+\section{Technical Details}
+\index[general]{Technical Details }
+\index[general]{Details!Technical }
+
+If you are attempting to do this, the sequence of network events in Bacula to
+do a backup are the following:
+
+\footnotesize
+\begin{verbatim}
+Console -> DIR:9101
+DIR -> SD:9103
+DIR -> FD:9102
+FD -> SD:9103
+\end{verbatim}
+\normalsize
+
+Where hopefully it is obvious that DIR represents the Director, FD the File
+daemon or client, and SD the Storage daemon. The numbers that follow those
+names are the standard ports used by Bacula, and the \verb:->: represents the
+left side making a connection to the right side (i.e. the right side is the
+"server" or is listening on the specified port), and the left side is the
+"client" that initiates the conversation.
+
+Note, port 9103 serves both the Director and the File daemon, each having its
+own independent connection.
+
+If you are running {\bf iptables}, you might add something like:
+
+\footnotesize
+\begin{verbatim}
+-A FW-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9101:9103 -j ACCEPT
+\end{verbatim}
+\normalsize
+
+on your server, and
+
+\footnotesize
+\begin{verbatim}
+-A FW-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9102 -j ACCEPT
+\end{verbatim}
+\normalsize
+
+on your client. In both cases, I assume that the machine is allowed to
+initiate connections on any port. If not, you will need to allow outgoing
+connections on ports 9102 and 9103 on your server and 9103 on your client.
+Thanks to Raymond Norton for this tip.
+
+\section{A Concrete Example}
+\index[general]{Example!Concrete }
+\index[general]{Concrete Example }
+
+The following discussion was originally written by
+Jesse Guardiani because he has 'internal' and 'external' requiring the
+Director and the Client to use different IP addresses. His original
+solution was to define two different Storage resources in the Director's
+conf file each pointing to the same Storage daemon but with different
+IP addresses. In Bacula 1.38.x this no longer works, because Bacula makes
+a one-to-one association between a Storage daemon resource and a Device (such
+as an Autochanger). As a consequence, I have modified his original
+text to a method that I believe will work, but is as of yet untested
+(KES - July 2006).
+
+My bacula server is on the 192.168.1.0/24 network at IP address 192.168.1.52.
+For the sake of discussion we will refer to this network as the 'internal'
+network because it connects to the internet through a NAT'd firewall. We will
+call the network on the public (internet) side of the NAT'd firewall the
+'external' network. Also, for the sake of discussion we will call my bacula
+server:
+
+\footnotesize
+\begin{verbatim}
+ server.int.mydomain.tld
+\end{verbatim}
+\normalsize
+
+when a fully qualified domain name is required, or simply:
+
+\footnotesize
+\begin{verbatim}
+ server
+\end{verbatim}
+\normalsize
+
+if a hostname is adequate. We will call the various bacula daemons running on
+the server.int.mydomain.tld machine:
+
+\footnotesize
+\begin{verbatim}
+ server-fd
+ server-sd
+ server-dir
+\end{verbatim}
+\normalsize
+
+In addition, I have two clients that I want to back up with Bacula. The first
+client is on the internal network. Its fully qualified domain name is:
+
+\footnotesize
+\begin{verbatim}
+ private1.int.mydomain.tld
+\end{verbatim}
+\normalsize
+
+And its hostname is:
+
+\footnotesize
+\begin{verbatim}
+ private1
+\end{verbatim}
+\normalsize
+
+This machine is a client and therefore runs just one bacula daemon:
+
+\footnotesize
+\begin{verbatim}
+ private1-fd
+\end{verbatim}
+\normalsize
+
+The second client is on the external network. Its fully qualified domain name
+is:
+
+\footnotesize
+\begin{verbatim}
+ public1.mydomain.tld
+\end{verbatim}
+\normalsize
+
+And its hostname is:
+
+\footnotesize
+\begin{verbatim}
+ public1
+\end{verbatim}
+\normalsize
+
+This machine also runs just one bacula daemon:
+
+\footnotesize
+\begin{verbatim}
+ public1-fd
+\end{verbatim}
+\normalsize
+
+Finally, I have a NAT firewall/gateway with two network interfaces. The first
+interface is on the internal network and serves as a gateway to the internet
+for all the machines attached to the internal network (For example,
+server.int.mydomain.tld and private1.int.mydomain.tld). The second interface
+is on the external (internet) network. The external interface has been
+assigned the name:
+
+\footnotesize
+\begin{verbatim}
+ firewall.mydomain.tld
+\end{verbatim}
+\normalsize
+
+Remember:
+
+\footnotesize
+\begin{verbatim}
+ *.int.mydomain.tld = internal network
+ *.mydomain.tld = external network
+\end{verbatim}
+\normalsize
+
+\subsection{The Bacula Configuration Files for the Above}
+\index[general]{Above!Bacula Configuration Files for the }
+\index[general]{Bacula Configuration Files for the Above }
+
+server-sd manages a 4 tape AIT autoloader. All of my backups are written to
+server-sd. I have just *one* Device resource in my server-sd.conf file:
+
+\footnotesize
+\begin{verbatim}
+Autochanger {
+ Name = "autochanger1";\
+ Device = Drive0
+ Changer Device = /dev/ch0;
+ Changer Command = "/usr/local/sbin/chio-bacula %c %o %S %a";
+}
+Device {
+ Name = Drive0
+ DriveIndex = 0
+ Media Type = AIT-1;
+ Archive Device = /dev/nrsa1;
+ Label Media = yes;
+ AutoChanger = yes;
+ AutomaticMount = yes; # when device opened, read it
+ AlwaysOpen = yes;
+ Hardware End of Medium = No
+ Fast Forward Space File = No
+ BSF at EOM = yes
+}
+\end{verbatim}
+\normalsize
+
+(note, please see
+\ilink{the Tape Testing}{FreeBSDTapes} chapter of this manual
+for important FreeBSD information.) However, unlike previously, there
+is only one Storage definition in my server-dir.conf file:
+
+\footnotesize
+\begin{verbatim}
+Storage {
+ Name = "autochanger1" # Storage device for backing up
+ Address = Storage-server
+ SDPort = 9103
+ Password = "mysecretpassword"
+ Device = "autochanger1"
+ Media Type = AIT-1
+ Autochanger = yes
+}
+\end{verbatim}
+\normalsize
+
+Note that the Storage resource uses neither of the two addresses to
+the Storage daemon -- neither server.int.mydomain.tld nor
+firewall.mydomain.tld, but instead uses the address Storage-server.
+
+What is key is that in the internal net, Storage-server is resolved
+to server.int.mydomain.tld, either with an entry in /etc/hosts, or by
+creating and appropriate DNS entry, and on the external net (the Client
+machine), Storage-server is resolved to firewall.mydomain.tld.
+
+
+In addition to the above, I have two Client resources defined in
+server-dir.conf:
+
+\footnotesize
+\begin{verbatim}
+Client {
+ Name = private1-fd
+ Address = private1.int.mydomain.tld
+ FDPort = 9102
+ Catalog = MyCatalog
+ Password = "mysecretpassword" # password for FileDaemon
+}
+Client {
+ Name = public1-fd
+ Address = public1.mydomain.tld
+ FDPort = 9102
+ Catalog = MyCatalog
+ Password = "mysecretpassword" # password for FileDaemon
+}
+\end{verbatim}
+\normalsize
+
+And finally, to tie it all together, I have two Job resources defined in
+server-dir.conf:
+
+\footnotesize
+\begin{verbatim}
+Job {
+ Name = "Private1-Backup"
+ Type = Backup
+ Client = private1-fd
+ FileSet = "Private1"
+ Schedule = "WeeklyCycle"
+ Storage = "autochanger1-int"
+ Messages = Standard
+ Pool = "Weekly"
+ Write Bootstrap = "/var/db/bacula/Private1-Backup.bsr"
+ Priority = 12
+}
+Job {
+ Name = "Public1-Backup"
+ Type = Backup
+ Client = public1-fd
+ FileSet = "Public1"
+ Schedule = "WeeklyCycle"
+ Storage = "autochanger1-ext"
+ Messages = Standard
+ Pool = "Weekly"
+ Write Bootstrap = "/var/db/bacula/Public1-Backup.bsr"
+ Priority = 13
+}
+\end{verbatim}
+\normalsize
+
+It is important to notice that because the 'Private1-Backup' Job is intended
+to back up a machine on the internal network so it resolves Storage-server
+to contact the Storage daemon via the internal net.
+On the other hand, the 'Public1-Backup' Job is intended to
+back up a machine on the external network, so it resolves Storage-server
+to contact the Storage daemon via the external net.
+
+I have left the Pool, Catalog, Messages, FileSet, Schedule, and Director
+resources out of the above server-dir.conf examples because they are not
+pertinent to the discussion.
+
+\subsection{How Does It Work?}
+\index[general]{How Does It Work? }
+\index[general]{Work!How Does It }
+
+If I want to run a backup of private1.int.mydomain.tld and store that backup
+using server-sd then my understanding of the order of events is this:
+
+\begin{enumerate}
+\item I execute my Bacula 'console' command on server.int.mydomain.tld.
+\item console connects to server-dir.
+\item I tell console to 'run' backup Job 'Private1-Backup'.
+\item console relays this command to server-dir.
+\item server-dir connects to private1-fd at private1.int.mydomain.tld:9102
+\item server-dir tells private1-fd to start sending the files defined in the
+ 'Private1-Backup' Job's FileSet resource to the Storage resource
+ 'autochanger1', which we have defined in server-dir.conf as having the
+address:port of Storage-server, which is mapped by DNS to server.int.mydomain.tld.
+\item private1-fd connects to server.int.mydomain.tld:9103 and begins sending
+ files.
+ \end{enumerate}
+
+Alternatively, if I want to run a backup of public1.mydomain.tld and store
+that backup using server-sd then my understanding of the order of events is
+this:
+
+\begin{enumerate}
+\item I execute my Bacula 'console' command on server.int.mydomain.tld.
+\item console connects to server-dir.
+\item I tell console to 'run' backup Job 'Public1-Backup'.
+\item console relays this command to server-dir.
+\item server-dir connects, through the NAT'd firewall, to public1-fd at
+ public1.mydomain.tld:9102
+\item server-dir tells public1-fd to start sending the files defined in the
+ 'Public1-Backup' Job's FileSet resource to the Storage resource
+ 'autochanger1', which we have defined in server-dir.conf as having the
+ same address:port as above of Storage-server, but which on this machine
+ is resolved to firewall.mydomain.tld:9103.
+\item public1-fd connects to firewall.mydomain.tld:9103 and begins sending
+ files.
+ \end{enumerate}
+
+\subsection{Important Note}
+\index[general]{Important Note }
+\index[general]{Note!Important }
+
+In order for the above 'Public1-Backup' Job to succeed,
+firewall.mydomain.tld:9103 MUST be forwarded using the firewall's
+configuration software to server.int.mydomain.tld:9103. Some firewalls call
+this 'Server Publication'. Others may call it 'Port Forwarding'.
+
+\subsection{Firewall Problems}
+\index[general]{Firewall Problems}
+\index[general]{Problems!Firewalls}
+Either a firewall or a router may decide to timeout and terminate
+open connections if they are not active for a short time. By Internet
+standards the period should be two hours, and should be indefinitely
+extended if KEEPALIVE is set as is the case by Bacula. If your firewall
+or router does not respect these rules, you may find Bacula connections
+terminated. In that case, the first thing to try is turning on the
+{\bf Heart Beat Interval} both in the File daemon and the Storage daemon
+and set an interval of say five minutes.
+
+Also, if you have denial of service rate limiting in your firewall, this
+too can cause Bacula disconnects since Bacula can at times use very high
+access rates. To avoid this, you should implement default accept
+rules for the Bacula ports involved before the rate limiting rules.
+
+Finally, if you have a Windows machine, it will most likely by default
+disallow connections to the Bacula Windows File daemon. See the
+Windows chapter of this manual for additional details.
+++ /dev/null
-%%
-%%
-
-\chapter{Dealing with Firewalls}
-\label{FirewallsChapter}
-\index[general]{Dealing with Firewalls }
-\index[general]{Firewalls!Dealing with }
-
-If you have a firewall or a DMZ installed on your computer, you may experience
-difficulties contacting one or more of the Clients to back them up. This is
-especially true if you are trying to backup a Client across the Internet.
-
-\section{Technical Details}
-\index[general]{Technical Details }
-\index[general]{Details!Technical }
-
-If you are attempting to do this, the sequence of network events in Bacula to
-do a backup are the following:
-
-\footnotesize
-\begin{verbatim}
-Console -> DIR:9101
-DIR -> SD:9103
-DIR -> FD:9102
-FD -> SD:9103
-\end{verbatim}
-\normalsize
-
-Where hopefully it is obvious that DIR represents the Director, FD the File
-daemon or client, and SD the Storage daemon. The numbers that follow those
-names are the standard ports used by Bacula, and the \verb:->: represents the
-left side making a connection to the right side (i.e. the right side is the
-"server" or is listening on the specified port), and the left side is the
-"client" that initiates the conversation.
-
-Note, port 9103 serves both the Director and the File daemon, each having its
-own independent connection.
-
-If you are running {\bf iptables}, you might add something like:
-
-\footnotesize
-\begin{verbatim}
--A FW-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9101:9103 -j ACCEPT
-\end{verbatim}
-\normalsize
-
-on your server, and
-
-\footnotesize
-\begin{verbatim}
--A FW-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9102 -j ACCEPT
-\end{verbatim}
-\normalsize
-
-on your client. In both cases, I assume that the machine is allowed to
-initiate connections on any port. If not, you will need to allow outgoing
-connections on ports 9102 and 9103 on your server and 9103 on your client.
-Thanks to Raymond Norton for this tip.
-
-\section{A Concrete Example}
-\index[general]{Example!Concrete }
-\index[general]{Concrete Example }
-
-The following discussion was originally written by
-Jesse Guardiani because he has 'internal' and 'external' requiring the
-Director and the Client to use different IP addresses. His original
-solution was to define two different Storage resources in the Director's
-conf file each pointing to the same Storage daemon but with different
-IP addresses. In Bacula 1.38.x this no longer works, because Bacula makes
-a one-to-one association between a Storage daemon resource and a Device (such
-as an Autochanger). As a consequence, I have modified his original
-text to a method that I believe will work, but is as of yet untested
-(KES - July 2006).
-
-My bacula server is on the 192.168.1.0/24 network at IP address 192.168.1.52.
-For the sake of discussion we will refer to this network as the 'internal'
-network because it connects to the internet through a NAT'd firewall. We will
-call the network on the public (internet) side of the NAT'd firewall the
-'external' network. Also, for the sake of discussion we will call my bacula
-server:
-
-\footnotesize
-\begin{verbatim}
- server.int.mydomain.tld
-\end{verbatim}
-\normalsize
-
-when a fully qualified domain name is required, or simply:
-
-\footnotesize
-\begin{verbatim}
- server
-\end{verbatim}
-\normalsize
-
-if a hostname is adequate. We will call the various bacula daemons running on
-the server.int.mydomain.tld machine:
-
-\footnotesize
-\begin{verbatim}
- server-fd
- server-sd
- server-dir
-\end{verbatim}
-\normalsize
-
-In addition, I have two clients that I want to back up with Bacula. The first
-client is on the internal network. Its fully qualified domain name is:
-
-\footnotesize
-\begin{verbatim}
- private1.int.mydomain.tld
-\end{verbatim}
-\normalsize
-
-And its hostname is:
-
-\footnotesize
-\begin{verbatim}
- private1
-\end{verbatim}
-\normalsize
-
-This machine is a client and therefore runs just one bacula daemon:
-
-\footnotesize
-\begin{verbatim}
- private1-fd
-\end{verbatim}
-\normalsize
-
-The second client is on the external network. Its fully qualified domain name
-is:
-
-\footnotesize
-\begin{verbatim}
- public1.mydomain.tld
-\end{verbatim}
-\normalsize
-
-And its hostname is:
-
-\footnotesize
-\begin{verbatim}
- public1
-\end{verbatim}
-\normalsize
-
-This machine also runs just one bacula daemon:
-
-\footnotesize
-\begin{verbatim}
- public1-fd
-\end{verbatim}
-\normalsize
-
-Finally, I have a NAT firewall/gateway with two network interfaces. The first
-interface is on the internal network and serves as a gateway to the internet
-for all the machines attached to the internal network (For example,
-server.int.mydomain.tld and private1.int.mydomain.tld). The second interface
-is on the external (internet) network. The external interface has been
-assigned the name:
-
-\footnotesize
-\begin{verbatim}
- firewall.mydomain.tld
-\end{verbatim}
-\normalsize
-
-Remember:
-
-\footnotesize
-\begin{verbatim}
- *.int.mydomain.tld = internal network
- *.mydomain.tld = external network
-\end{verbatim}
-\normalsize
-
-\subsection{The Bacula Configuration Files for the Above}
-\index[general]{Above!Bacula Configuration Files for the }
-\index[general]{Bacula Configuration Files for the Above }
-
-server-sd manages a 4 tape AIT autoloader. All of my backups are written to
-server-sd. I have just *one* Device resource in my server-sd.conf file:
-
-\footnotesize
-\begin{verbatim}
-Autochanger {
- Name = "autochanger1";\
- Device = Drive0
- Changer Device = /dev/ch0;
- Changer Command = "/usr/local/sbin/chio-bacula %c %o %S %a";
-}
-Device {
- Name = Drive0
- DriveIndex = 0
- Media Type = AIT-1;
- Archive Device = /dev/nrsa1;
- Label Media = yes;
- AutoChanger = yes;
- AutomaticMount = yes; # when device opened, read it
- AlwaysOpen = yes;
- Hardware End of Medium = No
- Fast Forward Space File = No
- BSF at EOM = yes
-}
-\end{verbatim}
-\normalsize
-
-(note, please see
-\ilink{the Tape Testing}{FreeBSDTapes} chapter of this manual
-for important FreeBSD information.) However, unlike previously, there
-is only one Storage definition in my server-dir.conf file:
-
-\footnotesize
-\begin{verbatim}
-Storage {
- Name = "autochanger1" # Storage device for backing up
- Address = Storage-server
- SDPort = 9103
- Password = "mysecretpassword"
- Device = "autochanger1"
- Media Type = AIT-1
- Autochanger = yes
-}
-\end{verbatim}
-\normalsize
-
-Note that the Storage resource uses neither of the two addresses to
-the Storage daemon -- neither server.int.mydomain.tld nor
-firewall.mydomain.tld, but instead uses the address Storage-server.
-
-What is key is that in the internal net, Storage-server is resolved
-to server.int.mydomain.tld, either with an entry in /etc/hosts, or by
-creating and appropriate DNS entry, and on the external net (the Client
-machine), Storage-server is resolved to firewall.mydomain.tld.
-
-
-In addition to the above, I have two Client resources defined in
-server-dir.conf:
-
-\footnotesize
-\begin{verbatim}
-Client {
- Name = private1-fd
- Address = private1.int.mydomain.tld
- FDPort = 9102
- Catalog = MyCatalog
- Password = "mysecretpassword" # password for FileDaemon
-}
-Client {
- Name = public1-fd
- Address = public1.mydomain.tld
- FDPort = 9102
- Catalog = MyCatalog
- Password = "mysecretpassword" # password for FileDaemon
-}
-\end{verbatim}
-\normalsize
-
-And finally, to tie it all together, I have two Job resources defined in
-server-dir.conf:
-
-\footnotesize
-\begin{verbatim}
-Job {
- Name = "Private1-Backup"
- Type = Backup
- Client = private1-fd
- FileSet = "Private1"
- Schedule = "WeeklyCycle"
- Storage = "autochanger1-int"
- Messages = Standard
- Pool = "Weekly"
- Write Bootstrap = "/var/db/bacula/Private1-Backup.bsr"
- Priority = 12
-}
-Job {
- Name = "Public1-Backup"
- Type = Backup
- Client = public1-fd
- FileSet = "Public1"
- Schedule = "WeeklyCycle"
- Storage = "autochanger1-ext"
- Messages = Standard
- Pool = "Weekly"
- Write Bootstrap = "/var/db/bacula/Public1-Backup.bsr"
- Priority = 13
-}
-\end{verbatim}
-\normalsize
-
-It is important to notice that because the 'Private1-Backup' Job is intended
-to back up a machine on the internal network so it resolves Storage-server
-to contact the Storage daemon via the internal net.
-On the other hand, the 'Public1-Backup' Job is intended to
-back up a machine on the external network, so it resolves Storage-server
-to contact the Storage daemon via the external net.
-
-I have left the Pool, Catalog, Messages, FileSet, Schedule, and Director
-resources out of the above server-dir.conf examples because they are not
-pertinent to the discussion.
-
-\subsection{How Does It Work?}
-\index[general]{How Does It Work? }
-\index[general]{Work!How Does It }
-
-If I want to run a backup of private1.int.mydomain.tld and store that backup
-using server-sd then my understanding of the order of events is this:
-
-\begin{enumerate}
-\item I execute my Bacula 'console' command on server.int.mydomain.tld.
-\item console connects to server-dir.
-\item I tell console to 'run' backup Job 'Private1-Backup'.
-\item console relays this command to server-dir.
-\item server-dir connects to private1-fd at private1.int.mydomain.tld:9102
-\item server-dir tells private1-fd to start sending the files defined in the
- 'Private1-Backup' Job's FileSet resource to the Storage resource
- 'autochanger1', which we have defined in server-dir.conf as having the
-address:port of Storage-server, which is mapped by DNS to server.int.mydomain.tld.
-\item private1-fd connects to server.int.mydomain.tld:9103 and begins sending
- files.
- \end{enumerate}
-
-Alternatively, if I want to run a backup of public1.mydomain.tld and store
-that backup using server-sd then my understanding of the order of events is
-this:
-
-\begin{enumerate}
-\item I execute my Bacula 'console' command on server.int.mydomain.tld.
-\item console connects to server-dir.
-\item I tell console to 'run' backup Job 'Public1-Backup'.
-\item console relays this command to server-dir.
-\item server-dir connects, through the NAT'd firewall, to public1-fd at
- public1.mydomain.tld:9102
-\item server-dir tells public1-fd to start sending the files defined in the
- 'Public1-Backup' Job's FileSet resource to the Storage resource
- 'autochanger1', which we have defined in server-dir.conf as having the
- same address:port as above of Storage-server, but which on this machine
- is resolved to firewall.mydomain.tld:9103.
-\item public1-fd connects to firewall.mydomain.tld:9103 and begins sending
- files.
- \end{enumerate}
-
-\subsection{Important Note}
-\index[general]{Important Note }
-\index[general]{Note!Important }
-
-In order for the above 'Public1-Backup' Job to succeed,
-firewall.mydomain.tld:9103 MUST be forwarded using the firewall's
-configuration software to server.int.mydomain.tld:9103. Some firewalls call
-this 'Server Publication'. Others may call it 'Port Forwarding'.
-
-\subsection{Firewall Problems}
-\index[general]{Firewall Problems}
-\index[general]{Problems!Firewalls}
-Either a firewall or a router may decide to timeout and terminate
-open connections if they are not active for a short time. By Internet
-standards the period should be two hours, and should be indefinitely
-extended if KEEPALIVE is set as is the case by Bacula. If your firewall
-or router does not respect these rules, you may find Bacula connections
-terminated. In that case, the first thing to try is turning on the
-{\bf Heart Beat Interval} both in the File daemon and the Storage daemon
-and set an interval of say five minutes.
-
-Also, if you have denial of service rate limiting in your firewall, this
-too can cause Bacula disconnects since Bacula can at times use very high
-access rates. To avoid this, you should implement default accept
-rules for the Bacula ports involved before the rate limiting rules.
-
-Finally, if you have a Windows machine, it will most likely by default
-disallow connections to the Bacula Windows File daemon. See the
-Windows chapter of this manual for additional details.
--- /dev/null
+%%
+%%
+
+\chapter{What To Do When Bacula Crashes (Kaboom)}
+\label{KaboomChapter}
+\index[general]{Kaboom!What To Do When Bacula Crashes }
+\index[general]{What To Do When Bacula Crashes (Kaboom) }
+
+If you are running on a Linux system, and you have a set of working
+configuration files, it is very unlikely that {\bf Bacula} will crash. As with
+all software, however, it is inevitable that someday, it may crash,
+particularly if you are running on another operating system or using a new or
+unusual feature.
+
+This chapter explains what you should do if one of the three {\bf Bacula}
+daemons (Director, File, Storage) crashes. When we speak of crashing, we
+mean that the daemon terminates abnormally because of an error. There are
+many cases where Bacula detects errors (such as PIPE errors) and will fail
+a job. These are not considered crashes. In addition, under certain
+conditions, Bacula will detect a fatal in the configuration, such as
+lack of permission to read/write the working directory. In that case,
+Bacula will force itself to crash with a SEGFAULT. However, before
+crashing, Bacula will normally display a message indicating why.
+For more details, please read on.
+
+
+\section{Traceback}
+\index[general]{Traceback}
+
+Each of the three Bacula daemons has a built-in exception handler which, in
+case of an error, will attempt to produce a traceback. If successful the
+traceback will be emailed to you.
+
+For this to work, you need to ensure that a few things are setup correctly on
+your system:
+
+\begin{enumerate}
+\item You must have a version of Bacula built with debug information turned
+ on and not stripped of debugging symbols.
+
+\item You must have an installed copy of {\bf gdb} (the GNU debugger), and it
+ must be on {\bf Bacula's} path. On some systems such as Solaris, {\bf
+ gdb} may be replaced by {\bf dbx}.
+
+\item The Bacula installed script file {\bf btraceback} must be in the same
+ directory as the daemon which dies, and it must be marked as executable.
+
+\item The script file {\bf btraceback.gdb} must have the correct path to it
+ specified in the {\bf btraceback} file.
+
+\item You must have a {\bf mail} program which is on {\bf Bacula's} path.
+ By default, this {\bf mail} program is set to {\bf bsmtp}, so it must
+ be correctly configured.
+
+\item If you run either the Director or Storage daemon under a non-root
+ userid, you will most likely need to modify the {\bf btraceback} file
+ to do something like {\bf sudo} (raise to root priority) for the
+ call to {\bf gdb} so that it has the proper permissions to debug
+ Bacula.
+\end{enumerate}
+
+If all the above conditions are met, the daemon that crashes will produce a
+traceback report and email it to you. If the above conditions are not true,
+you can either run the debugger by hand as described below, or you may be able
+to correct the problems by editing the {\bf btraceback} file. I recommend not
+spending too much time on trying to get the traceback to work as it can be
+very difficult.
+
+The changes that might be needed are to add a correct path to the {\bf gdb}
+program, correct the path to the {\bf btraceback.gdb} file, change the {\bf
+mail} program or its path, or change your email address. The key line in the
+{\bf btraceback} file is:
+
+\footnotesize
+\begin{verbatim}
+gdb -quiet -batch -x /home/kern/bacula/bin/btraceback.gdb \
+ $1 $2 2>\&1 | bsmtp -s "Bacula traceback" your-address@xxx.com
+\end{verbatim}
+\normalsize
+
+Since each daemon has the same traceback code, a single btraceback file is
+sufficient if you are running more than one daemon on a machine.
+
+\section{Testing The Traceback}
+\index[general]{Traceback!Testing The }
+\index[general]{Testing The Traceback }
+
+To "manually" test the traceback feature, you simply start {\bf Bacula} then
+obtain the {\bf PID} of the main daemon thread (there are multiple threads).
+The output produced here will look different depending on what OS and what
+version of the kernel you are running.
+Unfortunately, the output had to be split to fit on this page:
+
+\footnotesize
+\begin{verbatim}
+[kern@rufus kern]$ ps fax --columns 132 | grep bacula-dir
+ 2103 ? S 0:00 /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+ 2104 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+ 2106 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+ 2105 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
+ /home/kern/bacula/k/src/dird/dird.conf
+\end{verbatim}
+\normalsize
+
+which in this case is 2103. Then while Bacula is running, you call the program
+giving it the path to the Bacula executable and the {\bf PID}. In this case,
+it is:
+
+\footnotesize
+\begin{verbatim}
+./btraceback /home/kern/bacula/k/src/dird 2103
+\end{verbatim}
+\normalsize
+
+It should produce an email showing you the current state of the daemon (in
+this case the Director), and then exit leaving {\bf Bacula} running as if
+nothing happened. If this is not the case, you will need to correct the
+problem by modifying the {\bf btraceback} script.
+
+Typical problems might be that {\bf gdb} or {\bf dbx} for Solaris is not on
+the default path. Fix this by specifying the full path to it in the {\bf
+btraceback} file. Another common problem is that you haven't modified the
+script so that the {\bf bsmtp} program has an appropriate smtp server or
+the proper syntax for your smtp server. If you use the {\bf mail} program
+and it is not on the default path, it will also fail. On some systems, it
+is preferable to use {\bf Mail} rather than {\bf mail}.
+
+\section{Getting A Traceback On Other Systems}
+\index[general]{Getting A Traceback On Other Systems}
+\index[general]{Systems!Getting A Traceback On Other}
+
+It should be possible to produce a similar traceback on systems other than
+Linux, either using {\bf gdb} or some other debugger. Solaris with {\bf dbx}
+loaded works quite fine. On other systems, you will need to modify the {\bf
+btraceback} program to invoke the correct debugger, and possibly correct the
+{\bf btraceback.gdb} script to have appropriate commands for your debugger. If
+anyone succeeds in making this work with another debugger, please send us a
+copy of what you modified. Please keep in mind that for any debugger to
+work, it will most likely need to run as root, so you may need to modify
+the {\bf btraceback} script accordingly.
+
+\label{ManuallyDebugging}
+\section{Manually Running Bacula Under The Debugger}
+\index[general]{Manually Running Bacula Under The Debugger}
+\index[general]{Debugger!Manually Running Bacula Under The}
+
+If for some reason you cannot get the automatic traceback, or if you want to
+interactively examine the variable contents after a crash, you can run Bacula
+under the debugger. Assuming you want to run the Storage daemon under the
+debugger (the technique is the same for the other daemons, only the name
+changes), you would do the following:
+
+\begin{enumerate}
+\item Start the Director and the File daemon. If the Storage daemon also
+ starts, you will need to find its PID as shown above (ps fax | grep
+ bacula-sd) and kill it with a command like the following:
+
+\footnotesize
+\begin{verbatim}
+ kill -15 PID
+\end{verbatim}
+\normalsize
+
+where you replace {\bf PID} by the actual value.
+
+\item At this point, the Director and the File daemon should be running but
+ the Storage daemon should not.
+
+\item cd to the directory containing the Storage daemon
+
+\item Start the Storage daemon under the debugger:
+
+ \footnotesize
+\begin{verbatim}
+ gdb ./bacula-sd
+\end{verbatim}
+\normalsize
+
+\item Run the Storage daemon:
+
+ \footnotesize
+\begin{verbatim}
+ run -s -f -c ./bacula-sd.conf
+\end{verbatim}
+\normalsize
+
+You may replace the {\bf ./bacula-sd.conf} with the full path to the Storage
+daemon's configuration file.
+
+\item At this point, Bacula will be fully operational.
+
+\item In another shell command window, start the Console program and do what
+ is necessary to cause Bacula to die.
+
+\item When Bacula crashes, the {\bf gdb} shell window will become active and
+ {\bf gdb} will show you the error that occurred.
+
+\item To get a general traceback of all threads, issue the following command:
+
+
+\footnotesize
+\begin{verbatim}
+ thread apply all bt
+\end{verbatim}
+\normalsize
+
+After that you can issue any debugging command.
+\end{enumerate}
+
+\section{Getting Debug Output from Bacula}
+\index[general]{Getting Debug Output from Bacula }
+Each of the daemons normally has debug compiled into the program, but
+disabled. There are two ways to enable the debug output. One is to add the
+{\bf -d nnn} option on the command line when starting the debugger. The {\bf
+nnn} is the debug level, and generally anything between 50 and 200 is
+reasonable. The higher the number, the more output is produced. The output is
+written to standard output.
+
+The second way of getting debug output is to dynamically turn it on using the
+Console using the {\bf setdebug} command. The full syntax of the command is:
+
+\footnotesize
+\begin{verbatim}
+ setdebug level=nnn client=client-name storage=storage-name dir
+\end{verbatim}
+\normalsize
+
+If none of the options are given, the command will prompt you. You can
+selectively turn on/off debugging in any or all the daemons (i.e. it is not
+necessary to specify all the components of the above command).
+++ /dev/null
-%%
-%%
-
-\chapter{What To Do When Bacula Crashes (Kaboom)}
-\label{KaboomChapter}
-\index[general]{Kaboom!What To Do When Bacula Crashes }
-\index[general]{What To Do When Bacula Crashes (Kaboom) }
-
-If you are running on a Linux system, and you have a set of working
-configuration files, it is very unlikely that {\bf Bacula} will crash. As with
-all software, however, it is inevitable that someday, it may crash,
-particularly if you are running on another operating system or using a new or
-unusual feature.
-
-This chapter explains what you should do if one of the three {\bf Bacula}
-daemons (Director, File, Storage) crashes. When we speak of crashing, we
-mean that the daemon terminates abnormally because of an error. There are
-many cases where Bacula detects errors (such as PIPE errors) and will fail
-a job. These are not considered crashes. In addition, under certain
-conditions, Bacula will detect a fatal in the configuration, such as
-lack of permission to read/write the working directory. In that case,
-Bacula will force itself to crash with a SEGFAULT. However, before
-crashing, Bacula will normally display a message indicating why.
-For more details, please read on.
-
-
-\section{Traceback}
-\index[general]{Traceback}
-
-Each of the three Bacula daemons has a built-in exception handler which, in
-case of an error, will attempt to produce a traceback. If successful the
-traceback will be emailed to you.
-
-For this to work, you need to ensure that a few things are setup correctly on
-your system:
-
-\begin{enumerate}
-\item You must have a version of Bacula built with debug information turned
- on and not stripped of debugging symbols.
-
-\item You must have an installed copy of {\bf gdb} (the GNU debugger), and it
- must be on {\bf Bacula's} path. On some systems such as Solaris, {\bf
- gdb} may be replaced by {\bf dbx}.
-
-\item The Bacula installed script file {\bf btraceback} must be in the same
- directory as the daemon which dies, and it must be marked as executable.
-
-\item The script file {\bf btraceback.gdb} must have the correct path to it
- specified in the {\bf btraceback} file.
-
-\item You must have a {\bf mail} program which is on {\bf Bacula's} path.
- By default, this {\bf mail} program is set to {\bf bsmtp}, so it must
- be correctly configured.
-
-\item If you run either the Director or Storage daemon under a non-root
- userid, you will most likely need to modify the {\bf btraceback} file
- to do something like {\bf sudo} (raise to root priority) for the
- call to {\bf gdb} so that it has the proper permissions to debug
- Bacula.
-\end{enumerate}
-
-If all the above conditions are met, the daemon that crashes will produce a
-traceback report and email it to you. If the above conditions are not true,
-you can either run the debugger by hand as described below, or you may be able
-to correct the problems by editing the {\bf btraceback} file. I recommend not
-spending too much time on trying to get the traceback to work as it can be
-very difficult.
-
-The changes that might be needed are to add a correct path to the {\bf gdb}
-program, correct the path to the {\bf btraceback.gdb} file, change the {\bf
-mail} program or its path, or change your email address. The key line in the
-{\bf btraceback} file is:
-
-\footnotesize
-\begin{verbatim}
-gdb -quiet -batch -x /home/kern/bacula/bin/btraceback.gdb \
- $1 $2 2>\&1 | bsmtp -s "Bacula traceback" your-address@xxx.com
-\end{verbatim}
-\normalsize
-
-Since each daemon has the same traceback code, a single btraceback file is
-sufficient if you are running more than one daemon on a machine.
-
-\section{Testing The Traceback}
-\index[general]{Traceback!Testing The }
-\index[general]{Testing The Traceback }
-
-To "manually" test the traceback feature, you simply start {\bf Bacula} then
-obtain the {\bf PID} of the main daemon thread (there are multiple threads).
-The output produced here will look different depending on what OS and what
-version of the kernel you are running.
-Unfortunately, the output had to be split to fit on this page:
-
-\footnotesize
-\begin{verbatim}
-[kern@rufus kern]$ ps fax --columns 132 | grep bacula-dir
- 2103 ? S 0:00 /home/kern/bacula/k/src/dird/bacula-dir -c
- /home/kern/bacula/k/src/dird/dird.conf
- 2104 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
- /home/kern/bacula/k/src/dird/dird.conf
- 2106 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
- /home/kern/bacula/k/src/dird/dird.conf
- 2105 ? S 0:00 \_ /home/kern/bacula/k/src/dird/bacula-dir -c
- /home/kern/bacula/k/src/dird/dird.conf
-\end{verbatim}
-\normalsize
-
-which in this case is 2103. Then while Bacula is running, you call the program
-giving it the path to the Bacula executable and the {\bf PID}. In this case,
-it is:
-
-\footnotesize
-\begin{verbatim}
-./btraceback /home/kern/bacula/k/src/dird 2103
-\end{verbatim}
-\normalsize
-
-It should produce an email showing you the current state of the daemon (in
-this case the Director), and then exit leaving {\bf Bacula} running as if
-nothing happened. If this is not the case, you will need to correct the
-problem by modifying the {\bf btraceback} script.
-
-Typical problems might be that {\bf gdb} or {\bf dbx} for Solaris is not on
-the default path. Fix this by specifying the full path to it in the {\bf
-btraceback} file. Another common problem is that you haven't modified the
-script so that the {\bf bsmtp} program has an appropriate smtp server or
-the proper syntax for your smtp server. If you use the {\bf mail} program
-and it is not on the default path, it will also fail. On some systems, it
-is preferable to use {\bf Mail} rather than {\bf mail}.
-
-\section{Getting A Traceback On Other Systems}
-\index[general]{Getting A Traceback On Other Systems}
-\index[general]{Systems!Getting A Traceback On Other}
-
-It should be possible to produce a similar traceback on systems other than
-Linux, either using {\bf gdb} or some other debugger. Solaris with {\bf dbx}
-loaded works quite fine. On other systems, you will need to modify the {\bf
-btraceback} program to invoke the correct debugger, and possibly correct the
-{\bf btraceback.gdb} script to have appropriate commands for your debugger. If
-anyone succeeds in making this work with another debugger, please send us a
-copy of what you modified. Please keep in mind that for any debugger to
-work, it will most likely need to run as root, so you may need to modify
-the {\bf btraceback} script accordingly.
-
-\label{ManuallyDebugging}
-\section{Manually Running Bacula Under The Debugger}
-\index[general]{Manually Running Bacula Under The Debugger}
-\index[general]{Debugger!Manually Running Bacula Under The}
-
-If for some reason you cannot get the automatic traceback, or if you want to
-interactively examine the variable contents after a crash, you can run Bacula
-under the debugger. Assuming you want to run the Storage daemon under the
-debugger (the technique is the same for the other daemons, only the name
-changes), you would do the following:
-
-\begin{enumerate}
-\item Start the Director and the File daemon. If the Storage daemon also
- starts, you will need to find its PID as shown above (ps fax | grep
- bacula-sd) and kill it with a command like the following:
-
-\footnotesize
-\begin{verbatim}
- kill -15 PID
-\end{verbatim}
-\normalsize
-
-where you replace {\bf PID} by the actual value.
-
-\item At this point, the Director and the File daemon should be running but
- the Storage daemon should not.
-
-\item cd to the directory containing the Storage daemon
-
-\item Start the Storage daemon under the debugger:
-
- \footnotesize
-\begin{verbatim}
- gdb ./bacula-sd
-\end{verbatim}
-\normalsize
-
-\item Run the Storage daemon:
-
- \footnotesize
-\begin{verbatim}
- run -s -f -c ./bacula-sd.conf
-\end{verbatim}
-\normalsize
-
-You may replace the {\bf ./bacula-sd.conf} with the full path to the Storage
-daemon's configuration file.
-
-\item At this point, Bacula will be fully operational.
-
-\item In another shell command window, start the Console program and do what
- is necessary to cause Bacula to die.
-
-\item When Bacula crashes, the {\bf gdb} shell window will become active and
- {\bf gdb} will show you the error that occurred.
-
-\item To get a general traceback of all threads, issue the following command:
-
-
-\footnotesize
-\begin{verbatim}
- thread apply all bt
-\end{verbatim}
-\normalsize
-
-After that you can issue any debugging command.
-\end{enumerate}
-
-\section{Getting Debug Output from Bacula}
-\index[general]{Getting Debug Output from Bacula }
-Each of the daemons normally has debug compiled into the program, but
-disabled. There are two ways to enable the debug output. One is to add the
-{\bf -d nnn} option on the command line when starting the debugger. The {\bf
-nnn} is the debug level, and generally anything between 50 and 200 is
-reasonable. The higher the number, the more output is produced. The output is
-written to standard output.
-
-The second way of getting debug output is to dynamically turn it on using the
-Console using the {\bf setdebug} command. The full syntax of the command is:
-
-\footnotesize
-\begin{verbatim}
- setdebug level=nnn client=client-name storage=storage-name dir
-\end{verbatim}
-\normalsize
-
-If none of the options are given, the command will prompt you. You can
-selectively turn on/off debugging in any or all the daemons (i.e. it is not
-necessary to specify all the components of the above command).
\tableofcontents
\clearpage
-\include{faq}
-\include{tips}
-\include{tapetesting}
-\include{firewalls}
-\include{kaboom}
-\include{fdl}
+\include{faq-en}
+\include{tips-en}
+\include{tapetesting-en}
+\include{firewalls-en}
+\include{kaboom-en}
+\include{fdl-en}
% The following line tells link_resolver.pl to not include these files:
--- /dev/null
+%%
+%%
+
+\chapter{Bacula RPM Packaging FAQ}
+\label{RpmFaqChapter}
+\index[general]{FAQ!Bacula\textsuperscript{\textregistered} - RPM Packaging }
+\index[general]{Bacula\textsuperscript{\textregistered} - RPM Packaging FAQ }
+
+\begin{enumerate}
+\item
+ \ilink{How do I build Bacula for platform xxx?}{faq1}
+\item
+ \ilink{How do I control which database support gets built?}{faq2}
+
+\item
+ \ilink{What other defines are used?}{faq3}
+\item
+ \ilink{I'm getting errors about not having permission when I try to build the
+ packages. Do I need to be root?}{faq4}
+\item
+ \ilink{I'm building my own rpms but on all platforms and compiles I get an
+ unresolved dependency for something called
+ /usr/afsws/bin/pagsh.}{faq5}
+\item
+ \ilink{I'm building my own rpms because you don't publish for my platform.
+ Can I get my packages released to sourceforge for other people to use?}{faq6}
+\item
+ \ilink{Is there an easier way than sorting out all these command line options?}{faq7}
+\item
+ \ilink{I just upgraded from 1.36.x to 1.38.x and now my director daemon won't start. It appears to start but dies silently and I get a "connection refused" error when starting the console. What is wrong?}{faq8}
+\item
+ \ilink{There are a lot of rpm packages. Which packages do I need for what?}{faq9}
+\end{enumerate}
+
+\section{Answers}
+\index[general]{Answers }
+
+\begin{enumerate}
+\item
+ \label{faq1}
+ {\bf How do I build Bacula for platform xxx?}
+ The bacula spec file contains defines to build for several platforms:
+ Red Hat 7.x (rh7), Red Hat 8.0 (rh8), Red Hat 9 (rh9), Fedora Core (fc1,
+ fc3, fc4, fc5, fc6, fc7), Whitebox Enterprise Linux 3.0 (wb3), Red Hat Enterprise Linux
+ (rhel3, rhel4, rhel5), Mandrake 10.x (mdk), Mandriva 2006.x (mdv) CentOS (centos3, centos4, centos5)
+ Scientific Linux (sl3, sl4, sl5) and SuSE (su9, su10, su102, su103). The package build is controlled by a mandatory define set at the beginning of the file. These defines basically just control the dependency information that gets coded into the finished rpm package as well
+ as any special configure options required. The platform define may be edited
+ in the spec file directly (by default all defines are set to 0 or "not set").
+ For example, to build the Red Hat 7.x package find the line in the spec file
+ which reads
+
+\footnotesize
+\begin{verbatim}
+ %define rh7 0
+
+\end{verbatim}
+\normalsize
+
+and edit it to read
+
+\footnotesize
+\begin{verbatim}
+ %define rh7 1
+
+\end{verbatim}
+\normalsize
+
+Alternately you may pass the define on the command line when calling rpmbuild:
+
+
+\footnotesize
+\begin{verbatim}
+ rpmbuild -ba --define "build_rh7 1" bacula.spec
+ rpmbuild --rebuild --define build_rh7 1" bacula-x.x.x-x.src.rpm
+
+\end{verbatim}
+\normalsize
+
+\item
+ \label{faq2}
+ {\bf How do I control which database support gets built?}
+ Another mandatory build define controls which database support is compiled,
+ one of build\_sqlite, build\_mysql or build\_postgresql. To get the MySQL
+ package and support either set the
+
+\footnotesize
+\begin{verbatim}
+ %define mysql 0
+ OR
+ %define mysql4 0
+ OR
+ %define mysql5 0
+
+\end{verbatim}
+\normalsize
+
+to
+
+\footnotesize
+\begin{verbatim}
+ %define mysql 1
+ OR
+ %define mysql4 1
+ OR
+ %define mysql5 1
+
+\end{verbatim}
+\normalsize
+
+in the spec file directly or pass it to rpmbuild on the command line:
+
+\footnotesize
+\begin{verbatim}
+ rpmbuild -ba --define "build_rh7 1" --define "build_mysql 1" bacula.spec
+ rpmbuild -ba --define "build_rh7 1" --define "build_mysql4 1" bacula.spec
+ rpmbuild -ba --define "build_rh7 1" --define "build_mysql5 1" bacula.spec
+
+\end{verbatim}
+\normalsize
+
+\item
+ \label{faq3}
+ {\bf What other defines are used?}
+ Three other building defines of note are the depkgs\_version, docs\_version and
+ \_rescuever identifiers. These two defines are set with each release and must
+ match the version of those sources that are being used to build the packages.
+ You would not ordinarily need to edit these. See also the Build Options section
+ below for other build time options that can be passed on the command line.
+\item
+ \label{faq4}
+ {\bf I'm getting errors about not having permission when I try to build the
+ packages. Do I need to be root?}
+ No, you do not need to be root and, in fact, it is better practice to
+ build rpm packages as a non-root user. Bacula packages are designed to
+ be built by a regular user but you must make a few changes on your
+ system to do this. If you are building on your own system then the
+ simplest method is to add write permissions for all to the build
+ directory (/usr/src/redhat/, /usr/src/RPM or /usr/src/packages).
+ To accomplish this, execute the following command as root:
+
+\footnotesize
+\begin{verbatim}
+ chmod -R 777 /usr/src/redhat
+ chmod -R 777 /usr/src/RPM
+ chmod -R 777 /usr/src/packages
+
+\end{verbatim}
+\normalsize
+
+If you are working on a shared system where you can not use the method
+above then you need to recreate the appropriate above directory tree with all
+of its subdirectories inside your home directory. Then create a file named
+
+{\tt .rpmmacros}
+
+in your home directory (or edit the file if it already exists)
+and add the following line:
+
+\footnotesize
+\begin{verbatim}
+ %_topdir /home/myuser/redhat
+ %_tmppath /tmp
+
+\end{verbatim}
+\normalsize
+
+Another handy directive for the .rpmmacros file if you wish to suppress the
+creation of debug rpm packages is:
+
+\footnotesize
+\begin{verbatim}
+ %debug_package %{nil}
+
+\end{verbatim}
+
+\normalsize
+
+\item
+ \label{faq5}
+ {\bf I'm building my own rpms but on all platforms and compiles I get an
+ unresolved dependency for something called /usr/afsws/bin/pagsh.} This
+ is a shell from the OpenAFS (Andrew File System). If you are seeing
+ this then you chose to include the docs/examples directory in your
+ package. One of the example scripts in this directory is a pagsh
+ script. Rpmbuild, when scanning for dependencies, looks at the shebang
+ line of all packaged scripts in addition to checking shared libraries.
+ To avoid this do not package the examples directory. If you are seeing this
+ problem you are building a very old bacula package as the examples have been
+ removed from the doc packaging.
+
+\item
+ \label{faq6}
+ {\bf I'm building my own rpms because you don't publish for my platform.
+ Can I get my packages released to sourceforge for other people to use?} Yes,
+ contributions from users are accepted and appreciated. Please examine the
+ directory platforms/contrib-rpm in the source code for further information.
+
+\item
+ \label{faq7}
+ {\bf Is there an easier way than sorting out all these command line options?} Yes,
+ there is a gui wizard shell script which you can use to rebuild the src rpm package.
+ Look in the source archive for platforms/contrib-rpm/rpm\_wizard.sh. This script will
+ allow you to specify build options using GNOME dialog screens. It requires zenity.
+
+\item
+ \label{faq8}
+ {\bf I just upgraded from 1.36.x to 1.38.x and now my director daemon
+won't start. It appears to start but dies silently and I get a "connection
+refused" error when starting the console. What is wrong?} Beginning with
+1.38 the rpm packages are configured to run the director and storage
+daemons as a non-root user. The file daemon runs as user root and group
+bacula, the storage daemon as user bacula and group disk, and the director
+as user bacula and group bacula. If you are upgrading you will need to
+change some file permissions for things to work. Execute the following
+commands as root:
+
+\footnotesize
+\begin{verbatim}
+ chown bacula.bacula /var/bacula/*
+ chown root.bacula /var/bacula/bacula-fd.9102.state
+ chown bacula.disk /var/bacula/bacula-sd.9103.state
+
+\end{verbatim}
+\normalsize
+
+Further, if you are using File storage volumes rather than tapes those
+files will also need to have ownership set to user bacula and group bacula.
+
+\item
+ \label{faq9}
+ {\bf There are a lot of rpm packages. Which packages do I need for
+what?} For a bacula server you need to select the packsge based upon your
+preferred catalog database: one of bacula-mysql, bacula-postgresql or
+bacula-sqlite. If your system does not provide an mtx package you also
+need bacula-mtx to satisfy that dependancy. For a client machine you need
+only install bacula-client. Optionally, for either server or client
+machines, you may install a graphical console bacula-gconsole and/or
+bacula-wxconsole. The Bacula Administration Tool is installed with the
+bacula-bat package. One last package, bacula-updatedb is required only when
+upgrading a server more than one database revision level.
+
+
+
+\item {\bf Support for RHEL3/4/5, CentOS 3/4/5, Scientific Linux 3/4/5 and x86\_64}
+ The examples below show
+ explicit build support for RHEL4 and CentOS 4. Build support
+ for x86\_64 has also been added.
+\end{enumerate}
+
+\footnotesize
+\begin{verbatim}
+Build with one of these 3 commands:
+
+rpmbuild --rebuild \
+ --define "build_rhel4 1" \
+ --define "build_sqlite 1" \
+ bacula-1.38.3-1.src.rpm
+
+rpmbuild --rebuild \
+ --define "build_rhel4 1" \
+ --define "build_postgresql 1" \
+ bacula-1.38.3-1.src.rpm
+
+rpmbuild --rebuild \
+ --define "build_rhel4 1" \
+ --define "build_mysql4 1" \
+ bacula-1.38.3-1.src.rpm
+
+For CentOS substitute '--define "build_centos4 1"' in place of rhel4.
+For Scientific Linux substitute '--define "build_sl4 1"' in place of rhel4.
+
+For 64 bit support add '--define "build_x86_64 1"'
+\end{verbatim}
+\normalsize
+
+\section{Build Options}
+\index[general]{Build Options}
+The spec file currently supports building on the following platforms:
+\footnotesize
+\begin{verbatim}
+Red Hat builds
+--define "build_rh7 1"
+--define "build_rh8 1"
+--define "build_rh9 1"
+
+Fedora Core build
+--define "build_fc1 1"
+--define "build_fc3 1"
+--define "build_fc4 1"
+--define "build_fc5 1"
+--define "build_fc6 1"
+--define "build_fc7 1"
+
+Whitebox Enterprise build
+--define "build_wb3 1"
+
+Red Hat Enterprise builds
+--define "build_rhel3 1"
+--define "build_rhel4 1"
+--define "build_rhel5 1"
+
+CentOS build
+--define "build_centos3 1"
+--define "build_centos4 1"
+--define "build_centos5 1"
+
+Scientific Linux build
+--define "build_sl3 1"
+--define "build_sl4 1"
+--define "build_sl5 1"
+
+SuSE build
+--define "build_su9 1"
+--define "build_su10 1"
+--define "build_su102 1"
+--define "build_su103 1"
+
+Mandrake 10.x build
+--define "build_mdk 1"
+
+Mandriva build
+--define "build_mdv 1"
+
+MySQL support:
+for mysql 3.23.x support define this
+--define "build_mysql 1"
+if using mysql 4.x define this,
+currently: Mandrake 10.x, Mandriva 2006.0, SuSE 9.x & 10.0, FC4 & RHEL4
+--define "build_mysql4 1"
+if using mysql 5.x define this,
+currently: SuSE 10.1 & FC5
+--define "build_mysql5 1"
+
+PostgreSQL support:
+--define "build_postgresql 1"
+
+Sqlite support:
+--define "build_sqlite 1"
+
+Build the client rpm only in place of one of the above database full builds:
+--define "build_client_only 1"
+
+X86-64 support:
+--define "build_x86_64 1"
+
+Supress build of bgnome-console:
+--define "nobuild_gconsole 1"
+
+Build the WXWindows console:
+requires wxGTK >= 2.6
+--define "build_wxconsole 1"
+
+Build the Bacula Administration Tool:
+requires QT >= 4.2
+--define "build_bat 1"
+
+Build python scripting support:
+--define "build_python 1"
+
+Modify the Packager tag for third party packages:
+--define "contrib_packager Your Name <youremail@site.org>"
+
+\end{verbatim}
+\normalsize
+
+\section{RPM Install Problems}
+\index[general]{RPM Install Problems}
+In general the RPMs, once properly built should install correctly.
+However, when attempting to run the daemons, a number of problems
+can occur:
+\begin{itemize}
+\item [Wrong /var/bacula Permissions]
+ By default, the Director and Storage daemon do not run with
+ root permission. If the /var/bacula is owned by root, then it
+ is possible that the Director and the Storage daemon will not
+ be able to access this directory, which is used as the Working
+ Directory. To fix this, the easiest thing to do is:
+\begin{verbatim}
+ chown bacula:bacula /var/bacula
+\end{verbatim}
+ Note: as of 1.38.8 /var/bacula is installed root:bacula with
+ permissions 770.
+\item [The Storage daemon cannot Access the Tape drive]
+ This can happen in some older RPM releases where the Storage
+ daemon ran under userid bacula, group bacula. There are two
+ ways of fixing this: the best is to modify the /etc/init.d/bacula-sd
+ file so that it starts the Storage daemon with group "disk".
+ The second way to fix the problem is to change the permissions
+ of your tape drive (usually /dev/nst0) so that Bacula can access it.
+ You will probably need to change the permissions of the SCSI control
+ device as well, which is usually /dev/sg0. The exact names depend
+ on your configuration, please see the Tape Testing chapter for
+ more information on devices.
+\end{itemize}
+
+++ /dev/null
-%%
-%%
-
-\chapter{Bacula RPM Packaging FAQ}
-\label{RpmFaqChapter}
-\index[general]{FAQ!Bacula\textsuperscript{\textregistered} - RPM Packaging }
-\index[general]{Bacula\textsuperscript{\textregistered} - RPM Packaging FAQ }
-
-\begin{enumerate}
-\item
- \ilink{How do I build Bacula for platform xxx?}{faq1}
-\item
- \ilink{How do I control which database support gets built?}{faq2}
-
-\item
- \ilink{What other defines are used?}{faq3}
-\item
- \ilink{I'm getting errors about not having permission when I try to build the
- packages. Do I need to be root?}{faq4}
-\item
- \ilink{I'm building my own rpms but on all platforms and compiles I get an
- unresolved dependency for something called
- /usr/afsws/bin/pagsh.}{faq5}
-\item
- \ilink{I'm building my own rpms because you don't publish for my platform.
- Can I get my packages released to sourceforge for other people to use?}{faq6}
-\item
- \ilink{Is there an easier way than sorting out all these command line options?}{faq7}
-\item
- \ilink{I just upgraded from 1.36.x to 1.38.x and now my director daemon won't start. It appears to start but dies silently and I get a "connection refused" error when starting the console. What is wrong?}{faq8}
-\item
- \ilink{There are a lot of rpm packages. Which packages do I need for what?}{faq9}
-\end{enumerate}
-
-\section{Answers}
-\index[general]{Answers }
-
-\begin{enumerate}
-\item
- \label{faq1}
- {\bf How do I build Bacula for platform xxx?}
- The bacula spec file contains defines to build for several platforms:
- Red Hat 7.x (rh7), Red Hat 8.0 (rh8), Red Hat 9 (rh9), Fedora Core (fc1,
- fc3, fc4, fc5, fc6, fc7), Whitebox Enterprise Linux 3.0 (wb3), Red Hat Enterprise Linux
- (rhel3, rhel4, rhel5), Mandrake 10.x (mdk), Mandriva 2006.x (mdv) CentOS (centos3, centos4, centos5)
- Scientific Linux (sl3, sl4, sl5) and SuSE (su9, su10, su102, su103). The package build is controlled by a mandatory define set at the beginning of the file. These defines basically just control the dependency information that gets coded into the finished rpm package as well
- as any special configure options required. The platform define may be edited
- in the spec file directly (by default all defines are set to 0 or "not set").
- For example, to build the Red Hat 7.x package find the line in the spec file
- which reads
-
-\footnotesize
-\begin{verbatim}
- %define rh7 0
-
-\end{verbatim}
-\normalsize
-
-and edit it to read
-
-\footnotesize
-\begin{verbatim}
- %define rh7 1
-
-\end{verbatim}
-\normalsize
-
-Alternately you may pass the define on the command line when calling rpmbuild:
-
-
-\footnotesize
-\begin{verbatim}
- rpmbuild -ba --define "build_rh7 1" bacula.spec
- rpmbuild --rebuild --define build_rh7 1" bacula-x.x.x-x.src.rpm
-
-\end{verbatim}
-\normalsize
-
-\item
- \label{faq2}
- {\bf How do I control which database support gets built?}
- Another mandatory build define controls which database support is compiled,
- one of build\_sqlite, build\_mysql or build\_postgresql. To get the MySQL
- package and support either set the
-
-\footnotesize
-\begin{verbatim}
- %define mysql 0
- OR
- %define mysql4 0
- OR
- %define mysql5 0
-
-\end{verbatim}
-\normalsize
-
-to
-
-\footnotesize
-\begin{verbatim}
- %define mysql 1
- OR
- %define mysql4 1
- OR
- %define mysql5 1
-
-\end{verbatim}
-\normalsize
-
-in the spec file directly or pass it to rpmbuild on the command line:
-
-\footnotesize
-\begin{verbatim}
- rpmbuild -ba --define "build_rh7 1" --define "build_mysql 1" bacula.spec
- rpmbuild -ba --define "build_rh7 1" --define "build_mysql4 1" bacula.spec
- rpmbuild -ba --define "build_rh7 1" --define "build_mysql5 1" bacula.spec
-
-\end{verbatim}
-\normalsize
-
-\item
- \label{faq3}
- {\bf What other defines are used?}
- Three other building defines of note are the depkgs\_version, docs\_version and
- \_rescuever identifiers. These two defines are set with each release and must
- match the version of those sources that are being used to build the packages.
- You would not ordinarily need to edit these. See also the Build Options section
- below for other build time options that can be passed on the command line.
-\item
- \label{faq4}
- {\bf I'm getting errors about not having permission when I try to build the
- packages. Do I need to be root?}
- No, you do not need to be root and, in fact, it is better practice to
- build rpm packages as a non-root user. Bacula packages are designed to
- be built by a regular user but you must make a few changes on your
- system to do this. If you are building on your own system then the
- simplest method is to add write permissions for all to the build
- directory (/usr/src/redhat/, /usr/src/RPM or /usr/src/packages).
- To accomplish this, execute the following command as root:
-
-\footnotesize
-\begin{verbatim}
- chmod -R 777 /usr/src/redhat
- chmod -R 777 /usr/src/RPM
- chmod -R 777 /usr/src/packages
-
-\end{verbatim}
-\normalsize
-
-If you are working on a shared system where you can not use the method
-above then you need to recreate the appropriate above directory tree with all
-of its subdirectories inside your home directory. Then create a file named
-
-{\tt .rpmmacros}
-
-in your home directory (or edit the file if it already exists)
-and add the following line:
-
-\footnotesize
-\begin{verbatim}
- %_topdir /home/myuser/redhat
- %_tmppath /tmp
-
-\end{verbatim}
-\normalsize
-
-Another handy directive for the .rpmmacros file if you wish to suppress the
-creation of debug rpm packages is:
-
-\footnotesize
-\begin{verbatim}
- %debug_package %{nil}
-
-\end{verbatim}
-
-\normalsize
-
-\item
- \label{faq5}
- {\bf I'm building my own rpms but on all platforms and compiles I get an
- unresolved dependency for something called /usr/afsws/bin/pagsh.} This
- is a shell from the OpenAFS (Andrew File System). If you are seeing
- this then you chose to include the docs/examples directory in your
- package. One of the example scripts in this directory is a pagsh
- script. Rpmbuild, when scanning for dependencies, looks at the shebang
- line of all packaged scripts in addition to checking shared libraries.
- To avoid this do not package the examples directory. If you are seeing this
- problem you are building a very old bacula package as the examples have been
- removed from the doc packaging.
-
-\item
- \label{faq6}
- {\bf I'm building my own rpms because you don't publish for my platform.
- Can I get my packages released to sourceforge for other people to use?} Yes,
- contributions from users are accepted and appreciated. Please examine the
- directory platforms/contrib-rpm in the source code for further information.
-
-\item
- \label{faq7}
- {\bf Is there an easier way than sorting out all these command line options?} Yes,
- there is a gui wizard shell script which you can use to rebuild the src rpm package.
- Look in the source archive for platforms/contrib-rpm/rpm\_wizard.sh. This script will
- allow you to specify build options using GNOME dialog screens. It requires zenity.
-
-\item
- \label{faq8}
- {\bf I just upgraded from 1.36.x to 1.38.x and now my director daemon
-won't start. It appears to start but dies silently and I get a "connection
-refused" error when starting the console. What is wrong?} Beginning with
-1.38 the rpm packages are configured to run the director and storage
-daemons as a non-root user. The file daemon runs as user root and group
-bacula, the storage daemon as user bacula and group disk, and the director
-as user bacula and group bacula. If you are upgrading you will need to
-change some file permissions for things to work. Execute the following
-commands as root:
-
-\footnotesize
-\begin{verbatim}
- chown bacula.bacula /var/bacula/*
- chown root.bacula /var/bacula/bacula-fd.9102.state
- chown bacula.disk /var/bacula/bacula-sd.9103.state
-
-\end{verbatim}
-\normalsize
-
-Further, if you are using File storage volumes rather than tapes those
-files will also need to have ownership set to user bacula and group bacula.
-
-\item
- \label{faq9}
- {\bf There are a lot of rpm packages. Which packages do I need for
-what?} For a bacula server you need to select the packsge based upon your
-preferred catalog database: one of bacula-mysql, bacula-postgresql or
-bacula-sqlite. If your system does not provide an mtx package you also
-need bacula-mtx to satisfy that dependancy. For a client machine you need
-only install bacula-client. Optionally, for either server or client
-machines, you may install a graphical console bacula-gconsole and/or
-bacula-wxconsole. The Bacula Administration Tool is installed with the
-bacula-bat package. One last package, bacula-updatedb is required only when
-upgrading a server more than one database revision level.
-
-
-
-\item {\bf Support for RHEL3/4/5, CentOS 3/4/5, Scientific Linux 3/4/5 and x86\_64}
- The examples below show
- explicit build support for RHEL4 and CentOS 4. Build support
- for x86\_64 has also been added.
-\end{enumerate}
-
-\footnotesize
-\begin{verbatim}
-Build with one of these 3 commands:
-
-rpmbuild --rebuild \
- --define "build_rhel4 1" \
- --define "build_sqlite 1" \
- bacula-1.38.3-1.src.rpm
-
-rpmbuild --rebuild \
- --define "build_rhel4 1" \
- --define "build_postgresql 1" \
- bacula-1.38.3-1.src.rpm
-
-rpmbuild --rebuild \
- --define "build_rhel4 1" \
- --define "build_mysql4 1" \
- bacula-1.38.3-1.src.rpm
-
-For CentOS substitute '--define "build_centos4 1"' in place of rhel4.
-For Scientific Linux substitute '--define "build_sl4 1"' in place of rhel4.
-
-For 64 bit support add '--define "build_x86_64 1"'
-\end{verbatim}
-\normalsize
-
-\section{Build Options}
-\index[general]{Build Options}
-The spec file currently supports building on the following platforms:
-\footnotesize
-\begin{verbatim}
-Red Hat builds
---define "build_rh7 1"
---define "build_rh8 1"
---define "build_rh9 1"
-
-Fedora Core build
---define "build_fc1 1"
---define "build_fc3 1"
---define "build_fc4 1"
---define "build_fc5 1"
---define "build_fc6 1"
---define "build_fc7 1"
-
-Whitebox Enterprise build
---define "build_wb3 1"
-
-Red Hat Enterprise builds
---define "build_rhel3 1"
---define "build_rhel4 1"
---define "build_rhel5 1"
-
-CentOS build
---define "build_centos3 1"
---define "build_centos4 1"
---define "build_centos5 1"
-
-Scientific Linux build
---define "build_sl3 1"
---define "build_sl4 1"
---define "build_sl5 1"
-
-SuSE build
---define "build_su9 1"
---define "build_su10 1"
---define "build_su102 1"
---define "build_su103 1"
-
-Mandrake 10.x build
---define "build_mdk 1"
-
-Mandriva build
---define "build_mdv 1"
-
-MySQL support:
-for mysql 3.23.x support define this
---define "build_mysql 1"
-if using mysql 4.x define this,
-currently: Mandrake 10.x, Mandriva 2006.0, SuSE 9.x & 10.0, FC4 & RHEL4
---define "build_mysql4 1"
-if using mysql 5.x define this,
-currently: SuSE 10.1 & FC5
---define "build_mysql5 1"
-
-PostgreSQL support:
---define "build_postgresql 1"
-
-Sqlite support:
---define "build_sqlite 1"
-
-Build the client rpm only in place of one of the above database full builds:
---define "build_client_only 1"
-
-X86-64 support:
---define "build_x86_64 1"
-
-Supress build of bgnome-console:
---define "nobuild_gconsole 1"
-
-Build the WXWindows console:
-requires wxGTK >= 2.6
---define "build_wxconsole 1"
-
-Build the Bacula Administration Tool:
-requires QT >= 4.2
---define "build_bat 1"
-
-Build python scripting support:
---define "build_python 1"
-
-Modify the Packager tag for third party packages:
---define "contrib_packager Your Name <youremail@site.org>"
-
-\end{verbatim}
-\normalsize
-
-\section{RPM Install Problems}
-\index[general]{RPM Install Problems}
-In general the RPMs, once properly built should install correctly.
-However, when attempting to run the daemons, a number of problems
-can occur:
-\begin{itemize}
-\item [Wrong /var/bacula Permissions]
- By default, the Director and Storage daemon do not run with
- root permission. If the /var/bacula is owned by root, then it
- is possible that the Director and the Storage daemon will not
- be able to access this directory, which is used as the Working
- Directory. To fix this, the easiest thing to do is:
-\begin{verbatim}
- chown bacula:bacula /var/bacula
-\end{verbatim}
- Note: as of 1.38.8 /var/bacula is installed root:bacula with
- permissions 770.
-\item [The Storage daemon cannot Access the Tape drive]
- This can happen in some older RPM releases where the Storage
- daemon ran under userid bacula, group bacula. There are two
- ways of fixing this: the best is to modify the /etc/init.d/bacula-sd
- file so that it starts the Storage daemon with group "disk".
- The second way to fix the problem is to change the permissions
- of your tape drive (usually /dev/nst0) so that Bacula can access it.
- You will probably need to change the permissions of the SCSI control
- device as well, which is usually /dev/sg0. The exact names depend
- on your configuration, please see the Tape Testing chapter for
- more information on devices.
-\end{itemize}
-
--- /dev/null
+%%
+%%
+
+\chapter{Testing Your Tape Drive With Bacula}
+\label{TapeTestingChapter}
+\index[general]{Testing Your Tape Drive With Bacula}
+
+This chapter is concerned with testing and configuring your tape drive to make
+sure that it will work properly with Bacula using the {\bf btape} program.
+\label{summary}
+
+\section{Get Your Tape Drive Working}
+
+In general, you should follow the following steps to get your tape drive to
+work with Bacula. Start with a tape mounted in your drive. If you have an
+autochanger, load a tape into the drive. We use {\bf /dev/nst0} as the tape
+drive name, you will need to adapt it according to your system.
+
+Do not proceed to the next item until you have succeeded with the previous
+one.
+
+\begin{enumerate}
+\item Make sure that Bacula (the Storage daemon) is not running
+ or that you have {\bf unmount}ed the drive you will use
+ for testing.
+
+\item Use tar to write to, then read from your drive:
+
+ \footnotesize
+\begin{verbatim}
+ mt -f /dev/nst0 rewind
+ tar cvf /dev/nst0 .
+ mt -f /dev/nst0 rewind
+ tar tvf /dev/nst0
+
+\end{verbatim}
+\normalsize
+
+\item Make sure you have a valid and correct Device resource corresponding
+ to your drive. For Linux users, generally, the default one works. For
+ FreeBSD users, there are two possible Device configurations (see below).
+ For other drives and/or OSes, you will need to first ensure that your
+ system tape modes are properly setup (see below), then possibly modify
+ you Device resource depending on the output from the btape program (next
+ item). When doing this, you should consult the \ilink{Storage Daemon
+ Configuration}{StoredConfChapter} of this manual.
+
+\item If you are using a Fibre Channel to connect your tape drive to
+ Bacula, please be sure to disable any caching in the NSR (network
+ storage router, which is a Fibre Channel to SCSI converter).
+
+\item Run the btape {\bf test} command:
+
+ \footnotesize
+\begin{verbatim}
+ ./btape -c bacula-sd.conf /dev/nst0
+ test
+
+\end{verbatim}
+\normalsize
+
+ It isn't necessary to run the autochanger part of the test at this time,
+ but do not go past this point until the basic test succeeds. If you do
+ have an autochanger, please be sure to read the \ilink{Autochanger
+ chapter}{AutochangersChapter} of this manual.
+
+\item Run the btape {\bf fill} command, preferably with two volumes. This
+ can take a long time. If you have an autochanger and it is configured, Bacula
+ will automatically use it. If you do not have it configured, you can manually
+ issue the appropriate {\bf mtx} command, or press the autochanger buttons to
+ change the tape when requested to do so.
+
+\item FreeBSD users, if you have a pre-5.0 system run the {\bf tapetest}
+ program, and make sure your system is patched if necessary. The tapetest
+ program can be found in the platform/freebsd directory. The instructions
+ for its use are at the top of the file.
+
+\item Run Bacula, and backup a reasonably small directory, say 60
+ Megabytes. Do three successive backups of this directory.
+
+\item Stop Bacula, then restart it. Do another full backup of the same
+ directory. Then stop and restart Bacula.
+
+\item Do a restore of the directory backed up, by entering the following
+ restore command, being careful to restore it to an alternate location:
+
+
+\footnotesize
+\begin{verbatim}
+ restore select all done
+ yes
+
+\end{verbatim}
+\normalsize
+
+ Do a {\bf diff} on the restored directory to ensure it is identical to the
+ original directory. If you are going to backup multiple different systems
+ (Linux, Windows, Mac, Solaris, FreeBSD, ...), be sure you test the restore
+ on each system type.
+
+\item If you have an autochanger, you should now go back to the btape program
+ and run the autochanger test:
+
+\footnotesize
+\begin{verbatim}
+ ./btape -c bacula-sd.conf /dev/nst0
+ auto
+
+\end{verbatim}
+\normalsize
+
+ Adjust your autochanger as necessary to ensure that it works correctly. See
+ the Autochanger chapter of this manual for a complete discussion of testing
+ your autochanger.
+
+\item We strongly recommend that you use a dedicated SCSI
+ controller for your tape drives. Scanners are known to induce
+ serious problems with the SCSI bus, causing it to reset. If the
+ SCSI bus is reset while Bacula has the tape drive open, it will
+ most likely be fatal to your tape since the drive will rewind.
+ These kinds of problems show up in the system log. For example,
+ the following was most likely caused by a scanner:
+
+\footnotesize
+\begin{verbatim}
+Feb 14 17:29:55 epohost kernel: (scsi0:A:2:0): No or incomplete CDB sent to device.
+Feb 14 17:29:55 epohost kernel: scsi0: Issued Channel A Bus Reset. 1 SCBs aborted
+\end{verbatim}
+\normalsize
+
+\end{enumerate}
+
+If you have reached this point, you stand a good chance of having everything
+work. If you get into trouble at any point, {\bf carefully} read the
+documentation given below. If you cannot get past some point, ask the {\bf
+bacula-users} email list, but specify which of the steps you have successfully
+completed. In particular, you may want to look at the
+\ilink{ Tips for Resolving Problems}{problems1} section below.
+
+
+\label{NoTapeInDrive}
+\subsection{Problems When no Tape in Drive}
+\index[general]{Problems When no Tape in Drive}
+When Bacula was first written the Linux 2.4 kernel permitted opening the
+drive whether or not there was a tape in the drive. Thus the Bacula code is
+based on the concept that if the drive cannot be opened, there is a serious
+problem, and the job is failed.
+
+With version 2.6 of the Linux kernel, if there is no tape in the drive, the
+OS will wait two minutes (default) and then return a failure, and consequently,
+Bacula version 1.36 and below will fail the job. This is important to keep
+in mind, because if you use an option such as {\bf Offline on Unmount =
+yes}, there will be a point when there is no tape in the drive, and if
+another job starts or if Bacula asks the operator to mount a tape, when
+Bacula attempts to open the drive (about a 20 minute delay), it will fail
+and Bacula will fail the job.
+
+In version 1.38.x, the Bacula code partially gets around this problem -- at
+least in the initial open of the drive. However, functions like Polling
+the drive do not work correctly if there is no tape in the drive.
+Providing you do not use {\bf Offline on Unmount = yes}, you should not
+experience job failures as mentioned above. If you do experience such
+failures, you can also increase the {\bf Maximum Open Wait} time interval,
+which will give you more time to mount the next tape before the job is
+failed.
+
+\subsection{Specifying the Configuration File}
+\index[general]{File!Specifying the Configuration}
+\index[general]{Specifying the Configuration File}
+
+Starting with version 1.27, each of the tape utility programs including the
+{\bf btape} program requires a valid Storage daemon configuration file
+(actually, the only part of the configuration file that {\bf btape} needs is
+the {\bf Device} resource definitions). This permits {\bf btape} to find the
+configuration parameters for your archive device (generally a tape drive).
+Without those parameters, the testing and utility programs do not know how to
+properly read and write your drive. By default, they use {\bf bacula-sd.conf}
+in the current directory, but you may specify a different configuration file
+using the {\bf -c} option.
+
+\subsection{Specifying a Device Name For a Tape}
+\index[general]{Tape!Specifying a Device Name For a}
+\index[general]{Specifying a Device Name For a Tape}
+
+{\bf btape} {\bf device-name} where the Volume can be found. In the case of a
+tape, this is the physical device name such as {\bf /dev/nst0} or {\bf
+/dev/rmt/0ubn} depending on your system that you specify on the Archive Device
+directive. For the program to work, it must find the identical name in the
+Device resource of the configuration file. If the name is not found in the
+list of physical names, the utility program will compare the name you entered
+to the Device names (rather than the Archive device names).
+
+When specifying a tape device, it is preferable that the "non-rewind"
+variant of the device file name be given. In addition, on systems such as
+Sun, which have multiple tape access methods, you must be sure to specify
+to use Berkeley I/O conventions with the device. The
+{\bf b} in the Solaris (Sun) archive specification {\bf /dev/rmt/0mbn} is
+what is needed in this case. Bacula does not support SysV tape drive
+behavior.
+
+See below for specifying Volume names.
+
+\subsection{Specifying a Device Name For a File}
+\index[general]{File!Specifying a Device Name For a}
+\index[general]{Specifying a Device Name For a File}
+
+If you are attempting to read or write an archive file rather than a tape, the
+{\bf device-name} should be the full path to the archive location including
+the filename. The filename (last part of the specification) will be stripped
+and used as the Volume name, and the path (first part before the filename)
+must have the same entry in the configuration file. So, the path is equivalent
+to the archive device name, and the filename is equivalent to the volume name.
+
+
+\section{btape}
+\label{btape1}
+\index[general]{Btape}
+
+This program permits a number of elementary tape operations via a tty command
+interface. The {\bf test} command, described below, can be very useful for
+testing tape drive compatibility problems. Aside from initial testing of tape
+drive compatibility with {\bf Bacula}, {\bf btape} will be mostly used by
+developers writing new tape drivers.
+
+{\bf btape} can be dangerous to use with existing {\bf Bacula} tapes because
+it will relabel a tape or write on the tape if so requested regardless of
+whether or not the tape contains valuable data, so please be careful and use
+it only on blank tapes.
+
+To work properly, {\bf btape} needs to read the Storage daemon's configuration
+file. As a default, it will look for {\bf bacula-sd.conf} in the current
+directory. If your configuration file is elsewhere, please use the {\bf -c}
+option to specify where.
+
+The physical device name or the Device resource name must be specified on the
+command line, and this same device name must be present in the Storage
+daemon's configuration file read by {\bf btape}
+
+\footnotesize
+\begin{verbatim}
+Usage: btape [options] device_name
+ -b <file> specify bootstrap file
+ -c <file> set configuration file to file
+ -d <nn> set debug level to nn
+ -p proceed inspite of I/O errors
+ -s turn off signals
+ -v be verbose
+ -? print this message.
+\end{verbatim}
+\normalsize
+
+\subsection{Using btape to Verify your Tape Drive}
+\index[general]{Using btape to Verify your Tape Drive}
+\index[general]{Drive!Using btape to Verify your Tape}
+
+An important reason for this program is to ensure that a Storage daemon
+configuration file is defined so that Bacula will correctly read and write
+tapes.
+
+It is highly recommended that you run the {\bf test} command before running
+your first Bacula job to ensure that the parameters you have defined for your
+storage device (tape drive) will permit {\bf Bacula} to function properly. You
+only need to mount a blank tape, enter the command, and the output should be
+reasonably self explanatory. For example:
+
+\footnotesize
+\begin{verbatim}
+(ensure that Bacula is not running)
+./btape -c /usr/bin/bacula/bacula-sd.conf /dev/nst0
+\end{verbatim}
+\normalsize
+
+The output will be:
+
+\footnotesize
+\begin{verbatim}
+Tape block granularity is 1024 bytes.
+btape: btape.c:376 Using device: /dev/nst0
+*
+\end{verbatim}
+\normalsize
+
+Enter the test command:
+
+\footnotesize
+\begin{verbatim}
+test
+\end{verbatim}
+\normalsize
+
+The output produced should be something similar to the following: I've cut the
+listing short because it is frequently updated to have new tests.
+
+\footnotesize
+\begin{verbatim}
+=== Append files test ===
+This test is essential to Bacula.
+I'm going to write one record in file 0,
+ two records in file 1,
+ and three records in file 2
+btape: btape.c:387 Rewound /dev/nst0
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:410 Wrote EOF to /dev/nst0
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:410 Wrote EOF to /dev/nst0
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:855 Wrote one record of 64412 bytes.
+btape: btape.c:857 Wrote block to device.
+btape: btape.c:410 Wrote EOF to /dev/nst0
+btape: btape.c:387 Rewound /dev/nst0
+btape: btape.c:693 Now moving to end of media.
+btape: btape.c:427 Moved to end of media
+We should be in file 3. I am at file 3. This is correct!
+Now the important part, I am going to attempt to append to the tape.
+...
+=== End Append files test ===
+\end{verbatim}
+\normalsize
+
+If you do not successfully complete the above test, please resolve the
+problem(s) before attempting to use {\bf Bacula}. Depending on your tape
+drive, the test may recommend that you add certain records to your
+configuration. We strongly recommend that you do so and then re-run the above
+test to insure it works the first time.
+
+Some of the suggestions it provides for resolving the problems may or may not
+be useful. If at all possible avoid using fixed blocking. If the test suddenly
+starts to print a long series of:
+
+\footnotesize
+\begin{verbatim}
+Got EOF on tape.
+Got EOF on tape.
+...
+\end{verbatim}
+\normalsize
+
+then almost certainly, you are running your drive in fixed block mode rather
+than variable block mode. See below for more help of resolving fix
+versus variable block problems.
+
+It is also possible that you have your drive
+set in SysV tape drive mode. The drive must use BSD tape conventions.
+See the section above on setting your {\bf Archive device} correctly.
+
+For FreeBSD users, please see the notes below for doing further testing of
+your tape drive.
+
+\subsection{Testing tape drive speed}
+\label{sec:btapespeed}
+
+To determine the best configuration of your tape drive, you can run the
+\texttt{speed} command available in the \texttt{btape} program.
+
+This command can have the following arguments:
+\begin{itemize}
+\item[\texttt{file\_size=n}] Specify the Maximum File Size for this test
+ (between 1 and 5GB). This counter is in GB.
+\item[\texttt{nb\_file=n}] Specify the number of file to be written. The amount
+ of data should be greater than your memory ($file\_size*nb\_file$).
+\item[\texttt{skip\_zero}] This flag permits to skip tests with constant
+ data.
+\item[\texttt{skip\_random}] This flag permits to skip tests with random
+ data.
+\item[\texttt{skip\_raw}] This flag permits to skip tests with raw access.
+\item[\texttt{skip\_block}] This flag permits to skip tests with Bacula block
+ access.
+\end{itemize}
+
+\begin{verbatim}
+*speed file_size=3 skip_raw
+btape.c:1078 Test with zero data and bacula block structure.
+btape.c:956 Begin writing 3 files of 3.221 GB with blocks of 129024 bytes.
+++++++++++++++++++++++++++++++++++++++++++
+btape.c:604 Wrote 1 EOF to "Drive-0" (/dev/nst0)
+btape.c:406 Volume bytes=3.221 GB. Write rate = 44.128 MB/s
+...
+btape.c:383 Total Volume bytes=9.664 GB. Total Write rate = 43.531 MB/s
+
+btape.c:1090 Test with random data, should give the minimum throughput.
+btape.c:956 Begin writing 3 files of 3.221 GB with blocks of 129024 bytes.
++++++++++++++++++++++++++++++++++++++++++++
+btape.c:604 Wrote 1 EOF to "Drive-0" (/dev/nst0)
+btape.c:406 Volume bytes=3.221 GB. Write rate = 7.271 MB/s
++++++++++++++++++++++++++++++++++++++++++++
+...
+btape.c:383 Total Volume bytes=9.664 GB. Total Write rate = 7.365 MB/s
+
+\end{verbatim}
+
+When using compression, the random test will give your the minimum throughput
+of your drive . The test using constant string will give you the maximum speed
+of your hardware chain. (cpu, memory, scsi card, cable, drive, tape).
+
+You can change the block size in the Storage Daemon configuration file.
+
+\label{SCSITricks}
+\subsection{Linux SCSI Tricks}
+\index[general]{Tricks!Linux SCSI}
+\index[general]{Linux SCSI Tricks}
+
+You can find out what SCSI devices you have by doing:
+
+\footnotesize
+\begin{verbatim}
+lsscsi
+\end{verbatim}
+\normalsize
+
+Typical output is:
+
+\footnotesize
+\begin{verbatim}
+[0:0:0:0] disk ATA ST3160812AS 3.AD /dev/sda
+[2:0:4:0] tape HP Ultrium 2-SCSI F6CH /dev/st0
+[2:0:5:0] tape HP Ultrium 2-SCSI F6CH /dev/st1
+[2:0:6:0] mediumx OVERLAND LXB 0107 -
+[2:0:9:0] tape HP Ultrium 1-SCSI E50H /dev/st2
+[2:0:10:0] mediumx OVERLAND LXB 0107 -
+\end{verbatim}
+\normalsize
+
+There are two drives in one autochanger: /dev/st0 and /dev/st1
+and a third tape drive at /dev/st2. For using them with Bacula, one
+would normally reference them as /dev/nst0 ... /dev/nst2. Not also,
+there are two different autochangers identified as "mediumx OVERLAND LXB".
+They can be addressed via their /dev/sgN designation, which can be
+obtained by counting from the beginning as 0 to each changer. In the
+above case, the two changers are located on /dev/sg3 and /dev/sg5. The one
+at /dev/sg3, controls drives /dev/nst0 and /dev/nst1; and the one at
+/dev/sg5 controles drive /dev/nst2.
+
+If you do not have the {\bf lsscsi} command, you can obtain the same
+information as follows:
+
+\footnotesize
+\begin{verbatim}
+cat /proc/scsi/scsi
+\end{verbatim}
+\normalsize
+
+For the above example with the three drives and two autochangers,
+I get:
+
+\footnotesize
+\begin{verbatim}
+Attached devices:
+Host: scsi0 Channel: 00 Id: 00 Lun: 00
+ Vendor: ATA Model: ST3160812AS Rev: 3.AD
+ Type: Direct-Access ANSI SCSI revision: 05
+Host: scsi2 Channel: 00 Id: 04 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 05 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 06 Lun: 00
+ Vendor: OVERLAND Model: LXB Rev: 0107
+ Type: Medium Changer ANSI SCSI revision: 02
+Host: scsi2 Channel: 00 Id: 09 Lun: 00
+ Vendor: HP Model: Ultrium 1-SCSI Rev: E50H
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 10 Lun: 00
+ Vendor: OVERLAND Model: LXB Rev: 0107
+ Type: Medium Changer ANSI SCSI revision: 02
+\end{verbatim}
+\normalsize
+
+
+As an additional example, I get the following (on a different machine from the
+above example):
+
+\footnotesize
+\begin{verbatim}
+Attached devices:
+Host: scsi2 Channel: 00 Id: 01 Lun: 00
+ Vendor: HP Model: C5713A Rev: H107
+ Type: Sequential-Access ANSI SCSI revision: 02
+Host: scsi2 Channel: 00 Id: 04 Lun: 00
+ Vendor: SONY Model: SDT-10000 Rev: 0110
+ Type: Sequential-Access ANSI SCSI revision: 02
+\end{verbatim}
+\normalsize
+
+The above represents first an autochanger and second a simple
+tape drive. The HP changer (the first entry) uses the same SCSI channel
+for data and for control, so in Bacula, you would use:
+\footnotesize
+\begin{verbatim}
+Archive Device = /dev/nst0
+Changer Device = /dev/sg0
+\end{verbatim}
+\normalsize
+
+If you want to remove the SDT-10000 device, you can do so as root with:
+
+\footnotesize
+\begin{verbatim}
+echo "scsi remove-single-device 2 0 4 0">/proc/scsi/scsi
+\end{verbatim}
+\normalsize
+
+and you can put add it back with:
+
+\footnotesize
+\begin{verbatim}
+echo "scsi add-single-device 2 0 4 0">/proc/scsi/scsi
+\end{verbatim}
+\normalsize
+
+where the 2 0 4 0 are the Host, Channel, Id, and Lun as seen on the output
+from {\bf cat /proc/scsi/scsi}. Note, the Channel must be specified as
+numeric.
+
+Below is a slightly more complicated output, which is a single autochanger
+with two drives, and which operates the changer on a different channel
+from from the drives:
+
+\footnotesize
+\begin{verbatim}
+Attached devices:
+Host: scsi0 Channel: 00 Id: 00 Lun: 00
+ Vendor: ATA Model: WDC WD1600JD-75H Rev: 08.0
+ Type: Direct-Access ANSI SCSI revision: 05
+Host: scsi2 Channel: 00 Id: 04 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 05 Lun: 00
+ Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
+ Type: Sequential-Access ANSI SCSI revision: 03
+Host: scsi2 Channel: 00 Id: 06 Lun: 00
+ Vendor: OVERLAND Model: LXB Rev: 0106
+ Type: Medium Changer ANSI SCSI revision: 02
+\end{verbatim}
+\normalsize
+
+The above tape drives are accessed on /dev/nst0 and /dev/nst1, while
+the control channel for those two drives is /dev/sg3.
+
+
+
+\label{problems1}
+\section{Tips for Resolving Problems}
+\index[general]{Problems!Tips for Resolving}
+\index[general]{Tips for Resolving Problems}
+
+\label{CannotRestore}
+\subsection{Bacula Saves But Cannot Restore Files}
+\index[general]{Files!Bacula Saves But Cannot Restore}
+\index[general]{Bacula Saves But Cannot Restore Files}
+
+If you are getting error messages such as:
+
+\footnotesize
+\begin{verbatim}
+Volume data error at 0:1! Wanted block-id: "BB02", got "". Buffer discarded
+\end{verbatim}
+\normalsize
+
+It is very likely that Bacula has tried to do block positioning and ended up
+at an invalid block. This can happen if your tape drive is in fixed block mode
+while Bacula's default is variable blocks. Note that in such cases, Bacula is
+perfectly able to write to your Volumes (tapes), but cannot position to read
+them.
+
+There are two possible solutions.
+
+\begin{enumerate}
+\item The first and best is to always ensure that your drive is in variable
+ block mode. Note, it can switch back to fixed block mode on a reboot or if
+ another program uses the drive. So on such systems you need to modify the
+ Bacula startup files to explicitly set:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nst0 defblksize 0
+\end{verbatim}
+\normalsize
+
+or whatever is appropriate on your system. Note, if you are running a Linux
+system, and the above command does not work, it is most likely because you
+have not loaded the appropriate {\bf mt} package, which is often called
+{\bf mt\_st}, but may differ according to your distribution.
+
+\item The second possibility, especially, if Bacula wrote while the drive was
+ in fixed block mode, is to turn off block positioning in Bacula. This is done
+ by adding:
+
+\footnotesize
+\begin{verbatim}
+Block Positioning = no
+\end{verbatim}
+\normalsize
+
+to the Device resource. This is not the recommended procedure because it can
+enormously slow down recovery of files, but it may help where all else
+fails. This directive is available in version 1.35.5 or later (and not yet
+tested).
+\end{enumerate}
+
+If you are getting error messages such as:
+\footnotesize
+\begin{verbatim}
+Volume data error at 0:0!
+Block checksum mismatch in block=0 len=32625 calc=345678 blk=123456
+\end{verbatim}
+\normalsize
+
+You are getting tape read errors, and this is most likely due to
+one of the following things:
+\begin{enumerate}
+\item An old or bad tape.
+\item A dirty drive that needs cleaning (particularly for DDS drives).
+\item A loose SCSI cable.
+\item Old firmware in your drive. Make sure you have the latest firmware
+ loaded.
+\item Computer memory errors.
+\item Over-clocking your CPU.
+\item A bad SCSI card.
+\end{enumerate}
+
+
+\label{opendevice}
+\subsection{Bacula Cannot Open the Device}
+\index[general]{Device!Bacula Cannot Open the}
+\index[general]{Bacula Cannot Open the Device}
+
+If you get an error message such as:
+
+\footnotesize
+\begin{verbatim}
+dev open failed: dev.c:265 stored: unable to open
+device /dev/nst0:> ERR=No such device or address
+\end{verbatim}
+\normalsize
+
+the first time you run a job, it is most likely due to the fact that you
+specified the incorrect device name on your {\bf Archive Device}.
+
+If Bacula works fine with your drive, then all off a sudden you get error
+messages similar to the one shown above, it is quite possible that your driver
+module is being removed because the kernel deems it idle. This is done via
+{\bf crontab} with the use of {\bf rmmod -a}. To fix the problem, you can
+remove this entry from {\bf crontab}, or you can manually {\bf modprob} your
+driver module (or add it to the local startup script). Thanks to Alan Brown
+for this tip.
+\label{IncorrectFiles}
+
+\subsection{Incorrect File Number}
+\index[general]{Number!Incorrect File}
+\index[general]{Incorrect File Number}
+
+When Bacula moves to the end of the medium, it normally uses the {\bf
+ioctl(MTEOM)} function. Then Bacula uses the {\bf ioctl(MTIOCGET)} function to
+retrieve the current file position from the {\bf mt\_fileno} field. Some SCSI
+tape drivers will use a fast means of seeking to the end of the medium and in
+doing so, they will not know the current file position and hence return a {\bf
+-1}. As a consequence, if you get {\bf "This is NOT correct!"} in the
+positioning tests, this may be the cause. You must correct this condition in
+order for Bacula to work.
+
+There are two possible solutions to the above problem of incorrect file
+number:
+
+\begin{itemize}
+\item Figure out how to configure your SCSI driver to keep track of the file
+ position during the MTEOM request. This is the preferred solution.
+\item Modify the {\bf Device} resource of your {\bf bacula-sd.conf} file to
+ include:
+
+\footnotesize
+\begin{verbatim}
+Hardware End of File = no
+\end{verbatim}
+\normalsize
+
+This will cause Bacula to use the MTFSF request to seek to the end of the
+medium, and Bacula will keep track of the file number itself.
+\end{itemize}
+
+\label{IncorrectBlocks}
+\subsection{Incorrect Number of Blocks or Positioning Errors}
+\index[general]{Testing!Incorrect Number of Blocks or Positioning Errors}
+\index[general]{Incorrect Number of Blocks or Positioning Errors}
+
+{\bf Bacula's} preferred method of working with tape drives (sequential
+devices) is to run in variable block mode, and this is what is set by default.
+You should first ensure that your tape drive is set for variable block mode
+(see below).
+
+If your tape drive is in fixed block mode and you have told Bacula to use
+different fixed block sizes or variable block sizes (default), you will get
+errors when Bacula attempts to forward space to the correct block (the kernel
+driver's idea of tape blocks will not correspond to Bacula's).
+
+All modern tape drives support variable tape blocks, but some older drives (in
+particular the QIC drives) as well as the ATAPI ide-scsi driver run only in
+fixed block mode. The Travan tape drives also apparently must run in fixed
+block mode (to be confirmed).
+
+Even in variable block mode, with the exception of the first record on the
+second or subsequent volume of a multi-volume backup, Bacula will write blocks
+of a fixed size. However, in reading a tape, Bacula will assume that for each
+read request, exactly one block from the tape will be transferred. This the
+most common way that tape drives work and is well supported by {\bf Bacula}.
+
+Drives that run in fixed block mode can cause serious problems for Bacula if
+the drive's block size does not correspond exactly to {\bf Bacula's} block
+size. In fixed block size mode, drivers may transmit a partial block or
+multiple blocks for a single read request. From {\bf Bacula's} point of view,
+this destroys the concept of tape blocks. It is much better to run in variable
+block mode, and almost all modern drives (the OnStream is an exception) run in
+variable block mode. In order for Bacula to run in fixed block mode, you must
+include the following records in the Storage daemon's Device resource
+definition:
+
+\footnotesize
+\begin{verbatim}
+Minimum Block Size = nnn
+Maximum Block Size = nnn
+\end{verbatim}
+\normalsize
+
+where {\bf nnn} must be the same for both records and must be identical to the
+driver's fixed block size.
+
+We recommend that you avoid this configuration if at all possible by using
+variable block sizes.
+
+If you must run with fixed size blocks, make sure they are not 512 bytes. This
+is too small and the overhead that Bacula has with each record will become
+excessive. If at all possible set any fixed block size to something like
+64,512 bytes or possibly 32,768 if 64,512 is too large for your drive. See
+below for the details on checking and setting the default drive block size.
+
+To recover files from tapes written in fixed block mode, see below.
+
+\label{TapeModes}
+\subsection{Ensuring that the Tape Modes Are Properly Set -- {\bf Linux
+Only}}
+\index[general]{Ensuring that the Tape Modes Are Properly Set -- Linux Only}
+
+If you have a modern SCSI tape drive and you are having problems with the {\bf
+test} command as noted above, it may be that some program has set one or more
+of your SCSI driver's options to non-default values. For example, if your
+driver is set to work in SysV manner, Bacula will not work correctly because
+it expects BSD behavior. To reset your tape drive to the default values, you
+can try the following, but {\bf ONLY} if you have a SCSI tape drive on a {\bf
+Linux} system:
+
+\footnotesize
+\begin{verbatim}
+become super user
+mt -f /dev/nst0 rewind
+mt -f /dev/nst0 stoptions buffer-writes async-writes read-ahead
+\end{verbatim}
+\normalsize
+
+The above commands will clear all options and then set those specified. None
+of the specified options are required by Bacula, but a number of other options
+such as SysV behavior must not be set. Bacula does not support SysV tape
+behavior. On systems other than Linux, you will need to consult your {\bf mt}
+man pages or documentation to figure out how to do the same thing. This should
+not really be necessary though -- for example, on both Linux and Solaris
+systems, the default tape driver options are compatible with Bacula.
+On Solaris systems, you must take care to specify the correct device
+name on the {\bf Archive device} directive. See above for more details.
+
+You may also want to ensure that no prior program has set the default block
+size, as happened to one user, by explicitly turning it off with:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nst0 defblksize 0
+\end{verbatim}
+\normalsize
+
+If you are running a Linux
+system, and the above command does not work, it is most likely because you
+have not loaded the appropriate {\bf mt} package, which is often called
+{\bf mt\_st}, but may differ according to your distribution.
+
+If you would like to know what options you have set before making any of the
+changes noted above, you can now view them on Linux systems, thanks to a tip
+provided by Willem Riede. Do the following:
+
+\footnotesize
+\begin{verbatim}
+become super user
+mt -f /dev/nst0 stsetoptions 0
+grep st0 /var/log/messages
+\end{verbatim}
+\normalsize
+
+and you will get output that looks something like the following:
+
+\footnotesize
+\begin{verbatim}
+kernel: st0: Mode 0 options: buffer writes: 1, async writes: 1, read ahead: 1
+kernel: st0: can bsr: 0, two FMs: 0, fast mteom: 0, auto lock: 0,
+kernel: st0: defs for wr: 0, no block limits: 0, partitions: 0, s2 log: 0
+kernel: st0: sysv: 0 nowait: 0
+\end{verbatim}
+\normalsize
+
+Note, I have chopped off the beginning of the line with the date and machine
+name for presentation purposes.
+
+Some people find that the above settings only last until the next reboot, so
+please check this otherwise you may have unexpected problems.
+
+Beginning with Bacula version 1.35.8, if Bacula detects that you are running
+in variable block mode, it will attempt to set your drive appropriately. All
+OSes permit setting variable block mode, but some OSes do not permit setting
+the other modes that Bacula needs to function properly.
+
+\label{compression}
+\subsection{Tape Hardware Compression and Blocking Size}
+\index[general]{Tape Hardware Compression and Blocking Size}
+\index[general]{Size!Tape Hardware Compression and Blocking Size}
+
+You should be able to verify the tape compression status with sysfs on Linux.
+\begin{verbatim}
+cat /sys/class/scsi_tape/nst0/default_compression
+\end{verbatim}
+
+You can, turn it on by using (on Linux):
+
+\footnotesize
+\begin{verbatim}
+become super user
+mt -f /dev/nst0 defcompression 1
+\end{verbatim}
+\normalsize
+
+and of course, if you use a zero instead of the one at the end, you will turn
+it off.
+
+If you have built the {\bf mtx} program in the {\bf depkgs} package, you can
+use tapeinfo to get quite a bit of information about your tape drive even if
+it is not an autochanger. This program is called using the SCSI control
+device. On Linux for tape drive /dev/nst0, this is usually /dev/sg0, while on
+FreeBSD for /dev/nsa0, the control device is often /dev/pass2. For example on
+my DDS-4 drive (/dev/nst0), I get the following:
+
+\footnotesize
+\begin{verbatim}
+tapeinfo -f /dev/sg0
+Product Type: Tape Drive
+Vendor ID: 'HP '
+Product ID: 'C5713A '
+Revision: 'H107'
+Attached Changer: No
+MinBlock:1
+MaxBlock:16777215
+SCSI ID: 5
+SCSI LUN: 0
+Ready: yes
+BufferedMode: yes
+Medium Type: Not Loaded
+Density Code: 0x26
+BlockSize: 0
+\end{verbatim}
+\normalsize
+
+where the {\bf DataCompEnabled: yes} means that tape hardware compression is
+turned on. You can turn it on and off (yes|no) by using the {\bf mt}
+commands given above. Also, this output will tell you if the {\bf BlockSize}
+is non-zero and hence set for a particular block size. Bacula is not likely to
+work in such a situation because it will normally attempt to write blocks of
+64,512 bytes, except the last block of the job which will generally be
+shorter. The first thing to try is setting the default block size to zero
+using the {\bf mt -f /dev/nst0 defblksize 0} command as shown above.
+On FreeBSD, this would be something like: {\bf mt -f /dev/nsa0 blocksize 0}.
+
+On some operating systems with some tape drives, the amount of data that
+can be written to the tape and whether or not compression is enabled is
+determined by the density usually the {\bf mt -f /dev/nst0 setdensity xxx} command.
+Often {\bf mt -f /dev/nst0 status} will print out the current
+density code that is used with the drive. Most systems, but unfortunately
+not all, set the density to the maximum by default. On some systems, you
+can also get a list of all available density codes with:
+{\bf mt -f /dev/nst0 densities} or a similar {\bf mt} command.
+Note, for DLT and SDLT devices, no-compression versus compression is very
+often controlled by the density code. On FreeBSD systems, the compression
+mode is set using {\bf mt -f /dev/nsa0 comp xxx} where xxx is the
+mode you want. In general, see {\bf man mt} for the options available on
+your system.
+
+Note, some of the above {\bf mt} commands may not be persistent depending
+on your system configuration. That is they may be reset if a program
+other than Bacula uses the drive or, as is frequently the case, on reboot
+of your system.
+
+If your tape drive requires fixed block sizes (very unusual), you can use the
+following records:
+
+\footnotesize
+\begin{verbatim}
+Minimum Block Size = nnn
+Maximum Block Size = nnn
+\end{verbatim}
+\normalsize
+
+in your Storage daemon's Device resource to force Bacula to write fixed size
+blocks (where you sent nnn to be the same for both of the above records). This
+should be done only if your drive does not support variable block sizes, or
+you have some other strong reasons for using fixed block sizes. As mentioned
+above, a small fixed block size of 512 or 1024 bytes will be very inefficient.
+Try to set any fixed block size to something like 64,512 bytes or larger if
+your drive will support it.
+
+Also, note that the {\bf Medium Type} field of the output of {\bf tapeinfo}
+reports {\bf Not Loaded}, which is not correct. As a consequence, you should
+ignore that field as well as the {\bf Attached Changer} field.
+
+To recover files from tapes written in fixed block mode, see below.
+\label{FreeBSDTapes}
+
+\subsection{Tape Modes on FreeBSD}
+\index[general]{FreeBSD!Tape Modes on}
+\index[general]{Tape Modes on FreeBSD}
+
+On most FreeBSD systems such as 4.9 and most tape drives, Bacula should run
+with:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nsa0 seteotmodel 2
+mt -f /dev/nsa0 blocksize 0
+mt -f /dev/nsa0 comp enable
+\end{verbatim}
+\normalsize
+
+You might want to put those commands in a startup script to make sure your
+tape driver is properly initialized before running Bacula, because
+depending on your system configuration, these modes may be reset if a
+program other than Bacula uses the drive or when your system is rebooted.
+
+Then according to what the {\bf btape test} command returns, you will probably
+need to set the following (see below for an alternative):
+
+\footnotesize
+\begin{verbatim}
+ Hardware End of Medium = no
+ BSF at EOM = yes
+ Backward Space Record = no
+ Backward Space File = no
+ Fast Forward Space File = no
+ TWO EOF = yes
+\end{verbatim}
+\normalsize
+
+Then be sure to run some append tests with Bacula where you start and stop
+Bacula between appending to the tape, or use {\bf btape} version 1.35.1 or
+greater, which includes simulation of stopping/restarting Bacula.
+
+Please see the file {\bf platforms/freebsd/pthreads-fix.txt} in the main
+Bacula directory concerning {\bf important} information concerning
+compatibility of Bacula and your system. A much more optimal Device
+configuration is shown below, but does not work with all tape drives. Please
+test carefully before putting either into production.
+
+Note, for FreeBSD 4.10-RELEASE, using a Sony TSL11000 L100 DDS4 with an
+autochanger set to variable block size and DCLZ compression, Brian McDonald
+reports that to get Bacula to append correctly between Bacula executions,
+the correct values to use are:
+
+\footnotesize
+\begin{verbatim}
+mt -f /dev/nsa0 seteotmodel 1
+mt -f /dev/nsa0 blocksize 0
+mt -f /dev/nsa0 comp enable
+\end{verbatim}
+\normalsize
+
+and
+
+\footnotesize
+\begin{verbatim}
+ Hardware End of Medium = no
+ BSF at EOM = no
+ Backward Space Record = no
+ Backward Space File = no
+ Fast Forward Space File = yes
+ TWO EOF = no
+\end{verbatim}
+\normalsize
+
+This has been confirmed by several other people using different hardware. This
+configuration is the preferred one because it uses one EOF and no backspacing
+at the end of the tape, which works much more efficiently and reliably with
+modern tape drives.
+
+Finally, here is a Device configuration that Danny Butroyd reports to work
+correctly with the Overland Powerloader tape library using LT0-2 and
+FreeBSD 5.4-Stable:
+
+\footnotesize
+\begin{verbatim}
+# Overland Powerloader LT02 - 17 slots single drive
+Device {
+ Name = Powerloader
+ Media Type = LT0-2
+ Archive Device = /dev/nsa0
+ AutomaticMount = yes;
+ AlwaysOpen = yes;
+ RemovableMedia = yes;
+ RandomAccess = no;
+ Changer Command = "/usr/local/sbin/mtx-changer %c %o %S %a %d"
+ Changer Device = /dev/pass2
+ AutoChanger = yes
+ Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
+
+ # FreeBSD Specific Settings
+ Offline On Unmount = no
+ Hardware End of Medium = no
+ BSF at EOM = yes
+ Backward Space Record = no
+ Fast Forward Space File = no
+ TWO EOF = yes
+}
+
+The following Device resource works fine with Dell PowerVault 110T and
+120T devices on both FreeBSD 5.3 and on NetBSD 3.0. It also works
+with Sony AIT-2 drives on FreeBSD.
+\footnotesize
+\begin{verbatim}
+Device {
+ ...
+ # FreeBSD/NetBSD Specific Settings
+ Hardware End of Medium = no
+ BSF at EOM = yes
+ Backward Space Record = no
+ Fast Forward Space File = yes
+ TWO EOF = yes
+}
+\end{verbatim}
+\normalsize
+
+On FreeBSD version 6.0, it is reported that you can even set
+Backward Space Record = yes.
+
+
+
+\subsection{Finding your Tape Drives and Autochangers on FreeBSD}
+\index[general]{FreeBSD!Finding Tape Drives and Autochangers}
+\index[general]{Finding Tape Drives and Autochangers on FreeBSD}
+
+On FreeBSD, you can do a {\bf camcontrol devlist} as root to determine what
+drives and autochangers you have. For example,
+
+\footnotesize
+\begin{verbatim}
+undef# camcontrol devlist
+ at scbus0 target 2 lun 0 (pass0,sa0)
+ at scbus0 target 4 lun 0 (pass1,sa1)
+ at scbus0 target 4 lun 1 (pass2)
+\end{verbatim}
+\normalsize
+
+from the above, you can determine that there is a tape drive on {\bf /dev/sa0}
+and another on {\bf /dev/sa1} in addition since there is a second line for the
+drive on {\bf /dev/sa1}, you know can assume that it is the control device for
+the autochanger (i.e. {\bf /dev/pass2}). It is also the control device name to
+use when invoking the tapeinfo program. E.g.
+
+\footnotesize
+\begin{verbatim}
+tapeinfo -f /dev/pass2
+\end{verbatim}
+\normalsize
+
+\label{onstream}
+
+\subsection{Using the OnStream driver on Linux Systems}
+\index[general]{Using the OnStream driver on Linux Systems}
+\index[general]{Systems!Using the OnStream driver on Linux}
+
+Bacula version 1.33 (not 1.32x) is now working and ready for testing with the
+OnStream kernel osst driver version 0.9.14 or above. Osst is available from:
+\elink{http://sourceforge.net/projects/osst/}
+{http://sourceforge.net/projects/osst/}.
+
+To make Bacula work you must first load the new driver then, as root, do:
+
+\footnotesize
+\begin{verbatim}
+ mt -f /dev/nosst0 defblksize 32768
+\end{verbatim}
+\normalsize
+
+Also you must add the following to your Device resource in your Storage
+daemon's conf file:
+
+\footnotesize
+\begin{verbatim}
+ Minimum Block Size = 32768
+ Maximum Block Size = 32768
+\end{verbatim}
+\normalsize
+
+Here is a Device specification provided by Michel Meyers that is known to
+work:
+
+\footnotesize
+\begin{verbatim}
+Device {
+ Name = "Onstream DI-30"
+ Media Type = "ADR-30"
+ Archive Device = /dev/nosst0
+ Minimum Block Size = 32768
+ Maximum Block Size = 32768
+ Hardware End of Medium = yes
+ BSF at EOM = no
+ Backward Space File = yes
+ Fast Forward Space File = yes
+ Two EOF = no
+ AutomaticMount = yes
+ AlwaysOpen = yes
+ Removable Media = yes
+}
+\end{verbatim}
+\normalsize
+
+\section{Hardware Compression on EXB-8900}
+\index[general]{Hardware Compression on EXB-8900}
+\index[general]{EXB-8900!Hardware Compression}
+
+To active, check, or disable the hardware compression feature
+on an EXB-8900, use the exabyte MammothTool. You can get it here:
+\elink{http://www.exabyte.com/support/online/downloads/index.cfm}
+{http://www.exabyte.com/support/online/downloads/index.cfm}.
+There is a Solaris version of this tool. With option -C 0 or 1 you
+can disable or activate compression. Start this tool without any
+options for a small reference.
+
+\label{fill}
+\subsection{Using btape to Simulate Filling a Tape}
+\index[general]{Using btape to Simulate Filling a Tape}
+\index[general]{Tape!Using btape to Simulate Filling}
+
+Because there are often problems with certain tape drives or systems when end
+of tape conditions occur, {\bf btape} has a special command {\bf fill} that
+causes it to write random data to a tape until the tape fills. It then writes
+at least one more Bacula block to a second tape. Finally, it reads back both
+tapes to ensure that the data has been written in a way that Bacula can
+recover it. Note, there is also a single tape option as noted below, which you
+should use rather than the two tape test. See below for more details.
+
+This can be an extremely time consuming process (here it is about 6 hours) to
+fill a full tape. Note, that btape writes random data to the tape when it is
+filling it. This has two consequences: 1. it takes a bit longer to generate
+the data, especially on slow CPUs. 2. the total amount of data is
+approximately the real physical capacity of your tape, regardless of whether
+or not the tape drive compression is on or off. This is because random data
+does not compress very much.
+
+To begin this test, you enter the {\bf fill} command and follow the
+instructions. There are two options: the simple single tape option and the
+multiple tape option. Please use only the simple single tape option because
+the multiple tape option still doesn't work totally correctly. If the single
+tape option does not succeed, you should correct the problem before using
+Bacula.
+\label{RecoveringFiles}
+
+\section{Recovering Files Written With Fixed Block Sizes}
+\index[general]{Recovering Files Written With Fixed Block Sizes}
+
+If you have been previously running your tape drive in fixed block mode
+(default 512) and Bacula with variable blocks (default), then in version
+1.32f-x and 1.34 and above, Bacula will fail to recover files because it does
+block spacing, and because the block sizes don't agree between your tape drive
+and Bacula it will not work.
+
+The long term solution is to run your drive in variable block mode as
+described above. However, if you have written tapes using fixed block sizes,
+this can be a bit of a pain. The solution to the problem is: while you are
+doing a restore command using a tape written in fixed block size, ensure that
+your drive is set to the fixed block size used while the tape was written.
+Then when doing the {\bf restore} command in the Console program, do not
+answer the prompt {\bf yes/mod/no}. Instead, edit the bootstrap file (the
+location is listed in the prompt) using any ASCII editor. Remove all {\bf
+VolBlock} lines in the file. When the file is re-written, answer the question,
+and Bacula will run without using block positioning, and it should recover
+your files.
+
+\label{BlockModes}
+\section{Tape Blocking Modes}
+\index[general]{Modes!Tape Blocking}
+\index[general]{Tape Blocking Modes}
+
+SCSI tapes may either be written in {\bf variable} or {\bf fixed} block sizes.
+Newer drives support both modes, but some drives such as the QIC devices
+always use fixed block sizes. Bacula attempts to fill and write complete
+blocks (default 65K), so that in normal mode (variable block size), Bacula
+will always write blocks of the same size except the last block of a Job. If
+Bacula is configured to write fixed block sizes, it will pad the last block of
+the Job to the correct size. Bacula expects variable tape block size drives to
+behave as follows: Each write to the drive results in a single record being
+written to the tape. Each read returns a single record. If you request less
+bytes than are in the record, only those number of bytes will be returned, but
+the entire logical record will have been read (the next read will retrieve the
+next record). Thus data from a single write is always returned in a single
+read, and sequentially written records are returned by sequential reads.
+
+Bacula expects fixed block size tape drives to behave as follows: If a write
+length is greater than the physical block size of the drive, the write will be
+written as two blocks each of the fixed physical size. This single write may
+become multiple physical records on the tape. (This is not a good situation).
+According to the documentation, one may never write an amount of data that is
+not the exact multiple of the blocksize (it is not specified if an error
+occurs or if the the last record is padded). When reading, it is my
+understanding that each read request reads one physical record from the tape.
+Due to the complications of fixed block size tape drives, you should avoid
+them if possible with Bacula, or you must be ABSOLUTELY certain that you use
+fixed block sizes within Bacula that correspond to the physical block size of
+the tape drive. This will ensure that Bacula has a one to one correspondence
+between what it writes and the physical record on the tape.
+
+Please note that Bacula will not function correctly if it writes a block and
+that block is split into two or more physical records on the tape. Bacula
+assumes that each write causes a single record to be written, and that it can
+sequentially recover each of the blocks it has written by using the same
+number of sequential reads as it had written.
+
+\section{Details of Tape Modes}
+\index[general]{Modes!Details}
+\index[general]{Details of Tape Modes}
+Rudolf Cejka has provided the following information concerning
+certain tape modes and MTEOM.
+
+\begin{description}
+\item[Tape level]
+ It is always possible to position filemarks or blocks, whereas
+ positioning to the end-of-data is only optional feature, however it is
+ implemented very often. SCSI specification also talks about optional
+ sequential filemarks, setmarks and sequential setmarks, but these are not
+ implemented so often. Modern tape drives keep track of file positions in
+ built-in chip (AIT, LTO) or at the beginning of the tape (SDLT), so there
+ is not any speed difference, if end-of-data or filemarks is used (I have
+ heard, that LTO-1 from all 3 manufacturers do not use its chip for file
+ locations, but a tape as in SDLT case, and I'm not sure about LTO-2 and
+ LTO-3 case). However there is a big difference, that end-of-data ignores
+ file position, whereas filemarks returns the real number of skipped
+ files, so OS can track current file number just in filemarks case.
+
+\item[OS level]
+ Solaris does use just SCSI SPACE Filemarks, it does not support SCSI
+ SPACE End-of-data. When MTEOM is called, Solaris does use SCSI SPACE
+ Filemarks with count = 1048576 for fast mode, and combination of SCSI
+ SPACE Filemarks with count = 1 with SCSI SPACE Blocks with count = 1 for
+ slow mode, so EOD mark on the tape on some older tape drives is not
+ skipped. File number is always tracked for MTEOM.
+
+ Linux does support both SCSI SPACE Filemarks and End-of-data: When MTEOM
+ is called in MT\_ST\_FAST\_MTEOM mode, SCSI SPACE End-of-data is used.
+ In the other case, SCSI SPACE Filemarks with count =
+ 8388607 is used.
+ There is no real slow mode like in Solaris - I just expect, that for
+ older tape drives Filemarks may be slower than End-of-data, but not so
+ much as in Solaris slow mode. File number is tracked for MTEOM just
+ without MT\_ST\_FAST\_MTEOM - when MT\_ST\_FAST\_MTEOM is used, it is not.
+
+ FreeBSD does support both SCSI SPACE Filemarks and End-of-data, but when
+ MTEOD (MTEOM) is called, SCSI SPACE End-of-data is always used. FreeBSD
+ never use SCSI SPACE Filemarks for MTEOD. File number is never tracked
+ for MTEOD.
+
+\item[Bacula level]
+ When {\bf Hardware End of Medium = Yes} is used, MTEOM is called, but it
+ does not mean, that hardware End-of-data must be used. When Hardware End
+ of Medium = No, if Fast Forward Space File = Yes, MTFSF with count =
+ 32767 is used, else Block Read with count = 1 with Forward Space File
+ with count = 1 is used, which is really very slow.
+
+\item [Hardware End of Medium = Yes|No]
+ The name of this option is misleading and is the source of confusion,
+ because it is not the hardware EOM, what is really switched here.
+
+ If I use Yes, OS must not use SCSI SPACE End-of-data, because Bacula
+ expects, that there is tracked file number, which is not supported by
+ SCSI specification. Instead, the OS have to use SCSI SPACE Filemarks.
+
+ If I use No, an action depends on Fast Forward Space File.
+
+ When I set {\bf Hardware End of Medium = no}
+ and {\bf Fast Forward Space File = no}
+ file positioning was very slow
+ on my LTO-3 (about ten to 100 minutes), but
+
+ with {\bf Hardware End of Medium = no} and
+{\bf Fast Forward Space File = yes}, the time is ten to
+100 times faster (about one to two minutes).
+
+\end{description}
+
+\section{Tape Performance Problems}
+\index[general]{Tape Performance}
+If you have LTO-3 or LTO-4 drives, you should be able to
+fairly good transfer rates; from 60 to 150 MB/second, providing
+you have fast disks; GigaBit Ethernet connections (probably 2); you are
+running multiple simultaneous jobs; you have Bacula data spooling
+enabled; your tape block size is set to 131072 or 262144; and
+you have set {\bf Maximum File Size = 5G}.
+
+If you are not getting good performance, consider some of the following
+suggestions from the Allen Balck on the Bacula Users email list:
+
+\begin{enumerate}
+\item You are using an old HBA (i.e. SCSI-1, which only does 5 MB/s)
+
+\item There are other, slower, devices on the SCSI bus. The HBA will
+ negotiate the speed of every device down to the speed of the
+ slowest.
+
+\item There is a termination problem on the bus (either too much or
+ too little termination). The HBA will drop the bus speed in an
+ attempt to increase the reliability of the bus.
+
+\item Loose or damaged cabling - this will probably make the HBA "think"
+ you have a termination problem and it will react as in 3 above.
+\end{enumerate}
+
+See if /var/adm/messages (or /var/log/messages) tells you what the sync
+rate of the SCSI devices/bus are. Also, the next time you reboot, the
+BIOS may be able to tell you what the rate of each device is.
+
+
+\section{Autochanger Errors}
+\index[general]{Errors!Autochanger}
+\index[general]{Autochanger Errors}
+
+If you are getting errors such as:
+
+\footnotesize
+\begin{verbatim}
+3992 Bad autochanger "load slot 1, drive 1": ERR=Child exited with code 1.
+\end{verbatim}
+\normalsize
+
+and you are running your Storage daemon as non-root, then most likely
+you are having permissions problems with the control channel. Running
+as root, set permissions on /dev/sgX so that the userid and group of
+your Storage daemon can access the device. You need to ensure that you
+all access to the proper control device, and if you don't have any
+SCSI disk drives (including SATA drives), you might want to change
+the permissions on /dev/sg*.
+
+\section{Syslog Errors}
+\index[general]{Errors!Syslog}
+\index[general]{Syslog Errors}
+
+If you are getting errors such as:
+
+\footnotesize
+\begin{verbatim}
+: kernel: st0: MTSETDRVBUFFER only allowed for root
+\end{verbatim}
+\normalsize
+
+you are most likely running your Storage daemon as non-root, and
+Bacula is attempting to set the correct OS buffering to correspond
+to your Device resource. Most OSes allow only root to issue this
+ioctl command. In general, the message can be ignored providing
+you are sure that your OS parameters are properly configured as
+described earlier in this manual. If you are running your Storage daemon
+as root, you should not be getting these system log messages, and if
+you are, something is probably wrong.
+++ /dev/null
-%%
-%%
-
-\chapter{Testing Your Tape Drive With Bacula}
-\label{TapeTestingChapter}
-\index[general]{Testing Your Tape Drive With Bacula}
-
-This chapter is concerned with testing and configuring your tape drive to make
-sure that it will work properly with Bacula using the {\bf btape} program.
-\label{summary}
-
-\section{Get Your Tape Drive Working}
-
-In general, you should follow the following steps to get your tape drive to
-work with Bacula. Start with a tape mounted in your drive. If you have an
-autochanger, load a tape into the drive. We use {\bf /dev/nst0} as the tape
-drive name, you will need to adapt it according to your system.
-
-Do not proceed to the next item until you have succeeded with the previous
-one.
-
-\begin{enumerate}
-\item Make sure that Bacula (the Storage daemon) is not running
- or that you have {\bf unmount}ed the drive you will use
- for testing.
-
-\item Use tar to write to, then read from your drive:
-
- \footnotesize
-\begin{verbatim}
- mt -f /dev/nst0 rewind
- tar cvf /dev/nst0 .
- mt -f /dev/nst0 rewind
- tar tvf /dev/nst0
-
-\end{verbatim}
-\normalsize
-
-\item Make sure you have a valid and correct Device resource corresponding
- to your drive. For Linux users, generally, the default one works. For
- FreeBSD users, there are two possible Device configurations (see below).
- For other drives and/or OSes, you will need to first ensure that your
- system tape modes are properly setup (see below), then possibly modify
- you Device resource depending on the output from the btape program (next
- item). When doing this, you should consult the \ilink{Storage Daemon
- Configuration}{StoredConfChapter} of this manual.
-
-\item If you are using a Fibre Channel to connect your tape drive to
- Bacula, please be sure to disable any caching in the NSR (network
- storage router, which is a Fibre Channel to SCSI converter).
-
-\item Run the btape {\bf test} command:
-
- \footnotesize
-\begin{verbatim}
- ./btape -c bacula-sd.conf /dev/nst0
- test
-
-\end{verbatim}
-\normalsize
-
- It isn't necessary to run the autochanger part of the test at this time,
- but do not go past this point until the basic test succeeds. If you do
- have an autochanger, please be sure to read the \ilink{Autochanger
- chapter}{AutochangersChapter} of this manual.
-
-\item Run the btape {\bf fill} command, preferably with two volumes. This
- can take a long time. If you have an autochanger and it is configured, Bacula
- will automatically use it. If you do not have it configured, you can manually
- issue the appropriate {\bf mtx} command, or press the autochanger buttons to
- change the tape when requested to do so.
-
-\item FreeBSD users, if you have a pre-5.0 system run the {\bf tapetest}
- program, and make sure your system is patched if necessary. The tapetest
- program can be found in the platform/freebsd directory. The instructions
- for its use are at the top of the file.
-
-\item Run Bacula, and backup a reasonably small directory, say 60
- Megabytes. Do three successive backups of this directory.
-
-\item Stop Bacula, then restart it. Do another full backup of the same
- directory. Then stop and restart Bacula.
-
-\item Do a restore of the directory backed up, by entering the following
- restore command, being careful to restore it to an alternate location:
-
-
-\footnotesize
-\begin{verbatim}
- restore select all done
- yes
-
-\end{verbatim}
-\normalsize
-
- Do a {\bf diff} on the restored directory to ensure it is identical to the
- original directory. If you are going to backup multiple different systems
- (Linux, Windows, Mac, Solaris, FreeBSD, ...), be sure you test the restore
- on each system type.
-
-\item If you have an autochanger, you should now go back to the btape program
- and run the autochanger test:
-
-\footnotesize
-\begin{verbatim}
- ./btape -c bacula-sd.conf /dev/nst0
- auto
-
-\end{verbatim}
-\normalsize
-
- Adjust your autochanger as necessary to ensure that it works correctly. See
- the Autochanger chapter of this manual for a complete discussion of testing
- your autochanger.
-
-\item We strongly recommend that you use a dedicated SCSI
- controller for your tape drives. Scanners are known to induce
- serious problems with the SCSI bus, causing it to reset. If the
- SCSI bus is reset while Bacula has the tape drive open, it will
- most likely be fatal to your tape since the drive will rewind.
- These kinds of problems show up in the system log. For example,
- the following was most likely caused by a scanner:
-
-\footnotesize
-\begin{verbatim}
-Feb 14 17:29:55 epohost kernel: (scsi0:A:2:0): No or incomplete CDB sent to device.
-Feb 14 17:29:55 epohost kernel: scsi0: Issued Channel A Bus Reset. 1 SCBs aborted
-\end{verbatim}
-\normalsize
-
-\end{enumerate}
-
-If you have reached this point, you stand a good chance of having everything
-work. If you get into trouble at any point, {\bf carefully} read the
-documentation given below. If you cannot get past some point, ask the {\bf
-bacula-users} email list, but specify which of the steps you have successfully
-completed. In particular, you may want to look at the
-\ilink{ Tips for Resolving Problems}{problems1} section below.
-
-
-\label{NoTapeInDrive}
-\subsection{Problems When no Tape in Drive}
-\index[general]{Problems When no Tape in Drive}
-When Bacula was first written the Linux 2.4 kernel permitted opening the
-drive whether or not there was a tape in the drive. Thus the Bacula code is
-based on the concept that if the drive cannot be opened, there is a serious
-problem, and the job is failed.
-
-With version 2.6 of the Linux kernel, if there is no tape in the drive, the
-OS will wait two minutes (default) and then return a failure, and consequently,
-Bacula version 1.36 and below will fail the job. This is important to keep
-in mind, because if you use an option such as {\bf Offline on Unmount =
-yes}, there will be a point when there is no tape in the drive, and if
-another job starts or if Bacula asks the operator to mount a tape, when
-Bacula attempts to open the drive (about a 20 minute delay), it will fail
-and Bacula will fail the job.
-
-In version 1.38.x, the Bacula code partially gets around this problem -- at
-least in the initial open of the drive. However, functions like Polling
-the drive do not work correctly if there is no tape in the drive.
-Providing you do not use {\bf Offline on Unmount = yes}, you should not
-experience job failures as mentioned above. If you do experience such
-failures, you can also increase the {\bf Maximum Open Wait} time interval,
-which will give you more time to mount the next tape before the job is
-failed.
-
-\subsection{Specifying the Configuration File}
-\index[general]{File!Specifying the Configuration}
-\index[general]{Specifying the Configuration File}
-
-Starting with version 1.27, each of the tape utility programs including the
-{\bf btape} program requires a valid Storage daemon configuration file
-(actually, the only part of the configuration file that {\bf btape} needs is
-the {\bf Device} resource definitions). This permits {\bf btape} to find the
-configuration parameters for your archive device (generally a tape drive).
-Without those parameters, the testing and utility programs do not know how to
-properly read and write your drive. By default, they use {\bf bacula-sd.conf}
-in the current directory, but you may specify a different configuration file
-using the {\bf -c} option.
-
-\subsection{Specifying a Device Name For a Tape}
-\index[general]{Tape!Specifying a Device Name For a}
-\index[general]{Specifying a Device Name For a Tape}
-
-{\bf btape} {\bf device-name} where the Volume can be found. In the case of a
-tape, this is the physical device name such as {\bf /dev/nst0} or {\bf
-/dev/rmt/0ubn} depending on your system that you specify on the Archive Device
-directive. For the program to work, it must find the identical name in the
-Device resource of the configuration file. If the name is not found in the
-list of physical names, the utility program will compare the name you entered
-to the Device names (rather than the Archive device names).
-
-When specifying a tape device, it is preferable that the "non-rewind"
-variant of the device file name be given. In addition, on systems such as
-Sun, which have multiple tape access methods, you must be sure to specify
-to use Berkeley I/O conventions with the device. The
-{\bf b} in the Solaris (Sun) archive specification {\bf /dev/rmt/0mbn} is
-what is needed in this case. Bacula does not support SysV tape drive
-behavior.
-
-See below for specifying Volume names.
-
-\subsection{Specifying a Device Name For a File}
-\index[general]{File!Specifying a Device Name For a}
-\index[general]{Specifying a Device Name For a File}
-
-If you are attempting to read or write an archive file rather than a tape, the
-{\bf device-name} should be the full path to the archive location including
-the filename. The filename (last part of the specification) will be stripped
-and used as the Volume name, and the path (first part before the filename)
-must have the same entry in the configuration file. So, the path is equivalent
-to the archive device name, and the filename is equivalent to the volume name.
-
-
-\section{btape}
-\label{btape1}
-\index[general]{Btape}
-
-This program permits a number of elementary tape operations via a tty command
-interface. The {\bf test} command, described below, can be very useful for
-testing tape drive compatibility problems. Aside from initial testing of tape
-drive compatibility with {\bf Bacula}, {\bf btape} will be mostly used by
-developers writing new tape drivers.
-
-{\bf btape} can be dangerous to use with existing {\bf Bacula} tapes because
-it will relabel a tape or write on the tape if so requested regardless of
-whether or not the tape contains valuable data, so please be careful and use
-it only on blank tapes.
-
-To work properly, {\bf btape} needs to read the Storage daemon's configuration
-file. As a default, it will look for {\bf bacula-sd.conf} in the current
-directory. If your configuration file is elsewhere, please use the {\bf -c}
-option to specify where.
-
-The physical device name or the Device resource name must be specified on the
-command line, and this same device name must be present in the Storage
-daemon's configuration file read by {\bf btape}
-
-\footnotesize
-\begin{verbatim}
-Usage: btape [options] device_name
- -b <file> specify bootstrap file
- -c <file> set configuration file to file
- -d <nn> set debug level to nn
- -p proceed inspite of I/O errors
- -s turn off signals
- -v be verbose
- -? print this message.
-\end{verbatim}
-\normalsize
-
-\subsection{Using btape to Verify your Tape Drive}
-\index[general]{Using btape to Verify your Tape Drive}
-\index[general]{Drive!Using btape to Verify your Tape}
-
-An important reason for this program is to ensure that a Storage daemon
-configuration file is defined so that Bacula will correctly read and write
-tapes.
-
-It is highly recommended that you run the {\bf test} command before running
-your first Bacula job to ensure that the parameters you have defined for your
-storage device (tape drive) will permit {\bf Bacula} to function properly. You
-only need to mount a blank tape, enter the command, and the output should be
-reasonably self explanatory. For example:
-
-\footnotesize
-\begin{verbatim}
-(ensure that Bacula is not running)
-./btape -c /usr/bin/bacula/bacula-sd.conf /dev/nst0
-\end{verbatim}
-\normalsize
-
-The output will be:
-
-\footnotesize
-\begin{verbatim}
-Tape block granularity is 1024 bytes.
-btape: btape.c:376 Using device: /dev/nst0
-*
-\end{verbatim}
-\normalsize
-
-Enter the test command:
-
-\footnotesize
-\begin{verbatim}
-test
-\end{verbatim}
-\normalsize
-
-The output produced should be something similar to the following: I've cut the
-listing short because it is frequently updated to have new tests.
-
-\footnotesize
-\begin{verbatim}
-=== Append files test ===
-This test is essential to Bacula.
-I'm going to write one record in file 0,
- two records in file 1,
- and three records in file 2
-btape: btape.c:387 Rewound /dev/nst0
-btape: btape.c:855 Wrote one record of 64412 bytes.
-btape: btape.c:857 Wrote block to device.
-btape: btape.c:410 Wrote EOF to /dev/nst0
-btape: btape.c:855 Wrote one record of 64412 bytes.
-btape: btape.c:857 Wrote block to device.
-btape: btape.c:855 Wrote one record of 64412 bytes.
-btape: btape.c:857 Wrote block to device.
-btape: btape.c:410 Wrote EOF to /dev/nst0
-btape: btape.c:855 Wrote one record of 64412 bytes.
-btape: btape.c:857 Wrote block to device.
-btape: btape.c:855 Wrote one record of 64412 bytes.
-btape: btape.c:857 Wrote block to device.
-btape: btape.c:855 Wrote one record of 64412 bytes.
-btape: btape.c:857 Wrote block to device.
-btape: btape.c:410 Wrote EOF to /dev/nst0
-btape: btape.c:387 Rewound /dev/nst0
-btape: btape.c:693 Now moving to end of media.
-btape: btape.c:427 Moved to end of media
-We should be in file 3. I am at file 3. This is correct!
-Now the important part, I am going to attempt to append to the tape.
-...
-=== End Append files test ===
-\end{verbatim}
-\normalsize
-
-If you do not successfully complete the above test, please resolve the
-problem(s) before attempting to use {\bf Bacula}. Depending on your tape
-drive, the test may recommend that you add certain records to your
-configuration. We strongly recommend that you do so and then re-run the above
-test to insure it works the first time.
-
-Some of the suggestions it provides for resolving the problems may or may not
-be useful. If at all possible avoid using fixed blocking. If the test suddenly
-starts to print a long series of:
-
-\footnotesize
-\begin{verbatim}
-Got EOF on tape.
-Got EOF on tape.
-...
-\end{verbatim}
-\normalsize
-
-then almost certainly, you are running your drive in fixed block mode rather
-than variable block mode. See below for more help of resolving fix
-versus variable block problems.
-
-It is also possible that you have your drive
-set in SysV tape drive mode. The drive must use BSD tape conventions.
-See the section above on setting your {\bf Archive device} correctly.
-
-For FreeBSD users, please see the notes below for doing further testing of
-your tape drive.
-
-\subsection{Testing tape drive speed}
-\label{sec:btapespeed}
-
-To determine the best configuration of your tape drive, you can run the
-\texttt{speed} command available in the \texttt{btape} program.
-
-This command can have the following arguments:
-\begin{itemize}
-\item[\texttt{file\_size=n}] Specify the Maximum File Size for this test
- (between 1 and 5GB). This counter is in GB.
-\item[\texttt{nb\_file=n}] Specify the number of file to be written. The amount
- of data should be greater than your memory ($file\_size*nb\_file$).
-\item[\texttt{skip\_zero}] This flag permits to skip tests with constant
- data.
-\item[\texttt{skip\_random}] This flag permits to skip tests with random
- data.
-\item[\texttt{skip\_raw}] This flag permits to skip tests with raw access.
-\item[\texttt{skip\_block}] This flag permits to skip tests with Bacula block
- access.
-\end{itemize}
-
-\begin{verbatim}
-*speed file_size=3 skip_raw
-btape.c:1078 Test with zero data and bacula block structure.
-btape.c:956 Begin writing 3 files of 3.221 GB with blocks of 129024 bytes.
-++++++++++++++++++++++++++++++++++++++++++
-btape.c:604 Wrote 1 EOF to "Drive-0" (/dev/nst0)
-btape.c:406 Volume bytes=3.221 GB. Write rate = 44.128 MB/s
-...
-btape.c:383 Total Volume bytes=9.664 GB. Total Write rate = 43.531 MB/s
-
-btape.c:1090 Test with random data, should give the minimum throughput.
-btape.c:956 Begin writing 3 files of 3.221 GB with blocks of 129024 bytes.
-+++++++++++++++++++++++++++++++++++++++++++
-btape.c:604 Wrote 1 EOF to "Drive-0" (/dev/nst0)
-btape.c:406 Volume bytes=3.221 GB. Write rate = 7.271 MB/s
-+++++++++++++++++++++++++++++++++++++++++++
-...
-btape.c:383 Total Volume bytes=9.664 GB. Total Write rate = 7.365 MB/s
-
-\end{verbatim}
-
-When using compression, the random test will give your the minimum throughput
-of your drive . The test using constant string will give you the maximum speed
-of your hardware chain. (cpu, memory, scsi card, cable, drive, tape).
-
-You can change the block size in the Storage Daemon configuration file.
-
-\label{SCSITricks}
-\subsection{Linux SCSI Tricks}
-\index[general]{Tricks!Linux SCSI}
-\index[general]{Linux SCSI Tricks}
-
-You can find out what SCSI devices you have by doing:
-
-\footnotesize
-\begin{verbatim}
-lsscsi
-\end{verbatim}
-\normalsize
-
-Typical output is:
-
-\footnotesize
-\begin{verbatim}
-[0:0:0:0] disk ATA ST3160812AS 3.AD /dev/sda
-[2:0:4:0] tape HP Ultrium 2-SCSI F6CH /dev/st0
-[2:0:5:0] tape HP Ultrium 2-SCSI F6CH /dev/st1
-[2:0:6:0] mediumx OVERLAND LXB 0107 -
-[2:0:9:0] tape HP Ultrium 1-SCSI E50H /dev/st2
-[2:0:10:0] mediumx OVERLAND LXB 0107 -
-\end{verbatim}
-\normalsize
-
-There are two drives in one autochanger: /dev/st0 and /dev/st1
-and a third tape drive at /dev/st2. For using them with Bacula, one
-would normally reference them as /dev/nst0 ... /dev/nst2. Not also,
-there are two different autochangers identified as "mediumx OVERLAND LXB".
-They can be addressed via their /dev/sgN designation, which can be
-obtained by counting from the beginning as 0 to each changer. In the
-above case, the two changers are located on /dev/sg3 and /dev/sg5. The one
-at /dev/sg3, controls drives /dev/nst0 and /dev/nst1; and the one at
-/dev/sg5 controles drive /dev/nst2.
-
-If you do not have the {\bf lsscsi} command, you can obtain the same
-information as follows:
-
-\footnotesize
-\begin{verbatim}
-cat /proc/scsi/scsi
-\end{verbatim}
-\normalsize
-
-For the above example with the three drives and two autochangers,
-I get:
-
-\footnotesize
-\begin{verbatim}
-Attached devices:
-Host: scsi0 Channel: 00 Id: 00 Lun: 00
- Vendor: ATA Model: ST3160812AS Rev: 3.AD
- Type: Direct-Access ANSI SCSI revision: 05
-Host: scsi2 Channel: 00 Id: 04 Lun: 00
- Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
- Type: Sequential-Access ANSI SCSI revision: 03
-Host: scsi2 Channel: 00 Id: 05 Lun: 00
- Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
- Type: Sequential-Access ANSI SCSI revision: 03
-Host: scsi2 Channel: 00 Id: 06 Lun: 00
- Vendor: OVERLAND Model: LXB Rev: 0107
- Type: Medium Changer ANSI SCSI revision: 02
-Host: scsi2 Channel: 00 Id: 09 Lun: 00
- Vendor: HP Model: Ultrium 1-SCSI Rev: E50H
- Type: Sequential-Access ANSI SCSI revision: 03
-Host: scsi2 Channel: 00 Id: 10 Lun: 00
- Vendor: OVERLAND Model: LXB Rev: 0107
- Type: Medium Changer ANSI SCSI revision: 02
-\end{verbatim}
-\normalsize
-
-
-As an additional example, I get the following (on a different machine from the
-above example):
-
-\footnotesize
-\begin{verbatim}
-Attached devices:
-Host: scsi2 Channel: 00 Id: 01 Lun: 00
- Vendor: HP Model: C5713A Rev: H107
- Type: Sequential-Access ANSI SCSI revision: 02
-Host: scsi2 Channel: 00 Id: 04 Lun: 00
- Vendor: SONY Model: SDT-10000 Rev: 0110
- Type: Sequential-Access ANSI SCSI revision: 02
-\end{verbatim}
-\normalsize
-
-The above represents first an autochanger and second a simple
-tape drive. The HP changer (the first entry) uses the same SCSI channel
-for data and for control, so in Bacula, you would use:
-\footnotesize
-\begin{verbatim}
-Archive Device = /dev/nst0
-Changer Device = /dev/sg0
-\end{verbatim}
-\normalsize
-
-If you want to remove the SDT-10000 device, you can do so as root with:
-
-\footnotesize
-\begin{verbatim}
-echo "scsi remove-single-device 2 0 4 0">/proc/scsi/scsi
-\end{verbatim}
-\normalsize
-
-and you can put add it back with:
-
-\footnotesize
-\begin{verbatim}
-echo "scsi add-single-device 2 0 4 0">/proc/scsi/scsi
-\end{verbatim}
-\normalsize
-
-where the 2 0 4 0 are the Host, Channel, Id, and Lun as seen on the output
-from {\bf cat /proc/scsi/scsi}. Note, the Channel must be specified as
-numeric.
-
-Below is a slightly more complicated output, which is a single autochanger
-with two drives, and which operates the changer on a different channel
-from from the drives:
-
-\footnotesize
-\begin{verbatim}
-Attached devices:
-Host: scsi0 Channel: 00 Id: 00 Lun: 00
- Vendor: ATA Model: WDC WD1600JD-75H Rev: 08.0
- Type: Direct-Access ANSI SCSI revision: 05
-Host: scsi2 Channel: 00 Id: 04 Lun: 00
- Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
- Type: Sequential-Access ANSI SCSI revision: 03
-Host: scsi2 Channel: 00 Id: 05 Lun: 00
- Vendor: HP Model: Ultrium 2-SCSI Rev: F6CH
- Type: Sequential-Access ANSI SCSI revision: 03
-Host: scsi2 Channel: 00 Id: 06 Lun: 00
- Vendor: OVERLAND Model: LXB Rev: 0106
- Type: Medium Changer ANSI SCSI revision: 02
-\end{verbatim}
-\normalsize
-
-The above tape drives are accessed on /dev/nst0 and /dev/nst1, while
-the control channel for those two drives is /dev/sg3.
-
-
-
-\label{problems1}
-\section{Tips for Resolving Problems}
-\index[general]{Problems!Tips for Resolving}
-\index[general]{Tips for Resolving Problems}
-
-\label{CannotRestore}
-\subsection{Bacula Saves But Cannot Restore Files}
-\index[general]{Files!Bacula Saves But Cannot Restore}
-\index[general]{Bacula Saves But Cannot Restore Files}
-
-If you are getting error messages such as:
-
-\footnotesize
-\begin{verbatim}
-Volume data error at 0:1! Wanted block-id: "BB02", got "". Buffer discarded
-\end{verbatim}
-\normalsize
-
-It is very likely that Bacula has tried to do block positioning and ended up
-at an invalid block. This can happen if your tape drive is in fixed block mode
-while Bacula's default is variable blocks. Note that in such cases, Bacula is
-perfectly able to write to your Volumes (tapes), but cannot position to read
-them.
-
-There are two possible solutions.
-
-\begin{enumerate}
-\item The first and best is to always ensure that your drive is in variable
- block mode. Note, it can switch back to fixed block mode on a reboot or if
- another program uses the drive. So on such systems you need to modify the
- Bacula startup files to explicitly set:
-
-\footnotesize
-\begin{verbatim}
-mt -f /dev/nst0 defblksize 0
-\end{verbatim}
-\normalsize
-
-or whatever is appropriate on your system. Note, if you are running a Linux
-system, and the above command does not work, it is most likely because you
-have not loaded the appropriate {\bf mt} package, which is often called
-{\bf mt\_st}, but may differ according to your distribution.
-
-\item The second possibility, especially, if Bacula wrote while the drive was
- in fixed block mode, is to turn off block positioning in Bacula. This is done
- by adding:
-
-\footnotesize
-\begin{verbatim}
-Block Positioning = no
-\end{verbatim}
-\normalsize
-
-to the Device resource. This is not the recommended procedure because it can
-enormously slow down recovery of files, but it may help where all else
-fails. This directive is available in version 1.35.5 or later (and not yet
-tested).
-\end{enumerate}
-
-If you are getting error messages such as:
-\footnotesize
-\begin{verbatim}
-Volume data error at 0:0!
-Block checksum mismatch in block=0 len=32625 calc=345678 blk=123456
-\end{verbatim}
-\normalsize
-
-You are getting tape read errors, and this is most likely due to
-one of the following things:
-\begin{enumerate}
-\item An old or bad tape.
-\item A dirty drive that needs cleaning (particularly for DDS drives).
-\item A loose SCSI cable.
-\item Old firmware in your drive. Make sure you have the latest firmware
- loaded.
-\item Computer memory errors.
-\item Over-clocking your CPU.
-\item A bad SCSI card.
-\end{enumerate}
-
-
-\label{opendevice}
-\subsection{Bacula Cannot Open the Device}
-\index[general]{Device!Bacula Cannot Open the}
-\index[general]{Bacula Cannot Open the Device}
-
-If you get an error message such as:
-
-\footnotesize
-\begin{verbatim}
-dev open failed: dev.c:265 stored: unable to open
-device /dev/nst0:> ERR=No such device or address
-\end{verbatim}
-\normalsize
-
-the first time you run a job, it is most likely due to the fact that you
-specified the incorrect device name on your {\bf Archive Device}.
-
-If Bacula works fine with your drive, then all off a sudden you get error
-messages similar to the one shown above, it is quite possible that your driver
-module is being removed because the kernel deems it idle. This is done via
-{\bf crontab} with the use of {\bf rmmod -a}. To fix the problem, you can
-remove this entry from {\bf crontab}, or you can manually {\bf modprob} your
-driver module (or add it to the local startup script). Thanks to Alan Brown
-for this tip.
-\label{IncorrectFiles}
-
-\subsection{Incorrect File Number}
-\index[general]{Number!Incorrect File}
-\index[general]{Incorrect File Number}
-
-When Bacula moves to the end of the medium, it normally uses the {\bf
-ioctl(MTEOM)} function. Then Bacula uses the {\bf ioctl(MTIOCGET)} function to
-retrieve the current file position from the {\bf mt\_fileno} field. Some SCSI
-tape drivers will use a fast means of seeking to the end of the medium and in
-doing so, they will not know the current file position and hence return a {\bf
--1}. As a consequence, if you get {\bf "This is NOT correct!"} in the
-positioning tests, this may be the cause. You must correct this condition in
-order for Bacula to work.
-
-There are two possible solutions to the above problem of incorrect file
-number:
-
-\begin{itemize}
-\item Figure out how to configure your SCSI driver to keep track of the file
- position during the MTEOM request. This is the preferred solution.
-\item Modify the {\bf Device} resource of your {\bf bacula-sd.conf} file to
- include:
-
-\footnotesize
-\begin{verbatim}
-Hardware End of File = no
-\end{verbatim}
-\normalsize
-
-This will cause Bacula to use the MTFSF request to seek to the end of the
-medium, and Bacula will keep track of the file number itself.
-\end{itemize}
-
-\label{IncorrectBlocks}
-\subsection{Incorrect Number of Blocks or Positioning Errors}
-\index[general]{Testing!Incorrect Number of Blocks or Positioning Errors}
-\index[general]{Incorrect Number of Blocks or Positioning Errors}
-
-{\bf Bacula's} preferred method of working with tape drives (sequential
-devices) is to run in variable block mode, and this is what is set by default.
-You should first ensure that your tape drive is set for variable block mode
-(see below).
-
-If your tape drive is in fixed block mode and you have told Bacula to use
-different fixed block sizes or variable block sizes (default), you will get
-errors when Bacula attempts to forward space to the correct block (the kernel
-driver's idea of tape blocks will not correspond to Bacula's).
-
-All modern tape drives support variable tape blocks, but some older drives (in
-particular the QIC drives) as well as the ATAPI ide-scsi driver run only in
-fixed block mode. The Travan tape drives also apparently must run in fixed
-block mode (to be confirmed).
-
-Even in variable block mode, with the exception of the first record on the
-second or subsequent volume of a multi-volume backup, Bacula will write blocks
-of a fixed size. However, in reading a tape, Bacula will assume that for each
-read request, exactly one block from the tape will be transferred. This the
-most common way that tape drives work and is well supported by {\bf Bacula}.
-
-Drives that run in fixed block mode can cause serious problems for Bacula if
-the drive's block size does not correspond exactly to {\bf Bacula's} block
-size. In fixed block size mode, drivers may transmit a partial block or
-multiple blocks for a single read request. From {\bf Bacula's} point of view,
-this destroys the concept of tape blocks. It is much better to run in variable
-block mode, and almost all modern drives (the OnStream is an exception) run in
-variable block mode. In order for Bacula to run in fixed block mode, you must
-include the following records in the Storage daemon's Device resource
-definition:
-
-\footnotesize
-\begin{verbatim}
-Minimum Block Size = nnn
-Maximum Block Size = nnn
-\end{verbatim}
-\normalsize
-
-where {\bf nnn} must be the same for both records and must be identical to the
-driver's fixed block size.
-
-We recommend that you avoid this configuration if at all possible by using
-variable block sizes.
-
-If you must run with fixed size blocks, make sure they are not 512 bytes. This
-is too small and the overhead that Bacula has with each record will become
-excessive. If at all possible set any fixed block size to something like
-64,512 bytes or possibly 32,768 if 64,512 is too large for your drive. See
-below for the details on checking and setting the default drive block size.
-
-To recover files from tapes written in fixed block mode, see below.
-
-\label{TapeModes}
-\subsection{Ensuring that the Tape Modes Are Properly Set -- {\bf Linux
-Only}}
-\index[general]{Ensuring that the Tape Modes Are Properly Set -- Linux Only}
-
-If you have a modern SCSI tape drive and you are having problems with the {\bf
-test} command as noted above, it may be that some program has set one or more
-of your SCSI driver's options to non-default values. For example, if your
-driver is set to work in SysV manner, Bacula will not work correctly because
-it expects BSD behavior. To reset your tape drive to the default values, you
-can try the following, but {\bf ONLY} if you have a SCSI tape drive on a {\bf
-Linux} system:
-
-\footnotesize
-\begin{verbatim}
-become super user
-mt -f /dev/nst0 rewind
-mt -f /dev/nst0 stoptions buffer-writes async-writes read-ahead
-\end{verbatim}
-\normalsize
-
-The above commands will clear all options and then set those specified. None
-of the specified options are required by Bacula, but a number of other options
-such as SysV behavior must not be set. Bacula does not support SysV tape
-behavior. On systems other than Linux, you will need to consult your {\bf mt}
-man pages or documentation to figure out how to do the same thing. This should
-not really be necessary though -- for example, on both Linux and Solaris
-systems, the default tape driver options are compatible with Bacula.
-On Solaris systems, you must take care to specify the correct device
-name on the {\bf Archive device} directive. See above for more details.
-
-You may also want to ensure that no prior program has set the default block
-size, as happened to one user, by explicitly turning it off with:
-
-\footnotesize
-\begin{verbatim}
-mt -f /dev/nst0 defblksize 0
-\end{verbatim}
-\normalsize
-
-If you are running a Linux
-system, and the above command does not work, it is most likely because you
-have not loaded the appropriate {\bf mt} package, which is often called
-{\bf mt\_st}, but may differ according to your distribution.
-
-If you would like to know what options you have set before making any of the
-changes noted above, you can now view them on Linux systems, thanks to a tip
-provided by Willem Riede. Do the following:
-
-\footnotesize
-\begin{verbatim}
-become super user
-mt -f /dev/nst0 stsetoptions 0
-grep st0 /var/log/messages
-\end{verbatim}
-\normalsize
-
-and you will get output that looks something like the following:
-
-\footnotesize
-\begin{verbatim}
-kernel: st0: Mode 0 options: buffer writes: 1, async writes: 1, read ahead: 1
-kernel: st0: can bsr: 0, two FMs: 0, fast mteom: 0, auto lock: 0,
-kernel: st0: defs for wr: 0, no block limits: 0, partitions: 0, s2 log: 0
-kernel: st0: sysv: 0 nowait: 0
-\end{verbatim}
-\normalsize
-
-Note, I have chopped off the beginning of the line with the date and machine
-name for presentation purposes.
-
-Some people find that the above settings only last until the next reboot, so
-please check this otherwise you may have unexpected problems.
-
-Beginning with Bacula version 1.35.8, if Bacula detects that you are running
-in variable block mode, it will attempt to set your drive appropriately. All
-OSes permit setting variable block mode, but some OSes do not permit setting
-the other modes that Bacula needs to function properly.
-
-\label{compression}
-\subsection{Tape Hardware Compression and Blocking Size}
-\index[general]{Tape Hardware Compression and Blocking Size}
-\index[general]{Size!Tape Hardware Compression and Blocking Size}
-
-You should be able to verify the tape compression status with sysfs on Linux.
-\begin{verbatim}
-cat /sys/class/scsi_tape/nst0/default_compression
-\end{verbatim}
-
-You can, turn it on by using (on Linux):
-
-\footnotesize
-\begin{verbatim}
-become super user
-mt -f /dev/nst0 defcompression 1
-\end{verbatim}
-\normalsize
-
-and of course, if you use a zero instead of the one at the end, you will turn
-it off.
-
-If you have built the {\bf mtx} program in the {\bf depkgs} package, you can
-use tapeinfo to get quite a bit of information about your tape drive even if
-it is not an autochanger. This program is called using the SCSI control
-device. On Linux for tape drive /dev/nst0, this is usually /dev/sg0, while on
-FreeBSD for /dev/nsa0, the control device is often /dev/pass2. For example on
-my DDS-4 drive (/dev/nst0), I get the following:
-
-\footnotesize
-\begin{verbatim}
-tapeinfo -f /dev/sg0
-Product Type: Tape Drive
-Vendor ID: 'HP '
-Product ID: 'C5713A '
-Revision: 'H107'
-Attached Changer: No
-MinBlock:1
-MaxBlock:16777215
-SCSI ID: 5
-SCSI LUN: 0
-Ready: yes
-BufferedMode: yes
-Medium Type: Not Loaded
-Density Code: 0x26
-BlockSize: 0
-\end{verbatim}
-\normalsize
-
-where the {\bf DataCompEnabled: yes} means that tape hardware compression is
-turned on. You can turn it on and off (yes|no) by using the {\bf mt}
-commands given above. Also, this output will tell you if the {\bf BlockSize}
-is non-zero and hence set for a particular block size. Bacula is not likely to
-work in such a situation because it will normally attempt to write blocks of
-64,512 bytes, except the last block of the job which will generally be
-shorter. The first thing to try is setting the default block size to zero
-using the {\bf mt -f /dev/nst0 defblksize 0} command as shown above.
-On FreeBSD, this would be something like: {\bf mt -f /dev/nsa0 blocksize 0}.
-
-On some operating systems with some tape drives, the amount of data that
-can be written to the tape and whether or not compression is enabled is
-determined by the density usually the {\bf mt -f /dev/nst0 setdensity xxx} command.
-Often {\bf mt -f /dev/nst0 status} will print out the current
-density code that is used with the drive. Most systems, but unfortunately
-not all, set the density to the maximum by default. On some systems, you
-can also get a list of all available density codes with:
-{\bf mt -f /dev/nst0 densities} or a similar {\bf mt} command.
-Note, for DLT and SDLT devices, no-compression versus compression is very
-often controlled by the density code. On FreeBSD systems, the compression
-mode is set using {\bf mt -f /dev/nsa0 comp xxx} where xxx is the
-mode you want. In general, see {\bf man mt} for the options available on
-your system.
-
-Note, some of the above {\bf mt} commands may not be persistent depending
-on your system configuration. That is they may be reset if a program
-other than Bacula uses the drive or, as is frequently the case, on reboot
-of your system.
-
-If your tape drive requires fixed block sizes (very unusual), you can use the
-following records:
-
-\footnotesize
-\begin{verbatim}
-Minimum Block Size = nnn
-Maximum Block Size = nnn
-\end{verbatim}
-\normalsize
-
-in your Storage daemon's Device resource to force Bacula to write fixed size
-blocks (where you sent nnn to be the same for both of the above records). This
-should be done only if your drive does not support variable block sizes, or
-you have some other strong reasons for using fixed block sizes. As mentioned
-above, a small fixed block size of 512 or 1024 bytes will be very inefficient.
-Try to set any fixed block size to something like 64,512 bytes or larger if
-your drive will support it.
-
-Also, note that the {\bf Medium Type} field of the output of {\bf tapeinfo}
-reports {\bf Not Loaded}, which is not correct. As a consequence, you should
-ignore that field as well as the {\bf Attached Changer} field.
-
-To recover files from tapes written in fixed block mode, see below.
-\label{FreeBSDTapes}
-
-\subsection{Tape Modes on FreeBSD}
-\index[general]{FreeBSD!Tape Modes on}
-\index[general]{Tape Modes on FreeBSD}
-
-On most FreeBSD systems such as 4.9 and most tape drives, Bacula should run
-with:
-
-\footnotesize
-\begin{verbatim}
-mt -f /dev/nsa0 seteotmodel 2
-mt -f /dev/nsa0 blocksize 0
-mt -f /dev/nsa0 comp enable
-\end{verbatim}
-\normalsize
-
-You might want to put those commands in a startup script to make sure your
-tape driver is properly initialized before running Bacula, because
-depending on your system configuration, these modes may be reset if a
-program other than Bacula uses the drive or when your system is rebooted.
-
-Then according to what the {\bf btape test} command returns, you will probably
-need to set the following (see below for an alternative):
-
-\footnotesize
-\begin{verbatim}
- Hardware End of Medium = no
- BSF at EOM = yes
- Backward Space Record = no
- Backward Space File = no
- Fast Forward Space File = no
- TWO EOF = yes
-\end{verbatim}
-\normalsize
-
-Then be sure to run some append tests with Bacula where you start and stop
-Bacula between appending to the tape, or use {\bf btape} version 1.35.1 or
-greater, which includes simulation of stopping/restarting Bacula.
-
-Please see the file {\bf platforms/freebsd/pthreads-fix.txt} in the main
-Bacula directory concerning {\bf important} information concerning
-compatibility of Bacula and your system. A much more optimal Device
-configuration is shown below, but does not work with all tape drives. Please
-test carefully before putting either into production.
-
-Note, for FreeBSD 4.10-RELEASE, using a Sony TSL11000 L100 DDS4 with an
-autochanger set to variable block size and DCLZ compression, Brian McDonald
-reports that to get Bacula to append correctly between Bacula executions,
-the correct values to use are:
-
-\footnotesize
-\begin{verbatim}
-mt -f /dev/nsa0 seteotmodel 1
-mt -f /dev/nsa0 blocksize 0
-mt -f /dev/nsa0 comp enable
-\end{verbatim}
-\normalsize
-
-and
-
-\footnotesize
-\begin{verbatim}
- Hardware End of Medium = no
- BSF at EOM = no
- Backward Space Record = no
- Backward Space File = no
- Fast Forward Space File = yes
- TWO EOF = no
-\end{verbatim}
-\normalsize
-
-This has been confirmed by several other people using different hardware. This
-configuration is the preferred one because it uses one EOF and no backspacing
-at the end of the tape, which works much more efficiently and reliably with
-modern tape drives.
-
-Finally, here is a Device configuration that Danny Butroyd reports to work
-correctly with the Overland Powerloader tape library using LT0-2 and
-FreeBSD 5.4-Stable:
-
-\footnotesize
-\begin{verbatim}
-# Overland Powerloader LT02 - 17 slots single drive
-Device {
- Name = Powerloader
- Media Type = LT0-2
- Archive Device = /dev/nsa0
- AutomaticMount = yes;
- AlwaysOpen = yes;
- RemovableMedia = yes;
- RandomAccess = no;
- Changer Command = "/usr/local/sbin/mtx-changer %c %o %S %a %d"
- Changer Device = /dev/pass2
- AutoChanger = yes
- Alert Command = "sh -c 'tapeinfo -f %c |grep TapeAlert|cat'"
-
- # FreeBSD Specific Settings
- Offline On Unmount = no
- Hardware End of Medium = no
- BSF at EOM = yes
- Backward Space Record = no
- Fast Forward Space File = no
- TWO EOF = yes
-}
-
-The following Device resource works fine with Dell PowerVault 110T and
-120T devices on both FreeBSD 5.3 and on NetBSD 3.0. It also works
-with Sony AIT-2 drives on FreeBSD.
-\footnotesize
-\begin{verbatim}
-Device {
- ...
- # FreeBSD/NetBSD Specific Settings
- Hardware End of Medium = no
- BSF at EOM = yes
- Backward Space Record = no
- Fast Forward Space File = yes
- TWO EOF = yes
-}
-\end{verbatim}
-\normalsize
-
-On FreeBSD version 6.0, it is reported that you can even set
-Backward Space Record = yes.
-
-
-
-\subsection{Finding your Tape Drives and Autochangers on FreeBSD}
-\index[general]{FreeBSD!Finding Tape Drives and Autochangers}
-\index[general]{Finding Tape Drives and Autochangers on FreeBSD}
-
-On FreeBSD, you can do a {\bf camcontrol devlist} as root to determine what
-drives and autochangers you have. For example,
-
-\footnotesize
-\begin{verbatim}
-undef# camcontrol devlist
- at scbus0 target 2 lun 0 (pass0,sa0)
- at scbus0 target 4 lun 0 (pass1,sa1)
- at scbus0 target 4 lun 1 (pass2)
-\end{verbatim}
-\normalsize
-
-from the above, you can determine that there is a tape drive on {\bf /dev/sa0}
-and another on {\bf /dev/sa1} in addition since there is a second line for the
-drive on {\bf /dev/sa1}, you know can assume that it is the control device for
-the autochanger (i.e. {\bf /dev/pass2}). It is also the control device name to
-use when invoking the tapeinfo program. E.g.
-
-\footnotesize
-\begin{verbatim}
-tapeinfo -f /dev/pass2
-\end{verbatim}
-\normalsize
-
-\label{onstream}
-
-\subsection{Using the OnStream driver on Linux Systems}
-\index[general]{Using the OnStream driver on Linux Systems}
-\index[general]{Systems!Using the OnStream driver on Linux}
-
-Bacula version 1.33 (not 1.32x) is now working and ready for testing with the
-OnStream kernel osst driver version 0.9.14 or above. Osst is available from:
-\elink{http://sourceforge.net/projects/osst/}
-{http://sourceforge.net/projects/osst/}.
-
-To make Bacula work you must first load the new driver then, as root, do:
-
-\footnotesize
-\begin{verbatim}
- mt -f /dev/nosst0 defblksize 32768
-\end{verbatim}
-\normalsize
-
-Also you must add the following to your Device resource in your Storage
-daemon's conf file:
-
-\footnotesize
-\begin{verbatim}
- Minimum Block Size = 32768
- Maximum Block Size = 32768
-\end{verbatim}
-\normalsize
-
-Here is a Device specification provided by Michel Meyers that is known to
-work:
-
-\footnotesize
-\begin{verbatim}
-Device {
- Name = "Onstream DI-30"
- Media Type = "ADR-30"
- Archive Device = /dev/nosst0
- Minimum Block Size = 32768
- Maximum Block Size = 32768
- Hardware End of Medium = yes
- BSF at EOM = no
- Backward Space File = yes
- Fast Forward Space File = yes
- Two EOF = no
- AutomaticMount = yes
- AlwaysOpen = yes
- Removable Media = yes
-}
-\end{verbatim}
-\normalsize
-
-\section{Hardware Compression on EXB-8900}
-\index[general]{Hardware Compression on EXB-8900}
-\index[general]{EXB-8900!Hardware Compression}
-
-To active, check, or disable the hardware compression feature
-on an EXB-8900, use the exabyte MammothTool. You can get it here:
-\elink{http://www.exabyte.com/support/online/downloads/index.cfm}
-{http://www.exabyte.com/support/online/downloads/index.cfm}.
-There is a Solaris version of this tool. With option -C 0 or 1 you
-can disable or activate compression. Start this tool without any
-options for a small reference.
-
-\label{fill}
-\subsection{Using btape to Simulate Filling a Tape}
-\index[general]{Using btape to Simulate Filling a Tape}
-\index[general]{Tape!Using btape to Simulate Filling}
-
-Because there are often problems with certain tape drives or systems when end
-of tape conditions occur, {\bf btape} has a special command {\bf fill} that
-causes it to write random data to a tape until the tape fills. It then writes
-at least one more Bacula block to a second tape. Finally, it reads back both
-tapes to ensure that the data has been written in a way that Bacula can
-recover it. Note, there is also a single tape option as noted below, which you
-should use rather than the two tape test. See below for more details.
-
-This can be an extremely time consuming process (here it is about 6 hours) to
-fill a full tape. Note, that btape writes random data to the tape when it is
-filling it. This has two consequences: 1. it takes a bit longer to generate
-the data, especially on slow CPUs. 2. the total amount of data is
-approximately the real physical capacity of your tape, regardless of whether
-or not the tape drive compression is on or off. This is because random data
-does not compress very much.
-
-To begin this test, you enter the {\bf fill} command and follow the
-instructions. There are two options: the simple single tape option and the
-multiple tape option. Please use only the simple single tape option because
-the multiple tape option still doesn't work totally correctly. If the single
-tape option does not succeed, you should correct the problem before using
-Bacula.
-\label{RecoveringFiles}
-
-\section{Recovering Files Written With Fixed Block Sizes}
-\index[general]{Recovering Files Written With Fixed Block Sizes}
-
-If you have been previously running your tape drive in fixed block mode
-(default 512) and Bacula with variable blocks (default), then in version
-1.32f-x and 1.34 and above, Bacula will fail to recover files because it does
-block spacing, and because the block sizes don't agree between your tape drive
-and Bacula it will not work.
-
-The long term solution is to run your drive in variable block mode as
-described above. However, if you have written tapes using fixed block sizes,
-this can be a bit of a pain. The solution to the problem is: while you are
-doing a restore command using a tape written in fixed block size, ensure that
-your drive is set to the fixed block size used while the tape was written.
-Then when doing the {\bf restore} command in the Console program, do not
-answer the prompt {\bf yes/mod/no}. Instead, edit the bootstrap file (the
-location is listed in the prompt) using any ASCII editor. Remove all {\bf
-VolBlock} lines in the file. When the file is re-written, answer the question,
-and Bacula will run without using block positioning, and it should recover
-your files.
-
-\label{BlockModes}
-\section{Tape Blocking Modes}
-\index[general]{Modes!Tape Blocking}
-\index[general]{Tape Blocking Modes}
-
-SCSI tapes may either be written in {\bf variable} or {\bf fixed} block sizes.
-Newer drives support both modes, but some drives such as the QIC devices
-always use fixed block sizes. Bacula attempts to fill and write complete
-blocks (default 65K), so that in normal mode (variable block size), Bacula
-will always write blocks of the same size except the last block of a Job. If
-Bacula is configured to write fixed block sizes, it will pad the last block of
-the Job to the correct size. Bacula expects variable tape block size drives to
-behave as follows: Each write to the drive results in a single record being
-written to the tape. Each read returns a single record. If you request less
-bytes than are in the record, only those number of bytes will be returned, but
-the entire logical record will have been read (the next read will retrieve the
-next record). Thus data from a single write is always returned in a single
-read, and sequentially written records are returned by sequential reads.
-
-Bacula expects fixed block size tape drives to behave as follows: If a write
-length is greater than the physical block size of the drive, the write will be
-written as two blocks each of the fixed physical size. This single write may
-become multiple physical records on the tape. (This is not a good situation).
-According to the documentation, one may never write an amount of data that is
-not the exact multiple of the blocksize (it is not specified if an error
-occurs or if the the last record is padded). When reading, it is my
-understanding that each read request reads one physical record from the tape.
-Due to the complications of fixed block size tape drives, you should avoid
-them if possible with Bacula, or you must be ABSOLUTELY certain that you use
-fixed block sizes within Bacula that correspond to the physical block size of
-the tape drive. This will ensure that Bacula has a one to one correspondence
-between what it writes and the physical record on the tape.
-
-Please note that Bacula will not function correctly if it writes a block and
-that block is split into two or more physical records on the tape. Bacula
-assumes that each write causes a single record to be written, and that it can
-sequentially recover each of the blocks it has written by using the same
-number of sequential reads as it had written.
-
-\section{Details of Tape Modes}
-\index[general]{Modes!Details}
-\index[general]{Details of Tape Modes}
-Rudolf Cejka has provided the following information concerning
-certain tape modes and MTEOM.
-
-\begin{description}
-\item[Tape level]
- It is always possible to position filemarks or blocks, whereas
- positioning to the end-of-data is only optional feature, however it is
- implemented very often. SCSI specification also talks about optional
- sequential filemarks, setmarks and sequential setmarks, but these are not
- implemented so often. Modern tape drives keep track of file positions in
- built-in chip (AIT, LTO) or at the beginning of the tape (SDLT), so there
- is not any speed difference, if end-of-data or filemarks is used (I have
- heard, that LTO-1 from all 3 manufacturers do not use its chip for file
- locations, but a tape as in SDLT case, and I'm not sure about LTO-2 and
- LTO-3 case). However there is a big difference, that end-of-data ignores
- file position, whereas filemarks returns the real number of skipped
- files, so OS can track current file number just in filemarks case.
-
-\item[OS level]
- Solaris does use just SCSI SPACE Filemarks, it does not support SCSI
- SPACE End-of-data. When MTEOM is called, Solaris does use SCSI SPACE
- Filemarks with count = 1048576 for fast mode, and combination of SCSI
- SPACE Filemarks with count = 1 with SCSI SPACE Blocks with count = 1 for
- slow mode, so EOD mark on the tape on some older tape drives is not
- skipped. File number is always tracked for MTEOM.
-
- Linux does support both SCSI SPACE Filemarks and End-of-data: When MTEOM
- is called in MT\_ST\_FAST\_MTEOM mode, SCSI SPACE End-of-data is used.
- In the other case, SCSI SPACE Filemarks with count =
- 8388607 is used.
- There is no real slow mode like in Solaris - I just expect, that for
- older tape drives Filemarks may be slower than End-of-data, but not so
- much as in Solaris slow mode. File number is tracked for MTEOM just
- without MT\_ST\_FAST\_MTEOM - when MT\_ST\_FAST\_MTEOM is used, it is not.
-
- FreeBSD does support both SCSI SPACE Filemarks and End-of-data, but when
- MTEOD (MTEOM) is called, SCSI SPACE End-of-data is always used. FreeBSD
- never use SCSI SPACE Filemarks for MTEOD. File number is never tracked
- for MTEOD.
-
-\item[Bacula level]
- When {\bf Hardware End of Medium = Yes} is used, MTEOM is called, but it
- does not mean, that hardware End-of-data must be used. When Hardware End
- of Medium = No, if Fast Forward Space File = Yes, MTFSF with count =
- 32767 is used, else Block Read with count = 1 with Forward Space File
- with count = 1 is used, which is really very slow.
-
-\item [Hardware End of Medium = Yes|No]
- The name of this option is misleading and is the source of confusion,
- because it is not the hardware EOM, what is really switched here.
-
- If I use Yes, OS must not use SCSI SPACE End-of-data, because Bacula
- expects, that there is tracked file number, which is not supported by
- SCSI specification. Instead, the OS have to use SCSI SPACE Filemarks.
-
- If I use No, an action depends on Fast Forward Space File.
-
- When I set {\bf Hardware End of Medium = no}
- and {\bf Fast Forward Space File = no}
- file positioning was very slow
- on my LTO-3 (about ten to 100 minutes), but
-
- with {\bf Hardware End of Medium = no} and
-{\bf Fast Forward Space File = yes}, the time is ten to
-100 times faster (about one to two minutes).
-
-\end{description}
-
-\section{Tape Performance Problems}
-\index[general]{Tape Performance}
-If you have LTO-3 or LTO-4 drives, you should be able to
-fairly good transfer rates; from 60 to 150 MB/second, providing
-you have fast disks; GigaBit Ethernet connections (probably 2); you are
-running multiple simultaneous jobs; you have Bacula data spooling
-enabled; your tape block size is set to 131072 or 262144; and
-you have set {\bf Maximum File Size = 5G}.
-
-If you are not getting good performance, consider some of the following
-suggestions from the Allen Balck on the Bacula Users email list:
-
-\begin{enumerate}
-\item You are using an old HBA (i.e. SCSI-1, which only does 5 MB/s)
-
-\item There are other, slower, devices on the SCSI bus. The HBA will
- negotiate the speed of every device down to the speed of the
- slowest.
-
-\item There is a termination problem on the bus (either too much or
- too little termination). The HBA will drop the bus speed in an
- attempt to increase the reliability of the bus.
-
-\item Loose or damaged cabling - this will probably make the HBA "think"
- you have a termination problem and it will react as in 3 above.
-\end{enumerate}
-
-See if /var/adm/messages (or /var/log/messages) tells you what the sync
-rate of the SCSI devices/bus are. Also, the next time you reboot, the
-BIOS may be able to tell you what the rate of each device is.
-
-
-\section{Autochanger Errors}
-\index[general]{Errors!Autochanger}
-\index[general]{Autochanger Errors}
-
-If you are getting errors such as:
-
-\footnotesize
-\begin{verbatim}
-3992 Bad autochanger "load slot 1, drive 1": ERR=Child exited with code 1.
-\end{verbatim}
-\normalsize
-
-and you are running your Storage daemon as non-root, then most likely
-you are having permissions problems with the control channel. Running
-as root, set permissions on /dev/sgX so that the userid and group of
-your Storage daemon can access the device. You need to ensure that you
-all access to the proper control device, and if you don't have any
-SCSI disk drives (including SATA drives), you might want to change
-the permissions on /dev/sg*.
-
-\section{Syslog Errors}
-\index[general]{Errors!Syslog}
-\index[general]{Syslog Errors}
-
-If you are getting errors such as:
-
-\footnotesize
-\begin{verbatim}
-: kernel: st0: MTSETDRVBUFFER only allowed for root
-\end{verbatim}
-\normalsize
-
-you are most likely running your Storage daemon as non-root, and
-Bacula is attempting to set the correct OS buffering to correspond
-to your Device resource. Most OSes allow only root to issue this
-ioctl command. In general, the message can be ignored providing
-you are sure that your OS parameters are properly configured as
-described earlier in this manual. If you are running your Storage daemon
-as root, you should not be getting these system log messages, and if
-you are, something is probably wrong.
--- /dev/null
+%%
+%%
+
+\chapter{Tips and Suggestions}
+\label{TipsChapter}
+\index[general]{Tips and Suggestions }
+\index[general]{Suggestions!Tips and }
+\label{examples}
+\index[general]{Examples }
+
+There are a number of example scripts for various things that can be found in
+the {\bf example} subdirectory and its subdirectories of the Bacula source
+distribution.
+
+For additional tips, please see the \elink{Bacula
+wiki}{http://wiki.bacula.org}.
+
+\section{Upgrading Bacula Versions}
+\label{upgrading}
+\index[general]{Upgrading Bacula Versions }
+\index[general]{Versions!Upgrading Bacula }
+\index[general]{Upgrading}
+
+The first thing to do before upgrading from one version to another is to
+ensure that you don't overwrite or delete your production (current) version
+of Bacula until you have tested that the new version works.
+
+If you have installed Bacula into a single directory, this is simple: simply
+make a copy of your Bacula directory.
+
+If you have done a more typical Unix installation where the binaries are
+placed in one directory and the configuration files are placed in another,
+then the simplest way is to configure your new Bacula to go into a single
+file. Alternatively, make copies of all your binaries and especially your
+conf files.
+
+Whatever your situation may be (one of the two just described), you should
+probably start with the {\bf defaultconf} script that can be found in the {\bf
+examples} subdirectory. Copy this script to the main Bacula directory, modify
+it as necessary (there should not need to be many modifications), configure
+Bacula, build it, install it, then stop your production Bacula, copy all the
+{\bf *.conf} files from your production Bacula directory to the test Bacula
+directory, start the test version, and run a few test backups. If all seems
+good, then you can proceed to install the new Bacula in place of or possibly
+over the old Bacula.
+
+When installing a new Bacula you need not worry about losing the changes you
+made to your configuration files as the installation process will not
+overwrite them providing that you do not do a {\bf make uninstall}.
+
+If the new version of Bacula requires an upgrade to the database,
+you can upgrade it with the script {\bf update\_bacula\_tables}, which
+will be installed in your scripts directory (default {\bf /etc/bacula}),
+or alternatively, you can find it in the
+{\bf \lt{}bacula-source\gt{}/src/cats} directory.
+
+\section{Getting Notified of Job Completion}
+\label{notification}
+\index[general]{Getting Notified of Job Completion }
+\index[general]{Completion!Getting Notified of Job }
+
+One of the first things you should do is to ensure that you are being properly
+notified of the status of each Job run by Bacula, or at a minimum of each Job
+that terminates with an error.
+
+Until you are completely comfortable with {\bf Bacula}, we recommend that you
+send an email to yourself for each Job that is run. This is most easily
+accomplished by adding an email notification address in the {\bf Messages}
+resource of your Director's configuration file. An email is automatically
+configured in the default configuration files, but you must ensure that the
+default {\bf root} address is replaced by your email address.
+
+For additional examples of how to configure a Bacula, please take a look at the
+{\bf .conf} files found in the {\bf examples} sub-directory. We recommend the
+following configuration (where you change the paths and email address to
+correspond to your setup). Note, the {\bf mailcommand} and {\bf
+operatorcommand} should be on a single line. They were split here for
+presentation:
+
+\footnotesize
+\begin{verbatim}
+Messages {
+ Name = Standard
+ mailcommand = "/home/bacula/bin/bsmtp -h localhost
+ -f \"\(Bacula\) %r\"
+ -s \"Bacula: %t %e of %c %l\" %r"
+ operatorcommand = "/home/bacula/bin/bsmtp -h localhost
+ -f \"\(Bacula\) %r\"
+ -s \"Bacula: Intervention needed for %j\" %r"
+ Mail = your-email-address = all, !skipped, !terminate
+ append = "/home/bacula/bin/log" = all, !skipped, !terminate
+ operator = your-email-address = mount
+ console = all, !skipped, !saved
+}
+\end{verbatim}
+\normalsize
+
+You will need to ensure that the {\bf /home/bacula/bin} path on the {\bf
+mailcommand} and the {\bf operatorcommand} lines point to your {\bf Bacula}
+binary directory where the {\bf bsmtp} program will be installed. You will
+also want to ensure that the {\bf your-email-address} is replaced by your
+email address, and finally, you will also need to ensure that the {\bf
+/home/bacula/bin/log} points to the file where you want to log all messages.
+
+With the above Messages resource, you will be notified by email of every Job
+that ran, all the output will be appended to the {\bf log} file you specify,
+all output will be directed to the console program, and all mount messages
+will be emailed to you. Note, some messages will be sent to multiple
+destinations.
+
+The form of the mailcommand is a bit complicated, but it allows you to
+distinguish whether the Job terminated in error or terminated normally. Please
+see the
+\ilink{Mail Command}{mailcommand} section of the Messages
+Resource chapter of this manual for the details of the substitution characters
+used above.
+
+Once you are totally comfortable with Bacula as I am, or if you have a large
+number of nightly Jobs as I do (eight), you will probably want to change the
+{\bf Mail} command to {\bf Mail On Error} which will generate an email message
+only if the Job terminates in error. If the Job terminates normally, no email
+message will be sent, but the output will still be appended to the log file as
+well as sent to the Console program.
+
+\section{Getting Email Notification to Work}
+\label{email}
+\index[general]{Work!Getting Email Notification to }
+\index[general]{Getting Email Notification to Work }
+
+The section above describes how to get email notification of job status.
+Occasionally, however, users have problems receiving any email at all. In that
+case, the things to check are the following:
+
+\begin{itemize}
+\item Ensure that you have a valid email address specified on your {\bf Mail}
+ record in the Director's Messages resource. The email address should be fully
+ qualified. Simply using {\bf root} generally will not work, rather you should
+use {\bf root@localhost} or better yet your full domain.
+\item Ensure that you do not have a {\bf Mail} record in the Storage daemon's
+ or File daemon's configuration files. The only record you should have is {\bf
+ director}:
+
+\footnotesize
+\begin{verbatim}
+ director = director-name = all
+
+\end{verbatim}
+\normalsize
+
+\item If all else fails, try replacing the {\bf mailcommand} with
+
+ \footnotesize
+\begin{verbatim}
+mailcommand = "mail -s test your@domain.com"
+\end{verbatim}
+\normalsize
+
+\item Once the above is working, assuming you want to use {\bf bsmtp}, submit
+ the desired bsmtp command by hand and ensure that the email is delivered,
+ then put that command into {\bf Bacula}. Small differences in things such as
+the parenthesis around the word Bacula can make a big difference to some
+bsmtp programs. For example, you might start simply by using:
+
+\footnotesize
+\begin{verbatim}
+mailcommand = "/home/bacula/bin/bsmtp -f \"root@localhost\" %r"
+\end{verbatim}
+\normalsize
+
+\end{itemize}
+
+\section{Getting Notified that Bacula is Running}
+\label{JobNotification}
+\index[general]{Running!Getting Notified that Bacula is }
+\index[general]{Getting Notified that Bacula is Running }
+
+If like me, you have setup Bacula so that email is sent only when a Job has
+errors, as described in the previous section of this chapter, inevitably, one
+day, something will go wrong and {\bf Bacula} can stall. This could be because
+Bacula crashes, which is vary rare, or more likely the network has caused {\bf
+Bacula} to {\bf hang} for some unknown reason.
+
+To avoid this, you can use the {\bf RunAfterJob} command in the Job resource
+to schedule a Job nightly, or weekly that simply emails you a message saying
+that Bacula is still running. For example, I have setup the following Job in
+my Director's configuration file:
+
+\footnotesize
+\begin{verbatim}
+Schedule {
+ Name = "Watchdog"
+ Run = Level=Full sun-sat at 6:05
+}
+Job {
+ Name = "Watchdog"
+ Type = Admin
+ Client=Watchdog
+ FileSet="Verify Set"
+ Messages = Standard
+ Storage = DLTDrive
+ Pool = Default
+ Schedule = "Watchdog"
+ RunAfterJob = "/home/kern/bacula/bin/watchdog %c %d"
+}
+Client {
+ Name = Watchdog
+ Address = rufus
+ FDPort = 9102
+ Catalog = Verify
+ Password = ""
+ File Retention = 1day
+ Job Retention = 1 month
+ AutoPrune = yes
+}
+\end{verbatim}
+\normalsize
+
+Where I established a schedule to run the Job nightly. The Job itself is type
+{\bf Admin} which means that it doesn't actually do anything, and I've defined
+a FileSet, Pool, Storage, and Client, all of which are not really used (and
+probably don't need to be specified). The key aspect of this Job is the
+command:
+
+\footnotesize
+\begin{verbatim}
+ RunAfterJob = "/home/kern/bacula/bin/watchdog %c %d"
+\end{verbatim}
+\normalsize
+
+which runs my "watchdog" script. As an example, I have added the Job codes
+\%c and \%d which will cause the Client name and the Director's name to be
+passed to the script. For example, if the Client's name is {\bf Watchdog} and
+the Director's name is {\bf main-dir} then referencing \$1 in the script would
+get {\bf Watchdog} and referencing \$2 would get {\bf main-dir}. In this case,
+having the script know the Client and Director's name is not really useful,
+but in other situations it may be.
+
+You can put anything in the watchdog script. In my case, I like to monitor the
+size of my catalog to be sure that {\bf Bacula} is really pruning it. The
+following is my watchdog script:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+cd /home/kern/mysql/var/bacula
+du . * |
+/home/kern/bacula/bin/bsmtp \
+ -f "\(Bacula\) abuse@whitehouse.com" -h mail.yyyy.com \
+ -s "Bacula running" abuse@whitehouse.com
+\end{verbatim}
+\normalsize
+
+If you just wish to send yourself a message, you can do it with:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+cd /home/kern/mysql/var/bacula
+/home/kern/bacula/bin/bsmtp \
+ -f "\(Bacula\) abuse@whitehouse.com" -h mail.yyyy.com \
+ -s "Bacula running" abuse@whitehouse.com <<END-OF-DATA
+Bacula is still running!!!
+END-OF-DATA
+\end{verbatim}
+\normalsize
+
+\section{Maintaining a Valid Bootstrap File}
+\label{bootstrap}
+\index[general]{Maintaining a Valid Bootstrap File }
+\index[general]{File!Maintaining a Valid Bootstrap }
+
+By using a
+\ilink{ WriteBootstrap}{writebootstrap} record in each of your
+Director's Job resources, you can constantly maintain a
+\ilink{bootstrap}{BootstrapChapter} file that will enable you to
+recover the state of your system as of the last backup without having the
+Bacula catalog. This permits you to more easily recover from a disaster that
+destroys your Bacula catalog.
+
+When a Job resource has a {\bf WriteBootstrap} record, Bacula will maintain
+the designated file (normally on another system but mounted by NFS) with up to
+date information necessary to restore your system. For example, in my
+Director's configuration file, I have the following record:
+
+\footnotesize
+\begin{verbatim}
+ Write Bootstrap = "/mnt/deuter/files/backup/client-name.bsr"
+\end{verbatim}
+\normalsize
+
+where I replace {\bf client-name} by the actual name of the client that is
+being backed up. Thus, Bacula automatically maintains one file for each of my
+clients. The necessary bootstrap information is appended to this file during
+each {\bf Incremental} backup, and the file is totally rewritten during each
+{\bf Full} backup.
+
+Note, one disadvantage of writing to an NFS mounted volume as I do is
+that if the other machine goes down, the OS will wait forever on the fopen()
+call that Bacula makes. As a consequence, Bacula will completely stall until
+the machine exporting the NFS mounts comes back up. A possible solution to this
+problem was provided by Andrew Hilborne, and consists of using the {\bf soft}
+option instead of the {\bf hard} option when mounting the NFS volume, which is
+typically done in {\bf /etc/fstab}/. The NFS documentation explains these
+options in detail. However, I found that with the {\bf soft} option
+NFS disconnected frequently causing even more problems.
+
+If you are starting off in the middle of a cycle (i.e. with Incremental
+backups) rather than at the beginning (with a Full backup), the {\bf
+bootstrap} file will not be immediately valid as it must always have the
+information from a Full backup as the first record. If you wish to synchronize
+your bootstrap file immediately, you can do so by running a {\bf restore}
+command for the client and selecting a full restore, but when the restore
+command asks for confirmation to run the restore Job, you simply reply no,
+then copy the bootstrap file that was written to the location specified on the
+{\bf Write Bootstrap} record. The restore bootstrap file can be found in {\bf
+restore.bsr} in the working directory that you defined. In the example given
+below for the client {\bf rufus}, my input is shown in bold. Note, the JobId
+output has been partially truncated to fit on the page here:
+
+\footnotesize
+\begin{verbatim}
+(in the Console program)
+*restore
+First you select one or more JobIds that contain files
+to be restored. You will then be presented several methods
+of specifying the JobIds. Then you will be allowed to
+select which files from those JobIds are to be restored.
+To select the JobIds, you have the following choices:
+ 1: List last 20 Jobs run
+ 2: List Jobs where a given File is saved
+ 3: Enter list of JobIds to select
+ 4: Enter SQL list command
+ 5: Select the most recent backup for a client
+ 6: Cancel
+Select item: (1-6): 5
+The defined Client resources are:
+ 1: Minimatou
+ 2: Rufus
+ 3: Timmy
+Select Client (File daemon) resource (1-3): 2
+The defined FileSet resources are:
+ 1: Other Files
+Item 1 selected automatically.
++-------+------+-------+---------+---------+------+-------+------------+
+| JobId | Levl | Files | StrtTim | VolName | File | SesId | VolSesTime |
++-------+------+-------+---------+---------+------+-------+------------+
+| 2 | F | 84 | ... | test1 | 0 | 1 | 1035645259 |
++-------+------+-------+---------+---------+------+-------+------------+
+You have selected the following JobId: 2
+Building directory tree for JobId 2 ...
+The defined Storage resources are:
+ 1: File
+Item 1 selected automatically.
+You are now entering file selection mode where you add and
+remove files to be restored. All files are initially added.
+Enter "done" to leave this mode.
+cwd is: /
+$ done
+84 files selected to restore.
+Run Restore job
+JobName: kernsrestore
+Bootstrap: /home/kern/bacula/working/restore.bsr
+Where: /tmp/bacula-restores
+FileSet: Other Files
+Client: Rufus
+Storage: File
+JobId: *None*
+OK to run? (yes/mod/no): no
+quit
+(in a shell window)
+cp ../working/restore.bsr /mnt/deuter/files/backup/rufus.bsr
+\end{verbatim}
+\normalsize
+
+\section{Rejected Volumes After a Crash}
+\label{RejectedVolumes}
+\index[general]{Crash!Rejected Volumes After a }
+\index[general]{Rejected Volumes After a Crash }
+
+Bacula keeps a count of the number of files on each Volume in its Catalog
+database so that before appending to a tape, it can verify that the number of
+files are correct, and thus prevent overwriting valid data. If the Director or
+the Storage daemon crashes before the job has completed, the tape will contain
+one more file than is noted in the Catalog, and the next time you attempt to
+use the same Volume, Bacula will reject it due to a mismatch between the
+physical tape (Volume) and the catalog.
+
+The easiest solution to this problem is to label a new tape and start fresh.
+If you wish to continue appending to the current tape, you can do so by using
+the {\bf update} command in the console program to change the {\bf Volume
+Files} entry in the catalog. A typical sequence of events would go like the
+following:
+
+\footnotesize
+\begin{verbatim}
+- Bacula crashes
+- You restart Bacula
+\end{verbatim}
+\normalsize
+
+Bacula then prints:
+
+\footnotesize
+\begin{verbatim}
+17-Jan-2003 16:45 rufus-dir: Start Backup JobId 13,
+ Job=kernsave.2003-01-17_16.45.46
+17-Jan-2003 16:45 rufus-sd: Volume test01 previously written,
+ moving to end of data.
+17-Jan-2003 16:46 rufus-sd: kernsave.2003-01-17_16.45.46 Error:
+ I cannot write on this volume because:
+ The number of files mismatch! Volume=11 Catalog=10
+17-Jan-2003 16:46 rufus-sd: Job kernsave.2003-01-17_16.45.46 waiting.
+ Cannot find any appendable volumes.
+Please use the "label" command to create a new Volume for:
+ Storage: SDT-10000
+ Media type: DDS-4
+ Pool: Default
+\end{verbatim}
+\normalsize
+
+(note, lines wrapped for presentation)
+The key here is the line that reads:
+
+\footnotesize
+\begin{verbatim}
+ The number of files mismatch! Volume=11 Catalog=10
+\end{verbatim}
+\normalsize
+
+It says that Bacula found eleven files on the volume, but that the catalog
+says there should be ten. When you see this, you can be reasonably sure that
+the SD was interrupted while writing before it had a chance to update the
+catalog. As a consequence, you can just modify the catalog count to eleven,
+and even if the catalog contains references to files saved in file 11,
+everything will be OK and nothing will be lost. Note that if the SD had
+written several file marks to the volume, the difference between the Volume
+count and the Catalog count could be larger than one, but this is unusual.
+
+If on the other hand the catalog is marked as having more files than Bacula
+found on the tape, you need to consider the possible negative consequences of
+modifying the catalog. Please see below for a more complete discussion of
+this.
+
+Continuing with the example of {\bf Volume = 11 Catalog = 10}, to enable to
+Bacula to append to the tape, you do the following:
+
+\footnotesize
+\begin{verbatim}
+update
+Update choice:
+ 1: Volume parameters
+ 2: Pool from resource
+ 3: Slots from autochanger
+Choose catalog item to update (1-3): 1
+Defined Pools:
+ 1: Default
+ 2: File
+Select the Pool (1-2):
++-------+---------+--------+---------+-----------+------+----------+------+-----+
+| MedId | VolName | MedTyp | VolStat | VolBytes | Last | VolReten | Recy | Slt |
++-------+---------+--------+---------+-----------+------+----------+------+-----+
+| 1 | test01 | DDS-4 | Error | 352427156 | ... | 31536000 | 1 | 0 |
++-------+---------+--------+---------+-----------+------+----------+------+-----+
+Enter MediaId or Volume name: 1
+\end{verbatim}
+\normalsize
+
+(note table output truncated for presentation) First, you chose to update the
+Volume parameters by entering a {\bf 1}. In the volume listing that follows,
+notice how the VolStatus is {\bf Error}. We will correct that after changing
+the Volume Files. Continuing, you respond 1,
+
+\footnotesize
+\begin{verbatim}
+Updating Volume "test01"
+Parameters to modify:
+ 1: Volume Status
+ 2: Volume Retention Period
+ 3: Volume Use Duration
+ 4: Maximum Volume Jobs
+ 5: Maximum Volume Files
+ 6: Maximum Volume Bytes
+ 7: Recycle Flag
+ 8: Slot
+ 9: Volume Files
+ 10: Pool
+ 11: Done
+Select parameter to modify (1-11): 9
+Warning changing Volume Files can result
+in loss of data on your Volume
+Current Volume Files is: 10
+Enter new number of Files for Volume: 11
+New Volume Files is: 11
+Updating Volume "test01"
+Parameters to modify:
+ 1: Volume Status
+ 2: Volume Retention Period
+ 3: Volume Use Duration
+ 4: Maximum Volume Jobs
+ 5: Maximum Volume Files
+ 6: Maximum Volume Bytes
+ 7: Recycle Flag
+ 8: Slot
+ 9: Volume Files
+ 10: Pool
+ 11: Done
+Select parameter to modify (1-10): 1
+\end{verbatim}
+\normalsize
+
+Here, you have selected {\bf 9} in order to update the Volume Files, then you
+changed it from {\bf 10} to {\bf 11}, and you now answer {\bf 1} to change the
+Volume Status.
+
+\footnotesize
+\begin{verbatim}
+Current Volume status is: Error
+Possible Values are:
+ 1: Append
+ 2: Archive
+ 3: Disabled
+ 4: Full
+ 5: Used
+ 6: Read-Only
+Choose new Volume Status (1-6): 1
+New Volume status is: Append
+Updating Volume "test01"
+Parameters to modify:
+ 1: Volume Status
+ 2: Volume Retention Period
+ 3: Volume Use Duration
+ 4: Maximum Volume Jobs
+ 5: Maximum Volume Files
+ 6: Maximum Volume Bytes
+ 7: Recycle Flag
+ 8: Slot
+ 9: Volume Files
+ 10: Pool
+ 11: Done
+Select parameter to modify (1-11): 11
+Selection done.
+\end{verbatim}
+\normalsize
+
+At this point, you have changed the Volume Files from {\bf 10} to {\bf 11} to
+account for the last file that was written but not updated in the database,
+and you changed the Volume Status back to {\bf Append}.
+
+This was a lot of words to describe something quite simple.
+
+The {\bf Volume Files} option exists only in version 1.29 and later, and you
+should be careful using it. Generally, if you set the value to that which
+Bacula said is on the tape, you will be OK, especially if the value is one
+more than what is in the catalog.
+
+Now lets consider the case:
+
+\footnotesize
+\begin{verbatim}
+ The number of files mismatch! Volume=10 Catalog=12
+\end{verbatim}
+\normalsize
+
+Here the Bacula found fewer files on the volume than what is marked in the
+catalog. Now, in this case, you should hesitate a lot before modifying the count
+in the catalog, because if you force the catalog from 12 to 10, Bacula will
+start writing after the file 10 on the tape, possibly overwriting valid data,
+and if you ever try to restore any of the files that the catalog has marked as
+saved on Files 11 and 12, all chaos will break out. In this case, you will
+probably be better off using a new tape. In fact, you might want to see what
+files the catalog claims are actually stored on that Volume, and back them up
+to another tape and recycle this tape.
+
+\section{Security Considerations}
+\label{security}
+\index[general]{Considerations!Security }
+\index[general]{Security Considerations }
+
+Only the File daemon needs to run with root permission (so that it can access
+all files). As a consequence, you may run your Director, Storage daemon, and
+MySQL or PostgreSQL database server as non-root processes. Version 1.30 has
+the {\bf -u} and the {\bf -g} options that allow you to specify a userid and
+groupid on the command line to be used after Bacula starts.
+
+As of version 1.33, thanks to Dan Langille, it is easier to configure the
+Bacula Director and Storage daemon to run as non-root.
+
+You should protect the Bacula port addresses (normally 9101, 9102, and 9103)
+from outside access by a firewall or other means of protection to prevent
+unauthorized use of your daemons.
+
+You should ensure that the configuration files are not world readable since
+they contain passwords that allow access to the daemons. Anyone who can access
+the Director using a console program can restore any file from a backup
+Volume.
+
+You should protect your Catalog database. If you are using SQLite, make sure
+that the working directory is readable only by root (or your Bacula userid),
+and ensure that {\bf bacula.db} has permissions {\bf -rw-r\verb:--:r\verb:--:} (i.e. 640) or
+more strict. If you are using MySQL or PostgreSQL, please note that the Bacula
+setup procedure leaves the database open to anyone. At a minimum, you should
+assign the user {\bf bacula} a userid and add it to your Director's
+configuration file in the appropriate Catalog resource.
+
+If you use the make\_catalog\_backup script provided by Bacula, remember that
+you should take care when supplying passwords on the command line. Read the
+\ilink{Backing Up Your Bacula
+Database - Security Considerations }{BackingUpBaculaSecurityConsiderations}
+section for more information.
+
+\section{Creating Holiday Schedules}
+\label{holiday}
+\index[general]{Schedules!Creating Holiday }
+\index[general]{Creating Holiday Schedules }
+
+If you normally change tapes every day or at least every Friday, but Thursday
+is a holiday, you can use a trick proposed by Lutz Kittler to ensure that no
+job runs on Thursday so that you can insert Friday's tape and be sure it will
+be used on Friday. To do so, define a {\bf RunJobBefore} script that normally
+returns zero, so that the Bacula job will normally continue. You can then
+modify the script to return non-zero on any day when you do not want Bacula to
+run the job.
+
+\section{Automatic Labeling Using Your Autochanger}
+\label{autolabel}
+\index[general]{Automatic Labeling Using Your Autochanger }
+\index[general]{Autochanger!Automatic Labeling Using Your }
+
+If you have an autochanger but it does not support barcodes, using a "trick"
+you can make Bacula automatically label all the volumes in your autochanger's
+magazine.
+
+First create a file containing one line for each slot in your autochanger that
+has a tape to be labeled. The line will contain the slot number a colon (:)
+then the Volume name you want to use. For example, create a file named {\bf
+volume-list}, which contains:
+
+\footnotesize
+\begin{verbatim}
+1:Volume001
+2:TestVolume02
+5:LastVolume
+\end{verbatim}
+\normalsize
+
+The records do not need to be in any order and you don't need to mention all
+the slots. Normally, you will have a consistent set of Volume names and a
+sequential set of numbers for each slot you want labeled. In the example
+above, I've left out slots 3 and 4 just as an example. Now, modify your {\bf
+mtx-changer} script and comment out all the lines in the {\bf list)} case by
+putting a \# in column 1. Then add the following two lines:
+
+\footnotesize
+\begin{verbatim}
+ cat <absolute-path>/volume-list
+ exit 0
+\end{verbatim}
+\normalsize
+
+so that the whole case looks like:
+
+\footnotesize
+\begin{verbatim}
+ list)
+#
+# commented out lines
+ cat <absolute-path>/volume-list
+ exit 0
+ ;;
+\end{verbatim}
+\normalsize
+
+where you replace \lt{}absolute-path\gt{} with the full path to the
+volume-list file. Then using the console, you enter the following command:
+
+\footnotesize
+\begin{verbatim}
+ label barcodes
+\end{verbatim}
+\normalsize
+
+and Bacula will proceed to mount the autochanger Volumes in the list and label
+them with the Volume names you have supplied. Bacula will think that the list
+was provided by the autochanger barcodes, but in reality, it was you who
+supplied the \lt{}barcodes\gt{}.
+
+If it seems to work, when it finishes, enter:
+
+\footnotesize
+\begin{verbatim}
+ list volumes
+\end{verbatim}
+\normalsize
+
+and you should see all the volumes nicely created.
+
+\section{Backing Up Portables Using DHCP}
+\label{DNS}
+\index[general]{DHCP!Backing Up Portables Using }
+\index[general]{Backing Up Portables Using DHCP }
+
+You may want to backup laptops or portables that are not always connected to
+the network. If you are using DHCP to assign an IP address to those machines
+when they connect, you will need to use the Dynamic Update capability of DNS
+to assign a name to those machines that can be used in the Address field of
+the Client resource in the Director's conf file.
+
+\section{Going on Vacation}
+\label{Vacation}
+\index[general]{Vacation!Going on }
+\index[general]{Going on Vacation }
+
+At some point, you may want to be absent for a week or two and you want to
+make sure Bacula has enough tape left so that the backups will complete. You
+start by doing a {\bf list volumes} in the Console program:
+
+\footnotesize
+\begin{verbatim}
+list volumes
+
+Using default Catalog name=BackupDB DB=bacula
+Pool: Default
++---------+---------------+-----------+-----------+----------------+-
+| MediaId | VolumeName | MediaType | VolStatus | VolBytes |
++---------+---------------+-----------+-----------+----------------+-
+| 23 | DLT-30Nov02 | DLT8000 | Full | 54,739,278,128 |
+| 24 | DLT-21Dec02 | DLT8000 | Full | 56,331,524,629 |
+| 25 | DLT-11Jan03 | DLT8000 | Full | 67,863,514,895 |
+| 26 | DLT-02Feb03 | DLT8000 | Full | 63,439,314,216 |
+| 27 | DLT-03Mar03 | DLT8000 | Full | 66,022,754,598 |
+| 28 | DLT-04Apr03 | DLT8000 | Full | 60,792,559,924 |
+| 29 | DLT-28Apr03 | DLT8000 | Full | 62,072,494,063 |
+| 30 | DLT-17May03 | DLT8000 | Full | 65,901,767,839 |
+| 31 | DLT-07Jun03 | DLT8000 | Used | 56,558,490,015 |
+| 32 | DLT-28Jun03 | DLT8000 | Full | 64,274,871,265 |
+| 33 | DLT-19Jul03 | DLT8000 | Full | 64,648,749,480 |
+| 34 | DLT-08Aug03 | DLT8000 | Full | 64,293,941,255 |
+| 35 | DLT-24Aug03 | DLT8000 | Append | 9,999,216,782 |
++---------+---------------+-----------+-----------+----------------+
+\end{verbatim}
+\normalsize
+
+Note, I have truncated the output for presentation purposes. What is
+significant, is that I can see that my current tape has almost 10 Gbytes of
+data, and that the average amount of data I get on my tapes is about 60
+Gbytes. So if I go on vacation now, I don't need to worry about tape capacity
+(at least not for short absences).
+
+Equally significant is the fact that I did go on vacation the 28th of June
+2003, and when I did the {\bf list volumes} command, my current tape at that
+time, DLT-07Jun03 MediaId 31, had 56.5 Gbytes written. I could see that the
+tape would fill shortly. Consequently, I manually marked it as {\bf Used} and
+replaced it with a fresh tape that I labeled as DLT-28Jun03, thus assuring
+myself that the backups would all complete without my intervention.
+
+\section{Exclude Files on Windows Regardless of Case}
+\label{Case}
+\index[general]{Exclude Files on Windows Regardless of Case}
+% TODO: should this be put in the win32 chapter?
+% TODO: should all these tips be placed in other chapters?
+
+This tip was submitted by Marc Brueckner who wasn't sure of the case of some
+of his files on Win32, which is case insensitive. The problem is that Bacula
+thinks that {\bf /UNIMPORTANT FILES} is different from {\bf /Unimportant
+Files}. Marc was aware that the file exclusion permits wild-cards. So, he
+specified:
+
+\footnotesize
+\begin{verbatim}
+"/[Uu][Nn][Ii][Mm][Pp][Oo][Rr][Tt][Aa][Nn][Tt] [Ff][Ii][Ll][Ee][Ss]"
+\end{verbatim}
+\normalsize
+
+As a consequence, the above exclude works for files of any case.
+
+Please note that this works only in Bacula Exclude statement and not in
+Include.
+
+\section{Executing Scripts on a Remote Machine}
+\label{RemoteExecution}
+\index[general]{Machine!Executing Scripts on a Remote }
+\index[general]{Executing Scripts on a Remote Machine }
+
+This tip also comes from Marc Brueckner. (Note, this tip is probably outdated
+by the addition of {\bf ClientRunBeforJob} and {\bf ClientRunAfterJob} Job
+records, but the technique still could be useful.) First I thought the "Run
+Before Job" statement in the Job-resource is for executing a script on the
+remote machine (the machine to be backed up). (Note, this is possible as mentioned
+above by using {\bf ClientRunBeforJob} and {\bf ClientRunAfterJob}).
+It could be useful to execute
+scripts on the remote machine e.g. for stopping databases or other services
+while doing the backup. (Of course I have to start the services again when the
+backup has finished) I found the following solution: Bacula could execute
+scripts on the remote machine by using ssh. The authentication is done
+automatically using a private key. First you have to generate a keypair. I've
+done this by:
+
+\footnotesize
+\begin{verbatim}
+ssh-keygen -b 4096 -t dsa -f Bacula_key
+\end{verbatim}
+\normalsize
+
+This statement may take a little time to run. It creates a public/private key
+pair with no passphrase. You could save the keys in /etc/bacula. Now you have
+two new files : Bacula\_key which contains the private key and Bacula\_key.pub
+which contains the public key.
+
+Now you have to append the Bacula\_key.pub file to the file authorized\_keys
+in the \textbackslash{}root\textbackslash{}.ssh directory of the remote
+machine. Then you have to add (or uncomment) the line
+
+\footnotesize
+\begin{verbatim}
+AuthorizedKeysFile %h/.ssh/authorized_keys
+\end{verbatim}
+\normalsize
+
+to the sshd\_config file on the remote machine. Where the \%h stands for the
+home-directory of the user (root in this case).
+
+Assuming that your sshd is already running on the remote machine, you can now
+enter the following on the machine where Bacula runs:
+
+\footnotesize
+\begin{verbatim}
+ssh -i Bacula_key -l root <machine-name-or-ip-address> "ls -la"
+\end{verbatim}
+\normalsize
+
+This should execute the "ls -la" command on the remote machine.
+
+Now you could add lines like the following to your Director's conf file:
+
+\footnotesize
+\begin{verbatim}
+...
+Run Before Job = ssh -i /etc/bacula/Bacula_key 192.168.1.1 \
+ "/etc/init.d/database stop"
+Run After Job = ssh -i /etc/bacula/Bacula_key 192.168.1.1 \
+ "/etc/init.d/database start"
+...
+\end{verbatim}
+\normalsize
+
+Even though Bacula version 1.32 and later has a ClientRunBeforeJob, the ssh method still
+could be useful for updating all the Bacula clients on several remote machines
+in a single script.
+
+\section{Recycling All Your Volumes}
+\label{recycle}
+\index[general]{Recycling All Your Volumes }
+\index[general]{Volumes!Recycling All Your }
+
+This tip comes from Phil Stracchino.
+
+If you decide to blow away your catalog and start over, the simplest way to
+re-add all your prelabeled tapes with a minimum of fuss (provided you don't
+care about the data on the tapes) is to add the tape labels using the console
+{\bf add} command, then go into the catalog and manually set the VolStatus of
+every tape to {\bf Recycle}.
+
+The SQL command to do this is very simple, either use your vendor's
+command line interface (mysql, postgres, sqlite, ...) or use the sql
+command in the Bacula console:
+
+\footnotesize
+\begin{verbatim}
+update Media set VolStatus='Recycle';
+\end{verbatim}
+\normalsize
+
+Bacula will then ignore the data already stored on the tapes and just re-use
+each tape without further objection.
+
+\section{Backing up ACLs on ext3 or XFS filesystems}
+\label{ACLs}
+\index[general]{Filesystems!Backing up ACLs on ext3 or XFS }
+\index[general]{Backing up ACLs on ext3 or XFS filesystems }
+
+This tip comes from Volker Sauer.
+
+Note, this tip was given prior to implementation of ACLs in Bacula (version
+1.34.5). It is left here because dumping/displaying ACLs can still be useful
+in testing/verifying that Bacula is backing up and restoring your ACLs
+properly. Please see the
+\ilink{aclsupport}{ACLSupport} FileSet option in the
+configuration chapter of this manual.
+
+For example, you could dump the ACLs to a file with a script similar to the
+following:
+
+\footnotesize
+\begin{verbatim}
+#!/bin/sh
+BACKUP_DIRS="/foo /bar"
+STORE_ACL=/root/acl-backup
+umask 077
+for i in $BACKUP_DIRS; do
+ cd $i /usr/bin/getfacl -R --skip-base .>$STORE_ACL/${i//\//_}
+done
+\end{verbatim}
+\normalsize
+
+Then use Bacula to backup {\bf /root/acl-backup}.
+
+The ACLs could be restored using Bacula to the {\bf /root/acl-backup} file,
+then restored to your system using:
+
+\footnotesize
+\begin{verbatim}
+setfacl --restore/root/acl-backup
+\end{verbatim}
+\normalsize
+
+\section{Total Automation of Bacula Tape Handling}
+\label{automate}
+\index[general]{Handling!Total Automation of Bacula Tape }
+\index[general]{Total Automation of Bacula Tape Handling }
+
+This tip was provided by Alexander Kuehn.
+
+\elink{Bacula}{http://www.bacula.org/} is a really nice backup program except
+that the manual tape changing requires user interaction with the bacula
+console.
+
+Fortunately I can fix this.
+NOTE!!! This suggestion applies for people who do *NOT* have tape autochangers
+and must change tapes manually.!!!!!
+
+Bacula supports a variety of tape changers through the use of mtx-changer
+scripts/programs. This highly flexible approach allowed me to create
+\elink{this shell script}{http://www.bacula.org/en/rel-manual/mtx-changer.txt} which does the following:
+% TODO: We need to include this in book appendix and point to it.
+% TODO:
+Whenever a new tape is required it sends a mail to the operator to insert the
+new tape. Then it waits until a tape has been inserted, sends a mail again to
+say thank you and let's bacula continue its backup.
+So you can schedule and run backups without ever having to log on or see the
+console.
+To make the whole thing work you need to create a Device resource which looks
+something like this ("Archive Device", "Maximum Changer Wait", "Media
+Type" and "Label media" may have different values):
+
+\footnotesize
+\begin{verbatim}
+Device {
+ Name=DDS3
+ Archive Device = # use yours not mine! ;)/dev/nsa0
+ Changer Device = # not really required/dev/nsa0
+ Changer Command = "# use this (maybe change the path)!
+ /usr/local/bin/mtx-changer %o %a %S"
+ Maximum Changer Wait = 3d # 3 days in seconds
+ AutomaticMount = yes; # mount on start
+ AlwaysOpen = yes; # keep device locked
+ Media Type = DDS3 # it's just a name
+ RemovableMedia = yes; #
+ Offline On Unmount = Yes; # keep this too
+ Label media = Yes; #
+}
+\end{verbatim}
+\normalsize
+
+As the script has to emulate the complete wisdom of a mtx-changer it has an
+internal "database" containing where which tape is stored, you can see this on
+the following line:
+
+\footnotesize
+\begin{verbatim}
+labels="VOL-0001 VOL-0002 VOL-0003 VOL-0004 VOL-0005 VOL-0006
+VOL-0007 VOL-0008 VOL-0009 VOL-0010 VOL-0011 VOL-0012"
+\end{verbatim}
+\normalsize
+
+The above should be all on one line, and it effectively tells Bacula that
+volume "VOL-0001" is located in slot 1 (which is our lowest slot), that
+volume "VOL-0002" is located in slot 2 and so on..
+The script also maintains a logfile (/var/log/mtx.log) where you can monitor
+its operation.
+
+\section{Running Concurrent Jobs}
+\label{ConcurrentJobs}
+\index[general]{Jobs!Running Concurrent}
+\index[general]{Running Concurrent Jobs}
+\index[general]{Concurrent Jobs}
+
+Bacula can run multiple concurrent jobs, but the default configuration files
+do not enable it. Using the {\bf Maximum Concurrent Jobs} directive, you
+can configure how many and which jobs can be run simultaneously.
+The Director's default value for {\bf Maximum Concurrent Jobs} is "1".
+
+To initially setup concurrent jobs you need to define {\bf Maximum Concurrent Jobs} in
+the Director's configuration file (bacula-dir.conf) in the
+Director, Job, Client, and Storage resources.
+
+Additionally the File daemon, and the Storage daemon each have their own
+{\bf Maximum Concurrent Jobs} directive that sets the overall maximum
+number of concurrent jobs the daemon will run. The default for both the
+File daemon and the Storage daemon is "20".
+
+For example, if you want two different jobs to run simultaneously backing up
+the same Client to the same Storage device, they will run concurrently only if
+you have set {\bf Maximum Concurrent Jobs} greater than one in the Director
+resource, the Client resource, and the Storage resource in bacula-dir.conf.
+
+We recommend that you read the \ilink{Data
+Spooling}{SpoolingChapter} of this manual first, then test your multiple
+concurrent backup including restore testing before you put it into
+production.
+
+Below is a super stripped down bacula-dir.conf file showing you the four
+places where the the file must be modified to allow the same job {\bf
+NightlySave} to run up to four times concurrently. The change to the Job
+resource is not necessary if you want different Jobs to run at the same time,
+which is the normal case.
+
+\footnotesize
+\begin{verbatim}
+#
+# Bacula Director Configuration file -- bacula-dir.conf
+#
+Director {
+ Name = rufus-dir
+ Maximum Concurrent Jobs = 4
+ ...
+}
+Job {
+ Name = "NightlySave"
+ Maximum Concurrent Jobs = 4
+ Client = rufus-fd
+ Storage = File
+ ...
+}
+Client {
+ Name = rufus-fd
+ Maximum Concurrent Jobs = 4
+ ...
+}
+Storage {
+ Name = File
+ Maximum Concurrent Jobs = 4
+ ...
+}
+\end{verbatim}
+\normalsize
+++ /dev/null
-%%
-%%
-
-\chapter{Tips and Suggestions}
-\label{TipsChapter}
-\index[general]{Tips and Suggestions }
-\index[general]{Suggestions!Tips and }
-\label{examples}
-\index[general]{Examples }
-
-There are a number of example scripts for various things that can be found in
-the {\bf example} subdirectory and its subdirectories of the Bacula source
-distribution.
-
-For additional tips, please see the \elink{Bacula
-wiki}{http://wiki.bacula.org}.
-
-\section{Upgrading Bacula Versions}
-\label{upgrading}
-\index[general]{Upgrading Bacula Versions }
-\index[general]{Versions!Upgrading Bacula }
-\index[general]{Upgrading}
-
-The first thing to do before upgrading from one version to another is to
-ensure that you don't overwrite or delete your production (current) version
-of Bacula until you have tested that the new version works.
-
-If you have installed Bacula into a single directory, this is simple: simply
-make a copy of your Bacula directory.
-
-If you have done a more typical Unix installation where the binaries are
-placed in one directory and the configuration files are placed in another,
-then the simplest way is to configure your new Bacula to go into a single
-file. Alternatively, make copies of all your binaries and especially your
-conf files.
-
-Whatever your situation may be (one of the two just described), you should
-probably start with the {\bf defaultconf} script that can be found in the {\bf
-examples} subdirectory. Copy this script to the main Bacula directory, modify
-it as necessary (there should not need to be many modifications), configure
-Bacula, build it, install it, then stop your production Bacula, copy all the
-{\bf *.conf} files from your production Bacula directory to the test Bacula
-directory, start the test version, and run a few test backups. If all seems
-good, then you can proceed to install the new Bacula in place of or possibly
-over the old Bacula.
-
-When installing a new Bacula you need not worry about losing the changes you
-made to your configuration files as the installation process will not
-overwrite them providing that you do not do a {\bf make uninstall}.
-
-If the new version of Bacula requires an upgrade to the database,
-you can upgrade it with the script {\bf update\_bacula\_tables}, which
-will be installed in your scripts directory (default {\bf /etc/bacula}),
-or alternatively, you can find it in the
-{\bf \lt{}bacula-source\gt{}/src/cats} directory.
-
-\section{Getting Notified of Job Completion}
-\label{notification}
-\index[general]{Getting Notified of Job Completion }
-\index[general]{Completion!Getting Notified of Job }
-
-One of the first things you should do is to ensure that you are being properly
-notified of the status of each Job run by Bacula, or at a minimum of each Job
-that terminates with an error.
-
-Until you are completely comfortable with {\bf Bacula}, we recommend that you
-send an email to yourself for each Job that is run. This is most easily
-accomplished by adding an email notification address in the {\bf Messages}
-resource of your Director's configuration file. An email is automatically
-configured in the default configuration files, but you must ensure that the
-default {\bf root} address is replaced by your email address.
-
-For additional examples of how to configure a Bacula, please take a look at the
-{\bf .conf} files found in the {\bf examples} sub-directory. We recommend the
-following configuration (where you change the paths and email address to
-correspond to your setup). Note, the {\bf mailcommand} and {\bf
-operatorcommand} should be on a single line. They were split here for
-presentation:
-
-\footnotesize
-\begin{verbatim}
-Messages {
- Name = Standard
- mailcommand = "/home/bacula/bin/bsmtp -h localhost
- -f \"\(Bacula\) %r\"
- -s \"Bacula: %t %e of %c %l\" %r"
- operatorcommand = "/home/bacula/bin/bsmtp -h localhost
- -f \"\(Bacula\) %r\"
- -s \"Bacula: Intervention needed for %j\" %r"
- Mail = your-email-address = all, !skipped, !terminate
- append = "/home/bacula/bin/log" = all, !skipped, !terminate
- operator = your-email-address = mount
- console = all, !skipped, !saved
-}
-\end{verbatim}
-\normalsize
-
-You will need to ensure that the {\bf /home/bacula/bin} path on the {\bf
-mailcommand} and the {\bf operatorcommand} lines point to your {\bf Bacula}
-binary directory where the {\bf bsmtp} program will be installed. You will
-also want to ensure that the {\bf your-email-address} is replaced by your
-email address, and finally, you will also need to ensure that the {\bf
-/home/bacula/bin/log} points to the file where you want to log all messages.
-
-With the above Messages resource, you will be notified by email of every Job
-that ran, all the output will be appended to the {\bf log} file you specify,
-all output will be directed to the console program, and all mount messages
-will be emailed to you. Note, some messages will be sent to multiple
-destinations.
-
-The form of the mailcommand is a bit complicated, but it allows you to
-distinguish whether the Job terminated in error or terminated normally. Please
-see the
-\ilink{Mail Command}{mailcommand} section of the Messages
-Resource chapter of this manual for the details of the substitution characters
-used above.
-
-Once you are totally comfortable with Bacula as I am, or if you have a large
-number of nightly Jobs as I do (eight), you will probably want to change the
-{\bf Mail} command to {\bf Mail On Error} which will generate an email message
-only if the Job terminates in error. If the Job terminates normally, no email
-message will be sent, but the output will still be appended to the log file as
-well as sent to the Console program.
-
-\section{Getting Email Notification to Work}
-\label{email}
-\index[general]{Work!Getting Email Notification to }
-\index[general]{Getting Email Notification to Work }
-
-The section above describes how to get email notification of job status.
-Occasionally, however, users have problems receiving any email at all. In that
-case, the things to check are the following:
-
-\begin{itemize}
-\item Ensure that you have a valid email address specified on your {\bf Mail}
- record in the Director's Messages resource. The email address should be fully
- qualified. Simply using {\bf root} generally will not work, rather you should
-use {\bf root@localhost} or better yet your full domain.
-\item Ensure that you do not have a {\bf Mail} record in the Storage daemon's
- or File daemon's configuration files. The only record you should have is {\bf
- director}:
-
-\footnotesize
-\begin{verbatim}
- director = director-name = all
-
-\end{verbatim}
-\normalsize
-
-\item If all else fails, try replacing the {\bf mailcommand} with
-
- \footnotesize
-\begin{verbatim}
-mailcommand = "mail -s test your@domain.com"
-\end{verbatim}
-\normalsize
-
-\item Once the above is working, assuming you want to use {\bf bsmtp}, submit
- the desired bsmtp command by hand and ensure that the email is delivered,
- then put that command into {\bf Bacula}. Small differences in things such as
-the parenthesis around the word Bacula can make a big difference to some
-bsmtp programs. For example, you might start simply by using:
-
-\footnotesize
-\begin{verbatim}
-mailcommand = "/home/bacula/bin/bsmtp -f \"root@localhost\" %r"
-\end{verbatim}
-\normalsize
-
-\end{itemize}
-
-\section{Getting Notified that Bacula is Running}
-\label{JobNotification}
-\index[general]{Running!Getting Notified that Bacula is }
-\index[general]{Getting Notified that Bacula is Running }
-
-If like me, you have setup Bacula so that email is sent only when a Job has
-errors, as described in the previous section of this chapter, inevitably, one
-day, something will go wrong and {\bf Bacula} can stall. This could be because
-Bacula crashes, which is vary rare, or more likely the network has caused {\bf
-Bacula} to {\bf hang} for some unknown reason.
-
-To avoid this, you can use the {\bf RunAfterJob} command in the Job resource
-to schedule a Job nightly, or weekly that simply emails you a message saying
-that Bacula is still running. For example, I have setup the following Job in
-my Director's configuration file:
-
-\footnotesize
-\begin{verbatim}
-Schedule {
- Name = "Watchdog"
- Run = Level=Full sun-sat at 6:05
-}
-Job {
- Name = "Watchdog"
- Type = Admin
- Client=Watchdog
- FileSet="Verify Set"
- Messages = Standard
- Storage = DLTDrive
- Pool = Default
- Schedule = "Watchdog"
- RunAfterJob = "/home/kern/bacula/bin/watchdog %c %d"
-}
-Client {
- Name = Watchdog
- Address = rufus
- FDPort = 9102
- Catalog = Verify
- Password = ""
- File Retention = 1day
- Job Retention = 1 month
- AutoPrune = yes
-}
-\end{verbatim}
-\normalsize
-
-Where I established a schedule to run the Job nightly. The Job itself is type
-{\bf Admin} which means that it doesn't actually do anything, and I've defined
-a FileSet, Pool, Storage, and Client, all of which are not really used (and
-probably don't need to be specified). The key aspect of this Job is the
-command:
-
-\footnotesize
-\begin{verbatim}
- RunAfterJob = "/home/kern/bacula/bin/watchdog %c %d"
-\end{verbatim}
-\normalsize
-
-which runs my "watchdog" script. As an example, I have added the Job codes
-\%c and \%d which will cause the Client name and the Director's name to be
-passed to the script. For example, if the Client's name is {\bf Watchdog} and
-the Director's name is {\bf main-dir} then referencing \$1 in the script would
-get {\bf Watchdog} and referencing \$2 would get {\bf main-dir}. In this case,
-having the script know the Client and Director's name is not really useful,
-but in other situations it may be.
-
-You can put anything in the watchdog script. In my case, I like to monitor the
-size of my catalog to be sure that {\bf Bacula} is really pruning it. The
-following is my watchdog script:
-
-\footnotesize
-\begin{verbatim}
-#!/bin/sh
-cd /home/kern/mysql/var/bacula
-du . * |
-/home/kern/bacula/bin/bsmtp \
- -f "\(Bacula\) abuse@whitehouse.com" -h mail.yyyy.com \
- -s "Bacula running" abuse@whitehouse.com
-\end{verbatim}
-\normalsize
-
-If you just wish to send yourself a message, you can do it with:
-
-\footnotesize
-\begin{verbatim}
-#!/bin/sh
-cd /home/kern/mysql/var/bacula
-/home/kern/bacula/bin/bsmtp \
- -f "\(Bacula\) abuse@whitehouse.com" -h mail.yyyy.com \
- -s "Bacula running" abuse@whitehouse.com <<END-OF-DATA
-Bacula is still running!!!
-END-OF-DATA
-\end{verbatim}
-\normalsize
-
-\section{Maintaining a Valid Bootstrap File}
-\label{bootstrap}
-\index[general]{Maintaining a Valid Bootstrap File }
-\index[general]{File!Maintaining a Valid Bootstrap }
-
-By using a
-\ilink{ WriteBootstrap}{writebootstrap} record in each of your
-Director's Job resources, you can constantly maintain a
-\ilink{bootstrap}{BootstrapChapter} file that will enable you to
-recover the state of your system as of the last backup without having the
-Bacula catalog. This permits you to more easily recover from a disaster that
-destroys your Bacula catalog.
-
-When a Job resource has a {\bf WriteBootstrap} record, Bacula will maintain
-the designated file (normally on another system but mounted by NFS) with up to
-date information necessary to restore your system. For example, in my
-Director's configuration file, I have the following record:
-
-\footnotesize
-\begin{verbatim}
- Write Bootstrap = "/mnt/deuter/files/backup/client-name.bsr"
-\end{verbatim}
-\normalsize
-
-where I replace {\bf client-name} by the actual name of the client that is
-being backed up. Thus, Bacula automatically maintains one file for each of my
-clients. The necessary bootstrap information is appended to this file during
-each {\bf Incremental} backup, and the file is totally rewritten during each
-{\bf Full} backup.
-
-Note, one disadvantage of writing to an NFS mounted volume as I do is
-that if the other machine goes down, the OS will wait forever on the fopen()
-call that Bacula makes. As a consequence, Bacula will completely stall until
-the machine exporting the NFS mounts comes back up. A possible solution to this
-problem was provided by Andrew Hilborne, and consists of using the {\bf soft}
-option instead of the {\bf hard} option when mounting the NFS volume, which is
-typically done in {\bf /etc/fstab}/. The NFS documentation explains these
-options in detail. However, I found that with the {\bf soft} option
-NFS disconnected frequently causing even more problems.
-
-If you are starting off in the middle of a cycle (i.e. with Incremental
-backups) rather than at the beginning (with a Full backup), the {\bf
-bootstrap} file will not be immediately valid as it must always have the
-information from a Full backup as the first record. If you wish to synchronize
-your bootstrap file immediately, you can do so by running a {\bf restore}
-command for the client and selecting a full restore, but when the restore
-command asks for confirmation to run the restore Job, you simply reply no,
-then copy the bootstrap file that was written to the location specified on the
-{\bf Write Bootstrap} record. The restore bootstrap file can be found in {\bf
-restore.bsr} in the working directory that you defined. In the example given
-below for the client {\bf rufus}, my input is shown in bold. Note, the JobId
-output has been partially truncated to fit on the page here:
-
-\footnotesize
-\begin{verbatim}
-(in the Console program)
-*restore
-First you select one or more JobIds that contain files
-to be restored. You will then be presented several methods
-of specifying the JobIds. Then you will be allowed to
-select which files from those JobIds are to be restored.
-To select the JobIds, you have the following choices:
- 1: List last 20 Jobs run
- 2: List Jobs where a given File is saved
- 3: Enter list of JobIds to select
- 4: Enter SQL list command
- 5: Select the most recent backup for a client
- 6: Cancel
-Select item: (1-6): 5
-The defined Client resources are:
- 1: Minimatou
- 2: Rufus
- 3: Timmy
-Select Client (File daemon) resource (1-3): 2
-The defined FileSet resources are:
- 1: Other Files
-Item 1 selected automatically.
-+-------+------+-------+---------+---------+------+-------+------------+
-| JobId | Levl | Files | StrtTim | VolName | File | SesId | VolSesTime |
-+-------+------+-------+---------+---------+------+-------+------------+
-| 2 | F | 84 | ... | test1 | 0 | 1 | 1035645259 |
-+-------+------+-------+---------+---------+------+-------+------------+
-You have selected the following JobId: 2
-Building directory tree for JobId 2 ...
-The defined Storage resources are:
- 1: File
-Item 1 selected automatically.
-You are now entering file selection mode where you add and
-remove files to be restored. All files are initially added.
-Enter "done" to leave this mode.
-cwd is: /
-$ done
-84 files selected to restore.
-Run Restore job
-JobName: kernsrestore
-Bootstrap: /home/kern/bacula/working/restore.bsr
-Where: /tmp/bacula-restores
-FileSet: Other Files
-Client: Rufus
-Storage: File
-JobId: *None*
-OK to run? (yes/mod/no): no
-quit
-(in a shell window)
-cp ../working/restore.bsr /mnt/deuter/files/backup/rufus.bsr
-\end{verbatim}
-\normalsize
-
-\section{Rejected Volumes After a Crash}
-\label{RejectedVolumes}
-\index[general]{Crash!Rejected Volumes After a }
-\index[general]{Rejected Volumes After a Crash }
-
-Bacula keeps a count of the number of files on each Volume in its Catalog
-database so that before appending to a tape, it can verify that the number of
-files are correct, and thus prevent overwriting valid data. If the Director or
-the Storage daemon crashes before the job has completed, the tape will contain
-one more file than is noted in the Catalog, and the next time you attempt to
-use the same Volume, Bacula will reject it due to a mismatch between the
-physical tape (Volume) and the catalog.
-
-The easiest solution to this problem is to label a new tape and start fresh.
-If you wish to continue appending to the current tape, you can do so by using
-the {\bf update} command in the console program to change the {\bf Volume
-Files} entry in the catalog. A typical sequence of events would go like the
-following:
-
-\footnotesize
-\begin{verbatim}
-- Bacula crashes
-- You restart Bacula
-\end{verbatim}
-\normalsize
-
-Bacula then prints:
-
-\footnotesize
-\begin{verbatim}
-17-Jan-2003 16:45 rufus-dir: Start Backup JobId 13,
- Job=kernsave.2003-01-17_16.45.46
-17-Jan-2003 16:45 rufus-sd: Volume test01 previously written,
- moving to end of data.
-17-Jan-2003 16:46 rufus-sd: kernsave.2003-01-17_16.45.46 Error:
- I cannot write on this volume because:
- The number of files mismatch! Volume=11 Catalog=10
-17-Jan-2003 16:46 rufus-sd: Job kernsave.2003-01-17_16.45.46 waiting.
- Cannot find any appendable volumes.
-Please use the "label" command to create a new Volume for:
- Storage: SDT-10000
- Media type: DDS-4
- Pool: Default
-\end{verbatim}
-\normalsize
-
-(note, lines wrapped for presentation)
-The key here is the line that reads:
-
-\footnotesize
-\begin{verbatim}
- The number of files mismatch! Volume=11 Catalog=10
-\end{verbatim}
-\normalsize
-
-It says that Bacula found eleven files on the volume, but that the catalog
-says there should be ten. When you see this, you can be reasonably sure that
-the SD was interrupted while writing before it had a chance to update the
-catalog. As a consequence, you can just modify the catalog count to eleven,
-and even if the catalog contains references to files saved in file 11,
-everything will be OK and nothing will be lost. Note that if the SD had
-written several file marks to the volume, the difference between the Volume
-count and the Catalog count could be larger than one, but this is unusual.
-
-If on the other hand the catalog is marked as having more files than Bacula
-found on the tape, you need to consider the possible negative consequences of
-modifying the catalog. Please see below for a more complete discussion of
-this.
-
-Continuing with the example of {\bf Volume = 11 Catalog = 10}, to enable to
-Bacula to append to the tape, you do the following:
-
-\footnotesize
-\begin{verbatim}
-update
-Update choice:
- 1: Volume parameters
- 2: Pool from resource
- 3: Slots from autochanger
-Choose catalog item to update (1-3): 1
-Defined Pools:
- 1: Default
- 2: File
-Select the Pool (1-2):
-+-------+---------+--------+---------+-----------+------+----------+------+-----+
-| MedId | VolName | MedTyp | VolStat | VolBytes | Last | VolReten | Recy | Slt |
-+-------+---------+--------+---------+-----------+------+----------+------+-----+
-| 1 | test01 | DDS-4 | Error | 352427156 | ... | 31536000 | 1 | 0 |
-+-------+---------+--------+---------+-----------+------+----------+------+-----+
-Enter MediaId or Volume name: 1
-\end{verbatim}
-\normalsize
-
-(note table output truncated for presentation) First, you chose to update the
-Volume parameters by entering a {\bf 1}. In the volume listing that follows,
-notice how the VolStatus is {\bf Error}. We will correct that after changing
-the Volume Files. Continuing, you respond 1,
-
-\footnotesize
-\begin{verbatim}
-Updating Volume "test01"
-Parameters to modify:
- 1: Volume Status
- 2: Volume Retention Period
- 3: Volume Use Duration
- 4: Maximum Volume Jobs
- 5: Maximum Volume Files
- 6: Maximum Volume Bytes
- 7: Recycle Flag
- 8: Slot
- 9: Volume Files
- 10: Pool
- 11: Done
-Select parameter to modify (1-11): 9
-Warning changing Volume Files can result
-in loss of data on your Volume
-Current Volume Files is: 10
-Enter new number of Files for Volume: 11
-New Volume Files is: 11
-Updating Volume "test01"
-Parameters to modify:
- 1: Volume Status
- 2: Volume Retention Period
- 3: Volume Use Duration
- 4: Maximum Volume Jobs
- 5: Maximum Volume Files
- 6: Maximum Volume Bytes
- 7: Recycle Flag
- 8: Slot
- 9: Volume Files
- 10: Pool
- 11: Done
-Select parameter to modify (1-10): 1
-\end{verbatim}
-\normalsize
-
-Here, you have selected {\bf 9} in order to update the Volume Files, then you
-changed it from {\bf 10} to {\bf 11}, and you now answer {\bf 1} to change the
-Volume Status.
-
-\footnotesize
-\begin{verbatim}
-Current Volume status is: Error
-Possible Values are:
- 1: Append
- 2: Archive
- 3: Disabled
- 4: Full
- 5: Used
- 6: Read-Only
-Choose new Volume Status (1-6): 1
-New Volume status is: Append
-Updating Volume "test01"
-Parameters to modify:
- 1: Volume Status
- 2: Volume Retention Period
- 3: Volume Use Duration
- 4: Maximum Volume Jobs
- 5: Maximum Volume Files
- 6: Maximum Volume Bytes
- 7: Recycle Flag
- 8: Slot
- 9: Volume Files
- 10: Pool
- 11: Done
-Select parameter to modify (1-11): 11
-Selection done.
-\end{verbatim}
-\normalsize
-
-At this point, you have changed the Volume Files from {\bf 10} to {\bf 11} to
-account for the last file that was written but not updated in the database,
-and you changed the Volume Status back to {\bf Append}.
-
-This was a lot of words to describe something quite simple.
-
-The {\bf Volume Files} option exists only in version 1.29 and later, and you
-should be careful using it. Generally, if you set the value to that which
-Bacula said is on the tape, you will be OK, especially if the value is one
-more than what is in the catalog.
-
-Now lets consider the case:
-
-\footnotesize
-\begin{verbatim}
- The number of files mismatch! Volume=10 Catalog=12
-\end{verbatim}
-\normalsize
-
-Here the Bacula found fewer files on the volume than what is marked in the
-catalog. Now, in this case, you should hesitate a lot before modifying the count
-in the catalog, because if you force the catalog from 12 to 10, Bacula will
-start writing after the file 10 on the tape, possibly overwriting valid data,
-and if you ever try to restore any of the files that the catalog has marked as
-saved on Files 11 and 12, all chaos will break out. In this case, you will
-probably be better off using a new tape. In fact, you might want to see what
-files the catalog claims are actually stored on that Volume, and back them up
-to another tape and recycle this tape.
-
-\section{Security Considerations}
-\label{security}
-\index[general]{Considerations!Security }
-\index[general]{Security Considerations }
-
-Only the File daemon needs to run with root permission (so that it can access
-all files). As a consequence, you may run your Director, Storage daemon, and
-MySQL or PostgreSQL database server as non-root processes. Version 1.30 has
-the {\bf -u} and the {\bf -g} options that allow you to specify a userid and
-groupid on the command line to be used after Bacula starts.
-
-As of version 1.33, thanks to Dan Langille, it is easier to configure the
-Bacula Director and Storage daemon to run as non-root.
-
-You should protect the Bacula port addresses (normally 9101, 9102, and 9103)
-from outside access by a firewall or other means of protection to prevent
-unauthorized use of your daemons.
-
-You should ensure that the configuration files are not world readable since
-they contain passwords that allow access to the daemons. Anyone who can access
-the Director using a console program can restore any file from a backup
-Volume.
-
-You should protect your Catalog database. If you are using SQLite, make sure
-that the working directory is readable only by root (or your Bacula userid),
-and ensure that {\bf bacula.db} has permissions {\bf -rw-r\verb:--:r\verb:--:} (i.e. 640) or
-more strict. If you are using MySQL or PostgreSQL, please note that the Bacula
-setup procedure leaves the database open to anyone. At a minimum, you should
-assign the user {\bf bacula} a userid and add it to your Director's
-configuration file in the appropriate Catalog resource.
-
-If you use the make\_catalog\_backup script provided by Bacula, remember that
-you should take care when supplying passwords on the command line. Read the
-\ilink{Backing Up Your Bacula
-Database - Security Considerations }{BackingUpBaculaSecurityConsiderations}
-section for more information.
-
-\section{Creating Holiday Schedules}
-\label{holiday}
-\index[general]{Schedules!Creating Holiday }
-\index[general]{Creating Holiday Schedules }
-
-If you normally change tapes every day or at least every Friday, but Thursday
-is a holiday, you can use a trick proposed by Lutz Kittler to ensure that no
-job runs on Thursday so that you can insert Friday's tape and be sure it will
-be used on Friday. To do so, define a {\bf RunJobBefore} script that normally
-returns zero, so that the Bacula job will normally continue. You can then
-modify the script to return non-zero on any day when you do not want Bacula to
-run the job.
-
-\section{Automatic Labeling Using Your Autochanger}
-\label{autolabel}
-\index[general]{Automatic Labeling Using Your Autochanger }
-\index[general]{Autochanger!Automatic Labeling Using Your }
-
-If you have an autochanger but it does not support barcodes, using a "trick"
-you can make Bacula automatically label all the volumes in your autochanger's
-magazine.
-
-First create a file containing one line for each slot in your autochanger that
-has a tape to be labeled. The line will contain the slot number a colon (:)
-then the Volume name you want to use. For example, create a file named {\bf
-volume-list}, which contains:
-
-\footnotesize
-\begin{verbatim}
-1:Volume001
-2:TestVolume02
-5:LastVolume
-\end{verbatim}
-\normalsize
-
-The records do not need to be in any order and you don't need to mention all
-the slots. Normally, you will have a consistent set of Volume names and a
-sequential set of numbers for each slot you want labeled. In the example
-above, I've left out slots 3 and 4 just as an example. Now, modify your {\bf
-mtx-changer} script and comment out all the lines in the {\bf list)} case by
-putting a \# in column 1. Then add the following two lines:
-
-\footnotesize
-\begin{verbatim}
- cat <absolute-path>/volume-list
- exit 0
-\end{verbatim}
-\normalsize
-
-so that the whole case looks like:
-
-\footnotesize
-\begin{verbatim}
- list)
-#
-# commented out lines
- cat <absolute-path>/volume-list
- exit 0
- ;;
-\end{verbatim}
-\normalsize
-
-where you replace \lt{}absolute-path\gt{} with the full path to the
-volume-list file. Then using the console, you enter the following command:
-
-\footnotesize
-\begin{verbatim}
- label barcodes
-\end{verbatim}
-\normalsize
-
-and Bacula will proceed to mount the autochanger Volumes in the list and label
-them with the Volume names you have supplied. Bacula will think that the list
-was provided by the autochanger barcodes, but in reality, it was you who
-supplied the \lt{}barcodes\gt{}.
-
-If it seems to work, when it finishes, enter:
-
-\footnotesize
-\begin{verbatim}
- list volumes
-\end{verbatim}
-\normalsize
-
-and you should see all the volumes nicely created.
-
-\section{Backing Up Portables Using DHCP}
-\label{DNS}
-\index[general]{DHCP!Backing Up Portables Using }
-\index[general]{Backing Up Portables Using DHCP }
-
-You may want to backup laptops or portables that are not always connected to
-the network. If you are using DHCP to assign an IP address to those machines
-when they connect, you will need to use the Dynamic Update capability of DNS
-to assign a name to those machines that can be used in the Address field of
-the Client resource in the Director's conf file.
-
-\section{Going on Vacation}
-\label{Vacation}
-\index[general]{Vacation!Going on }
-\index[general]{Going on Vacation }
-
-At some point, you may want to be absent for a week or two and you want to
-make sure Bacula has enough tape left so that the backups will complete. You
-start by doing a {\bf list volumes} in the Console program:
-
-\footnotesize
-\begin{verbatim}
-list volumes
-
-Using default Catalog name=BackupDB DB=bacula
-Pool: Default
-+---------+---------------+-----------+-----------+----------------+-
-| MediaId | VolumeName | MediaType | VolStatus | VolBytes |
-+---------+---------------+-----------+-----------+----------------+-
-| 23 | DLT-30Nov02 | DLT8000 | Full | 54,739,278,128 |
-| 24 | DLT-21Dec02 | DLT8000 | Full | 56,331,524,629 |
-| 25 | DLT-11Jan03 | DLT8000 | Full | 67,863,514,895 |
-| 26 | DLT-02Feb03 | DLT8000 | Full | 63,439,314,216 |
-| 27 | DLT-03Mar03 | DLT8000 | Full | 66,022,754,598 |
-| 28 | DLT-04Apr03 | DLT8000 | Full | 60,792,559,924 |
-| 29 | DLT-28Apr03 | DLT8000 | Full | 62,072,494,063 |
-| 30 | DLT-17May03 | DLT8000 | Full | 65,901,767,839 |
-| 31 | DLT-07Jun03 | DLT8000 | Used | 56,558,490,015 |
-| 32 | DLT-28Jun03 | DLT8000 | Full | 64,274,871,265 |
-| 33 | DLT-19Jul03 | DLT8000 | Full | 64,648,749,480 |
-| 34 | DLT-08Aug03 | DLT8000 | Full | 64,293,941,255 |
-| 35 | DLT-24Aug03 | DLT8000 | Append | 9,999,216,782 |
-+---------+---------------+-----------+-----------+----------------+
-\end{verbatim}
-\normalsize
-
-Note, I have truncated the output for presentation purposes. What is
-significant, is that I can see that my current tape has almost 10 Gbytes of
-data, and that the average amount of data I get on my tapes is about 60
-Gbytes. So if I go on vacation now, I don't need to worry about tape capacity
-(at least not for short absences).
-
-Equally significant is the fact that I did go on vacation the 28th of June
-2003, and when I did the {\bf list volumes} command, my current tape at that
-time, DLT-07Jun03 MediaId 31, had 56.5 Gbytes written. I could see that the
-tape would fill shortly. Consequently, I manually marked it as {\bf Used} and
-replaced it with a fresh tape that I labeled as DLT-28Jun03, thus assuring
-myself that the backups would all complete without my intervention.
-
-\section{Exclude Files on Windows Regardless of Case}
-\label{Case}
-\index[general]{Exclude Files on Windows Regardless of Case}
-% TODO: should this be put in the win32 chapter?
-% TODO: should all these tips be placed in other chapters?
-
-This tip was submitted by Marc Brueckner who wasn't sure of the case of some
-of his files on Win32, which is case insensitive. The problem is that Bacula
-thinks that {\bf /UNIMPORTANT FILES} is different from {\bf /Unimportant
-Files}. Marc was aware that the file exclusion permits wild-cards. So, he
-specified:
-
-\footnotesize
-\begin{verbatim}
-"/[Uu][Nn][Ii][Mm][Pp][Oo][Rr][Tt][Aa][Nn][Tt] [Ff][Ii][Ll][Ee][Ss]"
-\end{verbatim}
-\normalsize
-
-As a consequence, the above exclude works for files of any case.
-
-Please note that this works only in Bacula Exclude statement and not in
-Include.
-
-\section{Executing Scripts on a Remote Machine}
-\label{RemoteExecution}
-\index[general]{Machine!Executing Scripts on a Remote }
-\index[general]{Executing Scripts on a Remote Machine }
-
-This tip also comes from Marc Brueckner. (Note, this tip is probably outdated
-by the addition of {\bf ClientRunBeforJob} and {\bf ClientRunAfterJob} Job
-records, but the technique still could be useful.) First I thought the "Run
-Before Job" statement in the Job-resource is for executing a script on the
-remote machine (the machine to be backed up). (Note, this is possible as mentioned
-above by using {\bf ClientRunBeforJob} and {\bf ClientRunAfterJob}).
-It could be useful to execute
-scripts on the remote machine e.g. for stopping databases or other services
-while doing the backup. (Of course I have to start the services again when the
-backup has finished) I found the following solution: Bacula could execute
-scripts on the remote machine by using ssh. The authentication is done
-automatically using a private key. First you have to generate a keypair. I've
-done this by:
-
-\footnotesize
-\begin{verbatim}
-ssh-keygen -b 4096 -t dsa -f Bacula_key
-\end{verbatim}
-\normalsize
-
-This statement may take a little time to run. It creates a public/private key
-pair with no passphrase. You could save the keys in /etc/bacula. Now you have
-two new files : Bacula\_key which contains the private key and Bacula\_key.pub
-which contains the public key.
-
-Now you have to append the Bacula\_key.pub file to the file authorized\_keys
-in the \textbackslash{}root\textbackslash{}.ssh directory of the remote
-machine. Then you have to add (or uncomment) the line
-
-\footnotesize
-\begin{verbatim}
-AuthorizedKeysFile %h/.ssh/authorized_keys
-\end{verbatim}
-\normalsize
-
-to the sshd\_config file on the remote machine. Where the \%h stands for the
-home-directory of the user (root in this case).
-
-Assuming that your sshd is already running on the remote machine, you can now
-enter the following on the machine where Bacula runs:
-
-\footnotesize
-\begin{verbatim}
-ssh -i Bacula_key -l root <machine-name-or-ip-address> "ls -la"
-\end{verbatim}
-\normalsize
-
-This should execute the "ls -la" command on the remote machine.
-
-Now you could add lines like the following to your Director's conf file:
-
-\footnotesize
-\begin{verbatim}
-...
-Run Before Job = ssh -i /etc/bacula/Bacula_key 192.168.1.1 \
- "/etc/init.d/database stop"
-Run After Job = ssh -i /etc/bacula/Bacula_key 192.168.1.1 \
- "/etc/init.d/database start"
-...
-\end{verbatim}
-\normalsize
-
-Even though Bacula version 1.32 and later has a ClientRunBeforeJob, the ssh method still
-could be useful for updating all the Bacula clients on several remote machines
-in a single script.
-
-\section{Recycling All Your Volumes}
-\label{recycle}
-\index[general]{Recycling All Your Volumes }
-\index[general]{Volumes!Recycling All Your }
-
-This tip comes from Phil Stracchino.
-
-If you decide to blow away your catalog and start over, the simplest way to
-re-add all your prelabeled tapes with a minimum of fuss (provided you don't
-care about the data on the tapes) is to add the tape labels using the console
-{\bf add} command, then go into the catalog and manually set the VolStatus of
-every tape to {\bf Recycle}.
-
-The SQL command to do this is very simple, either use your vendor's
-command line interface (mysql, postgres, sqlite, ...) or use the sql
-command in the Bacula console:
-
-\footnotesize
-\begin{verbatim}
-update Media set VolStatus='Recycle';
-\end{verbatim}
-\normalsize
-
-Bacula will then ignore the data already stored on the tapes and just re-use
-each tape without further objection.
-
-\section{Backing up ACLs on ext3 or XFS filesystems}
-\label{ACLs}
-\index[general]{Filesystems!Backing up ACLs on ext3 or XFS }
-\index[general]{Backing up ACLs on ext3 or XFS filesystems }
-
-This tip comes from Volker Sauer.
-
-Note, this tip was given prior to implementation of ACLs in Bacula (version
-1.34.5). It is left here because dumping/displaying ACLs can still be useful
-in testing/verifying that Bacula is backing up and restoring your ACLs
-properly. Please see the
-\ilink{aclsupport}{ACLSupport} FileSet option in the
-configuration chapter of this manual.
-
-For example, you could dump the ACLs to a file with a script similar to the
-following:
-
-\footnotesize
-\begin{verbatim}
-#!/bin/sh
-BACKUP_DIRS="/foo /bar"
-STORE_ACL=/root/acl-backup
-umask 077
-for i in $BACKUP_DIRS; do
- cd $i /usr/bin/getfacl -R --skip-base .>$STORE_ACL/${i//\//_}
-done
-\end{verbatim}
-\normalsize
-
-Then use Bacula to backup {\bf /root/acl-backup}.
-
-The ACLs could be restored using Bacula to the {\bf /root/acl-backup} file,
-then restored to your system using:
-
-\footnotesize
-\begin{verbatim}
-setfacl --restore/root/acl-backup
-\end{verbatim}
-\normalsize
-
-\section{Total Automation of Bacula Tape Handling}
-\label{automate}
-\index[general]{Handling!Total Automation of Bacula Tape }
-\index[general]{Total Automation of Bacula Tape Handling }
-
-This tip was provided by Alexander Kuehn.
-
-\elink{Bacula}{http://www.bacula.org/} is a really nice backup program except
-that the manual tape changing requires user interaction with the bacula
-console.
-
-Fortunately I can fix this.
-NOTE!!! This suggestion applies for people who do *NOT* have tape autochangers
-and must change tapes manually.!!!!!
-
-Bacula supports a variety of tape changers through the use of mtx-changer
-scripts/programs. This highly flexible approach allowed me to create
-\elink{this shell script}{http://www.bacula.org/en/rel-manual/mtx-changer.txt} which does the following:
-% TODO: We need to include this in book appendix and point to it.
-% TODO:
-Whenever a new tape is required it sends a mail to the operator to insert the
-new tape. Then it waits until a tape has been inserted, sends a mail again to
-say thank you and let's bacula continue its backup.
-So you can schedule and run backups without ever having to log on or see the
-console.
-To make the whole thing work you need to create a Device resource which looks
-something like this ("Archive Device", "Maximum Changer Wait", "Media
-Type" and "Label media" may have different values):
-
-\footnotesize
-\begin{verbatim}
-Device {
- Name=DDS3
- Archive Device = # use yours not mine! ;)/dev/nsa0
- Changer Device = # not really required/dev/nsa0
- Changer Command = "# use this (maybe change the path)!
- /usr/local/bin/mtx-changer %o %a %S"
- Maximum Changer Wait = 3d # 3 days in seconds
- AutomaticMount = yes; # mount on start
- AlwaysOpen = yes; # keep device locked
- Media Type = DDS3 # it's just a name
- RemovableMedia = yes; #
- Offline On Unmount = Yes; # keep this too
- Label media = Yes; #
-}
-\end{verbatim}
-\normalsize
-
-As the script has to emulate the complete wisdom of a mtx-changer it has an
-internal "database" containing where which tape is stored, you can see this on
-the following line:
-
-\footnotesize
-\begin{verbatim}
-labels="VOL-0001 VOL-0002 VOL-0003 VOL-0004 VOL-0005 VOL-0006
-VOL-0007 VOL-0008 VOL-0009 VOL-0010 VOL-0011 VOL-0012"
-\end{verbatim}
-\normalsize
-
-The above should be all on one line, and it effectively tells Bacula that
-volume "VOL-0001" is located in slot 1 (which is our lowest slot), that
-volume "VOL-0002" is located in slot 2 and so on..
-The script also maintains a logfile (/var/log/mtx.log) where you can monitor
-its operation.
-
-\section{Running Concurrent Jobs}
-\label{ConcurrentJobs}
-\index[general]{Jobs!Running Concurrent}
-\index[general]{Running Concurrent Jobs}
-\index[general]{Concurrent Jobs}
-
-Bacula can run multiple concurrent jobs, but the default configuration files
-do not enable it. Using the {\bf Maximum Concurrent Jobs} directive, you
-can configure how many and which jobs can be run simultaneously.
-The Director's default value for {\bf Maximum Concurrent Jobs} is "1".
-
-To initially setup concurrent jobs you need to define {\bf Maximum Concurrent Jobs} in
-the Director's configuration file (bacula-dir.conf) in the
-Director, Job, Client, and Storage resources.
-
-Additionally the File daemon, and the Storage daemon each have their own
-{\bf Maximum Concurrent Jobs} directive that sets the overall maximum
-number of concurrent jobs the daemon will run. The default for both the
-File daemon and the Storage daemon is "20".
-
-For example, if you want two different jobs to run simultaneously backing up
-the same Client to the same Storage device, they will run concurrently only if
-you have set {\bf Maximum Concurrent Jobs} greater than one in the Director
-resource, the Client resource, and the Storage resource in bacula-dir.conf.
-
-We recommend that you read the \ilink{Data
-Spooling}{SpoolingChapter} of this manual first, then test your multiple
-concurrent backup including restore testing before you put it into
-production.
-
-Below is a super stripped down bacula-dir.conf file showing you the four
-places where the the file must be modified to allow the same job {\bf
-NightlySave} to run up to four times concurrently. The change to the Job
-resource is not necessary if you want different Jobs to run at the same time,
-which is the normal case.
-
-\footnotesize
-\begin{verbatim}
-#
-# Bacula Director Configuration file -- bacula-dir.conf
-#
-Director {
- Name = rufus-dir
- Maximum Concurrent Jobs = 4
- ...
-}
-Job {
- Name = "NightlySave"
- Maximum Concurrent Jobs = 4
- Client = rufus-fd
- Storage = File
- ...
-}
-Client {
- Name = rufus-fd
- Maximum Concurrent Jobs = 4
- ...
-}
-Storage {
- Name = File
- Maximum Concurrent Jobs = 4
- ...
-}
-\end{verbatim}
-\normalsize