/[smeserver]/rpms/e-smith-backup/sme9/e-smith-backup-2.4.0-workstation-backup-ProcMounts.patch
ViewVC logotype

Contents of /rpms/e-smith-backup/sme9/e-smith-backup-2.4.0-workstation-backup-ProcMounts.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Sun Jul 14 05:36:42 2013 UTC (10 years, 10 months ago) by wellsi
Branch: MAIN
CVS Tags: e-smith-backup-2_4_0-25_el6_sme, e-smith-backup-2_4_0-46_el6_sme, e-smith-backup-2_4_0-23_el6_sme, e-smith-backup-2_4_0-28_el6_sme, e-smith-backup-2_4_0-35_el6_sme, e-smith-backup-2_4_0-21_el6_sme, e-smith-backup-2_4_0-44_el6_sme, e-smith-backup-2_4_0-37_el6_sme, e-smith-backup-2_4_0-24_el6_sme, e-smith-backup-2_4_0-8_el6_sme, e-smith-backup-2_4_0-45_el6_sme, e-smith-backup-2_4_0-31_el6_sme, e-smith-backup-2_4_0-30_el6_sme, e-smith-backup-2_4_0-16_el6_sme, e-smith-backup-2_4_0-39_el6_sme, e-smith-backup-2_4_0-40_el6_sme, e-smith-backup-2_4_0-43_el6_sme, e-smith-backup-2_4_0-11_el6_sme, e-smith-backup-2_4_0-32_el6_sme, e-smith-backup-2_4_0-42_el6_sme, e-smith-backup-2_4_0-9_el6_sme, e-smith-backup-2_4_0-19_el6_sme, e-smith-backup-2_4_0-34_el6_sme, e-smith-backup-2_4_0-10_el6_sme, e-smith-backup-2_4_0-22_el6_sme, e-smith-backup-2_4_0-36_el6_sme, e-smith-backup-2_4_0-20_el6_sme, e-smith-backup-2_4_0-12_el6_sme, e-smith-backup-2_4_0-17_el6_sme, e-smith-backup-2_4_0-14_el6_sme, e-smith-backup-2_4_0-33_el6_sme, e-smith-backup-2_4_0-26_el6_sme, e-smith-backup-2_4_0-38_el6_sme, e-smith-backup-2_4_0-29_el6_sme, e-smith-backup-2_4_0-13_el6_sme, e-smith-backup-2_4_0-27_el6_sme, e-smith-backup-2_4_0-18_el6_sme, e-smith-backup-2_4_0-41_el6_sme, e-smith-backup-2_4_0-15_el6_sme, HEAD
* Sat Jul 13 2013 Ian Wells <esmith@wellsi.com> 2.4.0-8.sme
- Workstation Backup, do not access /proc/mounts [SME: 7785]
- Incremental backup fix [SME: 7763]

