1 |
slords |
1.1 |
diff -Nur -x '*.orig' -x '*.rej' e-smith-base-4.18.0/root/usr/lib/perl5/site_perl/esmith/console/perform_backup.pm mezzanine_patched_e-smith-base-4.18.0/root/usr/lib/perl5/site_perl/esmith/console/perform_backup.pm |
2 |
|
|
--- e-smith-base-4.18.0/root/usr/lib/perl5/site_perl/esmith/console/perform_backup.pm 2007-06-28 08:33:59.000000000 -0600 |
3 |
|
|
+++ mezzanine_patched_e-smith-base-4.18.0/root/usr/lib/perl5/site_perl/esmith/console/perform_backup.pm 2007-06-28 08:33:19.000000000 -0600 |
4 |
|
|
@@ -36,6 +36,94 @@ |
5 |
|
|
|
6 |
|
|
} |
7 |
|
|
|
8 |
|
|
+sub make_backup_callback |
9 |
|
|
+{ |
10 |
|
|
+ my $device = shift; |
11 |
|
|
+ return sub { |
12 |
|
|
+ my $fh = shift; |
13 |
|
|
+ my @backup_list = esmith::Backup->restore_list; |
14 |
|
|
+ |
15 |
|
|
+ unless (open(DU, "-|")) |
16 |
|
|
+ { |
17 |
|
|
+ open(STDERR, ">/dev/null"); |
18 |
|
|
+ exec qw(/usr/bin/du -sb), map { "/$_" } @backup_list; |
19 |
|
|
+ } |
20 |
|
|
+ my $backup_size = 0; |
21 |
|
|
+ while (<DU>) |
22 |
|
|
+ { |
23 |
|
|
+ next unless (/^(\d+)/); |
24 |
|
|
+ $backup_size += $1; |
25 |
|
|
+ } |
26 |
|
|
+ close DU; |
27 |
|
|
+ |
28 |
|
|
+ open(OLDSTDOUT, ">&STDOUT"); |
29 |
|
|
+ unless (open(STDOUT, ">/$device/smeserver.tgz")) |
30 |
|
|
+ { |
31 |
|
|
+ return gettext("Could not create backup file on device").": $!\n"; |
32 |
|
|
+ } |
33 |
|
|
+ |
34 |
|
|
+ open(OLDSTDERR, ">&STDERR"); |
35 |
|
|
+ my $logger = open(STDERR, "|-"); |
36 |
|
|
+ die "Can't fork: $!\n" unless defined $logger; |
37 |
|
|
+ |
38 |
|
|
+ unless ($logger) |
39 |
|
|
+ { |
40 |
|
|
+ exec qw(/usr/bin/logger -p local1.info -t console_backup); |
41 |
|
|
+ } |
42 |
|
|
+ |
43 |
|
|
+ my $status = 0; |
44 |
|
|
+ |
45 |
|
|
+ my $gzip = open(GZIP, "|-"); |
46 |
|
|
+ return "could not run gzip" unless defined $gzip; |
47 |
|
|
+ unless ($gzip) |
48 |
|
|
+ { |
49 |
|
|
+ close $fh; |
50 |
|
|
+ exec "gzip", "-9"; |
51 |
|
|
+ } |
52 |
|
|
+ |
53 |
|
|
+ my $pv = open(PV, "|-"); |
54 |
|
|
+ return "could not run pv" unless defined $pv; |
55 |
|
|
+ unless ($pv) |
56 |
|
|
+ { |
57 |
|
|
+ open(STDOUT, ">&GZIP"); |
58 |
|
|
+ close GZIP; |
59 |
|
|
+ open(STDERR, ">&$fh"); |
60 |
|
|
+ exec qw(pv -i 0.2 -n -s), $backup_size |
61 |
|
|
+ } |
62 |
|
|
+ |
63 |
|
|
+ my $tar = fork; |
64 |
|
|
+ return "could not run tar" unless defined $tar; |
65 |
|
|
+ unless ($tar) |
66 |
|
|
+ { |
67 |
|
|
+ open(STDOUT, ">&PV"); |
68 |
|
|
+ close PV; |
69 |
|
|
+ close GZIP; |
70 |
|
|
+ close $fh; |
71 |
|
|
+ chdir "/"; |
72 |
|
|
+ exec qw(tar cf -), grep { -e $_ } @backup_list; |
73 |
|
|
+ } |
74 |
|
|
+ waitpid($tar, 0); |
75 |
|
|
+ $status |= $?; |
76 |
|
|
+ #warn "status from tar is $status\n" if $status; |
77 |
|
|
+ unless (close PV) |
78 |
|
|
+ { |
79 |
|
|
+ $status |= $! ? $! : $?; |
80 |
|
|
+ warn "status from pv is $status\n" if $status; |
81 |
|
|
+ } |
82 |
|
|
+ unless (close GZIP) |
83 |
|
|
+ { |
84 |
|
|
+ $status |= $! ? $! : $?; |
85 |
|
|
+ warn "status from gzip is $status\n" if $status; |
86 |
|
|
+ } |
87 |
|
|
+ |
88 |
|
|
+ open(STDOUT, ">&OLDSTDOUT"); |
89 |
|
|
+ open(STDERR, ">&OLDSTDERR"); |
90 |
|
|
+ close(OLDSTDERR); |
91 |
|
|
+ close(OLDSTDOUT); |
92 |
|
|
+ return $status ? gettext("Backup returned non-zero") : gettext("Success"); |
93 |
|
|
+ }; |
94 |
|
|
+} |
95 |
|
|
+ |
96 |
|
|
sub doit |
97 |
|
|
{ |
98 |
|
|
my ($self, $console, $db) = @_; |
99 |
|
|
@@ -130,11 +218,9 @@ |
100 |
|
|
$backup_size += $1; |
101 |
|
|
} |
102 |
|
|
close DU; |
103 |
|
|
+ |
104 |
|
|
+ $console->gauge(make_backup_callback($device), 'title' => 'Creating backup file'); |
105 |
|
|
|
106 |
|
|
- system("(cd / ; tar cf - " . join(' ', @backup_list) . " | |
107 |
|
|
- pv -i 0.2 -n -s $backup_size | |
108 |
|
|
- gzip -9 > /$device/smeserver.tgz ) 2>&1 | |
109 |
|
|
- dialog --backtitle 'Creating backup file' --guage 'Progress' 7 70"); |
110 |
|
|
system("/bin/umount", "$device"); |
111 |
|
|
system("/sbin/e-smith/signal-event", "post-backup"); |
112 |
|
|
($rc, $choice) = $console->message_page |