summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xperl-install/standalone/drakbackup203
1 files changed, 152 insertions, 51 deletions
diff --git a/perl-install/standalone/drakbackup b/perl-install/standalone/drakbackup
index 5bcbe730c..a89a10f5c 100755
--- a/perl-install/standalone/drakbackup
+++ b/perl-install/standalone/drakbackup
@@ -85,9 +85,7 @@
#
#
# TODO:
-# 1- tar -cvf tarfilename --after-date="sept 1, 2000" /home
-# l.380 incremental: date -> si deja existe faire find -m ... | tar ...
-# non incremental: date + supprime old avant le backup
+# 1bis - refaire en clist.
# 3 - add port for ftp backup.
# 4 - change NET::FTP to ftp cmds.
# 5 - add icons (win & lin) on adv_what_all.
@@ -102,6 +100,7 @@
# 12- custom deamon
# 13- placer README dans $save_path -> prevenir des danger de supprimer la premier version
# explain configuration file variables (mainly for non X users)
+# 13bis - option mode update tar u ....
# 14- webdav
# 15- backend : --resore_all, --restore_sys, --restore_users
# --build_cd_autoinst
@@ -114,10 +113,6 @@
#
#
# DONE TODAY:
-# - gi for other media during restore. hd-> ok
-# - backend for build backup update and support
-# incremental backups.
-# - real incremental backup
#________________________________________________________________
@@ -204,7 +199,8 @@ 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;
# config. FILES -> Default PATH & Global variables.
my @sys_files = ("/etc");
@@ -437,6 +433,24 @@ sub ftp_client {
$ftp->quit;
}
+sub return_file_date {
+ my($more_recent) = @_;
+ my $file_date;
+ $_ = $more_recent;
+ s/backup\_incr\_sys\_//gi;
+ s/backup\_base\_sys\_//gi;
+ s/backup\_incr\_user\_//gi;
+ s/backup\_base\_user\_//gi;
+ s/.tar.\w+$//gi;
+ s/\_/ /gi;
+ my $date = substr($_, 0, 8);
+ my $hour = substr($_, 9, 2);
+ my $min = substr($_, 11, 2);
+ $file_date = $date . ' ' . $hour . ':' . $min;
+ return $file_date;
+}
+
+
sub build_backup_files {
my $path_name;
my $tar_cmd;
@@ -452,6 +466,7 @@ sub build_backup_files {
my @list_temp = ();
my @list_other_;
my @dir_content = ();
+ my $file_date;
the_time();
-d $save_path or mkdir_p($save_path);
@@ -477,13 +492,21 @@ sub build_backup_files {
$interactive and progress($pbar, 0.5, _("Backup system files..."));
if ($backup_sys) {
if ($backup_sys_versions) {
- if (grep(/backup\_incr\_sys/, @dir_content)) {
- @list_temp = sort (grep(/backup\_incr\_sys/, @dir_content));
- $more_recent = pop @list_temp;
- }
- else { $more_recent = grep(/backup\_base\_sys/, @dir_content); }
- $base_sys_exist or system("$tar_cmd_sys -f $save_path/backup_base_sys$the_time.$tar_ext @sys_files");
- $base_sys_exist and system("$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext --after-date=\"`date -r $more_recent`\" -no-recursion @sys_files");
+ if (grep(/backup_incr_sys/, @dir_content)) {
+ my @more_recent = grep /backup_incr_sys/, @dir_content;
+ @list_temp = sort @more_recent;
+ $more_recent = pop @list_temp;
+ $file_date = return_file_date($more_recent);
+ }
+ else {
+ my @more_recent = grep /backup_base_sys/, @dir_content;
+ $more_recent = @more_recent[0];
+ $file_date = return_file_date($more_recent);
+ }
+ if (!$base_sys_exist) {
+ system("$tar_cmd_sys -f $save_path/backup_base_sys$the_time.$tar_ext @sys_files"); }
+ else {
+ system("$tar_cmd_sys -f $save_path/backup_incr_sys$the_time.$tar_ext --after-date='$file_date' @sys_files"); }
} 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");
@@ -494,13 +517,16 @@ sub build_backup_files {
$interactive and progress($pbar3, 0.3, _("Hard Disk Backup files..."));
if (@list_other) {
- if ($backup_other_versions) {
- $base_other_exist or system("$tar_cmd_other -f $save_path/backup_base_other$the_time.$tar_ext @list_other");
- $base_other_exist and system("$tar_cmd_other -f $save_path/backup_incr_other$the_time.$tar_ext @list_other");
- } else {
- system("cd $save_path && rm -f backup_other* backup_base_other* backup_incr_other*");
- system("$tar_cmd_other -f $save_path/backup_other$the_time.$tar_ext @list_other");
- }
+# if ($backup_other_versions) {
+# $base_other_exist or system("$tar_cmd_other -f $save_path/backup_base_other$the_time.$tar_ext @list_other");
+# $base_other_exist and system("$tar_cmd_other -f $save_path/backup_incr_other$the_time.$tar_ext @list_other");
+# } else {
+# system("cd $save_path && rm -f backup_other* backup_base_other* backup_incr_other*");
+# system("$tar_cmd_other -f $save_path/backup_other$the_time.$tar_ext @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");
+
foreach (@list_other) { push @list_other_, $_ . "\n"; }
output_p( $save_path . '/list_other', @list_other_);
}
@@ -510,12 +536,26 @@ sub build_backup_files {
if ($backup_user) {
foreach (@user_list) {
- if (grep (/backup_base_user_$_/, @dir_content)) { $base_user_exist = 1; }
+ my $user = $_;
+ if (grep (/backup_base_user_$user/, @dir_content)) { $base_user_exist = 1; }
else { $base_user_exist = 0; }
- $path_name = return_path($_);
+ $path_name = return_path($user);
if ($backup_user_versions) {
- $base_user_exist or system("$tar_cmd_user -f $save_path/backup_base_user_$_$the_time.$tar_ext $path_name");
- $base_user_exist and system("$tar_cmd_user -f $save_path/backup_incr_user_$_$the_time.$tar_ext $path_name");
+ if (grep(/backup_incr_user/, @dir_content)) {
+ my @more_recent = grep /backup_incr_user/, @dir_content;
+ @list_temp = sort @more_recent;
+ $more_recent = pop @list_temp;
+ $file_date = return_file_date($more_recent);
+ }
+ else {
+ my @more_recent = grep /backup_base_user/, @dir_content;
+ $more_recent = @more_recent[0];
+ $file_date = return_file_date($more_recent);
+ }
+ if (!$base_user_exist) {
+ system("$tar_cmd_user -f $save_path/backup_base_user_$user$the_time.$tar_ext $path_name");}
+ else {
+ system("$tar_cmd_user -f $save_path/backup_incr_user_$user$the_time.$tar_ext --after-date='$file_date' $path_name");}
} 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");
@@ -539,10 +579,7 @@ sub build_backup_files {
# close S;
}
if ($where_net_ftp) { }
- if ($where_cd) {
- }
- print "liste content: $_\n" foreach @dir_content;
- print "\n\n\n\n\n $more_recent \n\n\n";
+ if ($where_cd) { }
}
sub list_remove {
@@ -695,7 +732,7 @@ sub advanced_what_other {
gtksignal_connect(new Gtk::Button(_("Add")), clicked => sub {filedialog() }),
gtksignal_connect(new Gtk::Button(_("Remove Selected")), clicked => \&list_remove, $list_other),
),
- 0, my $check_what_other_versions = new Gtk::CheckButton( _("Use Incremental Backups (do not replace old backups)") ),
+ 0, gtkset_sensitive(my $check_what_other_versions = new Gtk::CheckButton( _("Use Incremental Backups (do not replace old backups)") ), 0),
),
);
gtksignal_connect(gtkset_active($check_what_other_versions, $backup_other_versions), toggled => sub {
@@ -1432,12 +1469,19 @@ sub find_backup_to_restore {
# fixme:
# faire test existance cd
# faire reponse si non existance de $path_to_find_restore
-
+ my @list_backup_tmp2 = ();
+ my @list_backup = ();
my @list_backup_tmp;
my @user_backuped_tmp;
@user_backuped = ();
- -d $path_to_find_restore and my @list_backup = all($path_to_find_restore);
+ -d $path_to_find_restore and my @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_user_/, @list_backup) {
@@ -1473,7 +1517,6 @@ sub system_state {
else {$system_state = _("No configuration please click Wizard or Advanced.\n")}
}
-
sub restore_state {
$restore_state = _("List of data to restore:\n\n");
if ($restore_sys) { $restore_state .= "- Restore System Files.\n" }
@@ -1511,8 +1554,25 @@ sub restore_backend {
print "End of restore\n";
}
-
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();
+ build_backup_files();
+ read_conf_file();
+ $table->destroy();
+ }
+ restore_do2();
+}
+
+
+sub restore_do2 {
my $do_restore;
my $button_restore;
my $text = new Gtk::Text(undef, undef);
@@ -1529,25 +1589,20 @@ sub restore_do {
button_box_restore_end();
$previous_widget =\&restore_box;
$custom_help = "restore";
- $current_widget = \&restore_do;
+ $current_widget = \&restore_do2;
$central_widget = \$do_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(gtkpack(new Gtk::VBox(0,0),
- gtkadd(new Gtk::Frame(_("Backup of other files content.")),
- gtkpack(new Gtk::VBox(0,10),
- cat_("$path_to_find_restore/list_other"),
- ),
- ),
- ),
- ),
+ 1, createScrolledWindow($text),
0, my $check_restore_other_sure = new Gtk::CheckButton(_(" Sure to restore the other files .")),
1, new Gtk::VBox(0,10),
),
@@ -1557,6 +1612,7 @@ sub restore_step_other {
gtksignal_connect(gtkset_active($_->[0], ${$ref}), toggled => sub { ${$ref} = ${$ref} ? 0 : 1; })
}
$next_widget = \&restore_do;
+ $previous_widget = \&restore_step2;
$custom_help = "restore";
$current_widget = \&restore_step_other;
$central_widget = \$retore_step_other;
@@ -1810,10 +1866,12 @@ sub restore_step2 {
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(_("Build Last Backup before Restore (only for incremental backups.)")), $backup_sys_versions || $backup_user_versions ),
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_restore_other, \$restore_other]) {
my $ref = $_->[1];
@@ -1948,7 +2006,8 @@ sub button_box_backup_end {
0, gtksignal_connect(new Gtk::Button(_(" Build Backup ")), clicked => sub {
${$central_widget}->destroy();
build_backup_status();
- build_backup_files();
+ build_backup_files
+();
}),
),
);
@@ -2259,7 +2318,6 @@ sub find_backup_to_put_on_cd {
}
sub build_backup_status {
- my $table;
$pbar = new Gtk::ProgressBar;
$pbar1 = new Gtk::ProgressBar;
$pbar2 = new Gtk::ProgressBar;
@@ -2501,6 +2559,7 @@ sub build_backup_box {
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),
@@ -2660,16 +2719,43 @@ _("options description:
To preserve disk space, it recommeded to not include
browsers cache.
- - Backup User files:
+ - Backup Other files:
This option allow to add more data to save.
+ With the other backup it's not possible in
+ moment to select select incremental backup.
+
+ - 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.
+
+
+")); }
+ elsif ($custom_help eq "restore") { gtktext_insert($text,
+_("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 data after.
+ only the changed after.
So you will be able during the restore
step, to restore your data from a specified
date.
@@ -2677,6 +2763,7 @@ _("options description:
old backups are deleted before each backup.
+
")); }
elsif ($custom_help eq "main") { gtktext_insert($text,
_(" Copyright (C) 2001 by MandrakeSoft (sdupont\@mandrakesoft.com)
@@ -2835,13 +2922,27 @@ Drakbacup allow to restore the system (etc, var files)
}
-# _____________________________________________________________ OLD CODE
+# _____________________________________________________________ DOCS
+##### tester taille decompressee
+
+#(seb@lutin)[~]-% gzip -l old_drakbackup.tar.gz
+#compressed uncompr. ratio uncompressed_name
+# 128662 174080 26.1% old_drakbackup.tar
+
+
+#### tester integrite archive
+
+# idem pour bzip2 -t
+# (seb@lutin)[~]-% gzip -t drakbackup.tar.gz
+#
+# gzip: drakbackup.tar.gz: invalid compressed data--crc error
+#
+# gzip: drakbackup.tar.gz: invalid compressed data--length error
-# _____________________________________________________________ DOCS
# Comment récupérer la date du jour ?