diff options
Diffstat (limited to 'perl-install/standalone/drakbackup')
-rwxr-xr-x | perl-install/standalone/drakbackup | 688 |
1 files changed, 183 insertions, 505 deletions
diff --git a/perl-install/standalone/drakbackup b/perl-install/standalone/drakbackup index e11ea92c9..3c2a40e5b 100755 --- a/perl-install/standalone/drakbackup +++ b/perl-install/standalone/drakbackup @@ -18,105 +18,6 @@ # 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. -# - CD-R (CDRW), DVD-R (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/drakbackup.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.* -# -# all backup runs will generate: -# -# drakbackup_date_hour.txt -# -# this will contain media & hostname -#________________________________________________________________ -# -# REQUIRE: cron if daemon -# cdrecord & mkisofs -# perl Net::FTP -# ssh-askpass -# sitecopy - for webdav -# rsync -# perl Expect - -# BUGS: -#DONE restore->other_media->next->previous => crash ... -#DONE selection des sources a inclure dans le backup cd. -#DONE help -> ok after install_rpm -# sort of fixed - doesn't always land where you would expect -# but at least it doesn't die -# -# TODO: -# 1 - print ftp problem for user. -# 2 - calcul disk space. -# use quota. -#WHY? - Apple can read Joliet - would you really be restoring on MacOS? -#Or for bootable - PPC is being deprecated anyway ;( -# 4 - write on cd --> ! change Joliet to HFS for Apple -# 6 - total backup.( all partitions wanted, windows partitions for example!) -# dump use for total backup. -# 7 - custom deamon -# 10- backend: --resore_all, --restore_sys, --restore_users -#WHAT IS THIS? -# --build_cd_autoinst -# 12- cpio use !! -# 13- boot floppy disk (with dialog) -# 14- build autoboot with backup and install cd -#DONE 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 lib qw(/usr/lib/libDrakX); use standalone; #- warning, standalone must be loaded very first, for 'explanations' @@ -171,9 +72,6 @@ my $stext; my $list_model; 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; @@ -262,6 +160,7 @@ my $good_restore_path = 1; my $max_space = 1000.0; my @no_devices = translate(N_("No devices found")); my %help; +my %conf; my $time_string = "* * * * *"; my $exec_string = "export USER=$ENV{USER}; /usr/sbin/drakbackup --daemon > /dev/null 2>&1"; @@ -749,6 +648,8 @@ sub save_cron_files() { sub read_conf_file() { if (-e $cfg_file) { + #- FIXME - better method, per Thierry, still needs to be finished up + %conf = getVarsFromSh($cfg_file); local *CONF_FILE; open(CONF_FILE, "<" . $cfg_file) || print "You must be root to read configuration file. \n"; local $_; @@ -861,11 +762,11 @@ my $in; sub show_warning { my ($mode, $warning) = @_; - $mode = N("WARNING") if $mode eq "w"; - $mode = N("FATAL") if $mode eq "f"; - $mode = N("INFO") if $mode eq "i"; + $mode = N("Warning") if $mode eq "w"; + $mode = N("Error") if $mode eq "f"; + $mode = N("Information") if $mode eq "i"; if ($interactive) { - $in->ask_warn('', translate($mode).": ".translate($warning)); + $in->ask_warn($mode, translate($warning)); } else { warn "$mode: $warning\n"; } @@ -959,7 +860,7 @@ sub do_expect { $exp_command = "ssh-copy-id -i $_ $login_user\@$host_name" if $mode eq "sendkey"; if (-e $backup_key && $mode eq "sendkey") { - if ($in->ask_yesorno('', N("%s exists, delete?\n\nWarning: If you've already done this process you'll probably\n need to purge the entry from authorized_keys on the server.", $backup_key))) { + if ($in->ask_yesorno(N("Warning"), N("%s exists, delete?\n\nIf you've already done this process you'll probably\n need to purge the entry from authorized_keys on the server.", $backup_key))) { unlink($backup_key); unlink($backup_key . '.pub'); } else { @@ -968,14 +869,14 @@ sub do_expect { } if (!(-e $backup_key) && $mode eq "sendkey") { - $in->ask_warn('', N("This may take a moment to generate the keys.")); + $in->ask_warn(N("Information"), N("This may take a moment to generate the keys.")); cursor_wait(); #- not using a passphrase for the moment system("ssh-keygen -P '' -t dsa -f $backup_key"); cursor_norm(); } - my $exp = Expect->spawn($exp_command) or $in->ask_warn('', N("ERROR: Cannot spawn %s.", $exp_command)); + my $exp = Expect->spawn($exp_command) or $in->ask_warn(N("Error"), N("Cannot spawn %s.", $exp_command)); $interactive and progress($pbar3, $plabel3, 1/@send_files, N("Total progress")); $interactive and $stext->set_text($_); @@ -1002,7 +903,7 @@ sub do_expect { ); my $exit_stat = $exp->exitstatus; - $in->ask_warn('', N("Transfer successful\nYou may want to verify you can login to the server with:\n\nssh -i %s %s\@%s\n\nwithout being prompted for a password.", $backup_key, $login_user, $host_name)) if $exit_stat == 0 && $mode eq "sendkey"; + $in->ask_warn(N("Information"), N("Transfer successful\nYou may want to verify you can login to the server with:\n\nssh -i %s %s\@%s\n\nwithout being prompted for a password.", $backup_key, $login_user, $host_name)) if $exit_stat == 0 && $mode eq "sendkey"; $log_buff .= "$_\n" if $exit_stat == 0 && $mode eq "backup"; $exp->hard_close; } @@ -1121,7 +1022,7 @@ sub write_on_cd() { sub erase_cdrw() { #- we can only hit this via interactive $interactive = 0; - $in->ask_warn('', N("This may take a moment to erase the media.")); + $in->ask_warn(N("Information"), N("This may take a moment to erase the media.")); cursor_wait(); my $command = "cdrecord dev=$cd_device -blank=fast"; spawn_progress($command, "Erasing CDRW..."); @@ -1572,7 +1473,7 @@ sub build_backup_files() { $interactive and build_backup_ftp_status(); if (ftp_client()) { $results .= N("\n FTP connection problem: It was not possible to send your backup files by FTP.\n"); - $interactive and client_ftp_pb(); + $interactive and $in->ask_warn(N("Error"), N("Error during sending file via FTP. Please correct your FTP configuration.")); } } @@ -1603,7 +1504,7 @@ sub build_backup_files() { if ($send_mail) { if (send_mail($results)) { - $interactive and send_mail_pb(); + $interactive and $in->ask_warn(N("Error"), N("Error during sendmail. Your report mail was not sent. Please configure sendmail")); $interactive or print N(" Error while sending mail. \n"); } } @@ -1965,29 +1866,33 @@ sub advanced_what_entire_sys() { my $box_what; gtkpack($advanced_box, - $box_what = gtkpack_(new Gtk2::HBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtkpack_(new Gtk2::VBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtksignal_connect(my $button_what_other = Gtk2::Button->new, - clicked => sub { destroy_widget(); message_underdevel() }), - 1, gtksignal_connect(my $button_what_all = Gtk2::Button->new, - clicked => sub { destroy_widget(); message_underdevel() }), - 1, new Gtk2::VBox(0, 5), - ), - 1, new Gtk2::VBox(0, 5), - ), - ); + $box_what = gtkpack_(new Gtk2::HBox(0, 15), + 1, new Gtk2::VBox(0, 5), + 1, gtkpack_(new Gtk2::VBox(0, 15), + 1, new Gtk2::VBox(0, 5), + 1, gtksignal_connect(my $button_what_other = Gtk2::Button->new, clicked => sub { + destroy_widget(); + $in->ask_warn(N("Information"), N("Under Devel ... please wait.")); + }), + 1, gtksignal_connect(my $button_what_all = Gtk2::Button->new, clicked => sub { + destroy_widget(); + $in->ask_warn(N("Information"), N("Under Devel ... please wait.")); + }), + 1, new Gtk2::VBox(0, 5), + ), + 1, new Gtk2::VBox(0, 5), + ), + ); $button_what_other->add(gtkpack(new Gtk2::HBox(0,10), - gtkcreate_img("bootloader"), - new Gtk2::Label(N("Linux")), - new Gtk2::HBox(0, 5) - )); + gtkcreate_img("bootloader"), + new Gtk2::Label(N("Linux")), + new Gtk2::HBox(0, 5) + )); $button_what_all->add(gtkpack(new Gtk2::HBox(0,10), - gtkcreate_img("user"), - new Gtk2::Label(N("Windows (FAT32)")), - new Gtk2::HBox(0, 5) - )); + gtkcreate_img("user"), + new Gtk2::Label(N("Windows (FAT32)")), + new Gtk2::HBox(0, 5) + )); fonction_env(\$box_what, \&advanced_what_entire_sys, \&advanced_what); $up_box->show_all; } @@ -1999,41 +1904,33 @@ sub advanced_what() { $box_what = gtkpack_(new Gtk2::HBox(0, 15), 1, new Gtk2::VBox(0, 5), 1, gtkpack_(new Gtk2::VBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtksignal_connect(my $button_what_sys = Gtk2::Button->new, - clicked => sub { $box_what->destroy; advanced_what_sys() }), - 1, gtksignal_connect(my $button_what_user = Gtk2::Button->new, - clicked => sub { destroy_widget(); advanced_what_user() }), - 1, gtksignal_connect(my $button_what_other = Gtk2::Button->new, - clicked => sub { destroy_widget(); advanced_what_other() }), -# 1, gtksignal_connect(my $button_what_all = Gtk2::Button->new, -# clicked => sub { destroy_widget(); advanced_what_entire_sys(); }), - 1, new Gtk2::VBox(0, 5), - ), - 1, new Gtk2::VBox(0, 5), - ), - ); + 1, new Gtk2::VBox(0, 5), + 1, gtksignal_connect(my $button_what_sys = Gtk2::Button->new, + clicked => sub { $box_what->destroy; advanced_what_sys() }), + 1, gtksignal_connect(my $button_what_user = Gtk2::Button->new, + clicked => sub { destroy_widget(); advanced_what_user() }), + 1, gtksignal_connect(my $button_what_other = Gtk2::Button->new, + clicked => sub { destroy_widget(); advanced_what_other() }), + 1, new Gtk2::VBox(0, 5), + ), + 1, new Gtk2::VBox(0, 5), + ), + ); $button_what_sys->add(gtkpack(new Gtk2::HBox(0,10), - gtkcreate_img("ic82-system-40"), - new Gtk2::Label(N("System")), - new Gtk2::HBox(0, 5) - )); + gtkcreate_img("ic82-system-40"), + new Gtk2::Label(N("System")), + new Gtk2::HBox(0, 5) + )); $button_what_user->add(gtkpack(new Gtk2::HBox(0,10), - gtkcreate_img("ic82-users-40"), - new Gtk2::Label(N("Users")), - new Gtk2::HBox(0, 5) - )); + gtkcreate_img("ic82-users-40"), + new Gtk2::Label(N("Users")), + new Gtk2::HBox(0, 5) + )); $button_what_other->add(gtkpack(new Gtk2::HBox(0,10), - gtkcreate_img("ic82-others-40"), - new Gtk2::Label(N("Other")), - new Gtk2::HBox(0, 5) - )); -# $button_what_all->add(gtkpack(new Gtk2::HBox(0,10), -# gtkcreate_img("ic82-systemeplus-40"), -# new Gtk2::Label(N("An Entire System")), -# new Gtk2::HBox(0, 5) -# )); - + gtkcreate_img("ic82-others-40"), + new Gtk2::Label(N("Other")), + new Gtk2::HBox(0, 5) + )); fonction_env(\$box_what, \&advanced_what, \&advanced_box); $up_box->show_all; } @@ -2088,7 +1985,7 @@ sub advanced_where_net_types { if ($passwd_user && $login_user && $host_name) { do_expect("sendkey"); } else { - $in->ask_warn('', N("Need hostname, username and password!")); + $in->ask_warn(N("Error"), N("Need hostname, username and password!")); } }); $passwd_user_entry->set_visibility(0); @@ -2226,13 +2123,6 @@ sub advanced_where_cd { 0, gtkset_sensitive(new Gtk2::Label(N("DVDRAM device")), $where_cd), 0, gtkset_sensitive(my $check_dvdram = new Gtk2::CheckButton(), $where_cd), ), -# don't know what this is about - hold off for now (SB) -# 0, new Gtk2::VBox(0, 5), -# 0, gtkpack_(new Gtk2::HBox(0,10), -# 0, gtkset_sensitive(new Gtk2::Label(N("Please check if you want to include\n install boot on your CD.")), $where_cd), -# 1, new Gtk2::VBox(0, 5), -# 0, gtkset_sensitive(my $check_cd_with_install_boot = new Gtk2::CheckButton(), $where_cd), -# ), 0, new Gtk2::VBox(0, 5), 0, gtkpack_(new Gtk2::HBox(0,10), 0, gtkset_sensitive(new Gtk2::Label(N("Enter your CD Writer device name\n ex: 0,1,0")), $where_cd), @@ -2267,7 +2157,7 @@ sub advanced_where_cd { if ($cd_device) { erase_cdrw(); } else { - $in->ask_warn('', N("No CD device defined!")); + $in->ask_warn(N("Error"), N("No CD device defined!")); } }); $combo_where_cdrecord_device->entry->set_text($cd_device); @@ -2276,11 +2166,6 @@ sub advanced_where_cd { $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 }); - #- this one drives changes in the other entries - #- still not getting quite the desired behavior, but combo box signals seem to be limited - #- tried to trigger from the selection, but it either does nothing or crashes! - -#- $combo_where_cd_device->entry->set_text($std_device); $combo_where_cd_device->entry->signal_connect('activate', sub { $std_device = $combo_where_cd_device->entry->get_text; $combo_where_cdrecord_device->entry->set_text($cd_devices{$std_device}{rec_dev}); @@ -2326,7 +2211,6 @@ sub advanced_where_tape { 0, gtkpack_(new Gtk2::HBox(0,10), 0, gtkset_sensitive(new Gtk2::Label(N("Device name to use for backup")), $where_tape), 1, new Gtk2::VBox(0, 6), - #0, gtkset_sensitive(gtkset_size_request($combo_where_tape_device, 200, 20), $where_tape), 0, gtkset_sensitive($combo_where_tape_device, $where_tape), ), @@ -2349,12 +2233,6 @@ sub advanced_where_tape { 0, gtkset_sensitive(my $check_tape_eject = new Gtk2::CheckButton(), $where_tape), ), 0, new Gtk2::VBox(0, 6), -# not appropriate - disable -# 0, gtkpack_(new Gtk2::HBox(0,10), -# 0, gtkset_sensitive(new Gtk2::Label(N("Please enter the maximum size\n allowed for Drakbackup (MB)")), $where_tape), -# 1, new Gtk2::VBox(0, 6), -# 0, gtkset_size_request(gtkset_sensitive($spinner = new Gtk2::SpinButton($adj, 0, 0), $where_tape), 200, 20), -# ), 0, gtkpack_(new Gtk2::HBox(0,10),), ), ); @@ -2416,8 +2294,6 @@ sub advanced_where_hd { gtkpack($advanced_box, $box_where_hd = gtkpack_(new Gtk2::VBox(0, 6), 0, new Gtk2::HSeparator, -# 0, my $check_where_hd = new Gtk2::CheckButton( N("Use Hard Disk to backup")), -# 0, new Gtk2::HSeparator, 0, gtkpack_(new Gtk2::HBox(0,10), 0, gtkset_sensitive(new Gtk2::Label(N("Enter the directory to save to:")), $where_hd), 1, new Gtk2::VBox(0, 6), @@ -2432,36 +2308,25 @@ sub advanced_where_hd { 1, new Gtk2::VBox(0, 6), 0, gtkset_size_request(gtkset_sensitive($spinner = new Gtk2::SpinButton($adj, 0, 0), $where_hd), 200, 20), ), -# just disable for now - doesn't do anything anyway (sb) -# 0, gtkpack_(new Gtk2::HBox(0,10), -# 1, new Gtk2::VBox(0, 6), -# 0, gtkset_sensitive(my $check_where_hd_quota = new Gtk2::CheckButton(N("Use quota for backup files.")), $where_hd), -# 0, new Gtk2::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 }) -# } $button->add(gtkpack(new Gtk2::HBox(0,10), gtkcreate_img("ic82-dossier-32"))); $save_path_entry->set_text($save_path); $spinner->signal_connect('changed', sub { $max_space = $spinner->get_text }); - $save_path_entry->signal_connect('changed', - sub { - $save_path = $save_path_entry->get_text; - if (-d $save_path) { - $max_space = int(0.8 * get_free_space($save_path)); - # seems to be the easiest way to avoid the widgets fighting over values - # and getting grabage in $max_value - destroy_widget(); - if ($previous_function) { - advanced_where_hd(\&$previous_function); - } else { - advanced_where_hd(); - } + $save_path_entry->signal_connect('changed', sub { + $save_path = $save_path_entry->get_text; + if (-d $save_path) { + $max_space = int(0.8 * get_free_space($save_path)); + # seems to be the easiest way to avoid the widgets fighting over values + # and getting garbage in $max_value + destroy_widget(); + if ($previous_function) { + advanced_where_hd(\&$previous_function); + } else { + advanced_where_hd(); } - }); + } + }); if ($previous_function) { fonction_env(\$box_where_hd, \&advanced_where_hd, \&$previous_function); } else { @@ -2474,35 +2339,36 @@ sub advanced_where() { my $box_where; gtkpack($advanced_box, - $box_where = gtkpack_(new Gtk2::HBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtkpack_(new Gtk2::VBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtksignal_connect(my $button_where_net = Gtk2::Button->new, clicked => sub { - destroy_widget(); - advanced_where_net_types(); - }), - 1, gtksignal_connect(my $button_where_cd = Gtk2::Button->new, clicked => sub { - destroy_widget(); - if (require_rpm("mkisofs", "cdrecord")) { - advanced_where_cd(); - } else { - destroy_widget(); - install_rpm(\&advanced_where); - } - }), - 1, gtksignal_connect(my $button_where_hd = Gtk2::Button->new, clicked => sub { - destroy_widget(); - advanced_where_hd(); - }), - 1, gtksignal_connect(my $button_where_tape = Gtk2::Button->new, clicked => sub { - destroy_widget(); - advanced_where_tape() }), - 1, new Gtk2::VBox(0, 5), - ), - 1, new Gtk2::VBox(0, 5), - ), - ); + $box_where = gtkpack_(new Gtk2::HBox(0, 15), + 1, new Gtk2::VBox(0, 5), + 1, gtkpack_(new Gtk2::VBox(0, 15), + 1, new Gtk2::VBox(0, 5), + 1, gtksignal_connect(my $button_where_net = Gtk2::Button->new, clicked => sub { + destroy_widget(); + advanced_where_net_types(); + }), + 1, gtksignal_connect(my $button_where_cd = Gtk2::Button->new, clicked => sub { + destroy_widget(); + if (require_rpm("mkisofs", "cdrecord")) { + advanced_where_cd(); + } else { + destroy_widget(); + install_rpm(\&advanced_where); + } + }), + 1, gtksignal_connect(my $button_where_hd = Gtk2::Button->new, clicked => sub { + destroy_widget(); + advanced_where_hd(); + }), + 1, gtksignal_connect(my $button_where_tape = Gtk2::Button->new, clicked => sub { + destroy_widget(); + advanced_where_tape() + }), + 1, new Gtk2::VBox(0, 5), + ), + 1, new Gtk2::VBox(0, 5), + ), + ); $button_where_net->add(gtkpack(new Gtk2::HBox(0,10), gtkcreate_img("ic82-network-40"), new Gtk2::Label(N("Network")), @@ -2578,7 +2444,6 @@ sub advanced_when() { } else { $combo_weekday_when->entry->set_text($weekdays[$time_list[4] + 1]); } -# my $button_apply = new Gtk2::Button(N("Apply")); #- drop down list of possible media - default to config value my $entry_media_type = new Gtk2::OptionMenu(); @@ -2625,10 +2490,6 @@ sub advanced_when() { 0, gtkset_sensitive(new Gtk2::Label(N("Weekday")), $allow_custom), 0, gtkset_sensitive($combo_weekday_when, $allow_custom), ), -# 1,gtkpack_(new Gtk2::VBox(0,10), -# 0, new Gtk2::HBox(0,10), -# 0, gtkset_sensitive($button_apply, $allow_custom), -# ), ), 0, new Gtk2::HSeparator, 0, gtkpack_(new Gtk2::HBox(0,10), @@ -2687,23 +2548,13 @@ sub advanced_options() { gtkpack($advanced_box, $box_options = gtkpack_(new Gtk2::VBox(0, 15), -# 0, gtkpack_(new Gtk2::HBox(0,10), -# 1, new Gtk2::VBox(0,10), -# 1, gtkcreate_img("ic82-moreoption-40"), -# 1, N("Please choose correct options to backup."), -# 1, new Gtk2::VBox(0,10), -# ), -# 0, new Gtk2::HSeparator, -# 0, gtkpack_(new Gtk2::VBox(0,10), 0, my $check_tar_bz2 = new Gtk2::CheckButton(N("Use tar and bzip2 (rather than tar and gzip)")), 0, my $check_backupignore = new Gtk2::CheckButton(N("Use .backupignore files")), -# 0, new Gtk2::VBox(0,10), 0, gtkpack_(new Gtk2::HBox(0,10), 0, my $check_mail = new Gtk2::CheckButton(N("Send mail report after each backup to:")), 1, new Gtk2::HBox(0,10), 0, my $mail_entry = new Gtk2::Entry(), ), -# ), 0, gtkpack_(new Gtk2::HBox(0,10), 0, my $check_del_hd_files = new Gtk2::CheckButton(N("Delete Hard Drive tar files after backup to other media.")), ), @@ -2859,8 +2710,12 @@ sub wizard_step2() { gtksignal_connect(gtkset_active($check_wizard_hd, $where_hd), toggled => sub { refresh_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) } + if (!$where_hd && !$where_cd && !$where_net) { + $in->ask_warn(N("Error"), N("Please select media for backup...")); + fonction_env(\$box2, \&wizard_step2, \&wizard, \&wizard_step2); + } else { + fonction_env(\$box2, \&wizard_step2, \&wizard, \&wizard_step3); + } button_box_wizard(); $up_box->show_all; } @@ -2868,7 +2723,7 @@ sub wizard_step2() { sub refresh_wizard_step2() { $where_hd = 1; if (!$where_hd && !$where_cd && !$where_net) { - $next_widget = \&message_noselect_box + $next_widget = \&wizard_step2 } else { $next_widget = \&wizard_step3 } @@ -2911,7 +2766,7 @@ sub wizard() { if ($backup_sys || $backup_user && @user_list) { $next_widget = \&wizard_step2; } else { - $next_widget = \&message_noselect_what_box; + $next_widget = \&wizard; } if ($backup_user) { @user_list = @user_list_all; @@ -2920,8 +2775,12 @@ sub wizard() { } }) } - 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) } + if ($backup_sys || $backup_user && @user_list) { + fonction_env(\$box2, \&wizard, \&interactive_mode_box, \&wizard_step2); + } else { + $in->ask_warn(N("Error"), N("Please select data to backup...")); + fonction_env(\$box2, \&wizard, \&interactive_mode_box, \&wizard); + } button_box_wizard(); $up_box->show_all; } @@ -2971,7 +2830,6 @@ sub find_backup_to_restore() { 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; any { /^$nom$/ } @user_list_backuped or push @user_list_backuped, $nom; @@ -2979,7 +2837,6 @@ sub find_backup_to_restore() { } sub system_state() { -# $system_state; if ($cfg_file_exist) { $system_state = N("\nBackup Sources: \n"); @@ -3135,12 +2992,8 @@ sub show_backup_details { my ($function, $mode, $name) = @_; my $archive_file_detail; my $value; -# dies in gtk2 -# my $fixed_font = Gtk2::Gdk::Font->load("-misc-fixed-medium-r-*-*-*-100-*-*-*-*-*-*"); my $command2; my $tarfile; - - # FIXME - only tar.gz at the moment my $extension = ".tar.gz"; if ($mode eq "user") { @@ -3155,7 +3008,7 @@ sub show_backup_details { my $command1 = "stat " . $tarfile; $command2 = "tar -tzvf " . $tarfile; - local *TMP; + local *TMP; open TMP, "$command1 2>&1 |"; while ($value = <TMP>) { $archive_file_detail .= $value; @@ -3383,6 +3236,7 @@ sub restore_step_other() { } my %check_user_to_restore; + sub restore_step_user() { my $retore_step_user; my @tmp_list = sort @user_backuped; @@ -3405,18 +3259,6 @@ sub restore_step_user() { $restore_row->pack_end(new Gtk2::VBox(1,5), 0, 0, 0); $restore_row->pack_end($details, 0, 0, 0); -# this doesn't work - I don't understand why - but you end up with -# everything selected when you hit the screen a second time, after selecting one -# 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; -# } - -# this doesn't work right either - returning to the screen only 1 is selected -# yet several are scheduled to be restored foreach (@user_list_to_restore2) { if ($name_complet eq $_) { gtkset_active($b, 1); @@ -3444,8 +3286,6 @@ sub restore_step_user() { } }); $details->signal_connect('clicked', sub { - #- we're only passing a portion of the filename to - #- the subroutine so we need to let it know this destroy_widget(); show_backup_details(\&restore_step_user, "user", $name); }); @@ -3454,9 +3294,13 @@ sub restore_step_user() { ), ), ); - if ($restore_other) { fonction_env(\$retore_step_user, \&restore_step_user, "", \&restore_step_other) } - elsif ($restore_sys) { fonction_env(\$retore_step_user, \&restore_step_user, \&restore_step_sys, \&restore_step_other) } - else { fonction_env(\$retore_step_user, \&restore_step_user, \&restore_step2, \&restore_do) } + if ($restore_other) { + fonction_env(\$retore_step_user, \&restore_step_user, "", \&restore_step_other); + } elsif ($restore_sys) { + fonction_env(\$retore_step_user, \&restore_step_user, \&restore_step_sys, \&restore_step_other); + } else { + fonction_env(\$retore_step_user, \&restore_step_user, \&restore_step2, \&restore_do); + } $up_box->show_all; } @@ -3491,9 +3335,13 @@ sub restore_step_sys() { }); $combo_restore_step_sys->entry->set_text($restore_step_sys_date); fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, "restore"); - if ($restore_user) { fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, \&restore_step_user) } - elsif ($restore_other) { fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, \&restore_step_other) } - else { fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, \&restore_do) } + if ($restore_user) { + fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, \&restore_step_user); + } elsif ($restore_other) { + fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, \&restore_step_other); + } else { + fonction_env(\$restore_step_sys, \&restore_step_sys, \&restore_step2, \&restore_do); + } $up_box->show_all; } @@ -3560,18 +3408,6 @@ sub restore_other_media() { }), $other_media_hd), ), 1, new Gtk2::VBox(0, 6), -# 0, new Gtk2::HSeparator, -# 0, my $check_other_media_net = new Gtk2::CheckButton( N("Restore from Network")), -# 0, new Gtk2::VBox(0, 6), -# 1, gtkpack(new Gtk2::HBox(0,10), -# new Gtk2::VBox(0, 6), -# gtkset_sensitive(gtksignal_connect(Gtk2::Button->new("Network"), clicked => sub { -# destroy_widget(); -# restore_find_net(\&restore_other_media);}), !$other_media_hd), -# new Gtk2::VBox(0, 6), -# ), -# 1, new Gtk2::VBox(0, 6), -# 0, new Gtk2::HSeparator, 0, new Gtk2::VBox(0, 6), ), ); @@ -3580,15 +3416,9 @@ sub restore_other_media() { destroy_widget(); $current_widget->(); }); -# gtksignal_connect(gtkset_active($check_other_media_net, !$other_media_hd), toggled => sub { -# $other_media_hd = $other_media_hd ? 0 : 1; -# destroy_widget(); -# $current_widget->(); -# }); $button->add(gtkpack(new Gtk2::HBox(0,10), gtkcreate_img("ic82-dossier-32"))); $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 }); -#- not sure if this was the original intent - address the crash at "Next" fonction_env(\$box_find_restore, \&restore_other_media, \&restore_step2, \&restore_do); $up_box->show_all; } @@ -3605,16 +3435,21 @@ sub restore_step2() { my $info_prefix = "backup"; $info_prefix = "list" if $where_net || $where_tape; - if (-f "$restore_info_path/$info_prefix" . "_other*") { $other_exist = 1 } - else { $other_exist = 0; $restore_other = 0 } - if (any { /_sys_/ } grep { /^$info_prefix/ } all("$restore_info_path/")) { $sys_exist = 1 } - else { $sys_exist = 0; $restore_sys = 0 } - if (any { /_user_/ } grep { /^$info_prefix/ } all("$restore_info_path/")) { $user_exist = 1 } - else { $user_exist = 0; $restore_user = 0 } - -# disabling this (sb) - very nicely wipes out your backup media if the user isn't very careful -# cycling through the GUI turns it back on for you!!! -# $backup_sys_versions || $backup_user_versions and $backup_bef_restore = 1; + if (-f "$restore_info_path/$info_prefix" . "_other*") { + $other_exist = 1; + } else { + $other_exist = 0; $restore_other = 0; + } + if (any { /_sys_/ } grep { /^$info_prefix/ } all("$restore_info_path/")) { + $sys_exist = 1; + } else { + $sys_exist = 0; $restore_sys = 0; + } + if (any { /_user_/ } grep { /^$info_prefix/ } all("$restore_info_path/")) { + $user_exist = 1 + } else { + $user_exist = 0; $restore_user = 0; + } gtkpack($advanced_box, $retore_step2 = gtkpack_(new Gtk2::VBox(0,10), @@ -3651,11 +3486,17 @@ sub restore_step2() { 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 } + 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 { @@ -3670,11 +3511,17 @@ sub restore_step2() { }); $central_widget = \$retore_step2; fonction_env(\$retore_step2, \&restore_step2, \&restore_box); - 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 } + 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; @@ -3972,15 +3819,6 @@ sub restore_catalog_entry { #- show the user what we know of the connection from the catalog #- and the config file, let them override if necessary - #- the various protocols are going to have different requirements - #- webdav - it should already be in sitecopyrc - compare it? - #- ssh - the only method we have enabled at the moment is with keys - #- - no passwd needed - #- - if we use expect, it is needed - #- - if we use drackbackup keys, then a different ssh call is needed - #- rsync - uses a config file with username - rsync.user - #- ftp needs all parameters entered - $in->ask_from(N("Restore Via Network"), N("Restore Via Network Protocol: %s", $media), [ { label => N("Host Name"), val => \$vol_host }, { label => N("Host Path or Module"), val => \$dev_path }, @@ -4542,7 +4380,6 @@ sub button_box_build_backup_end() { 1, new Gtk2::HBox(0, 5), 1, new Gtk2::HBox(0, 5), 0, gtksignal_connect(Gtk2::Button->new(N("Ok")), clicked => sub { -# destroy_widget(); interactive_mode_box(); }), ), @@ -4687,37 +4524,6 @@ sub button_box_main() { ################################################ MESSAGES ################################################ -sub dialog_one { - destroy_widget(); - my ($label) = @_; - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk2::HBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 0, gtkpack_(new Gtk2::HBox(0, 15), - 0, new Gtk2::VBox(0, 5), - 0, gtkcreate_img('warning'), - 0, $label), - 0, new Gtk2::VBox(0, 5), - 1, new Gtk2::VBox(0, 5), - ), - ); - button_box_restore_main(); - $central_widget = \$box2; - $up_box->show_all; -} - -sub send_mail_pb() { - dialog_one(N("Error during sendmail. - Your report mail was not sent. - Please configure sendmail")); -} - -sub client_ftp_pb() { - dialog_one(N("Error during sending file via FTP. - Please correct your FTP configuration.")); -} - sub install_rpm { my ($previous_function) = @_; #- catch a crash when calling help @@ -4729,19 +4535,18 @@ sub install_rpm { gtkpack($advanced_box, $box_what_user = gtkpack_(new Gtk2::VBox(0, 15), 0, N("The following packages need to be installed:\n") . join(' ', @list_of_rpm_to_install), - 0, new Gtk2::HSeparator, - 0, gtksignal_connect(Gtk2::Button->new(N("Install")), clicked => sub { - system("/usr/sbin/urpmi --X @list_of_rpm_to_install"); - destroy_widget(); - $previous_widget->(); - }), + 0, new Gtk2::HSeparator, + 0, gtksignal_connect(Gtk2::Button->new(N("Install")), clicked => sub { + system("/usr/sbin/urpmi --X @list_of_rpm_to_install"); + destroy_widget(); + $previous_widget->(); + }), ), ); fonction_env(\$box_what_user, \&install_rpm, \&$previous_function); $up_box->show_all; } - sub message_norestore_box() { $box2->destroy; @@ -4762,74 +4567,6 @@ sub message_norestore_box() { $up_box->show_all; } - -sub message_common_box { - $box2->destroy; - my ($label) = @_; - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk2::HBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtkpack(new Gtk2::HBox(0, 15), - new Gtk2::VBox(0, 5), - gtkcreate_img('warning'), - $label, - new Gtk2::VBox(0, 5), - ), - 1, new Gtk2::VBox(0, 5), - ), - ); - $previous_widget = \&wizard; - $next_widget = \&wizard; - $central_widget = \$box2; - $up_box->show_all; -} - -sub message_noselect_box() { - message_common_box(N("Please select media for backup...")); - $previous_widget = \&wizard_step2; - $next_widget = \&wizard_step2; - $central_widget = \$box2; - $up_box->show_all; -} - -sub message_noselect_what_box() { - message_common_box(N("Please select data to backup...")); - $previous_widget = \&wizard; - $next_widget = \&wizard; - $central_widget = \$box2; - $up_box->show_all; -} - -sub message_common_box_2 { - my ($label, $restore_main) = @_; - - $box2->destroy; - - gtkadd($advanced_box, - $box2 = gtkpack_(new Gtk2::HBox(0, 15), - 1, new Gtk2::VBox(0, 5), - 1, gtkpack(new Gtk2::HBox(0, 15), - new Gtk2::VBox(0, 5), - gtkcreate_img('warning'), - N("%s", $label), - new Gtk2::VBox(0, 5), - ), - 1, new Gtk2::VBox(0, 5), - ), - ); - button_box_restore_main() if $restore_main; - $central_widget = \$box2; - $up_box->show_all; -} -sub message_noconf_box() { - message_common_box_2(N("No configuration file found \nplease click Wizard or Advanced."), 1); -} - -sub message_underdevel() { - message_common_box_2(N("Under Devel ... please wait."), 1); -} - ################################################ BUILD_BACKUP ################################################ sub progress { @@ -4842,48 +4579,6 @@ sub progress { gtkflush(); } -sub find_backup_to_put_on_cd() { - @data_backuped = (); - local $_; - - -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 Gtk2::ProgressBar; $pbar1 = new Gtk2::ProgressBar; @@ -4986,23 +4681,6 @@ sub build_backup_box_see_conf { $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"); -} - sub build_backup_box() { destroy_widget(); @@ -5081,8 +4759,8 @@ sub interactive_mode_box { 0, gtksignal_connect(Gtk2::Button->new(N("Backup Now")), clicked => sub { if ($cfg_file_exist) { build_backup_box(); - } else { - message_noconf_box(); + } else { + $in->ask_warn(N("Error"), N("No configuration file found \nplease click Wizard or Advanced.")); } }), 0, gtksignal_connect(Gtk2::Button->new(N("Restore")), clicked => sub { |