=head1 BackupPC search and archival extension

BackupPC search and archival extension is used to:

=over 4

=item *

find files in C<pool> by substring of filename

=item *

see state of one or all of your shares in some particular point in time
(file creation date on clients or backup date is supported as filter)

=item *

archive selected backups (per host, share and increment) to archival
medium (CD, DVD, tape etc.) with rich descriptions, archival locations,
multiple copies and so on.

=back

=head2 Requirements

This extension is based on PostgreSQL RDBMS and HyperEstraier full-text
search engine (and it's perl bindings).

If you are using Debian, you are in luck. All required packages are
allready part of C<unstable> distribution and can be installed with:

  # apt-get install postgresql
  # apt-get install hyperestraier libestraier-dev libqdbm-dev

Now you can skip to installation of L<HyperEstraier perl bindings> below.

If you don't have pre-packaged binaries for your installation, you will
need to install additional packages by hand.

=head3 PostgreSQL

You can use packages provided by your distribution or follow installation
instructions on PostgreSQL site.

=head3 QDBM

First, you need qdbm on which HyperEstraier depends. Installation is simple.

  $ tar xvfz qdbm-1.8.31.tar.gz 
  $ cd qdbm-1.8.31
  $ ./configure --enable-zlib
  $ make
  $ sudo make install

=head3 HyperEstraier

Also quite simple.

  $ tar xvfz hyperestraier-0.5.4.tar.gz
  $ cd hyperestraier-0.5.4
  $ ./configure
  $ make
  $ sudo make install

Then you will have to install perl bindings for HyperEstraier.

=head3 HyperEstraier perl bindings

This might take a bit more work. You will need to have C<swig> and C<g++> installed
before you can install perl bindings.

  $ tar xvfz hyper_estraier_wrappers-0.0.10.tar.gz 
  $ cd swig_hest/perl/
  $ swig -c++ -perl5 -o HyperEstraier_wrap.cpp  ../HyperEstraier.i
  $ cp ../HyperEstraierWrapper.cpp ./
  $ perl Makefile.PL

You might need to remove C<estconfig --mtlibs> from C<Makefile.PL> if it
fails to run with following message:

 Unrecognized argument in LIBS ignored: 'configuration'
 Unrecognized argument in LIBS ignored: 'helper'
 Unrecognized argument in LIBS ignored: 'for'
 Unrecognized argument in LIBS ignored: 'Hyper'
 Unrecognized argument in LIBS ignored: 'Estraier'
 Writing Makefile for HyperEstraier

Working C<Makefile.PL> for my particular installation is:

 # File : Makefile.PL
 use ExtUtils::MakeMaker;
 WriteMakefile(
	NAME    => 'HyperEstraier',
	INC	=> sprintf('%s', `pkg-config --cflags hyperestraier`),
	LIBS    => [sprintf('-lstdc++ %s %s' , `pkg-config --libs hyperestraier`)],
	OBJECT  => 'HyperEstraierWrapper.o HyperEstraier_wrap.o'
 );

After succesfull C<perl Makefile.pl>, you can compile and install it.

  $ make
  $ sudo make install

=head3 CPAN modules

You will also need a few additional cpan modules

=over 4

=item File::Pid
=item File::Which
=item File::Path
=item File::Slurp

=item Spreadsheet::WriteExcel

=item Term::Menus
=item XML::Writer
=item Algorithm::Diff
=item Archive::Tar::Stream

=back

Last module, C<Spreadsheet::WriteExcel> is needed only if you want to use
C<BackupPC_xls_report> to generate Excel reports from your backup data.

Easiest way to install them is using C<cpan> shell.

  $ sudo cpan File::Pid Spreadsheet::WriteExcel

=head1 Creation of initial database

Once you have all components installed, you should initially create data
about increments in RDBMS and full-text search engine index.

First, edit C<config.pl> and setup C<SearchDSN> to valid perl DSN (for example,
C<dbi:Pg:dbname=backuppc> and C<SearchUser> to database user which has priviledges
over that database. You might need to add additional directives in PostgreSQL's
C<pg_hba.conf> so that selected user can be connected without password (I know, it's not
perfect, but I trust local users on backuppc machine).

Then, create new database for backuppc.

  $ createdb backuppc

Then invoke C<BackupPC_updatedb> for the first time with argument to create database
schema:

  $ sudo -u backuppc /data/backuppc/bin/BackupPC_updatedb -c

You can also force full-text reindex by C<-i> flag. This will add all files which are in
database but for some reason are missing in full-text index.

Now, you can setup cron job which will daily check your backups and update database
and full-text index. This is as simple as invoking

  /data/backuppc/bin/BackupPC_updatedb

As C<backuppc> user and redirecting output to log file.

B<Documentation is still incomplete>.

Now that you finished installation, you can select new options from
menu on the left and example search and archival.

=head1 Reporting in Excel

Often, it is useful to be able to present report about your BackupPC hosts, number
of snapshots, total size and other useful info. While all those information can
be accessed using web browser, for analysis it's useful to have them in spreadsheet
form. With this data, you can monitor changes on your backup cycle, effects of changes
on your server or network to your BackupPC installation and so on.

You can create Excel spreadsheet (which works perfectly with Gnumeric also) using
following command:

  $ sudo -u backuppc /data/backuppc/bin/BackupPC_xls_report

=head1 Additional requirements

You will also need several other command-line utilities to make
C<BackupPC_burnArchiveCLI> run. Those include:

=over 4

=item mkisofs

=item cdrecord

Or equivavalent utility, on Debian you might want to use C<dvdrecord>.

=item eject

Please make a symlink from C</dev/cdrom> to you CD/DVD burner.

=item split

=back


=head1 Related projects

BackupPC allready has archival host which might suit your needs better (and
it's quite easier to install).

=over 4

=item PostgreSQL

L<http://www.postgresql.org/>

=item HyperEstraier

L<http://hyperestraier.sourceforge.net/>

=back

=head1 Authors

Ivan Klaric C<< <iklaric@gmail.com> >>

Dobrica Pavlinusic C<< <dpavlin@rot13.org> >>

=head1 Licence

This extension is released under GPL licence, same as BackupPC.