1 diff -ruN e-smith-backup-2.4.0.old/root/etc/e-smith/events/actions/workstation-backup-dar e-smith-backup-2.4.0/root/etc/e-smith/events/actions/workstation-backup-dar
2 --- e-smith-backup-2.4.0.old/root/etc/e-smith/events/actions/workstation-backup-dar 2013-07-09 22:05:36.000000000 -0700
3 +++ e-smith-backup-2.4.0/root/etc/e-smith/events/actions/workstation-backup-dar 2013-07-09 22:21:34.000000000 -0700
4 @@ -26,7 +26,7 @@
5 use esmith::templates;
6 use Time::localtime;
7 use File::Copy;
8 -use File::Path;
9 +use File::Path qw(make_path remove_tree mkpath rmtree);
10 use File::Find;
11 use POSIX ":sys_wait_h";
12 use File::Glob qw(bsd_glob);
13 @@ -63,7 +63,6 @@
14 $confdb->get('SystemName')->value . "." . $confdb->get('DomainName')->value;
15 my $err;
16 my $ref = "";
17 -my $mntdone = 0;
18 my $tim = ctime();
19
20 my $smbhost = $backupwk->prop('SmbHost');
21 @@ -81,7 +80,7 @@
22 my $VFSType = $backupwk->prop('VFSType') || 'cifs';
23 my $fullday = $backupwk->prop('FullDay'); $fullday = 7 unless defined $fullday;
24 my $mail = $backupwk->prop('MailNotify') || 'yes';
25 -my $mntdir = $backupwk->prop('Mount') || '/mnt/smb';
26 +my $mntdir = ($VFSType eq 'usb') ? "\/$smbshare" : $backupwk->prop('Mount') || '/mnt/smb';
27 my $frommail = $backupwk->prop('FromMail') || 'admin-backup';
28 my $tomail = $backupwk->prop('ToMail') || 'admin';
29 my $ether = $internalinterface->prop('Name');
30 @@ -95,9 +94,6 @@
31 $report .= "================================== \n";
32 $report .= "Backup of ".$id." started at " .$tim . "\n";
33 $report .= "Backup of mysql databases has been done\n";
34 -
35 -# mounting backup directory
36 -
37 $report .= "Mounting backup shared directory $smbhost/$smbshare \n";
38
39 # ping the SMB Host to see if it is awake
40 @@ -110,99 +106,25 @@
41 }
42
43 # verify backup directory not already mounted
44 -
45 -open FD, '/proc/mounts';
46 -if ( $VFSType ne 'usb' )
47 -{
48 - while (<FD>)
49 - {
50 - next unless /\s\/$smbhost(.*)\/$smbshare\s/;
51 - next unless /\s\/$mntdir\s/;
52 - $err++
53 - }
54 -}
55 -else
56 -{
57 - while (<FD>)
58 - {
59 - next unless /\s\/$smbshare\s/;
60 - $err++;
61 - }
62 -}
63 -close FD;
64 -if ($err)
65 +if (!&checkMount ($mntdir))
66 {
67 ldie("Seems backup directory is already mounted. " .
68 "It should not happen and maybe there is a zombie process " .
69 "you must kill, or another backup in progress. \n");
70 }
71
72 -# mount the backup dir
73 +# create the directory mount point if it does not exist
74 +make_path ($mntdir) unless (-d $mntdir);
75
76 -if ($VFSType eq 'cifs')
77 -{
78 - $err = qx(/bin/mount -t cifs "//$smbhost/$smbshare" $mntdir -o credentials=/etc/dar/CIFScredentials,nounix 2>&1);
79 - ldie("Error while mounting //$smbhost/$smbshare : \n" . $err) if $err;
80 -}
81 -elsif ($VFSType eq 'nfs')
82 -{
83 - $err = qx(/bin/mount -t nfs -o nolock "$smbhost:/$smbshare" $mntdir 2>&1);
84 - ldie("Error while mounting $smbhost:/$smbshare : \n" . $err) if $err;
85 -}
86 -elsif ($VFSType eq 'usb')
87 -{
88 - my $device = "";
89 - my $blkdev = "";
90 - my $vollbl = "";
91 - foreach my $udi (qx(hal-find-by-property --key volume.fsusage --string filesystem)) {
92 - $udi =~ m/^(\S+)/;
93 - my $is_mounted = qx(hal-get-property --udi $1 --key volume.is_mounted);
94 -
95 - if ($is_mounted eq "false\n") {
96 - $blkdev = qx(hal-get-property --udi $1 --key block.device);
97 - $blkdev =~ m/^(\S+)/;
98 - }
99 - if ($is_mounted eq "false\n") {
100 - $vollbl = qx(hal-get-property --udi $1 --key volume.label);
101 - $vollbl =~ m/^(\S+)/;
102 - if ($vollbl =~ /^\s/) {$vollbl = 'nolabel';}
103 - }
104 -
105 - chomp $vollbl;
106 - chomp $blkdev;
107 - $vollbl = "media/$vollbl";
108 - if ($vollbl eq $smbshare) {
109 - $device = $blkdev;
110 - }
111 - }
112 -
113 - system("/bin/mkdir", "-p", "/$smbshare");
114 -
115 - $err = qx(/bin/mount $device "/$smbshare" 2>&1);
116 - if ($err) {ldie("Error while mounting $device /$smbshare : \n" . $err)};
117 - $mntdir = "/$smbshare";
118 -}
119 -else
120 -{
121 - ldie("Error while mounting $smbhost/$smbshare : $VFSType not supported.\n");
122 -}
123 -$mntdone = 1;
124 +# mount the backup directory
125 +$err = &dmount($smbhost,$smbshare,$mntdir,$login,$password,$VFSType);
126 +ldie("Error while mounting //$smbhost/$smbshare : \n" . $err) if $err;
127
128 -# verify $mntdir has an entry in /proc/mounts
129 -
130 -$err = 0;
131 -open FD, '/proc/mounts';
132 -while (<FD>)
133 -{
134 - s/\\040/ /g; # /proc/mount returns spaces as \040 which causes problems in matching
135 - next unless /\s$mntdir\s/;
136 - $err++;
137 -}
138 -close FD;
139 -if ($err == 0)
140 -{
141 +# verify $mntdir is mounted
142 +if (&checkMount ($mntdir))
143 +{
144 ldie("Seems backup directory is not really mounted. It should not happen. \
145 - Verify availability of your backup volume. Stopping the backup now.\n")
146 + Verify availability of your backup volume. Stopping the backup now.\n");
147 }
148
149 $tmpdir = $mntdir . '/tmp_dir';
150 @@ -474,7 +397,7 @@
151 print MAIL $report;
152 close(MAIL);
153 }
154 - system("/bin/umount", "$mntdir") if $mntdone;
155 + system("/bin/umount", "$mntdir") if (!&checkMount ($mntdir));
156 die($errmsg);
157 }
158
159 @@ -537,3 +460,64 @@
160 close(INPUT);
161 return $code;
162 }
163 +
164 +
165 +sub checkMount
166 +{
167 + # check if $mountdir is mounted
168 + my $mountdir = shift;
169 + return system("/bin/mountpoint", "-q", "$mountdir");
170 +}
171 +
172 +
173 +# dmount is copied from /etc/e-smith/web/functions/backup
174 +# it could become a common function later
175 +sub dmount()
176 +{
177 + # mount dar unit according to dar-workstation configuration
178 + # return nothing if mount successfull
179 +
180 + my ($host,$share,$mountdir,$login,$password,$VFSType) = @_;
181 +
182 + if ($VFSType eq 'cifs')
183 + {
184 + return ( qx(/bin/mount -t cifs "//$host/$share" $mountdir -o credentials=/etc/dar/CIFScredentials,nounix 2>&1) );
185 + }
186 + elsif ($VFSType eq 'nfs')
187 + {
188 + return ( qx(/bin/mount -t nfs -o nolock "$host:/$share" $mountdir 2>&1) );
189 + }
190 + elsif ($VFSType eq 'usb')
191 + {
192 + $_[2] = "/" . $share;
193 + my $device = "";
194 + my $blkdev = "";
195 + my $vollbl = "";
196 + foreach my $udi (qx(hal-find-by-property --key volume.fsusage --string filesystem)) {
197 + $udi =~ m/^(\S+)/;
198 + my $is_mounted = qx(hal-get-property --udi $1 --key volume.is_mounted);
199 +
200 + if ($is_mounted eq "false\n") {
201 + $blkdev = qx(hal-get-property --udi $1 --key block.device);
202 + if ($blkdev =~ m/^(\S+)/) {$blkdev = $1;}
203 + }
204 + if ($is_mounted eq "false\n") {
205 + $vollbl = qx(hal-get-property --udi $1 --key volume.label);
206 + $vollbl =~ m/^(\S+)/;
207 + if ($vollbl =~ /^\s/) {$vollbl = 'nolabel';}
208 + }
209 +
210 + chomp $vollbl;
211 + chomp $blkdev;
212 + $vollbl = "media/$vollbl";
213 + if ($vollbl eq $share) {
214 + $device = $blkdev;
215 + }
216 + }
217 + return ( qx(/bin/mount $device "/$share" 2>&1) );
218 + }
219 + else
220 + {
221 + return ("Error while mounting $host/$share : $VFSType not supported.\n");
222 + }
223 +}

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed