File: //proc/self/root/lib/susshi/exec/restore
#!/usr/bin/perl
use warnings;
use strict;
use lib '/usr/lib/susshi/exec';
use Susshi;
use File::Temp qw( tempdir );
use IPC::Run qw( run timeout );
my ($tempdir);
my $susshi = Susshi->new( -read_input => 1 );
my ($backupdir, $filename) = $susshi->get_backuppath;
-f $filename
or error_die "File does not exist: $filename\n";
my $database = $susshi->get_database('database');
my $directory = $susshi->get_directory('directory');
if (! $database && ! $directory) {
error_die "Please provide 'database' and/or 'directory' data.";
}
eval {
my $old_umask = umask(0077);
$tempdir = tempdir( '.restore.XXXX', CLEANUP => 1)
or die;
umask $old_umask;
};
if ($@) {
error_die "Cannot create tempdir: $!";
}
# Build TAR command
my @tar_cmd = ('tar', '-C', $tempdir, '-xzf', $filename);
push @tar_cmd, 'database.dump' if $database;
push @tar_cmd, 'files/' if $directory;
# Unpack the backup
eval {
my $err='';
run \@tar_cmd, '2>', \$err, timeout (3600) or die $err;
};
error_die "untarring $filename to $tempdir failed: $@" if $@;
if ($database) {
my @cmd=( '/usr/bin/mysql', $database->get_mysql_args );
eval {
my $err='';
run \@cmd, '<', $tempdir . '/database.dump', '2>', \$err, timeout (3600) or die $err;
};
unlink 'database.dump';
error_die "restoring database failed: $@" if $@;
}
if ($directory) {
rename $directory, $tempdir . '/old/';
rename ($tempdir . '/files/', $directory)
or error_die "Cannot move $tempdir/files/ to $directory\n";
}
info "Restored $filename";
exit 0;