#!/usr/bin/perl
# Script to install fsbackup package and some required perl modules
# --prefix=install path, default /usr/local/fsbackup
# --prefix-man=manual path location, default /usr/local/man/man1
#
# Скрипт для установки программы и всех недостающих Perl модулей.
# --prefix=путь куда устаналивать программу, по умолчанию /usr/local/fsbackup
# --prefix-man=путь куда скопировать системное руководство для программы.
#
# http://www.opennet.ru/dev/fsbackup/
# Copyright (c) 2001 by Maxim Chirkov. <mc@tyumen.ru>
$default_install_path = "/usr/local/fsbackup";
$default_install_man = "/usr/local/man/man1";
#########################################################################
%module_list = (
"Digest/MD5.pm" => "Digest-MD5-2.13.tar.gz",
"DB_File.pm" => "DB_File-1.77.tar.gz",
"Net/FTP.pm" => "libnet-1.0703.tar.gz",
);
#-----------------------------------------------------------------------
use Getopt::Long;
GetOptions("prefix=s", \$prefix, "prefix-man=s", \$prefix_man);
$prefix = defined($prefix) ? $prefix : $default_install_path;
$prefix_man = defined($prefix_man) ? $prefix_man : $default_install_man;
print "Installing to $prefix (man to $prefix_man)\n";
chomp($prog_md5sum = `which md5sum`);
chomp($prog_tar = `which tar`);
chomp($prog_ssh = `which ssh`);
chomp($prog_rm = `which rm`);
chomp($prog_gzip = `which gzip`);
chomp($prog_pgp = `which gpg`);
chomp($prog_sqlite = `which sqlite`);
$prog_pg_dump = `which pg_dump` || "/usr/local/pgsql/bin/pg_dump";
$prog_pg_dump =~ s/^(.*)\/[^\/]+$/$1/;
chomp($prog_pg_dump);
$prog_mysqldump = `which mysqldump` || "/usr/local/mysql/bin/mysqldump";
$prog_mysqldump =~ s/^(.*)\/[^\/]+$/$1/;
chomp($prog_mysqldump);
chomp($backup_name = `uname -n|tr '.' '_'`);
print "Makeing man page...\n";
system ("pod2man fsbackup.pl > fsbackup.1");
print "Installing man page to $prefix_man...\n";
system ("cp -f fsbackup.1 $prefix_man/fsbackup.1");
system ("chmod 644 $prefix_man/fsbackup.1");
print "Creation directory tree in $prefix...\n";
if (! -d $prefix){
system ("mkdir $prefix");
system ("chmod 755 $prefix");
}
system ("mkdir $prefix/cache");
system ("chmod 700 $prefix/cache");
system ("mkdir $prefix/scripts");
system ("chmod 700 $prefix/scripts");
system ("mkdir $prefix/sys_backup");
system ("chmod 700 $prefix/sys_backup");
print "Installing fsbackup in $prefix...\n";
system ("cp -f FAQ $prefix/FAQ");
system ("chmod 644 $prefix/FAQ");
system ("cp -f README $prefix/README");
system ("chmod 644 $prefix/README");
system ("cp -f VERSION $prefix/VERSION");
system ("chmod 644 $prefix/VERSION");
system ("cp -f fsbackup.1 $prefix/fsbackup.1");
system ("chmod 644 $prefix/fsbackup.1");
copyfile("fsbackup.pl", "$prefix/fsbackup.pl");
system ("chmod 711 $prefix/fsbackup.pl");
copyfile("cfg_example", "$prefix/cfg_example");
system ("chmod 600 $prefix/cfg_example");
copyfile("create_backup.sh", "$prefix/create_backup.sh");
system ("chmod 711 $prefix/create_backup.sh");
copyfile("scripts/mysql_backup.sh", "$prefix/scripts/mysql_backup.sh");
system ("chmod 711 $prefix/scripts/mysql_backup.sh");
copyfile("scripts/sysbackup.sh", "$prefix/scripts/sysbackup.sh");
system ("chmod 711 $prefix/scripts/sysbackup.sh");
copyfile("scripts/fsrestore.sh", "$prefix/scripts/fsrestore.sh");
system ("chmod 711 $prefix/scripts/fsrestore.sh");
copyfile("scripts/pgsql_backup.sh", "$prefix/scripts/pgsql_backup.sh");
system ("chmod 711 $prefix/scripts/pgsql_backup.sh");
copyfile("scripts/sysrestore.sh", "$prefix/scripts/sysrestore.sh");
system ("chmod 711 $prefix/scripts/sysrestore.sh");
copyfile("scripts/sqlite_backup.sh", "$prefix/scripts/sqlite_backup.sh");
system ("chmod 711 $prefix/scripts/sqlite_backup.sh");
print "* If you system not support MD5, please manually install module ./modules/Digest-Perl-MD5-1.5.tar.gz\n";
print "* If Berkeley DB not installed and failed compilation of DB_File-1.77.tar.gz, please manually install DB from http://www.sleepycat.com.\n";
while (($cur_module_path, $cur_archive)= each(%module_list)) {
$cur_module = $cur_module_path;
$cur_module =~ s/\//::/g;
print "Checking for module $cur_module...\n";
$installed_flag = 0;
foreach $prefix (@INC) {
if (-f "$prefix/$cur_module_path") {
$installed_flag = 1;
last;
}
}
if ($installed_flag == 1){
print "Module $cur_module already installed, skiping installation procedure.\n";
} else {
install_module($cur_module, $cur_archive);
}
print "\n";
}
print "Installation complete.\n";
exit;
#############################################################
# Процедура для копирования файлов с изменениями
sub copyfile{
my ($from_file, $to_file) = @_;
open(FROM_FILE, "<$from_file")||die "Can't open $from_file\n";
flock(FROM_FILE, 1);
open(TO_FILE, ">$to_file")||die "Can't create $to_file\n";
flock(TO_FILE, 2);
while(<FROM_FILE>){
$line = $_;
if ($prog_md5sum ne "" && $prog_md5sum !~ /\s/){
$line =~ s/"md5sum -b"/"$prog_md5sum -b"/;
}
if ($prog_tar ne "" && $prog_tar !~ /\s/){
$line =~ s/"tar"/"$prog_tar"/;
}
if ($prog_ssh ne "" && $prog_ssh !~ /\s/){
$line =~ s/"ssh"/"$prog_ssh"/;
}
if ($prog_rm ne "" && $prog_rm !~ /\s/){
$line =~ s/"rm"/"$prog_rm"/;
}
if ($prog_gzip ne "" && $prog_gzip !~ /\s/){
$line =~ s/"gzip"/"$prog_gzip"/;
}
if ($prog_pgp ne "" && $prog_pgp !~ /\s/){
$line =~ s/"gpg"/"$prog_pgp"/;
}
if ($prog_pg_dump ne "" && $prog_pg_dump !~ /\s/){
$line =~ s/"\/usr\/local\/pgsql\/bin"/"$prog_pg_dump"/;
}
if ($prog_mysqldump ne "" && $prog_mysqldump !~ /\s/){
$line =~ s/"\/usr\/local\/mysql\/bin"/"$prog_mysqldump"/;
}
if ($backup_name ne ""){
$line =~ s/"test_host"/"$backup_name"/;
}
if ($prefix ne "/usr/local/fsbackup"){
$line =~ s/\/usr\/local\/fsbackup/$prefix/;
}
print TO_FILE $line;
}
close(TO_FILE);
close(FROM_FILE);
}
######################################################################
# Процедура для автоматической установки модулей.
sub install_module{
my($module_name, $module_archive) = @_;
my ($module_dir);
$module_archive =~ /^(.+)\.tar\.gz$/;
$module_dir = $1;
print "Unpcking archive $module_archive..\n";
print "Installing module $module_name..\n";
system ("tar -xzf ./modules/$module_archive -C ./modules/");
chdir ("./modules/$module_dir");
system "perl Makefile.PL; make; make install";
print "Installation of module $module_name successfully complete.\n";
chdir ("../../");
}
syntax highlighted by Code2HTML, v. 0.9.1