diff --git a/BackupPC_archiveStart b/BackupPC_archiveStart new file mode 100755 index 0000000..1ab830c --- /dev/null +++ b/BackupPC_archiveStart @@ -0,0 +1,123 @@ +#!/usr/bin/perl +#============================================================= -*-perl-*- +# +# BackupPC_archiveStart: start an archive request from the +# command line. +# +# DESCRIPTION +# +# Usage: BackupPC_archiveStart archiveHost userName hosts... +# +# Initiates an archive request on archive host archiveHost +# for the listed hosts. The latest backup for each host is +# archived. The userName is name of the requesting user, +# which appears in the log files. +# +# AUTHOR +# Craig Barratt +# +# COPYRIGHT +# Copyright (C) 2007-2009 Craig Barratt +# +# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +#======================================================================== +# +# Version 3.2.0, released 31 Jul 2010. +# +# See http://backuppc.sourceforge.net. +# +#======================================================================== + +use strict; +no utf8; +use lib "/usr/share/backuppc/lib"; +use Getopt::Std; +use BackupPC::Lib; + +die("BackupPC::Lib->new failed\n") if ( !(my $bpc = BackupPC::Lib->new) ); + +my %opts; + +# no options currently +if ( !getopts("", \%opts) || @ARGV < 3 ) { + print STDERR <HostInfoRead(); +my $ArchiveHost = $ARGV[0]; +my $UserName = $ARGV[1]; +my $TopDir = $bpc->{Conf}{TopDir}; + +if ( !defined($Hosts->{$ArchiveHost}) ) { + print(STDERR "$0: archive host $ArchiveHost doesn't exist... quitting\n"); + exit(1); +} +$bpc->ConfigRead($ArchiveHost); + +my(@HostList, @BackupList); +for ( my $i = 2 ; $i < @ARGV ; $i++ ) { + my $host = $ARGV[$i]; + if ( !defined($Hosts->{$host}) ) { + print(STDERR "$0: host $host doesn't exist... quitting\n"); + exit(1); + } + my @backups = $bpc->BackupInfoRead($host); + if ( !@backups ) { + print(STDERR "$0: host $host doesn't have any backups... quitting\n"); + exit(1); + } + push(@HostList, $host); + push(@BackupList, $backups[$#backups]{num}); +} + +my $ReqFileName; +for ( my $i = 0 ; ; $i++ ) { + $ReqFileName="archiveReq.$$.$i"; + last if ( !-f "$TopDir/pc/$ArchiveHost/$ReqFileName" ); +} +my %ArchiveReq = ( + archiveloc => $bpc->{Conf}{ArchiveDest}, + archtype => 0, + compression => $bpc->{Conf}{ArchiveComp} eq 'none' ? $bpc->{Conf}{CatPath} + : ($bpc->{Conf}{ArchiveComp} eq 'gzip' + ? $bpc->{Conf}{GzipPath} : $bpc->{Conf}{Bzip2Path}), + compext => $bpc->{Conf}{ArchiveComp} eq 'none' ? '' + : ($bpc->{Conf}{ArchiveComp} eq 'gzip' ? '.gz' : '.bz2'), + parfile => $bpc->{Conf}{ArchivePar}, + splitsize => '0000000', + host => $ArchiveHost, + HostList => \@HostList, + BackupList => \@BackupList, + user => $UserName, + reqTime => time, +); +my $archive = Data::Dumper->new([\%ArchiveReq], [qw(*ArchiveReq)]); +$archive->Indent(1); +if ( !open(REQ, ">", "$TopDir/pc/$ArchiveHost/$ReqFileName") ) { + print(STDERR "$0: can't open/write request file $TopDir/pc/$ArchiveHost/$ReqFileName... quitting\n"); + exit(1); +} +binmode(REQ); +print REQ $archive->Dump; +close(REQ); +$bpc->ServerConnect($bpc->{Conf}{ServerHost}, $bpc->{Conf}{ServerPort}); +my $reply = $bpc->ServerMesg("archive $UserName $ArchiveHost $ReqFileName"); +$bpc->ServerDisconnect(); +print("Sent archive request, reply: $reply\n"); +exit(0);