diff options
author | Mystery Man <unknown@mandriva.org> | 2002-07-09 13:18:50 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2002-07-09 13:18:50 +0000 |
commit | b6c80998f798afb98c5ebb42441c25668b31c93e (patch) | |
tree | 0a40adbce78a1b7ddee1ba637215ca857ffcae19 /perl-install/standalone/drakbackup | |
parent | a6a904a31e39b74144c53f0cc4086d496b70c09a (diff) | |
download | drakx-1_1_8_4mdk.tar drakx-1_1_8_4mdk.tar.gz drakx-1_1_8_4mdk.tar.bz2 drakx-1_1_8_4mdk.tar.xz drakx-1_1_8_4mdk.zip |
This commit was manufactured by cvs2svn to create tag 'V1_1_8_4mdk'.V1_1_8_4mdk
Diffstat (limited to 'perl-install/standalone/drakbackup')
-rwxr-xr-x | perl-install/standalone/drakbackup | 3352 |
1 files changed, 0 insertions, 3352 deletions
diff --git a/perl-install/standalone/drakbackup b/perl-install/standalone/drakbackup deleted file mode 100755 index 0a2414641..000000000 --- a/perl-install/standalone/drakbackup +++ /dev/null @@ -1,3352 +0,0 @@ -#!/usr/bin/perl -w -# -# Copyright (C) 2001 MandrakeSoft by Sebastien DUPONT <dupont_s@epita.fr> -# Redistribution of this file is permitted under the terms of the GNU -# Public License (GPL) -# -# 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, 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. -# -#________________________________________________________________ -# -# Description: -# -# Drakbackup is used to backup your system. -# During the configuration you can select -# - System files, -# - Users files, -# - Other files. -# or All your system ... and Other (like windows Partitions) -# -# Drakbackup allows you to backup your system on: -# - Harddrive. -# - NFS. -# - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.). -# - FTP. -# - Rsync. -# - Webdav. -# - Tape. -# -# Drakbackup allows you to Restore your system on -# choosen directory. -# -# Per default all backup will be stored on your -# /var/lib/drakbackup directory -# -# Configuration file: -# /etc/drakconf/drakbackup/drakbakup.conf -# -#________________________________________________________________ -# -# Backup files formats: -# -# no incremental backup: -# backup_sys_date_hour.tar.* -# backup_user_toto_date_hour.tar.* -# backup_other_date_hour.tar.* -# -# first incremental backup: (if backup_base* does not exist ) -# -# backup_base_sys_date_hour.tar.* -# backup_base_user_toto_date_hour.tar.* -# backup_base_other_date_hour.tar.* -# -# other incremental backup: (if backup_base* already exist ) -# -# backup_incr_sys_date_hour.tar.* -# backup_incr_user_toto_date_hour.tar.* -# backup_incr_other_date_hour.tar.* -# -#________________________________________________________________ -# -# REQUIRE: cron if daemon -# cdrecord & mkisofs -# perl Net::FTP -# ssh-askpass -# -# BUGS : -# restore->other_media->next->previous => crash ... -# selection des sources a inclure dans le backup cd. -# help -> ok after install_rpm -# -# TODO: -# 1 - print ftp problem for user. -# 2 - calcul disk space. -# use quota. -# 3 - ssh & rsync -> expect or .identity.pub/authorized_keys -# 4 - write on cd --> ! change Joliet to HFS for Apple -# 5 - cd writer detection -> cdrw: /sys/dev/cdrom/info /scsi/host0/bus0/target4/lun0 -# /proc/sys/dev/cdrom/ -# 6 - total backup.( all partitions wanted, windows partitions for example!) -# dump use for total backup. -# 7 - custom deamon -# 8 - placer README dans $save_path -> prevenir des danger de supprimer la premier version -# explain configuration file variables (mainly for non X users) -# 9 - webdav -# 10- backend : --resore_all, --restore_sys, --restore_users -# --build_cd_autoinst -# --backup_now --backup_default_now -# 11- tape device support -# 12- cpio use !! -# 13- boot floppy disk (with dialog) -# 14- build autoboot with backup and install cd -# 15- use .backupignore like on CVS -# 16- afficher les modif dans un fichier texte du meme nom -# pour afficher durant le restore. -# 17- futur: could be possible to restore a specific file -# or directory at specific date. -# 18- possible all files each time from directory. -# -# DONE TODAY: -#________________________________________________________________ - - -use Gtk; -use lib qw(/usr/lib/libDrakX ); - -use standalone; #- warning, standalone must be loaded very first, for 'explanations' - -use interactive; -use my_gtk qw(:helpers :wrappers); -use common; -use strict; -use Time::localtime; - -my $in = 'interactive'->vnew('', 'default'); -$::isEmbedded = ($::XID, $::CCPID) = "@ARGV" =~ /--embedded (\w+) (\w+)/; - -if ("@ARGV" =~ /--help|-h/) { - print q(Backup and Restore application - ---default : save default directories. ---debug : show all debug messages. ---show-conf : list of files or directories to backup. ---daemon : use daemon configuration. ---help : show this message. ---version : show version name. -); - exit(0); -} - -if ("@ARGV" =~ /--version/) { - print "DrakBakckup Version 1.0\n"; - exit(0); -} - -# Backend Options. -my $central_widget; -my $previous_widget; -my $current_widget; -my $interactive; -my $up_box; -my $advanced_box; -my $box2; -my $cfg_file_exist = 0; -my @all_user_list; -my $list_other; -my $DEBUG = 0; -my $restore_sys = 1; -my $restore_user = 1; -my $restore_other = 1; -my $restore_step_sys_date = ""; -my @user_backuped = (); -my @sys_backuped = (); -my $sys_backuped = 0; -my $other_backuped = 0; -my @user_list_to_restore= (); -my @sys_list_to_restore = (); -my $cd_devive_entry; -my $custom_help; -my $button_box; -my $button_box_tmp; -my $next_widget; -my $sav_next_widget; -my $system_state; -my $restore_state; -my $save_path_entry; -my $restore_find_path_entry; -my $pbar; -my $pbar1; -my $pbar2; -my $pbar3; -my $the_time; -my @user_list_to_restore2 = (); -my @data_backuped = (); -my $label_tail; -my @list_to_build_on_cd = (); -my $restore_path = "/"; -my $restore_other_path = 0; -my $restore_other_src; -my $path_to_find_restore; -my $other_media_hd; -my $backup_bef_restore = 0; -my $table; -my @user_list_backuped = (); -my @files_corrupted = (); -my $remove_user_before_restore = 1; -my @file_list_to_send_by_ftp = (); -my $results; - -# config. FILES -> Default PATH & Global variables. -my @sys_files = ("/etc"); -my @user_list; -my @list_other = () ; -my $cfg_file = "/etc/drakxtools/drakbackup/drakbackup.conf"; -my $save_path = "/var/lib/drakbackup"; -my $comp_mode = 0; -my $backup_sys = 1; -my $backup_user = 1; -my $backup_daemon = 1; -my $backup_sys_versions = 1; -my $backup_user_versions = 1; -my $backup_other_versions = 0; -my $what_no_browser = 1; -my $cdrw = 0; -my $net_proto= ''; -my $host_path = ''; -my $login_user = ''; -my $daemon = 0; -my $ssh_daemon = 0; -my $ftp_daemon = 0; -my $hd_daemon = 0; -my $cd_daemon = 0; -my $hd_quota = 0; -my $where_net_ftp = 0; -my $where_net_ssh = 0; -my $where_net = 0; -my $where_hd = 1; -my $where_cd = 0; -my $where_tape = 0; -my $cd_time = 650; -my $when_space; -my $cd_with_install_boot = 0; -my $cd_devive = ''; -my $host_name = ''; -my $backupignore = 0; -my $auth_choice = 0; -my $remember_pass = 0; -my $passwd_user= ''; -my $save_device_tape = (); -my $cdrw_erase = 0; -my $no_critical_sys = 1; -my $send_mail = 0; -my $user_mail; -my @user_info; - -foreach (@ARGV) { - /--default/ and backend_mode(); - /--daemon/ and daemon_mode(); - /--show-conf/ and show_conf(); - /--debug/ and $DEBUG = 1, next; -} - -sub show_conf { - print "DrakBakckup configuration:\n\n"; - read_conf_file(); - system_state(); - print $system_state . "\n"; - exit(0); -} - -sub backend_mode { - build_backup_files(); - exit(0); -} - -sub daemon_mode { - $daemon = 1; - build_backup_files(); - exit(0); -} - -interactive_mode(); - -sub all_user_list { - my ($uname, $uid); - @all_user_list = (); - setpwent(); - do { - @user_info = getpwent(); - ($uname, $uid) = @user_info[0,2]; - push (@all_user_list, $uname) if ($uid > 500) and !($uname eq "nobody"); - } while (@user_info); -} - -sub the_time { - $the_time = "_"; - $the_time .= localtime->year() + 1900; - if (localtime->mon() < 9 ) { $the_time .= "0"; } - $the_time .= localtime->mon() +1; - if (localtime->mday() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->mday(); - $the_time .= "_"; - if (localtime->hour() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->hour(); - if (localtime->min() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->min(); - if (localtime->sec() < 10 ) { $the_time .= "0"; } - $the_time .= localtime->sec(); -} - -sub save_conf_file { - my @cfg_list = ( "SYS_FILES=@sys_files\n", - "HOME_FILES=@user_list\n", - "OTHER_FILES=@list_other\n", - "PATH_TO_SAVE=$save_path\n", - "HOST_PATH=$host_path\n", - "NET_PROTO=$net_proto\n", - "CD_TIME=$cd_time\n", - "USER_MAIL=$user_mail\n", - "DAEMON_TIME_SPACE=$when_space\n", - "CDRW_DEVICE=$cd_devive\n", - "LOGIN=$login_user\n", - "TAPE_DEVICE=$save_device_tape\n", - "HOST_NAME=$host_name\n" - ); - $no_critical_sys and push @cfg_list, "NO_CRITICAL_SYS\n" ; - $no_critical_sys or push @cfg_list, "CRITICAL_SYS\n" ; - $send_mail and push @cfg_list, "SEND_MAIL\n"; - $backup_sys_versions and push @cfg_list, "SYS_INCREMENTAL_BACKUPS\n" ; - $backup_user_versions and push @cfg_list, "USER_INCREMENTAL_BACKUPS\n" ; - $backup_other_versions and push @cfg_list, "OTHER_INCREMENTAL_BACKUPS\n" ; - $cdrw_erase and push @cfg_list, "CDRW_ERASE\n" ; - $where_net_ftp and push @cfg_list, "USE_NET_FTP\n" ; - $where_net_ssh and push @cfg_list, "USE_NET_SSH\n" ; - $remember_pass and push @cfg_list, "LOGIN=$login_user\n" ; - $remember_pass and push @cfg_list, "PASSWD=$passwd_user\n" ; - $remember_pass and push @cfg_list, "REMEMBER_PASS\n" ; - $auth_choice or push @cfg_list, "AUTH_CHOICE=0\n" ; - if ($auth_choice == 1) { push @cfg_list, "AUTH_CHOICE=1\n" ;} - if ($auth_choice == 2) { push @cfg_list, "AUTH_CHOICE=2\n" ;} - $cd_with_install_boot and push @cfg_list, "CD_WITH_INSTALL_BOOT\n" ; - $ssh_daemon and push @cfg_list, "SSH_DAEMON\n" ; - $ftp_daemon and push @cfg_list, "FTP_DAEMON\n" ; - $hd_daemon and push @cfg_list, "HD_DAEMON\n" ; - $cd_daemon and push @cfg_list, "CD_DAEMON\n" ; - $hd_quota and push @cfg_list, "HD_QUOTA\n" ; - $where_hd and push @cfg_list, "USE_HD\n" ; - $where_cd and push @cfg_list, "USE_CD\n" ; - $where_net and push @cfg_list, "USE_NET\n" ; - $cdrw and push @cfg_list, "CDRW\n"; - $what_no_browser or push @cfg_list, "BROWSER_CACHE\n" ; - $backup_sys or push @cfg_list, "NO_SYS_FILES\n"; - if ($comp_mode) {push @cfg_list, "OPTION_COMP=TAR.BZ2\n"} - else { push @cfg_list, "OPTION_COMP=TAR.GZ\n" } - output_p($cfg_file, @cfg_list); - system("chmod 600 $cfg_file"); - save_cron_files(); -} - -sub read_cron_files { - my $daemon_found = 0; - foreach (qw(hourly daily weekly monthly)) { - if (-f "/etc/cron.$_/drakbackup") { - $when_space = $_; - $daemon_found = 1; - last; - } - - } - !$daemon_found and $backup_daemon = 0; -} - -sub save_cron_files { - my @cron_file = ("#!/bin/sh\n", "\n", "/usr/sbin/drakbackup --daemon" ); - - if ($backup_daemon) { - foreach (qw(hourly daily weekly monthly)) { - -f "/etc/cron.$_/drakbackup" and rm_rf("/etc/cron.$_/drakbackup"); - } - output_p("/etc/cron.$when_space/drakbackup", @cron_file ); - system("chmod +x /etc/cron.$when_space/drakbackup"); - } else { - foreach (qw(hourly daily weekly monthly)) { - -f "/etc/cron.$_/drakbackup" and rm_rf("/etc/cron.$_/drakbackup"); - } - } -} - -sub read_conf_file { - if (-e $cfg_file) { - open ( CONF_FILE, "<"."$cfg_file") || print "You must be root to read configuration file. \n" ; - while (<CONF_FILE>) { - next unless /\S/; - next if /^#/; - chomp; - if (/^SYS_FILES/) { s/^SYS_FILES=//gi; @sys_files = split(' ', $_ ); } - if (/^HOME_FILES/) { s/^HOME_FILES=//gi; @user_list = split(' ', $_ ); } - if (/^OTHER_FILES/) { s/^OTHER_FILES=//gi; @list_other = split(' ', $_ ); } - if (/^PATH_TO_SAVE/) { s/^PATH_TO_SAVE=//gi; $save_path = $_; } - if (/^NO_SYS_FILES/) { $backup_sys = 0;} - if (/^NO_USER_FILES/) { $backup_user = 0;} - if (/^OPTION_COMP/) { s/^OPTION_COMP=//gi; /TAR.GZ/ and $comp_mode = 0; /TAR.BZ2/ and $comp_mode = 1; } - if (/^BROWSER_CACHE/) { $what_no_browser = 0; } - if (/^CDRW/) { $cdrw = 1; } - if (/^NET_PROTO/) { s/^NET_PROTO=//gi; $net_proto = $_; } - if (/^HOST_PATH/) { s/^HOST_PATH=//gi; $host_path = $_; } - if (/^SSH_DAEMON/) { $ssh_daemon = 1; } - if (/^FTP_DAEMON/) { $ftp_daemon = 1; } - if (/^HD_DAEMON/) { $hd_daemon = 1; } - if (/^CD_DAEMON/) { $cd_daemon = 1; } - if (/^HD_QUOTA/) { $hd_quota = 1; } - if (/^USE_HD/) { $where_hd = 1; } - if (/^USE_CD/) { $where_cd = 1; } - if (/^USE_NET/) { $where_net = 1; } - if (/^USE_TAPE/) { $where_tape = 1; } - if (/^CD_TIME/) { s/^CD_TIME=//gi; $cd_time = $_; } - if (/^DAEMON_TIME_SPACE/) { s/^DAEMON_TIME_SPACE=//gi; $when_space = $_; } - if (/^CD_WITH_INSTALL_BOOT/) { $cd_with_install_boot = 1; } - if (/^CDRW_DEVICE/) { s/^CDRW_DEVICE=//gi; $cd_devive = $_;} - if (/^HOST_NAME/) { s/^HOST_NAME=//gi; $host_name = $_;} - if (/^AUTH_CHOICE/) { s/^AUTH_CHOICE=//gi; $auth_choice = $_; } - if (/^REMEMBER_PASS/) { $remember_pass = 1; } - if (/^LOGIN/) { s/^LOGIN=//gi; $login_user = $_; $remember_pass = 1; } - if (/^PASSWD/) { s/^PASSWD=//gi; $passwd_user = $_; $remember_pass = 1; } - if (/^USER_MAIL/) { s/^USER_MAIL=//gi; $user_mail= $_; } - if (/^USE_NET_FTP/) { $where_net_ftp = 1; } - if (/^SEND_MAIL/) { $send_mail = 1; } - if (/^USE_NET_SSH/) { $where_net_ssh = 1; } - if (/^TAPE_DEVICE/) { s/TAPE_DEVICE=//gi; $save_device_tape = $_;} - if (/^CDRW_ERASE/) { $cdrw_erase = 1;} - if (/^SYS_INCREMENTAL_BACKUPS/) { $backup_sys_versions = 1;} - if (/^USER_INCREMENTAL_BACKUPS/) { $backup_user_versions = 1;} - if (/^OTHER_INCREMENTAL_BACKUPS/) { $backup_other_versions = 1;} - if (/^NO_CRITICAL_SYS/) { $no_critical_sys = 1;} - if (/^CRITICAL_SYS/) { $no_critical_sys = 0;} - } - read_cron_files(); - $cfg_file_exist = 1; - } - else { $cfg_file_exist = 0; } - close CONF_FILE; -} - -sub complete_results { - system_state(); - $results .= "***********************************************************************\n\n"; - $daemon or $results .= _("\n DrakBackup Report \n\n"); - $daemon and $results .= _("\n DrakBackup Daemon Report\n\n\n"); - $results .= "***********************************************************************\n\n"; - $results .= $system_state; - $results .= "\n\n***********************************************************************\n\n"; - $results .= _("\n DrakBackup Report Details\n\n\n"); - $results .= "***********************************************************************\n\n"; -} - - -sub ftp_client { - use Net::FTP; - my $ftp; - - $DEBUG and print "file list to send : $_\n " foreach @file_list_to_send_by_ftp; - if ($DEBUG && $interactive) { $ftp = Net::FTP->new("$host_name", Debug => 1) or return(1); } - elsif ($interactive) { $ftp = Net::FTP->new("$host_name", Debug => 0) or return(1); } - else { $ftp = Net::FTP->new("$host_name", Debug => 0) or return(1); } - $ftp->login("$login_user","$passwd_user"); - $ftp->cwd("$host_path"); - foreach (@file_list_to_send_by_ftp) { - $pbar->set_value(0); - $interactive and progress($pbar, 0.5, $_); - $interactive and $pbar->set_show_text( $_ ); - $ftp->put("$_"); - $interactive and progress($pbar, 0.5, $_); - $interactive and $pbar->set_show_text( $_ ); - $interactive and progress($pbar3, 1/@file_list_to_send_by_ftp, _("total progess")); - } - $ftp->quit; - return(0); -} - -sub ssh_client { - system("scp @file_list_to_send_by_ftp root\@petra:."); -} - -sub write_on_cd { -# system("cdrecord "); -} - -sub build_iso { -# system("mkisofs -r -J -T -v -V 'Drakbackup' -o drakbackup.iso /var/lib/drakbackup"); -} - -sub build_cd { - build_iso(); -} - -sub send_mail { - my ($result) = @_; - my $datem = `date`; - - open F, "|/usr/sbin/sendmail -f$user_mail $user_mail" or return(1); - print F "From: drakbackup\n"; - print F "To: $user_mail \n"; - print F "Subject: DrakBackup report on $datem \n"; - print F "\n"; - print F "$result\n"; - close F or return(1); - return(0); -} - - -sub build_backup_files { - my $path_name; - my $tar_cmd; - my $more_recent; - my $tar_cmd_sys; - my $tar_cmd_user; - my $tar_cmd_other; - my $tar_ext; - my $vartemp; - my $base_sys_exist = 0; - my $base_user_exist = 0; - my $base_other_exist = 0; - my @list_temp = (); - my @list_other_; - my @dir_content = (); - my $file_date; - $results = ""; - - read_conf_file(); - the_time(); - $send_mail and complete_results(); - -d $save_path or mkdir_p($save_path); - if ($comp_mode) { - $DEBUG and $tar_cmd = "tar cv --use-compress-program /usr/bin/bzip2 "; - $DEBUG or $tar_cmd = "tar c --use-compress-program /usr/bin/bzip2 "; - $tar_ext = "tar.bz2" ; - } - else { - $DEBUG and $tar_cmd = "tar cvpz "; - $DEBUG or $tar_cmd = "tar cpz "; - $tar_ext = "tar.gz" - } - $tar_cmd_sys = $tar_cmd; - $tar_cmd_user = $tar_cmd; - $tar_cmd_other = $tar_cmd; - $no_critical_sys and $tar_cmd_sys .= "--exclude passwd --exclude fstab --exclude group --exclude mtab"; - $what_no_browser and $tar_cmd_user .= "--exclude NewCache --exclude Cache --exclude cache"; - - -d $save_path and @dir_content = all($save_path); - grep (/^backup\_base\_sys/, @dir_content) and $base_sys_exist = 1; - - if (($where_hd && !$daemon) || ($daemon && $hd_daemon)) { - $interactive and progress($pbar, 0.5, _("Backup system files...")); - if ($backup_sys) { - if ($backup_sys_versions) { - if (grep /^backup\_incr\_sys/, @dir_content) { - my @more_recent = grep /^backup\_incr\_sys/, sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system("find @sys_files -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_sys$the_time.txt"); - if (!cat_("$save_path/list_incr_sys$the_time.txt")) { - system("rm $save_path/list_incr_sys$the_time.txt"); - } else { - system("$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext -T $save_path/list_incr_sys$the_time.txt"); - push @file_list_to_send_by_ftp, "$save_path/backup_incr_sys$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, "$save_path/list_incr_sys$the_time.txt"; - $results .= "\nfile: $save_path/backup_incr_sys$the_time.$tar_ext\n"; - $results .= cat_("$save_path/list_incr_sys$the_time.txt"); - } - } - elsif (grep /^backup\_base\_sys/, @dir_content) { - my @more_recent = grep /^backup\_base\_sys/, sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system("find @sys_files -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_sys$the_time.txt"); - if (!cat_("$save_path/list_incr_sys$the_time.txt")) { - system("rm $save_path/list_incr_sys$the_time.txt"); - } else { - system("$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext -T $save_path/list_incr_sys$the_time.txt"); - push @file_list_to_send_by_ftp, "$save_path/backup_incr_sys$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, "$save_path/list_incr_sys$the_time.txt"; - $results .= "\nfile: $save_path/backup_incr_sys$the_time.$tar_ext\n"; - $results .= cat_("$save_path/list_incr_sys$the_time.txt"); - } - } - else { - system("$tar_cmd_sys -f $save_path/backup_base_sys$the_time.$tar_ext @sys_files"); - push @file_list_to_send_by_ftp, "$save_path/backup_base_sys$the_time.$tar_ext"; - $results .= "\nfile: $save_path/backup_base_sys$the_time.$tar_ext\n"; - } - } - else { -# system("cd $save_path && rm -f backup_sys* backup_base_sys* backup_incr_sys*"); - system("$tar_cmd_sys -f $save_path/backup_sys$the_time.$tar_ext @sys_files"); - push @file_list_to_send_by_ftp, "$save_path/backup_sys$the_time.$tar_ext"; - $results .= "\nfile: $save_path/backup_sys$the_time.$tar_ext\n"; - } - } - - $interactive and progress($pbar, 0.5, _("Backup system files...")); - $interactive and progress($pbar3, 0.3, _("Hard Disk Backup files...")); - - if (@list_other) { - system("cd $save_path && rm -f backup_other* "); - system("$tar_cmd_other -f $save_path/backup_other$the_time.$tar_ext @list_other"); - push @file_list_to_send_by_ftp, "$save_path/backup_other$the_time.$tar_ext"; - $results .= "\nfile: $save_path/backup_other$the_time.$tar_ext\n"; -#old foreach (@list_other) { push @list_other_, $_ . "\n"; } - @list_other_ = map { "$_\n" } @list_other; - output_p( $save_path . '/list_other', @list_other_); - } - - $interactive and progress($pbar1, 1, _("Backup User files...")); - $interactive and progress($pbar3, 0.3, _("Hard Disk Backup Progress...")); - - if ($backup_user) { - foreach (@user_list) { - my $user = $_; - $path_name = return_path($user); - if ($backup_user_versions) { - if (grep(/^backup\_incr\_user\_$user\_/, @dir_content)) { - my @more_recent = grep /^backup\_incr\_user\_$user\_/, sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system("find $path_name -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_user_$user$the_time.txt"); - if (!cat_("$save_path/list_incr_user_$user$the_time.txt")) { - system("rm $save_path/list_incr_user_$user$the_time.txt"); - } else { - system("$tar_cmd_user -f $save_path/backup_incr_user_$user$the_time.$tar_ext -T $save_path/list_incr_user_$user$the_time.txt"); - push @file_list_to_send_by_ftp, "$save_path/backup_incr_user_$user$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, "$save_path/list_incr_user_$user$the_time.txt"; - $results .= " \nfile: $save_path/backup_incr_user_$user$the_time.$tar_ext\n"; - $results .= cat_("$save_path/list_incr_user_$user$the_time.txt"); - } - } - elsif (grep /^backup\_base\_user\_$user\_/, @dir_content) { - my @more_recent = grep /^backup\_base\_user\_$user\_/, sort @dir_content; - $more_recent = pop @more_recent; - $DEBUG and print "more recent file: $more_recent\n"; - system("find $path_name -cnewer $save_path/$more_recent \! -type d -print > $save_path/list_incr_user_$user$the_time.txt"); - if (!cat_("$save_path/list_incr_user_$user$the_time.txt")) { - system("rm $save_path/list_incr_user_$user$the_time.txt"); - } else { - system("$tar_cmd_user -f $save_path/backup_incr_user_$user$the_time.$tar_ext -T $save_path/list_incr_user_$user$the_time.txt"); - push @file_list_to_send_by_ftp, "$save_path/backup_incr_user_$user$the_time.$tar_ext"; - push @file_list_to_send_by_ftp, "$save_path/list_incr_user_$user$the_time.txt"; - $results .= "\nfile: $save_path/backup_incr_user_$user$the_time.$tar_ext\n"; - $results .= cat_("$save_path/list_incr_user_$user$the_time.txt"); - } - } - else { - system("$tar_cmd_user -f $save_path/backup_base_user_$user$the_time.$tar_ext $path_name"); - push @file_list_to_send_by_ftp, "$save_path/backup_base_user_$user$the_time.$tar_ext"; - $results .= "\nfile: $save_path/backup_base_user_$user$the_time.$tar_ext\n"; - } - } else { - system("cd $save_path && rm -f backup_user_$_* backup_base_user_$_* backup_incr_user_$_*"); - system("$tar_cmd_user -f $save_path/backup_user_$_$the_time.$tar_ext $path_name"); - push @file_list_to_send_by_ftp, "$save_path/backup_user_$_$the_time.$tar_ext"; - $results .= "\nfile: $save_path/backup_user_$user$the_time.$tar_ext\n"; - } - } - } - $interactive and progress($pbar2, 1, _("Backup Other files...")); - $interactive and progress($pbar3, 0.4, _("Hard Disk Backup files...")); - } - - if (($where_net_ssh && !$daemon) || ($daemon && $ssh_daemon)) { - #ssh_client(); - } - if (($where_net_ftp && !$daemon) || ($daemon && $ftp_daemon)) { - $results .= _("file list send by FTP : %s\n ", $_) foreach @file_list_to_send_by_ftp; - $interactive and build_backup_ftp_status(); - if (ftp_client()) { - $results .= _("\n FTP connexion problem: It was not possible to send your backup files by FTP.\n"); - $interactive and client_ftp_pb(); - } - } - if (($where_cd && !$daemon) || ($daemon && $cd_daemon)) { - build_cd(); - } - if ($send_mail) { - if (send_mail("$results")) { - $interactive and send_mail_pb(); - $interactive or print _(" Error during mail sending. \n"); - } - } -} - - -my @list_of_rpm_to_install; -sub require_rpm { - my $all_rpms_found = 1; - my $res; - my @file_cache = cat_("/var/log/rpmpkgs"); - @list_of_rpm_to_install = (); -# my($pkg) = @_; - foreach my $pkg (@_) { - $res = grep /$pkg/, @file_cache; -# $res = system("rpm -qa | grep $_"); - if ($res == 0) { $all_rpms_found = 0; push @list_of_rpm_to_install, $pkg;} - } - return($all_rpms_found); -} - -sub list_remove { - my($widget, $list) = @_; - my @to_remove; - push @to_remove, $list->child_position($_) foreach($list->selection); - splice @list_other, $_, 1 foreach(reverse sort @to_remove); - $list->remove_items($list->selection); -} - -sub file_ok_sel { - my ( $widget, $file_selection ) = @_; - my $file_name = $file_selection->get_filename(); - if(!member($file_name, @list_other)) { - push(@list_other, $file_name); - $list_other->add(gtkshow(new Gtk::ListItem($file_name))); - } -} - -sub filedialog_where_hd { - my $file_dialog; - - $file_dialog = gtksignal_connect(new Gtk::FileSelection(_("File Selection")), destroy => sub { $file_dialog->destroy(); } ); - $file_dialog->ok_button->signal_connect(clicked => sub { - $save_path_entry->set_text($file_dialog->get_filename()); - $file_dialog->destroy() }); - $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() }); - $file_dialog->show(); -} - -sub filedialog_restore_find_path { - my $file_dialog; - - $file_dialog = gtksignal_connect(new Gtk::FileSelection(_("File Selection")), destroy => sub { $file_dialog->destroy(); } ); - $file_dialog->ok_button->signal_connect(clicked => sub { - $restore_find_path_entry->set_text($file_dialog->get_filename()); - $file_dialog->destroy() }); - $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() }); - $file_dialog->show(); -} - -sub filedialog { - my $file_dialog; - - $file_dialog = gtksignal_connect(new Gtk::FileSelection(_("File Selection")), destroy => sub { $file_dialog->destroy(); } ); - $file_dialog->ok_button->signal_connect(clicked => \&file_ok_sel, $file_dialog); - $file_dialog->ok_button->child->set(_("Add")); - $file_dialog->cancel_button->signal_connect(clicked => sub { $file_dialog->destroy() }); - $file_dialog->cancel_button->child->set(_("Close")); - $file_dialog->set_filename(_("Select the files or directories and click on 'Add'")); - $file_dialog->show(); -} - -################################################ ADVANCED ################################################ - -sub check_list { - foreach (@_) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { invbool $ref }) - } -} - -sub fonction_env { - ($central_widget, $current_widget, $previous_widget, $custom_help, $next_widget) = @_; -} - -# sub redraw_during_check { -# my ($tmp1, $tmp2) = @_; -# gtksignal_connect(gtkset_active($tmp1, $tmp2), toggled => sub { -# # invbool \$tmp2; -# print "tmp2 bef = $tmp2\n"; -# $tmp2 = $tmp2 ? 0 : 1; -# ${$central_widget}->destroy(); -# print "tmp2 after = $tmp2\n"; -# $current_widget->(); -# return ($tmp2); -# }); -# } - -sub advanced_what_sys { - my $box_what_sys; - - gtkpack($advanced_box, - $box_what_sys = gtkpack_(new Gtk::VBox(0, 15), - 1, _("\nPlease check all options that you need.\n"), - 1, _("These options can backup and restore all files in your /etc directory.\n"), - 0, my $check_what_sys = new Gtk::CheckButton( _("Backup your System files. ( /etc directory )")), - 0, my $check_what_versions = new Gtk::CheckButton( _("Use incremental backup (do not replace old backups)") ), - 0, my $check_what_critical = new Gtk::CheckButton( _("Do not include critical files (passwd, group, fstab)") ), - 0, _("With this option you will be able to restore any version\n of your /etc directory."), - 1, new Gtk::VBox(0, 15), - ), - ); - check_list([$check_what_sys, \$backup_sys], [$check_what_critical, \$no_critical_sys], [$check_what_versions, \$backup_sys_versions]); - fonction_env(\$box_what_sys, \&advanced_what_sys, \&advanced_what, "what"); - $up_box->show_all(); -} - -sub advanced_what_user { - my ($previous_function) = @_, - my $box_what_user; - my %check_what_user; - - all_user_list(); - gtkpack($advanced_box, - $box_what_user = gtkpack_(new Gtk::VBox(0, 15), - 0, _("Please check all users that you want to include in your backup."), - 0, new Gtk::HSeparator, - 1, createScrolledWindow( - gtkpack__(new Gtk::VBox(0,0), - map { my $name = $_; - my @user_list_tmp; - my $b = new Gtk::CheckButton($name); - if (grep /^$name$/, @user_list) { - $check_what_user{$_}[1] = 1; - gtkset_active($b, 1); - } else { - $check_what_user{$_}[1] = 0; - gtkset_active($b, 0); - } - $b->signal_connect(toggled => sub { - if ($check_what_user{$name}[1] ) { - $check_what_user{$name}[1] = 0; - @user_list_tmp = grep(!/^$name$/, @user_list); - @user_list = @user_list_tmp; - } else { - $check_what_user{$name}[1] = 1; - if (!member($name, @user_list) ) {push @user_list, $name;} - } - }); - $b } (@all_user_list) - ), - ), - 0, my $check_what_browser = new Gtk::CheckButton( _("Do not include the browser cache") ), - 0, my $check_what_user_versions = new Gtk::CheckButton( _("Use Incremental Backups (do not replace old backups)") ), - ), - ); - check_list([$check_what_browser, \$what_no_browser], [$check_what_user_versions, \$backup_user_versions]); - if ($previous_function) { fonction_env(\$box_what_user, \&advanced_what_user, \&$previous_function, "what", \&$previous_function);} - else { fonction_env(\$box_what_user, \&advanced_what_user, \&advanced_what, "what");} - $up_box->show_all(); -} - -sub advanced_what_other { - my $box_what_other; - $list_other = new Gtk::List(); - $list_other->set_selection_mode(-extended); - $list_other->add(gtkshow(new Gtk::ListItem($_))) foreach (@list_other); - - gtkpack($advanced_box, - $box_what_other = gtkpack_(new Gtk::VBox(0, 15), - 1, gtkpack_(new Gtk::HBox(0,4), - 1, createScrolledWindow($list_other), - ), - 0, gtkadd(gtkset_layout(new Gtk::HButtonBox, -spread), - gtksignal_connect(new Gtk::Button(_("Add")), clicked => sub {filedialog() }), - gtksignal_connect(new Gtk::Button(_("Remove Selected")), clicked => \&list_remove, $list_other), - ), - 0, gtkset_sensitive(my $check_what_other_versions = new Gtk::CheckButton( _("Use Incremental Backups (do not replace old backups)") ), 0), - ), - ); - check_list([$check_what_other_versions, \$backup_other_versions]); - fonction_env(\$box_what_other, \&advanced_what_other, \&advanced_what, "what"); - $up_box->show_all(); -} - -sub advanced_what_entire_sys{ - my $box_what; - - my ($pix_user_map, $pix_user_mask) = gtkcreate_png("user"); - my ($pix_other_map, $pix_other_mask) = gtkcreate_png("net_u"); - my ($pix_sys_map, $pix_sys_mask) = gtkcreate_png("bootloader"); - - gtkpack($advanced_box, - $box_what = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtksignal_connect(my $button_what_other = new Gtk::Button(), - clicked => sub { ${$central_widget}->destroy(); message_underdevel(); }), - 1, gtksignal_connect(my $button_what_all = new Gtk::Button(), - clicked => sub { ${$central_widget}->destroy(); message_underdevel(); }), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $button_what_other->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_sys_map, $pix_sys_mask), - new Gtk::Label(_("Linux")), - new Gtk::HBox(0, 5) - )); - $button_what_all->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_user_map, $pix_user_mask), - new Gtk::Label(_("Windows (FAT32)")), - new Gtk::HBox(0, 5) - )); - fonction_env(\$box_what, \&advanced_what_entire_sys, \&advanced_what, ""); - $up_box->show_all(); -} - -sub advanced_what{ - my $box_what; - my ($pix_user_map, $pix_user_mask) = gtkcreate_png("ic82-users-40"); - my ($pix_other_map, $pix_other_mask) = gtkcreate_png("ic82-others-40"); - my ($pix_sys_map, $pix_sys_mask) = gtkcreate_png("ic82-system-40"); - my ($pix_sysp_map, $pix_sysp_mask) = gtkcreate_png("ic82-systemeplus-40"); - - gtkpack($advanced_box, - $box_what = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtksignal_connect(my $button_what_sys = new Gtk::Button(), - clicked => sub { $box_what->destroy(); advanced_what_sys(); }), - 1, gtksignal_connect(my $button_what_user = new Gtk::Button(), - clicked => sub { ${$central_widget}->destroy(); advanced_what_user();}), - 1, gtksignal_connect(my $button_what_other = new Gtk::Button(), - clicked => sub { ${$central_widget}->destroy(); advanced_what_other(); }), -# 1, gtksignal_connect(my $button_what_all = new Gtk::Button(), -# clicked => sub { ${$central_widget}->destroy(); advanced_what_entire_sys(); }), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $button_what_sys->add( gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_sys_map, $pix_sys_mask), - new Gtk::Label(_("System")), - new Gtk::HBox(0, 5) - )); - $button_what_user->add( gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_user_map, $pix_user_mask), - new Gtk::Label(_("Users")), - new Gtk::HBox(0, 5) - )); - $button_what_other->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_other_map, $pix_other_mask), - new Gtk::Label(_("Other")), - new Gtk::HBox(0, 5) - )); -# $button_what_all->add(gtkpack(new Gtk::HBox(0,10), -# new Gtk::Pixmap($pix_sysp_map, $pix_sysp_mask), -# new Gtk::Label(_("An Entire System")), -# new Gtk::HBox(0, 5) -# )); - - fonction_env(\$box_what, \&advanced_what, \&advanced_box, ""); - $up_box->show_all(); -} - - -sub advanced_where_net_ftp { - my ($previous_function) = @_, - my $box_where_net; - - gtkpack($advanced_box, - $box_where_net = gtkpack_(new Gtk::VBox(0, 15), - 0, new Gtk::HSeparator, - 0, my $check_where_net_ftp = new Gtk::CheckButton( _("Use FTP connection to backup") ), - 0, new Gtk::HSeparator, - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the host name or IP.")), $where_net_ftp), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive(my $host_name_entry = new Gtk::Entry(), $where_net_ftp), - ), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the directory to\n put the backup on this host.")), $where_net_ftp), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive(my $host_path_entry = new Gtk::Entry(), $where_net_ftp), - ), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter your login")), $where_net_ftp), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive(my $login_user_entry = new Gtk::Entry(), $where_net_ftp), - ), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter your password")), $where_net_ftp), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive(my $passwd_user_entry = new Gtk::Entry(), $where_net_ftp), - ), - 0, gtkpack_(new Gtk::HBox(0,10), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive(my $check_remember_pass = new Gtk::CheckButton( _("Remember this password")), $where_net_ftp), - ), - ), - ); - $passwd_user_entry->set_visibility(0); - $passwd_user_entry->set_text( $passwd_user ); - $passwd_user_entry->signal_connect( 'changed', sub { $passwd_user = $passwd_user_entry->get_text()}); - $host_path_entry->set_text( $host_path ); - $host_name_entry->set_text( $host_name ); - $login_user_entry->set_text( $login_user ); - $host_name_entry->signal_connect( 'changed', sub { $host_name = $host_name_entry->get_text()}); - $host_path_entry->signal_connect( 'changed', sub { $host_path = $host_path_entry->get_text()}); - $login_user_entry->signal_connect( 'changed', sub { $login_user = $login_user_entry->get_text()}); - check_list ([$check_remember_pass, \$remember_pass]); - gtksignal_connect(gtkset_active($check_where_net_ftp, $where_net_ftp), toggled => sub { - invbool \$where_net_ftp; - ${$central_widget}->destroy(); - $current_widget->(); - }); - if ($previous_function) { fonction_env (\$box_where_net, \&advanced_where_net_ftp, \&$previous_function, "ftp" );} - else { fonction_env (\$box_where_net, \&advanced_where_net_ftp, \&advanced_where, "ftp" );} - $up_box->show_all(); -} - -sub advanced_where_net_ssh { - my ($previous_function) = @_, - my $box_where_ssh; - - gtkpack($advanced_box, - $box_where_ssh = gtkpack_(new Gtk::VBox(0, 15), - 1, gtkpack(new Gtk::HBox(0, 15), - new Gtk::VBox(0, 15), - gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtksignal_connect(new Gtk::Button("rsync"), clicked => sub { - ${$central_widget}->destroy(); message_underdevel(); }), - 1, gtksignal_connect(new Gtk::Button("WebDav"), clicked => sub { - ${$central_widget}->destroy(); message_underdevel(); }), - 1, gtksignal_connect(new Gtk::Button("scp"), clicked => sub { - ${$central_widget}->destroy(); message_underdevel(); }), - 1, new Gtk::VBox(0, 5), - ), - new Gtk::VBox(0, 15), - ), - ), - ); -# test si x11 -#print system("xterm -fn 7x14 -bg black -fg white -e ssh-keygen -f ~/.ssh/identity-backup && scp") . "\n"; - - if ($previous_function) { fonction_env (\$box_where_ssh, \&advanced_where_net_ssh, \&$previous_function, "ssh" );} - else { fonction_env (\$box_where_ssh, \&advanced_where_net_ssh, \&advanced_where, "ssh" );} - $up_box->show_all(); -} - -sub advanced_where_net { - my ($previous_function) = @_, - my $box_where_net; - - gtkpack($advanced_box, - $box_where_net = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, new Gtk::VBox(0,10), - 1, gtksignal_connect(new Gtk::Button(_("FTP Connection")), clicked => sub { - $box_where_net->destroy(); - if ($previous_function ) { - advanced_where_net_ftp(\&$previous_function); - } else { - advanced_where_net_ftp(); - }}), - if_(0, 1, gtksignal_connect(new Gtk::Button(_("Secure Connection")), clicked => sub { - $box_where_net->destroy(); - if ($previous_function ) { - advanced_where_net_ssh(\&$previous_function); - } else { - advanced_where_net_ssh(); - }})), - 1, new Gtk::VBox(0, 5), - 1, new Gtk::VBox(0,10), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - if ($previous_function) { fonction_env (\$box_where_net, \&advanced_where_net, \&$previous_function, "remote" );} - else { fonction_env (\$box_where_net, \&advanced_where_net, \&advanced_where, "remote" );} - $up_box->show_all(); -} - -sub advanced_where_cd { - my ($previous_function) = @_, - my $box_where_cd; - my $combo_where_cd_time = new Gtk::Combo(); - $combo_where_cd_time->set_popdown_strings ("650","700", "750", "800"); - - gtkpack($advanced_box, - $box_where_cd = gtkpack_(new Gtk::VBox(0, 6), - 0, my $check_where_cd = new Gtk::CheckButton( _("Use CD/DVDROM to backup")), - 0, new Gtk::HSeparator, - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please choose your CD space")), $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(gtkset_usize($combo_where_cd_time, 200, 20), $where_cd), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please check if you are using CDRW media")), $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(my $check_cdrw = new Gtk::CheckButton(), $where_cd), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please check if you want to erase your CDRW before")), $cdrw && $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(my $check_cdrw_erase = new Gtk::CheckButton(), $cdrw && $where_cd), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please check if you want to include\n install boot on your CD.")), $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(my $check_cd_with_install_boot = new Gtk::CheckButton(), $where_cd), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter your CD Writer device name\n ex: 0,1,0")), $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_usize(gtkset_sensitive($cd_devive_entry = new Gtk::Entry(), $where_cd), 200, 20), - ), - ), - ); - - foreach ([$check_cdrw_erase, \$cdrw_erase], [$check_cd_with_install_boot, \$cd_with_install_boot ]) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { ${$ref} = ${$ref} ? 0 : 1; }) - } - gtksignal_connect(gtkset_active($check_where_cd, $where_cd), toggled => sub { - $where_cd = $where_cd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); - gtksignal_connect(gtkset_active($check_cdrw, $cdrw), toggled => sub { - $cdrw = $cdrw ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); - $cd_devive_entry->set_text( $cd_devive ); - $cd_devive_entry->signal_connect( 'changed', sub { $cd_devive = $cd_devive_entry->get_text(); }); - $combo_where_cd_time->entry->set_text($cd_time); - $combo_where_cd_time->entry->signal_connect( 'changed', sub { $cd_time = $combo_where_cd_time->entry->get_text()}); - - if ($previous_function) { fonction_env(\$box_where_cd, \&advanced_where_cd, \&$previous_function, ""); } - else { fonction_env(\$box_where_cd, \&advanced_where_cd, \&advanced_where, ""); } - $up_box->show_all(); -} - -sub advanced_where_tape { - my ($previous_function) = @_, - my $box_where_tape; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ($pix_fs_map, $pix_fs_mask) = gtkcreate_png("filedialog"); - - gtkpack($advanced_box, - $box_where_tape = gtkpack_(new Gtk::VBox(0, 6), - 0, new Gtk::HSeparator, - 0, my $check_where_tape = new Gtk::CheckButton( _("Use tape to backup") ), - 0, new Gtk::HSeparator, - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the device name to use for backup")), $where_tape ), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive(my $save_device_tape_entry = new Gtk::Entry(), $where_tape), 200, 20), - ), - 0, new Gtk::VBox(0, 6), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the maximum size\n allowed for Drakbackup")), $where_tape), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive(my $spinner = new Gtk::SpinButton( $adj, 0, 0), $where_tape ), 200, 20), - ), - 0, gtkpack_(new Gtk::HBox(0,10), - ), - ), - ); - gtksignal_connect(gtkset_active($check_where_tape, $where_tape), toggled => sub { - $where_tape = $where_tape ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); - $save_device_tape_entry->set_text( $save_device_tape ); - $save_device_tape_entry->signal_connect( 'changed', sub { $save_device_tape = $save_device_tape_entry->get_text()}); - if ($previous_function) { fonction_env(\$box_where_tape, \&advanced_where_tape, \&$previous_function, ""); } - else { fonction_env(\$box_where_tape, \&advanced_where_tape, \&advanced_where, ""); } - $up_box->show_all(); -} - -sub advanced_where_hd { - my ($previous_function) = @_, - my $box_where_hd; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ($pix_fs_map, $pix_fs_mask) = gtkcreate_png("ic82-dossier-32"); - - gtkpack($advanced_box, - $box_where_hd = gtkpack_(new Gtk::VBox(0, 6), - 0, new Gtk::HSeparator, -# 0, my $check_where_hd = new Gtk::CheckButton( _("Use Hard Disk to backup") ), -# 0, new Gtk::HSeparator, - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the directory to save:")), $where_hd ), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive($save_path_entry = new Gtk::Entry(), $where_hd), 152, 20), - 0, gtkset_sensitive($button = gtksignal_connect(new Gtk::Button(), clicked => sub { - filedialog_where_hd();}), $where_hd ), - ), - 0, new Gtk::VBox(0, 6), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the maximum size\n allowed for Drakbackup")), $where_hd ), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive(my $spinner = new Gtk::SpinButton( $adj, 0, 0), $where_hd ), 200, 20), - ), - 0, gtkpack_(new Gtk::HBox(0,10), - 1, new Gtk::VBox(0, 6), - 0, gtkset_sensitive(my $check_where_hd_quota = new Gtk::CheckButton( _("Use quota for backup files.")), $where_hd ), - 0, new Gtk::VBox(0, 6), - ), - ), - ); - foreach ([$check_where_hd_quota, \$hd_quota]) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { ${$ref} = ${$ref} ? 0 : 1; }) - } -# gtksignal_connect(gtkset_active($check_where_hd, $where_hd), toggled => sub { -# $where_hd = $where_hd ? 0 : 1; -# $where_hd = 1; -# ${$central_widget}->destroy(); -# $current_widget->(); -# }); - $button->add(gtkpack(new Gtk::HBox(0,10), new Gtk::Pixmap($pix_fs_map, $pix_fs_mask))); - $save_path_entry->set_text( $save_path ); - $save_path_entry->signal_connect( 'changed', sub { $save_path = $save_path_entry->get_text()}); - if ($previous_function) { fonction_env(\$box_where_hd, \&advanced_where_hd, \&$previous_function, ""); } - else { fonction_env(\$box_where_hd, \&advanced_where_hd, \&advanced_where, ""); } - $up_box->show_all(); -} - -sub advanced_where{ - my $box_where; - my ($pix_net_map, $pix_net_mask) = gtkcreate_png("ic82-network-40"); - my ($pix_cd_map, $pix_cd_mask) = gtkcreate_png("ic82-CD-40"); - my ($pix_hd_map, $pix_hd_mask) = gtkcreate_png("ic82-discdurwhat-40"); - my ($pix_tape_map, $pix_tape_mask) = gtkcreate_png("ic82-tape-40"); - - gtkpack($advanced_box, - $box_where = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtksignal_connect(my $button_where_net = new Gtk::Button(), clicked => sub { -# $box_where->destroy(); advanced_where_net(); }), - $box_where->destroy(); advanced_where_net_ftp(); }), -# 1, gtksignal_connect(my $button_where_cd = new Gtk::Button(), clicked => sub { -# ${$central_widget}->destroy(); -# if (require_rpm("mkisofs", "cdrecord", "toto")) { advanced_where_cd(); } -# else { -# print "have to install @list_of_rpm_to_install...\n"; -# ${$central_widget}->destroy(); -# install_rpm(\&advanced_where); -# } -# }), - 1, gtksignal_connect(my $button_where_hd = new Gtk::Button(), clicked => sub { - ${$central_widget}->destroy(); advanced_where_hd(); }), -# 1, gtksignal_connect(my $button_where_tape = new Gtk::Button(), clicked => sub { -# ${$central_widget}->destroy(); message_underdevel();}), #advanced_where_tape(); }), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $button_where_net->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_net_map, $pix_net_mask), - new Gtk::Label(_("Network")), - new Gtk::HBox(0, 5) - )); -# $button_where_cd->add(gtkpack(new Gtk::HBox(0,10), -# new Gtk::Pixmap($pix_cd_map, $pix_cd_mask), -# new Gtk::Label(_("CDROM / DVDROM")), -# new Gtk::HBox(0, 5) -# )); - $button_where_hd->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_hd_map, $pix_hd_mask), - new Gtk::Label(_("HardDrive / NFS")), - new Gtk::HBox(0, 5) - )); -# $button_where_tape->add(gtkpack(new Gtk::HBox(0,10), -# new Gtk::Pixmap($pix_tape_map, $pix_tape_mask), -# new Gtk::Label(_("Tape")), -# new Gtk::HBox(0, 5) -# )); - fonction_env(\$box_where, \&advanced_where, \&advanced_box, ""); - $up_box->show_all(); -} - -sub advanced_when{ - my $box_when; - my $check_where_cd_daemon; - my $check_where_hd_daemon; - my $check_where_ssh_daemon; - my $check_where_ftp_daemon; - my ($pix_time_map, $pix_time_mask) = gtkcreate_png("ic82-when-40"); - my $combo_when_space = new Gtk::Combo(); - my %trans = (_("hourly") => 'hourly', - _("daily") => 'daily', - _("weekly") => 'weekly', - _("monthly") => 'monthly'); - my %trans2 = ('hourly' => _("hourly"), - 'daily' => _("daily"), - 'weekly' => _("weekly"), - 'monthly' => _("monthly")); - $combo_when_space->set_popdown_strings (_("hourly"),_("daily"),_("weekly"),_("monthly")); - - gtkpack($advanced_box, - $box_when = gtkpack_(new Gtk::VBox(0, 15), - 0, gtkpack_(new Gtk::HBox(0,10), - 1, new Gtk::HBox(0,10), - 1, new Gtk::Pixmap($pix_time_map, $pix_time_mask), - 0, my $check_when_daemon = new Gtk::CheckButton( _("Use daemon") ), - 1, new Gtk::HBox(0,10), - ), - 0, new Gtk::HSeparator, - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please choose the time \ninterval between each backup")), $backup_daemon), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive($combo_when_space, $backup_daemon), - ), - 0, new Gtk::HBox(0,10), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please choose the\nmedia for backup.")), $backup_daemon), - 1, new Gtk::HBox(0,10), - 0, gtkpack_(new Gtk::VBox(0,10), -# 0, gtkset_sensitive($check_where_cd_daemon = new Gtk::CheckButton(_("Use CD/DVDROM with daemon")), $backup_daemon), - 0, gtkset_sensitive($check_where_hd_daemon = new Gtk::CheckButton( _("Use Hard Drive with daemon")), $backup_daemon), -# 0, gtkset_sensitive($check_where_ssh_daemon = new Gtk::CheckButton( _("Use SSH with daemon")), $backup_daemon), - 0, gtkset_sensitive($check_where_ftp_daemon = new Gtk::CheckButton( _("Use FTP with daemon")), $backup_daemon), - ), - ), - 0, new Gtk::HSeparator, - 1, gtkset_sensitive(new Gtk::Label(_("Please be sure that the cron daemon is included in your services.")), $backup_daemon), - ), - ); - - check_list([$check_where_hd_daemon, \$hd_daemon], [$check_where_ftp_daemon, \$ftp_daemon]); -# check_list([$check_where_hd_daemon, \$hd_daemon], [$check_where_ftp_daemon, \$ftp_daemon], -# [$check_where_cd_daemon, \$cd_daemon],[$check_where_ssh_daemon, \$ssh_daemon] ); - gtksignal_connect(gtkset_active($check_when_daemon, $backup_daemon), toggled => sub { - $backup_daemon = $backup_daemon ? 0 : 1; - ${$central_widget}->destroy(); - advanced_when(); - }); - $combo_when_space->entry->set_text( $trans2{$when_space} ); - $combo_when_space->entry->signal_connect( 'changed', sub { $when_space = $trans{$combo_when_space->entry->get_text()}; }); - fonction_env(\$box_when, \&advanced_when, \&advanced_box, ""); - $up_box->show_all(); -} - -sub advanced_options{ - my $box_options; - my ($pix_options_map, $pix_options_mask) = gtkcreate_png("ic82-moreoption-40"); - - gtkpack($advanced_box, - $box_options = gtkpack_(new Gtk::VBox(0, 15), -# 0, gtkpack_(new Gtk::HBox(0,10), -# 1, new Gtk::VBox(0,10), -# 1, new Gtk::Pixmap($pix_options_map, $pix_options_mask), -# 1, _("Please choose correct options to backup."), -# 1, new Gtk::VBox(0,10), -# ), -# 0, new Gtk::HSeparator, -# 0, gtkpack_(new Gtk::VBox(0,10), -# 0, gtkset_sensitive(my $check_tar_bz2 = new Gtk::CheckButton( _("Use Tar and bzip2 (very slow) [Please be careful if you\n (un)select this option, as all your old backups will be deleted.]") ), 0), -# 0, gtkset_sensitive(my $check_backupignore = new Gtk::CheckButton( _("Use .backupignore files")), 0), - 0, new Gtk::VBox(0,10), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, my $check_mail = new Gtk::CheckButton( _("Send mail report after each backup to :")), - 1, new Gtk::HBox(0,10), - 0, my $mail_entry = new Gtk::Entry(), - ), -# ), - ), - ); - check_list([$check_mail, \$send_mail]); -# check_list([$check_mail, \$send_mail], [$check_tar_bz2, \$comp_mode], [$check_backupignore, \$backupignore]); - $mail_entry->set_text( $user_mail ); - $mail_entry->signal_connect( 'changed', sub { $user_mail = $mail_entry->get_text()}); - fonction_env(\$box_options, \&advanced_options, \&advanced_box, "options"); - $up_box->show_all(); -} - -sub advanced_box{ - my $box_adv; - my ($pix_hd_map, $pix_hd_mask) = gtkcreate_png("ic82-discdurwhat-40"); - my ($pix_time_map, $pix_time_mask) = gtkcreate_png("ic82-when-40"); - my ($pix_net_map, $pix_net_mask) = gtkcreate_png("ic82-where-40"); - my ($pix_options_map, $pix_options_mask) = gtkcreate_png("ic82-moreoption-40"); - - gtkpack($advanced_box, - $box_adv = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtksignal_connect(my $button_what = new Gtk::Button(), clicked => sub { - ${$central_widget}->destroy(); advanced_what(); }), - 1, gtksignal_connect(my $button_where = new Gtk::Button(), clicked => sub { - ${$central_widget}->destroy(); advanced_where(); }), - 1, gtksignal_connect(my $button_when = new Gtk::Button(), clicked => sub { - ${$central_widget}->destroy(); advanced_when(); }), - 1, gtksignal_connect(my $button_options = new Gtk::Button(), clicked => sub { - ${$central_widget}->destroy(); advanced_options();}), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $button_what->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_hd_map, $pix_hd_mask), - new Gtk::Label(_("What")), - new Gtk::HBox(0, 5) - )); - $button_where->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_net_map, $pix_net_mask), - new Gtk::Label(_("Where")), - new Gtk::HBox(0, 5) - )); - $button_when->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_time_map, $pix_time_mask), - new Gtk::Label(_("When")), - new Gtk::HBox(0, 5) - )); - $button_options->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_options_map, $pix_options_mask), - new Gtk::Label(_("More Options")), - new Gtk::HBox(0, 5) - )); - fonction_env(\$box_adv, \&advanced_box, \&interactive_mode_box, ""); - $up_box->show_all(); -} - -################################################ WIZARD ################################################ - -sub wizard_step3 { - my $box2; - my $text = new Gtk::Text(undef, undef); - system_state(); - gtktext_insert($text, $system_state); - button_box_restore_main(); - - gtkpack($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, gtkpack_(new Gtk::VBox(0,10), - 0, _("Drakbackup Configuration"), - 1, createScrolledWindow($text), - ), - ), - ); - fonction_env(\$box2, \&wizard_step3, \&wizard_step2, ""); - button_box_wizard_end(); - $up_box->show_all(); -} - -sub wizard_step2 { - my $box2; - - gtkpack($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 0, _("Please choose where you want to backup"), - 0, gtkpack_(new Gtk::HBox(0, 15), - 0, my $check_wizard_hd = new Gtk::CheckButton(_("on Hard Drive")), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(gtksignal_connect(new Gtk::Button(_("Configure")), - clicked => sub { - ${$central_widget}->destroy(); - to_ok(); - advanced_where_hd(\&wizard_step2); - to_normal(); - }), $where_hd ), - ), - 0, gtkpack_(new Gtk::HBox(0, 15), - 0, my $check_wizard_net = new Gtk::CheckButton(_("across Network")), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(gtksignal_connect(new Gtk::Button(_("Configure")), - clicked => sub { - ${$central_widget}->destroy(); - to_ok(); - advanced_where_net(\&wizard_step2); - to_normal(); - }), $where_net ), - ), -# 0, gtkpack_(new Gtk::HBox(0, 15), -# 0, my $check_wizard_cd = new Gtk::CheckButton(_("on CDROM")), -# 1, new Gtk::VBox(0, 5), -# 0, gtkset_sensitive(gtksignal_connect(new Gtk::Button(_("Configure")), -# clicked => sub { -# ${$central_widget}->destroy(); -# advanced_where_cd(\&wizard_step2); -# }), $where_cd ), -# ), -# 0, gtkpack_(new Gtk::HBox(0, 15), -# 0, my $check_wizard_tape = new Gtk::CheckButton(_("on Tape Device")), -# 1, new Gtk::VBox(0, 5), -# 0, gtkset_sensitive(gtksignal_connect(new Gtk::Button(_("Configure")), -# clicked => sub { -# ${$central_widget}->destroy(); -# advanced_where_tape(\&wizard_step2); -# }), $where_tape), -# ), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $where_net = $where_net_ssh || $where_net_ftp; - foreach ([$check_wizard_hd, \$where_hd], -# [$check_wizard_cd, \$where_cd], -# [$check_wizard_tape, \$where_tape], - [$check_wizard_net, \$where_net]) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => - sub { ${$ref} = ${$ref} ? 0 : 1; - $where_hd = 1; - if (!$where_hd && !$where_cd && !$where_net) { $next_widget = \&message_noselect_box; } - else { $next_widget = \&wizard_step3; } - if(!$where_net) {$where_net_ssh = 0; $where_net_ftp = 0; } - else {$where_net_ftp = 1;} - ${$central_widget}->destroy(); - wizard_step2(); - }) - } - if (!$where_hd && !$where_cd && !$where_net) { fonction_env(\$box2, \&wizard_step2, \&wizard, "", \&message_noselect_box)} - else { fonction_env(\$box2, \&wizard_step2, \&wizard, "", \&wizard_step3)} - button_box_wizard(); - $up_box->show_all(); -} - -sub wizard { - my $box2; - - gtkpack($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 0, _("Please choose what you want to backup"), - 0, my $check_wizard_sys = new Gtk::CheckButton(_("Backup system")), - 0, my $check_wizard_user = new Gtk::CheckButton(_("Backup Users")), - 0, gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 0, gtksignal_connect(new Gtk::Button(_("Select user manually")), clicked => sub { - ${$central_widget}->destroy(); - advanced_what_user(\&wizard); - }), - ), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - foreach ([$check_wizard_sys, \$backup_sys], [$check_wizard_user, \$backup_user]) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => - sub { ${$ref} = ${$ref} ? 0 : 1; - if ($backup_sys || $backup_user && @user_list ) { $next_widget = \&wizard_step2; } - else { $next_widget = \&message_noselect_what_box; } - })} - if ($backup_sys || $backup_user && @user_list ) { fonction_env(\$box2, \&wizard, \&interactive_mode_box, "", \&wizard_step2) } - else { fonction_env(\$box2, \&wizard, \&interactive_mode_box, "", \&message_noselect_what_box) } - button_box_wizard(); - $up_box->show_all(); -} - -################################################ RESTORE ################################################ - -sub find_backup_to_restore { - # fixme: - # faire test existance cd - # faire reponse si non existance de $path_to_find_restore - my @list_backup = (); - my @list_backup_tmp2 = (); - my $to_put; - @sys_backuped = (); - my @list_backup_tmp; - my @user_backuped_tmp; - - @user_backuped = (); - -d $path_to_find_restore and @list_backup_tmp2 = all($path_to_find_restore); - foreach (@list_backup_tmp2) { - s/\_base//gi; - s/\_incr//gi; - push @list_backup , $_; - } - if (grep /^backup_other/, @list_backup) {$other_backuped = 1;} - if (grep /^backup_sys/, @list_backup) {$sys_backuped = 1;} - foreach (grep /^backup_sys_/, @list_backup) { - chomp; - s/^backup_sys_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my ( $date, $heure) = /^(.*)_([^_]*)$/; - my $year = substr($date, 0, 4); - my $month = substr($date, 4, 2); - my $day = substr($date, 6, 2); - my $hour = substr($heure, 0, 2); - my $min = substr($heure, 2, 2); - $to_put = "$day/$month/$year $hour:$min $_"; - push @sys_backuped , $to_put; - } - $restore_step_sys_date = $to_put; - foreach (grep /^backup_user_/, @list_backup) { - chomp; - s/^backup_user_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my ($nom, $date, $heure) = /^(.*)_([^_]*)_([^_]*)$/; - my $year = substr($date, 0, 4); - my $month = substr($date, 4, 2); - my $day = substr($date, 6, 2); - my $hour = substr($heure, 0, 2); - my $min = substr($heure, 2, 2); -# my $to_put = " $nom, (date: $date, hour: $heure)"; - $to_put = "$_ user: $nom, date: $day/$month/$year, hour: $hour:$min"; - push @user_backuped , $to_put; - grep ( /^$nom$/, @user_list_backuped) or push @user_list_backuped, $nom; - } -} - -sub system_state { - $system_state = (); - - if ($cfg_file_exist) { - $system_state .= _("\nBackup Sources: \n"); - $backup_sys and $system_state .= _("\n- System Files:\n"); - $backup_sys and $system_state .= "\t\t$_\n" foreach @sys_files; - $backup_user and $system_state .= _("\n- User Files:\n"); - $backup_user and $system_state .= "\t\t$_\n" foreach @user_list; - @list_other and $system_state .= _("\n- Other Files:\n"); - @list_other and $system_state .= "\t\t$_\n" foreach @list_other; - $where_hd and $system_state .= _("\n- Save on Hard drive on path : %s\n", $save_path); - $where_net_ftp and $system_state .= _("\n- Save on FTP on host : %s\n", $host_name); - $where_net_ftp and $system_state .= _("\t\t user name: %s\n\t\t on path: %s \n", $login_user, $host_path); - $system_state .= _("\n- Options:\n"); - $backup_sys or $system_state .= _("\tDo not include System Files\n"); - if ($comp_mode) { $system_state .= _("\tBackups use tar and bzip2\n"); } - else { $system_state .= _("\tBackups use tar and gzip\n"); } - $system_state .= _("\n- Daemon (%s) include :\n", $when_space); - $hd_daemon and $system_state .= _("\t-Hard drive.\n"); - $cd_daemon and $system_state .= _("\t-CDROM.\n"); - $ftp_daemon and $system_state .= _("\t-Network by FTP.\n"); - $ssh_daemon and $system_state .= _("\t-Network by SSH.\n"); - } - else {$system_state = _("No configuration, please click Wizard or Advanced.\n")} -} - -sub restore_state { - my @tmp = split( ' ', $restore_step_sys_date); - $restore_state = _("List of data to restore:\n\n"); - if ($restore_sys) { $restore_state .= "- Restore System Files.\n"; - $restore_state .= " - from date: $tmp[0] $tmp[1]\n"; - } - if ($restore_user) { - $restore_state .= "- Restore User Files: \n" ; - $restore_state .= "\t\t$_\n" foreach @user_list_to_restore2 ; - push @user_list_to_restore, (split(',', $_))[0] foreach @user_list_to_restore2 ; - } - if ($restore_other) { - $restore_state .= "- Restore Other Files: \n"; - -f "$path_to_find_restore/list_other" and $restore_state .= "\t\t$_\n" foreach split( "\n", cat_("$path_to_find_restore/list_other")); - } - if ($restore_other_path) { - $restore_state .= "- Path to Restore: $restore_path \n"; - } -} - -sub select_most_recent_selected_of { - my ($user_name) = @_; - my @list_tmp2; - my @tmp = sort @user_list_to_restore2; - foreach (grep /$user_name\_/, sort @tmp) { push @list_tmp2 , $_; } - return pop @list_tmp2; -} - -sub select_user_data_to_restore { - my $var_eq = 1; - my @list_backup = (); - my @list_tmp = (); - my @list_tmp2 = (); - @user_list_to_restore = (); - - -d $path_to_find_restore and my @list_backup_tmp2 = grep /^backup/, all($path_to_find_restore); - @list_tmp2 = @list_backup_tmp2; - foreach (@list_backup_tmp2) { - s/\_base//gi; - s/\_incr//gi; - push @list_backup , $_; - } - foreach my $var_tmp (@user_list_backuped) { - $var_eq = 1; - my $more_recent = (split( ' ', select_most_recent_selected_of($var_tmp)))[0]; - foreach (grep /^backup\_user\_$var_tmp\_/, sort @list_backup) { - s/.tar.gz//gi; - s/.tar.bz2//gi; - if ($more_recent) { - if ( $_ =~ /$more_recent/ ) { - push @list_tmp , $_; - $var_eq = 0; - } - else { $var_eq and push @list_tmp , $_;} - } - } - } - foreach my $var_to_restore (@list_tmp) { - $var_to_restore =~ s/backup_//gi; - foreach my $var_exist ( sort @list_tmp2) { - if ($var_exist =~ /$var_to_restore/ ) { - push @user_list_to_restore, $var_exist; - } - } - } - $DEBUG and print "(incremental restore) real user list to restore : $_ \n" foreach (@user_list_to_restore); -} - -sub select_sys_data_to_restore { - my $var_eq = 1; - my @list_tmp = (); - @sys_list_to_restore = (); - - -d $path_to_find_restore and @list_tmp = grep /^backup/, all($path_to_find_restore); - my @more_recent = split( ' ', $restore_step_sys_date); - my $more_recent = pop @more_recent; - foreach my $var_exist (grep /\_sys\_/, sort @list_tmp) { - if ($var_exist =~ /$more_recent/ ) { - push @sys_list_to_restore, $var_exist; - $var_eq = 0; } - else { $var_eq and push @sys_list_to_restore, $var_exist; } - } - $DEBUG and print "sys list to restore: $_\n " foreach (@sys_list_to_restore); -} - -sub valid_backup_test { - my (@files_list) = @_; - @files_corrupted = (); - my $is_corrupted = 0; - foreach (@files_list) { - if (system("gzip -l $path_to_find_restore/$_") > 1 ) { - push @files_corrupted, $_; - $is_corrupted = -1; - } - } - return $is_corrupted; -} - -sub restore_aff_backup_problems { - my $do_restore; - my $button_restore; - my $text = new Gtk::Text(undef, undef); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - my $restore_pbs_state = _("List of data corrupted:\n\n"); - $restore_pbs_state .= "\t\t$_\n" foreach @files_corrupted ; - $restore_pbs_state .= _("Please uncheck or remove it on next time."); - gtktext_insert($text, $restore_pbs_state); - button_box_restore_main(); - - gtkpack($advanced_box, - $do_restore = gtkpack_(new Gtk::VBox(0,10), - 0, new Gtk::VBox(0,10), - 1, gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 0, new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - 0, _("Backup files are corrupted"), - 1, new Gtk::VBox(0, 5), - ), - 0, new Gtk::VBox(0,10), - 1, createScrolledWindow($text), - ), - ); - button_box_restore_pbs_end(); - fonction_env(\$do_restore, \&restore_aff_backup_problems, "", "restore_pbs"); - $up_box->show_all(); -} - -sub restore_aff_result { - my $do_restore; - my $text = new Gtk::Text(undef, undef); - gtktext_insert($text, $restore_state); - button_box_restore_main(); - - gtkpack($advanced_box, - $do_restore = gtkpack_(new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - 0, _(" All your selectionned data have been "), - 0, _(" Successfuly Restored on %s ", $restore_path), - 1, new Gtk::VBox(0,10), - ), - ); - button_box_build_backup_end(); - $central_widget = \$do_restore; - $up_box->show_all(); - -} - -sub return_path { - my ($username) = @_; - my $usr; - my $home_dir; - my $passwdfile = "/etc/passwd"; - open (PASSWD, $passwdfile) or exit 1; - while (defined(my $line = <PASSWD>)) { - chomp($line); - ($usr,$home_dir) = (split(/:/, $line))[0,5]; - last if ($usr eq $username); - } - close (PASSWD); - return $home_dir; -} - -sub restore_backend { - my $untar_cmd; - my $exist_problem = 0; - my $user_dir; - if (grep /tar.gz$/, all($path_to_find_restore)) { $untar_cmd = 0; } - else { $untar_cmd = 1; } - if ($restore_user) { - if ($backup_user_versions) { - select_user_data_to_restore(); - if (valid_backup_test(@user_list_to_restore) == -1) { - $exist_problem = 1; - restore_aff_backup_problems(); - } else { - foreach (@user_list_to_restore) { - my ($tnom, $username, $theure2) = /^(\w+\_\w+\_user_)(.*)_(\d+\_\d+.*)$/; - $DEBUG and print "user name to restore: $username, user directory: $user_dir\n"; - if ($remove_user_before_restore) { - $user_dir = return_path($username); - -d $user_dir and rm_rf($user_dir); - } - $untar_cmd or system(" tar xfz $path_to_find_restore/$_ -C $restore_path") ; - $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/$_ | tar xf -C $restore_path ") ; - } - } - } - } - if ($restore_sys) { - if ($backup_sys_versions) { - select_sys_data_to_restore(); - if (valid_backup_test(@sys_list_to_restore) == -1) { - $exist_problem = 1; - restore_aff_backup_problems(); - } else { - $untar_cmd or system("tar xfz $path_to_find_restore/$_ -C $restore_path ") foreach @sys_list_to_restore; - $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/$_ | tar xf -C $restore_path ") foreach @sys_list_to_restore; - } - } else { - $untar_cmd or system("tar xfz $path_to_find_restore/backup_sys.tar.gz -C $restore_path "); - $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/backup_sys.tar.bz2 | tar xf -C $restore_path "); - } - } - if ($restore_other) { - $untar_cmd or system("tar xfz $path_to_find_restore/backup_other.tar.gz -C $restore_path "); - $untar_cmd and system("/usr/bin/bzip2 -cd $path_to_find_restore/backup_other.tar.bz2 | tar xf -C $restore_path "); - } - $exist_problem or restore_aff_result(); -} - -sub restore_do { - if ($backup_bef_restore) { - if ($restore_sys) { $backup_sys = 1;} - else { $backup_sys = 0;} - if ($restore_user) { - $backup_user = 1; - @user_list = @user_list_to_restore; - } else { $backup_user = 0;} - build_backup_status(); - read_conf_file(); - build_backup_files(); - $table->destroy(); - } - restore_do2(); -} - -sub restore_do2 { - my $do_restore; - my $button_restore; - my $text = new Gtk::Text(undef, undef); - restore_state(); - gtktext_insert($text, $restore_state); - button_box_restore_main(); - - gtkpack($advanced_box, - $do_restore = gtkpack_(new Gtk::VBox(0,10), - 0, _(" Restore Configuration "), - 1, createScrolledWindow($text), - ), - ); - button_box_restore_end(); - fonction_env(\$do_restore, \&restore_do2, \&restore_box, "restore"); - $up_box->show_all(); -} - -sub restore_step_other { - my $retore_step_other; - my $text = new Gtk::Text(undef, undef); - my $other_rest = cat_("$path_to_find_restore/list_other"); - gtktext_insert($text, $other_rest); - gtkpack($advanced_box, - $retore_step_other = gtkpack_(new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - 1, createScrolledWindow($text), - 0, my $check_restore_other_sure = new Gtk::CheckButton(_("OK to restore the other files.")), - 1, new Gtk::VBox(0,10), - ), - ); - check_list([$check_restore_other_sure, \$restore_other]); - fonction_env(\$retore_step_other, \&restore_step_other, \&restore_step2, "restore", \&restore_do); - $up_box->show_all(); -} - -my %check_user_to_restore; -sub restore_step_user { - my $retore_step_user; - my @tmp_list = sort @user_backuped; - @user_backuped = @tmp_list; - - gtkpack($advanced_box, - $retore_step_user = gtkpack_(new Gtk::VBox(0,10), - 0, new Gtk::VBox(0,10), - 0, _("User list to restore (only the most recent date per user is important)"), - 1, createScrolledWindow( gtkpack__(new Gtk::VBox(0,0), - map { my $name; - my $var2; - my $name_complet = $_; - $name = (split( ' ',$name_complet))[0]; - my @user_list_tmp = (); - - my $b = new Gtk::CheckButton($name_complet); - if ( grep $name_complet, @user_list_to_restore2) { - gtkset_active($b, 1); - $check_user_to_restore{$name_complet}[1] = 1; - } else { - gtkset_active($b, 0); - $check_user_to_restore{$name_complet}[1] = 0; - } - $b->signal_connect(toggled => sub { - if (!$check_user_to_restore{$name_complet}[1] ) { - $check_user_to_restore{$name_complet}[1] = 1; - if (!grep (/$name/, @user_list_to_restore2)) { - push @user_list_to_restore2, $name_complet;} - } else { - $check_user_to_restore{$name_complet}[1] = 0; - foreach (@user_list_to_restore2) { - $var2 = (split( ' ',$_))[0]; - if ($name ne $var2) { - push @user_list_tmp, $_; - } - } - @user_list_to_restore2 = @user_list_tmp; - } - }); - $b } (@user_backuped) - ), - ), - ), - ); - if ($restore_other) { fonction_env(\$retore_step_user, \&restore_step_user, "", "restore", \&restore_step_other)} - else{ fonction_env(\$retore_step_user, \&restore_step_user, "", "restore", \&restore_do)} - $up_box->show_all(); -} - -sub restore_step_sys { - my $restore_step_sys; - my $combo_restore_step_sys = new Gtk::Combo(); - $combo_restore_step_sys->set_popdown_strings (@sys_backuped); - - gtkpack($advanced_box, - $restore_step_sys = gtkpack_(new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - 0, my $check_backup_before = new Gtk::CheckButton(_("Backup the system files before:")), - 0, gtkpack_(new Gtk::HBox(0,10), - 1, _("please choose the date to restore"), - 0, $combo_restore_step_sys, - 0, new Gtk::HBox(0,10), - ), - 1, new Gtk::VBox(0,10), - ), - ); - $combo_restore_step_sys->entry->signal_connect( 'changed', sub { - $restore_step_sys_date = $combo_restore_step_sys->entry->get_text(); - }); - $combo_restore_step_sys->entry->set_text($restore_step_sys_date); - fonction_env(\$restore_step_sys, \&restore_step_sys, "", "restore", ); - if ($restore_user) { fonction_env(\$restore_step_sys, \&restore_step_sys, "", "restore", \&restore_step_user)} - elsif ($restore_other){ fonction_env(\$restore_step_sys, \&restore_step_sys, "", "restore", \&restore_step_other)} - else{ fonction_env(\$restore_step_sys, \&restore_step_sys, "", "restore", \&restore_do)} - $up_box->show_all(); -} - -sub restore_other_media_hd { - my ($previous_function) = @_, - my $box_where_hd; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ($pix_fs_map, $pix_fs_mask) = gtkcreate_png("ic82-dossier-32"); - - gtkpack($advanced_box, - $box_where_hd = gtkpack_(new Gtk::VBox(0, 6), - 0, new Gtk::HSeparator, - 0, my $check_where_hd = new Gtk::CheckButton( _("Use Hard Disk to backup") ), - 0, new Gtk::HSeparator, - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the directory to save:")), $where_hd ), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive($save_path_entry = new Gtk::Entry(), $where_hd), 152, 20), - 0, gtkset_sensitive($button = gtksignal_connect(new Gtk::Button(), clicked => sub { - filedialog_where_hd();}), $where_hd ), - ), - 0, new Gtk::VBox(0, 6), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the maximum size\n allowed for Drakbackup")), $where_hd ), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive(my $spinner = new Gtk::SpinButton( $adj, 0, 0), $where_hd ), 200, 20), - ), - 0, gtkpack_(new Gtk::HBox(0,10), - 1, new Gtk::VBox(0, 6), - 0, gtkset_sensitive(my $check_where_hd_quota = new Gtk::CheckButton( _("Use quota for backup files.")), $where_hd ), - 0, new Gtk::VBox(0, 6), - ), - ), - ); - check_list([$check_where_hd_quota, \$hd_quota]); - gtksignal_connect(gtkset_active($check_where_hd, $where_hd), toggled => sub { - $where_hd = $where_hd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); - $button->add(gtkpack(new Gtk::HBox(0,10), new Gtk::Pixmap($pix_fs_map, $pix_fs_mask))); - $save_path_entry->set_text( $save_path ); - $save_path_entry->signal_connect( 'changed', sub { $save_path = $save_path_entry->get_text()}); - if ($previous_function) { fonction_env( \$box_where_hd, \&advanced_where_hd, \&$previous_function, "")} - else { fonction_env( \$box_where_hd, \&advanced_where_hd, \&advanced_where, "")} - $up_box->show_all(); -} - -sub restore_find_net { - my ($previous_function) = @_, - my $box_where_net; - - gtkpack($advanced_box, - $box_where_net = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, new Gtk::VBox(0,10), - 1, gtksignal_connect(new Gtk::Button(_("FTP Connection")), clicked => sub { - $box_where_net->destroy(); - if ($previous_function ) { - message_underdevel(); -# advanced_where_net_ftp(\&$previous_function); - } else { - advanced_where_net_ftp(); - }}), - 1, gtksignal_connect(new Gtk::Button(_("Secure Connection")), clicked => sub { - $box_where_net->destroy(); - if ($previous_function ) { - advanced_where_net_ssh(\&$previous_function); - } else { - advanced_where_net_ssh(); - }}), - 1, new Gtk::VBox(0, 5), - 1, new Gtk::VBox(0,10), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - if ($previous_function) { fonction_env( \$box_where_net, \&advanced_where_net, \&$previous_function, "")} - else { fonction_env( \$box_where_net, \&advanced_where_net, \&advanced_where, "")} - $up_box->show_all(); -} - -sub restore_other_media { - my $box_find_restore; - my $button; - my $adj = new Gtk::Adjustment 550.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - my ($pix_fs_map, $pix_fs_mask) = gtkcreate_png("ic82-dossier-32"); - - gtkpack($advanced_box, - $box_find_restore = gtkpack_(new Gtk::VBox(0, 6), - 0, new Gtk::HSeparator, - 0, my $check_other_media_hd = new Gtk::CheckButton( _("Restore from Hard Disk.") ), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the directory where backups are stored")), $other_media_hd ), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive($restore_find_path_entry = new Gtk::Entry(), $other_media_hd), 152, 20), - 0, gtkset_sensitive($button = gtksignal_connect(new Gtk::Button(), clicked => sub { - filedialog_restore_find_path();}), $other_media_hd ), - ), - 1, new Gtk::VBox(0, 6), -# 0, new Gtk::HSeparator, -# 0, my $check_other_media_net = new Gtk::CheckButton( _("Restore from Network") ), -# 0, new Gtk::VBox(0, 6), -# 1, gtkpack(new Gtk::HBox(0,10), -# new Gtk::VBox(0, 6), -# gtkset_sensitive(gtksignal_connect(new Gtk::Button("Network"), clicked => sub { -# ${$central_widget}->destroy(); -# restore_find_net(\&restore_other_media);}), !$other_media_hd ), -# new Gtk::VBox(0, 6), -# ), -# 1, new Gtk::VBox(0, 6), -# 0, new Gtk::HSeparator, - 0, new Gtk::VBox(0, 6), - ), - ); - gtksignal_connect(gtkset_active($check_other_media_hd, $other_media_hd), toggled => sub { - $other_media_hd = $other_media_hd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); -# gtksignal_connect(gtkset_active($check_other_media_net, !$other_media_hd), toggled => sub { -# $other_media_hd = $other_media_hd ? 0 : 1; -# ${$central_widget}->destroy(); -# $current_widget->(); -# }); - $button->add(gtkpack(new Gtk::HBox(0,10), new Gtk::Pixmap($pix_fs_map, $pix_fs_mask))); - $restore_find_path_entry->set_text( $path_to_find_restore ); - $restore_find_path_entry->signal_connect( 'changed', sub { $path_to_find_restore = $restore_find_path_entry->get_text()}); - fonction_env(\$box_find_restore, \&restore_other_media, \&restore_step2, "other_media"); - $up_box->show_all(); -} - -sub restore_step2 { - my $retore_step2; - my $other_exist; - my $sys_exist; - my $user_exist; - - if (-f "$save_path/backup_other*") { $other_exist = 1; } - else { my $other_exist = 0; $restore_other = 0; } - if (grep /\_sys\_/, grep /^backup/, all("$save_path/")) { $sys_exist = 1; } - else { my $sys_exist = 0; $restore_sys = 0; } - if (grep /\_user\_/, grep /^backup/, all("$save_path/")) { $user_exist = 1; } - else { my $user_exist = 0; $restore_user = 0; } - $backup_sys_versions || $backup_user_versions and $backup_bef_restore = 1; - - gtkpack($advanced_box, - $retore_step2 = gtkpack_(new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, my $check_restore_other_src = new Gtk::CheckButton(_("Select another media to restore from")), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive(gtksignal_connect(new Gtk::Button(_("Other Media")), - clicked => sub { - ${$central_widget}->destroy(); - restore_other_media(); - }), $restore_other_src ), - ), - 0, gtkset_sensitive(my $check_restore_sys = new Gtk::CheckButton(_("Restore system")), $sys_exist), - 0, gtkset_sensitive(my $check_restore_user = new Gtk::CheckButton(_("Restore Users")), $user_exist), - 0, gtkset_sensitive( my $check_restore_other = new Gtk::CheckButton(_("Restore Other")), $other_exist), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, my $check_restore_other_path = new Gtk::CheckButton(_("select path to restore (instead of / )")), - 1, new Gtk::HBox(0,10), - 0, gtkset_sensitive(my $restore_path_entry = new Gtk::Entry(), $restore_other_path), - ), - 0, gtkset_sensitive(my $check_backup_bef_restore = new Gtk::CheckButton(_("Do new backup before restore (only for incremental backups.)")), $backup_sys_versions || $backup_user_versions ), - 0, gtkset_sensitive(my $check_remove_user_dir = new Gtk::CheckButton(_("Remove user directories before restore.")), $sys_exist), - 1, new Gtk::VBox(0,10), - ), - ); - foreach ([$check_restore_sys, \$restore_sys], - [$check_backup_bef_restore, \$backup_bef_restore], - [$check_restore_user, \$restore_user], - [$check_remove_user_dir, \$remove_user_before_restore ], - [$check_restore_other, \$restore_other]) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { - ${$ref} = ${$ref} ? 0 : 1; - if (!$restore_sys && !$restore_user && !$restore_other) { $next_widget = \&message_norestore_box; } - elsif ($restore_sys && $backup_sys_versions) { $next_widget = \&restore_step_sys; } - elsif ($restore_user) { $next_widget = \&restore_step_user;} - elsif ($restore_other){ $next_widget = \&restore_step_other;} - else{ $next_widget = \&restore_do;} - }) - } - gtksignal_connect(gtkset_active($check_restore_other_path, $restore_other_path), toggled => sub { - $restore_other_path = $restore_other_path ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); - gtksignal_connect(gtkset_active($check_restore_other_src, $restore_other_src), toggled => sub { - $restore_other_src = $restore_other_src ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); - fonction_env(\$retore_step2, \&restore_step2, \&restore_box, "restore"); - if (!$restore_sys && !$restore_user && !$restore_other) { $next_widget = \&message_norestore_box; } - elsif ($restore_sys && $backup_sys_versions) { $next_widget = \&restore_step_sys; } - elsif ($restore_user) { $next_widget = \&restore_step_user;} - elsif ($restore_other){ $next_widget = \&restore_step_other;} - else{ $next_widget = \&restore_do;} - $restore_path_entry->set_text($restore_path); - $restore_path_entry->signal_connect( 'changed', sub { $restore_path = $restore_path_entry->get_text(); }); - $up_box->show_all(); -} - -sub restore_box { - my $retore_box; - my $retore_box3; - my $check_restore_sys; - my $check_restore_user; - my $check_restore_other; - $path_to_find_restore = $save_path; - find_backup_to_restore(); - button_box_restore_main(); - - if ($other_backuped || $sys_backuped || @user_backuped) { - gtkpack($advanced_box, - $retore_box = gtkpack_(new Gtk::HBox(0,1), - 1, new Gtk::VBox(0,10), - 1, gtkpack_(new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - 1, gtksignal_connect(new Gtk::Button(_("Restore all backups")), - clicked => sub { $retore_box->destroy(); - button_box_restore(); - @user_list_to_restore2 = sort @user_backuped; - $restore_sys = 1; - $restore_other = 1; - $restore_user = 1; - restore_do(); }), - 1, gtksignal_connect(new Gtk::Button(_("Custom Restore")), - clicked => sub { $retore_box->destroy(); - button_box_restore(); - restore_step2(); - }), - 1, new Gtk::VBox(0,10), - 1, new Gtk::VBox(0,10), - ), - 1, new Gtk::HBox(0,10), - ), - ); - } else { - gtkpack($advanced_box, - $retore_box = gtkpack_(new Gtk::HBox(0,1), - message_norestorefile_box(), - ), - ), - } - fonction_env(\$retore_box, \&restore_box, \&interactive_mode_box, "restore"); - $up_box->show_all(); -} - -################################################ BUTTON_BOX ################################################ - - - -# sub generic_button_box { -# # 1-n - [button name, fonctions associated] -# $button_box_tmp->destroy(); -# gtkpack($button_box, -# $button_box_tmp = gtkpack_(new Gtk::HButtonBox, -# 0, gtksignal_connect(new Gtk::Button($_->[0]), clicked => sub {$_->[1]}) foreach (@_), -# } ), ); -# } - -sub button_box_adv { - $button_box_tmp->destroy(); - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 0, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 0, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help ); }), - 1, new Gtk::HBox(0, 1), - 0, gtksignal_connect(new Gtk::Button(_("Previous")), clicked => sub { - ${$central_widget}->destroy(); $previous_widget->(); }), - 0, gtksignal_connect(new Gtk::Button(_("Save")), clicked => sub { - ${$central_widget}->destroy(); save_conf_file(); $previous_widget->(); }), - ), - ); -} - - -# sub button_box_adv { -# generic_button_box(["cancel", ${$central_widget}->destroy() ]); -# } - - - -sub button_box_restore_main { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(gtkpack_(new Gtk::HButtonBox, - 0, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 0, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); - adv_help(\&$current_widget, $custom_help); - }), - 1, new Gtk::HBox(0, 1), - 0, gtksignal_connect(new Gtk::Button(_("Previous")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 0, gtksignal_connect(new Gtk::Button(_("Ok")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - ), - ), - ); -} - -sub button_box_backup_end { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 0, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 0, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help ); }), - 1, new Gtk::HBox(0, 1), - 0, gtksignal_connect(new Gtk::Button(_("Previous")), clicked => sub { - ${$central_widget}->destroy(); $previous_widget->(); }), - 0, gtksignal_connect(new Gtk::Button(_("Build Backup")), clicked => sub { - ${$central_widget}->destroy(); - build_backup_status(); - build_backup_files(); - }), - ), - ); -} - -sub button_box_wizard_end { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 0, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 0, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help ); }), - 1, new Gtk::HBox(0, 1), - 0, gtksignal_connect(new Gtk::Button(_("Previous")), clicked => sub { - ${$central_widget}->destroy(); $previous_widget->(); }), - 0, gtksignal_connect(new Gtk::Button(_("Save")), clicked => sub { - ${$central_widget}->destroy(); save_conf_file(); interactive_mode_box(); }), - ), - ); -} - -sub button_box_restore_end { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 0, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 0, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help ); }), - 1, new Gtk::HBox(0, 1), - 0, gtksignal_connect(new Gtk::Button(_("Previous")), clicked => sub { - ${$central_widget}->destroy(); $previous_widget->(); }), - 0, gtksignal_connect(new Gtk::Button(_("Restore")), clicked => sub { - ${$central_widget}->destroy(); restore_backend(); }), - ), - ); -} - -sub button_box_build_backup_end { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 1, new Gtk::HBox(0, 5), - 1, new Gtk::HBox(0, 5), - 0, gtksignal_connect(new Gtk::Button(_("Ok")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - - ), - ); -} - -sub button_box_restore_pbs_end { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 1, new Gtk::HBox(0, 5), - 1, new Gtk::HBox(0, 5), - 1, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help); }), - 0, gtksignal_connect(new Gtk::Button(_("Ok")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - - ), - ); -} - -sub button_box_build_backup { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 1, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 1, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help); }), - 1, new Gtk::HBox(0, 0), - 0, gtksignal_connect(new Gtk::Button(_("Previous")), clicked => sub { - ${$central_widget}->destroy(); $previous_widget->(); }), - 1, gtksignal_connect(new Gtk::Button(_("Next")), clicked => sub { - ${$central_widget}->destroy(); $next_widget->(); - }), - ), - ); -} - -sub button_box_restore { - - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 1, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 1, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help); }), - 1, new Gtk::HBox(0, 0), - 0, gtksignal_connect(new Gtk::Button(_("Previous")), clicked => sub { - ${$central_widget}->destroy(); $previous_widget->(); }), - 1, gtksignal_connect(new Gtk::Button(_("Next")), clicked => sub { - ${$central_widget}->destroy(); $next_widget->(); - }), - ), - ); -} - -sub button_box_wizard { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack_(new Gtk::HButtonBox, - 1, gtksignal_connect(new Gtk::Button(_("Cancel")), clicked => sub { - ${$central_widget}->destroy(); interactive_mode_box(); }), - 1, gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&$current_widget,$custom_help); }), - 1, new Gtk::HBox(0, 0), - 0, gtksignal_connect(new Gtk::Button($next_widget ? _("Previous") : _("OK")), clicked => sub { - ${$central_widget}->destroy(); - $previous_widget ? $previous_widget->() : $next_widget->(); - }), - if_($next_widget, 1, gtksignal_connect(new Gtk::Button(_("Next")), clicked => sub { - ${$central_widget}->destroy(); - $next_widget ? $next_widget->() : $previous_widget->(); - })), - ), - ); -} - -sub button_box_main { - $button_box_tmp->destroy(); - - gtkpack($button_box, - $button_box_tmp = gtkpack(gtkset_layout(new Gtk::HButtonBox, -start), - gtksignal_connect(new Gtk::Button(_("Close")), clicked => sub { - Gtk->main_quit() }), - gtksignal_connect(new Gtk::Button(_("Help")), clicked => sub { - ${$central_widget}->destroy(); adv_help(\&interactive_mode_box,$custom_help) }), - ), - ); -} - -################################################ MESSAGES ################################################ - -sub message_norestorefile_box { - $box2->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack(new Gtk::HBox(0, 15), - new Gtk::VBox(0, 5), - new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - _("Please Build backup before to restore it...\n or verify that your path to save is correct."), - new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - button_box_restore_main(); - $central_widget = \$box2; - $up_box->show_all(); -} - -sub send_mail_pb { - $table->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0, 15), - 0, new Gtk::VBox(0, 5), - 0, new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - 0, _("Error durind sendmail - your report mail was not sent - Please configure sendmail"), - ), - 0, new Gtk::VBox(0, 5), - 1, new Gtk::VBox(0, 5), - ), - ); - button_box_restore_main(); - $custom_help = "mail_pb"; - $central_widget = \$box2; - $up_box->show_all(); -} - - - - -sub install_rpm { - my ($previous_function) = @_, - my $box_what_user; - - gtkpack($advanced_box, - $box_what_user = gtkpack_(new Gtk::VBox(0, 15), - 0, _("Package List to Install"), - 0, new Gtk::HSeparator, - 0, createScrolledWindow( - gtkpack__(new Gtk::VBox(0,0), - map { my $b = new Gtk::Button($_); } (@list_of_rpm_to_install) - ),), ), - ); - fonction_env(\$box_what_user, \&install_rpm, \&$previous_function, "what"); - $up_box->show_all(); -} - - - - - - - - -sub client_ftp_pb { - $table->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0, 15), - 0, new Gtk::VBox(0, 5), - 0, new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - 0, _("Error durind sending file via FTP. - Please correct your FTP configuration."), - ), - 0, new Gtk::VBox(0, 5), - 1, new Gtk::VBox(0, 5), - ), - ); - button_box_restore_main(); - $custom_help = "mail_pb"; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_norestore_box { - $box2->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack(new Gtk::HBox(0, 15), - new Gtk::VBox(0, 5), - new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - _("Please select data to restore..."), - new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - button_box_restore_main(); - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_noselect_box { - $box2->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack(new Gtk::HBox(0, 15), - new Gtk::VBox(0, 5), - new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - _("Please select media for backup..."), - new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $previous_widget = \&wizard_step2; - $next_widget = \&wizard_step2; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_noselect_what_box { - $box2->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack(new Gtk::HBox(0, 15), - new Gtk::VBox(0, 5), - new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - _("Please select data to backup..."), - new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $previous_widget = \&wizard; - $next_widget = \&wizard; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_noconf_box { - $box2->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack(new Gtk::HBox(0, 15), - new Gtk::VBox(0, 5), - new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - _("No configuration file found \nplease click Wizard or Advanced."), - new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - button_box_restore_main(); - $central_widget = \$box2; - $up_box->show_all(); -} - -sub message_underdevel { - $box2->destroy(); - my ($pix_warn_map, $pix_warn_mask) = gtkcreate_png('warning'); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack(new Gtk::HBox(0, 15), - new Gtk::VBox(0, 5), - new Gtk::Pixmap($pix_warn_map, $pix_warn_mask), - _("Under Devel ... please wait."), - new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - $central_widget = \$box2; - $up_box->show_all(); -} - -################################################ BUILD_BACKUP ################################################ - -sub progress { - my ($progressbar, $incr, $label_text) = @_; - my($new_val) = $progressbar->get_current_percentage; - $new_val += $incr; - if ($new_val > 1) {$new_val = 1} - $progressbar->update($new_val); - $progressbar->{label}->set($label_text); - Gtk->main_iteration while Gtk->events_pending; -} - -sub find_backup_to_put_on_cd { - my @list_backup_tmp; - my @data_backuped_tmp; - @data_backuped = (); - -d $save_path and my @list_backup = all($save_path); - foreach (grep /^backup_other/, @list_backup) { - $other_backuped = 1; - chomp; - my $tail = (split(' ',`du $save_path/$_` ))[0] ; - s/^backup_other//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my @user_date = split(/\_20/,$_ ); - my @user_date2 = split(/\_/,$user_date[1] ); - my $to_put = " other_data, (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])"; - push @data_backuped , $to_put; - } - foreach (grep /_sys_/, @list_backup) { - $sys_backuped = 1; - chomp; - my $tail = (split(' ',`du $save_path/$_` ))[0] ; - s/^backup_other//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my @user_date = split(/\_20/,$_ ); - my @user_date2 = split(/\_/,$user_date[1] ); - my $to_put = " system, (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])"; - push @data_backuped , $to_put; - } - foreach (grep /user_/, @list_backup) { - chomp; - my $tail = (split(' ',`du $save_path/$_` ))[0] ; - s/^backup_user_//gi; - s/.tar.gz$//gi; - s/.tar.bz2$//gi; - my @user_date = split(/\_20/,$_ ); - my @user_date2 = split(/\_/,$user_date[1] ); - my $to_put = " $user_date[0], (tail: $tail ko, date: 20$user_date2[0], hour: $user_date2[1])"; - push @data_backuped , $to_put; - } -} - -sub build_backup_status { - $pbar = new Gtk::ProgressBar; - $pbar1 = new Gtk::ProgressBar; - $pbar2 = new Gtk::ProgressBar; - $pbar3 = new Gtk::ProgressBar; - button_box_build_backup_end(); - gtkpack($advanced_box, - $table = create_packtable({ col_spacings => 10, row_spacings => 5}, - [""], - [""], - [""], - [""], - [""], - [""], - [""], - [""], - [_("Backup system files")], - [ $pbar, $pbar->{label} = new Gtk::Label(' ' )], - [_("Backup user files") ], - [$pbar1,$pbar1->{label} = new Gtk::Label(' ' ) ], - [_("Backup other files")], - [ $pbar2, $pbar2->{label} = new Gtk::Label(' ' ) ], - [_("Total Progress")], - [$pbar3,$pbar3->{label} = new Gtk::Label(' ' ) ], - ), - ); - $custom_help = "options"; - $central_widget = \$table; - $up_box->show_all(); - Gtk->main_iteration while Gtk->events_pending; -} - - -sub build_backup_ftp_status { - $pbar = new Gtk::ProgressBar; - $pbar3 = new Gtk::ProgressBar; - $table->destroy(); - button_box_build_backup_end(); - $pbar->set_value(0); - $pbar3->set_value(0); - - - gtkpack($advanced_box, - $table = gtkpack_(new Gtk::VBox(0, 15), - 1, _("files sending by FTP"), - 1, new Gtk::VBox(0, 15), - 1, create_packtable({ col_spacings => 10, row_spacings => 5}, -# [ $pbar->set_show_text( $show_text ); - [_("Sending files...")], - [""], - [ $pbar->{label} = new Gtk::Label(' ' )], - [ $pbar], - [""], - [_("Total Progress")], - [ $pbar3->{label} = new Gtk::Label(' ' ) ], - [$pbar3], - ), - 1, new Gtk::VBox(0, 15), - ), - ); - $custom_help = "options"; - $central_widget = \$table; - $up_box->show_all(); - Gtk->main_iteration while Gtk->events_pending; -} - - - -sub build_backup_box_see_conf { - my $box2; - my $text = new Gtk::Text(undef, undef); - system_state(); - gtktext_insert($text, $system_state); - button_box_restore_main(); - - gtkpack($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, gtkpack_(new Gtk::VBox(0,10), - 0, _("Drakbackup Configuration"), - 1, createScrolledWindow($text), - ), - ), - ); - button_box_backup_end(); - $custom_help = ""; - $central_widget = \$box2; - $current_widget = \&build_backup_box_see_conf; - $previous_widget =\&build_backup_box; - $up_box->show_all(); -} - -sub build_backup_box_progress { -# build_backup_files(); -} - -sub aff_total_tail { - my @toto = (); - my $total = 0; - push @toto, (split (",", $_))[1] foreach @list_to_build_on_cd; - foreach (@toto) { - s/\s+\(tail://gi; - s/\s+//gi; - s/ko//gi; - $total += $_; - } - $label_tail->set("total tail: $total ko"); -} - -my %check_data_to_backup_cd; -sub build_backup_cd_select_data { - my $retore_step_user; - find_backup_to_put_on_cd(); - @list_to_build_on_cd = sort @data_backuped; - @data_backuped = @list_to_build_on_cd; - - gtkpack($advanced_box, - $retore_step_user = gtkpack_(new Gtk::VBox(0,10), - 0, new Gtk::VBox(0,10), - 0, _("Data list to include on CDROM."), - 1, createScrolledWindow( gtkpack__(new Gtk::VBox(0,0), - map { my $name = $_; - my @user_list_tmp = (); - my $b = new Gtk::CheckButton($name); - if ( grep $name , @list_to_build_on_cd) { - gtkset_active($b, 1); - } else { - gtkset_active($b, 0); - } - $b->signal_connect(toggled => sub { - if (!$check_data_to_backup_cd{$name}[1] ) { - $check_data_to_backup_cd{$name}[1] = 1; - if (!grep ( /$name$/, @list_to_build_on_cd) ) { - push @list_to_build_on_cd, $name;} - } else { - $check_data_to_backup_cd{$name}[1] = 0; - foreach (@list_to_build_on_cd) { - if ($name ne $_) { - push @user_list_tmp, $_; - } - } - @list_to_build_on_cd = @user_list_tmp; - } - aff_total_tail(); - }); - $b } (@data_backuped) - ), - ), - 0, new Gtk::HSeparator, - 0, $label_tail = new Gtk::Label(" "), - 0, new Gtk::HSeparator, - ), - ); - aff_total_tail(); - fonction_env(\$retore_step_user, \&restore_step_user, \&build_backup_cd_box, "restore", \&build_backup_box_see_conf); - $up_box->show_all(); -} - -sub build_backup_cd_box { - my $box_build_backup_cd; - my $combo_where_cd_time = new Gtk::Combo(); - my $adj = new Gtk::Adjustment 4.0, 1.0, 10000.0, 1.0, 5.0, 0.0; - $combo_where_cd_time->set_popdown_strings ("650","700", "750", "800"); - - button_box_build_backup(); - gtkpack($advanced_box, - $box_build_backup_cd = gtkpack_(new Gtk::VBox(0, 6), - 0, my $check_where_cd = new Gtk::CheckButton( _("Use CD/DVDROM to backup")), - 0, new Gtk::HSeparator, - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please choose your CD space")), $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_usize(gtkset_sensitive($combo_where_cd_time, $where_cd), 100, 20), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter the cd writer speed")), $where_cd ), - 1, new Gtk::VBox(0, 6), - 0, gtkset_usize(gtkset_sensitive(my $spinner = new Gtk::SpinButton( $adj, 0, 0), $where_cd ), 100, 20), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please check if you are using CDRW media")), $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(my $check_cdrw = new Gtk::CheckButton(), $where_cd), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please check if you want to erase your CDRW before")), $cdrw && $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(my $check_cdrw_erase = new Gtk::CheckButton(), $cdrw && $where_cd), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please enter your CD Writer device name (ex: 0,1,0)")), $where_cd), - 1, new Gtk::VBox(0, 5), - 0, gtkset_usize(gtkset_sensitive($cd_devive_entry = new Gtk::Entry(), $where_cd), 100, 20), - ), - 0, new Gtk::VBox(0, 5), - 0, gtkpack_(new Gtk::HBox(0,10), - 0, gtkset_sensitive(new Gtk::Label(_("Please check if you want to include install boot on your CD.")), 0), - 1, new Gtk::VBox(0, 5), - 0, gtkset_sensitive(my $check_cd_with_install_boot = new Gtk::CheckButton(), 0), - ), - ), - ); - foreach ([$check_cdrw_erase, \$cdrw_erase], [$check_cd_with_install_boot, \$cd_with_install_boot ]) { - my $ref = $_->[1]; - gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { ${$ref} = ${$ref} ? 0 : 1; }) - } - gtksignal_connect(gtkset_active($check_where_cd, $where_cd), toggled => sub { - $where_cd = $where_cd ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - if($where_cd) { $next_widget = \&build_backup_cd_select_data;} - else { $next_widget = \&build_backup_cd_box;} - }); - gtksignal_connect(gtkset_active($check_cdrw, $cdrw), toggled => sub { - $cdrw = $cdrw ? 0 : 1; - ${$central_widget}->destroy(); - $current_widget->(); - }); - if($where_cd) { $next_widget = \&build_backup_cd_select_data;} - else { $next_widget = \&build_backup_cd_box;} - $cd_devive_entry->set_text( $cd_devive ); - $cd_devive_entry->signal_connect( 'changed', sub { $cd_devive = $cd_devive_entry->get_text(); }); - $combo_where_cd_time->entry->set_text($cd_time); - $combo_where_cd_time->entry->signal_connect( 'changed', sub { $cd_time = $combo_where_cd_time->entry->get_text()}); - fonction_env(\$box_build_backup_cd, \&build_backup_cd_box, \&build_backup_box, ""); - $up_box->show_all(); -} - -sub build_backup_box { - $box2->destroy(); - my ($pix_cd_map, $pix_cd_mask) = gtkcreate_png("ic82-CD-40"); - my ($pix_hd_map, $pix_hd_mask) = gtkcreate_png("ic82-discdurwhat-40"); - my ($pix_options_map, $pix_options_mask) = gtkcreate_png("ic82-moreoption-40"); - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtksignal_connect(my $button_from_conf_file = new Gtk::Button(), - clicked => sub { ${$central_widget}->destroy(); - build_backup_box_see_conf(); - }), - 0, new Gtk::VBox(0, 5), -# 1, gtksignal_connect(my $button_on_cd = new Gtk::Button(), -# clicked => sub { ${$central_widget}->destroy(); -# $where_cd = 1; -# build_backup_cd_box(); -# }), -# 0, new Gtk::VBox(0, 5), - 1, gtksignal_connect(my $button_see_conf = new Gtk::Button(), - clicked => sub { ${$central_widget}->destroy(); - build_backup_box_see_conf(); - }), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - - $button_from_conf_file->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_hd_map, $pix_hd_mask), - new Gtk::Label(_("Backup Now from configuration file")), - new Gtk::HBox(0, 5) - )); -# $button_on_cd->add(gtkpack(new Gtk::HBox(0,10), -# new Gtk::Pixmap($pix_cd_map, $pix_cd_mask), -# new Gtk::Label(_("Backup Now on CDROM")), -# new Gtk::HBox(0, 5) -# )); - $button_see_conf->add(gtkpack(new Gtk::HBox(0,10), - new Gtk::Pixmap($pix_options_map, $pix_options_mask), - new Gtk::Label(_("View Backup Configuration.")), - new Gtk::HBox(0, 5) - )); - - - button_box_restore_main(); - fonction_env(\$box2, \&build_backup_box, \&interactive_mode_box, "options"); - $up_box->show_all(); -} - -################################################ INTERACTIVE ################################################ - -sub interactive_mode_box { - $box2->destroy(); - - read_conf_file(); - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk::HBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtkpack_(new Gtk::VBox(0, 15), - 1, new Gtk::VBox(0, 5), - 1, gtksignal_connect(new Gtk::Button(_("Wizard Configuration")), - clicked => sub { ${$central_widget}->destroy(); - read_conf_file(); - wizard(); }), - 1, gtksignal_connect(new Gtk::Button(_("Advanced Configuration")), - clicked => sub { button_box_adv(); - ${$central_widget}->destroy(); - advanced_box(); }), - 1, gtksignal_connect(new Gtk::Button(_("Backup Now")), - clicked => sub { ${$central_widget}->destroy(); - if ($cfg_file_exist) { build_backup_box();} - else { message_noconf_box();} - }), - 1, gtksignal_connect(new Gtk::Button(_("Restore")), - clicked => sub {${$central_widget}->destroy(); restore_box();}), - 1, new Gtk::VBox(0, 5), - ), - 1, new Gtk::VBox(0, 5), - ), - ); - button_box_main(); - $custom_help = "main"; - $central_widget = \$box2; - $up_box->show_all(); -} - -sub interactive_mode { - $interactive = 1; - my $box; - my $window1 = $::isEmbedded ? new Gtk::Plug ($::XID) : new Gtk::Window -toplevel; - init Gtk; - $window1->signal_connect (delete_event => sub { Gtk->exit(0) }); - $window1->set_position(1); - $window1->set_title(_("Drakbackup")); - my ($pix_u_map, $pix_u_mask) = gtkcreate_png("drakbackup.540x57"); - read_conf_file(); - - gtkadd($window1, - gtkpack(new Gtk::VBox(0,0), - gtkpack(gtkset_usize($up_box = new Gtk::VBox(0, 5), 540, 400), - $box = gtkpack_(new Gtk::VBox(0, 3), - 0, new Gtk::Pixmap($pix_u_map, $pix_u_mask), - 1, gtkpack_(new Gtk::HBox(0, 3), - 1, gtkpack_(new Gtk::HBox(0, 15), - 0, new Gtk::HBox(0, 5), - 1, $advanced_box = gtkpack_(new Gtk::HBox(0, 15), - 1, $box2 = gtkpack_(new Gtk::VBox(0, 15), - ), - ), - 0, new Gtk::HBox(0, 5), - ), - ), - 0, new Gtk::HSeparator, - 0, $button_box = gtkpack(new Gtk::VBox(0, 15), - $button_box_tmp = gtkpack(new Gtk::VBox(0, 0), - ), - ), - ), - ), - ), - ); - interactive_mode_box(); - $custom_help = "main"; - button_box_main(); - $central_widget = \$box2; - $window1->show_all; - $window1->realize; - $window1->show_all(); - Gtk->main; - Gtk->exit(0); -} - -################################################ HELP & ABOUT ################################################ - - -sub adv_help { - my ($function, $custom_help) = @_, - my $text = new Gtk::Text(undef, undef); - my $advanced_box_help; - -################################################ help definition ############################################## - - my %custom_helps = ( - "options" => - _("options description: - - In this step Drakbackup allow you to change: - - - The compression mode: - - If you check bzip2 compression, you will compress - your data better than gzip (about 2-10 %). - This option is not checked by default because - this compression mode needs more time ( about 1000% more). - - - The update mode: - - This option will update your backup, but this - option is not really useful because you need to - decompress your backup before you can update it. - - - the .backupignore mode: - - Like with cvs, Drakbackup will ignore all references - included in .backupignore files in each directories. - ex: - #> cat .backupignore - *.o - *~ - ... - - -"), - "mail_pb" => - _(" - Some errors during sendmail are caused by - a bad configuration of postfix. To solve it you have to - set myhostname or mydomain in /etc/postfix/main.cf - -"), - - "what" => - _("options description: - - - Backup system files: - - This option allows you to backup your /etc directory, - which contains all configuration files. Please be - careful during the restore step to not overwrite: - /etc/passwd - /etc/group - /etc/fstab - - - Backup User files: - - This option allows you select all users that you want - to backup. - To preserve disk space, it is recommended that you - do not include web browser's cache. - - - Backup Other files: - - This option allows you to add more data to save. - With the other backup it's not possible at the - moment to select select incremental backup. - - - Incremental Backups: - - The incremental backup is the most powerful - option for backup. This option allows you - to backup all your data the first time, and - only the changed afterward. - Then you will be able, during the restore - step, to restore your data from a specified - date. - If you have not selected this option all - old backups are deleted before each backup. - - -"), - "restore" => - _("restore description: - -Only the most recent date will be used ,because with incremental -backups it is necesarry to restore one by one each older backups. - -So if you don't like to restore an user please unselect all his -check box. - -Otherwise, you are able to select only one of this - - - Incremental Backups: - - The incremental backup is the most powerfull - option to use backup, this option allow you - to backup all your data the first time, and - only the changed after. - So you will be able during the restore - step, to restore your data from a specified - date. - If you have not selected this options all - old backups are deleted before each backup. - - - -"), - "main" => - _(" Copyright (C) 2001 MandrakeSoft by DUPONT Sebastien <dupont_s\@epita.fr>") . -"\n\n" . -_(" 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, 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.") . -"\n\n _____________________\n" . -_("Description: - - Drakbackup is used to backup your system. - During the configuration you can select: - - System files, - - Users files, - - Other files. - or All your system ... and Other (like Windows Partitions) - - Drakbackup allows you to backup your system on: - - Harddrive. - - NFS. - - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.). - - FTP. - - Rsync. - - Webdav. - - Tape. - - Drakbackup allows you to restore your system to - a user selected directory. - - Per default all backup will be stored on your - /var/lib/drakbackup directory - - Configuration file: - /etc/drakconf/drakbackup/drakbakup.conf - - -Restore Step: - - During the restore step, DrakBackup will remove - your original directory and verify that all - backup files are not corrupted. It is recommended - you do a last backup before restoring. - - -"), - "ftp" => - _("options description: - -Please be careful when you are using ftp backup, because only -backups that are already built are sent to the server. -So at the moment, you need to build the backup on your hard -drive before sending it to the server. - -"), - "restore_pbs" => - _(" -Restore Backup Problems: - -During the restore step, Drakbackup will verify all your -backup files before restoring them. -Before the restore, Drakbackup will remove -your original directory, and you will loose all your -data. It is important to be careful and not modify the -backup data files by hand. -") -); - - my $default_help = _(" Copyright (C) 2001 MandrakeSoft by DUPONT Sebastien <dupont_s\@epita.fr>") . -"\n\n" . -_(" 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, 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.") . -"\n\n _____________________\n" . -_("Description: - - Drakbackup is used to backup your system. - During the configuration you can select - - System files, - - Users files, - - Other files. - or All your system ... and Other (like Windows Partitions) - - Drakbackup allows you to backup your system on: - - Harddrive. - - NFS. - - CDROM (CDRW), DVDROM (with autoboot, rescue and autoinstall.). - - FTP. - - Rsync. - - Webdav. - - Tape. - - Drakbackup allows you to restore your system to - a user selected directory. - - Per default all backup will be stored on your - /var/lib/drakbackup directory - - Configuration file: - /etc/drakconf/drakbackup/drakbakup.conf - -Restore Step: - - During the restore step, Drakbackup will remove - your original directory and verify that all - backup files are not corrupted. It is recommended - you do a last backup before restoring. - - -"); - -################################################ help fonction ############################################## - - gtktext_insert($text, $custom_helps{$custom_help} || $default_help); - gtkpack($advanced_box, - $advanced_box_help = gtkpack_(new Gtk::VBox(0,10), - 1, gtkpack_(new Gtk::HBox(0,0), - 1, $text, - 0, new Gtk::VScrollbar($text->vadj), - ), - 0, gtkadd(gtkset_layout(new Gtk::HButtonBox, -spread), - gtksignal_connect(new Gtk::Button(_("OK")), clicked => sub { - ${$central_widget}->destroy(); $function->();}), - ), - ) - ); - $central_widget = \$advanced_box_help; - $up_box->show_all(); -} - -sub to_ok { - $sav_next_widget = $next_widget; - $next_widget = undef; - button_box_wizard(); -} - -sub to_normal { - $next_widget = $sav_next_widget; -} |