/[psinib]/psinib.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /psinib.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.11 by dpavlin, Sun Oct 12 15:58:28 2003 UTC revision 1.13 by dpavlin, Sun Oct 12 17:44:21 2003 UTC
# Line 34  my $LOG = '/var/log/backup.log';       # add p Line 34  my $LOG = '/var/log/backup.log';       # add p
34    
35  # store backups in which directory  # store backups in which directory
36  my $BACKUP_DEST = '/backup/isis_backup';  my $BACKUP_DEST = '/backup/isis_backup';
37    #my $BACKUP_DEST = '/tmp/backup/';
38    
39  # files to ignore in backup  # files to ignore in backup
40  my @ignore = ('.md5sum', '.backupignore', 'backupignore.txt');  my @ignore = ('.md5sum', '.backupignore', 'backupignore.txt');
# Line 50  my $c = 0; Line 51  my $c = 0;
51          sleep 1;          sleep 1;
52          redo if ++$c < 10;          redo if ++$c < 10;
53          # no response for 10 sec, bail out          # no response for 10 sec, bail out
54          print STDERR "can't take lock on $LOG -- another $0 running?\n";          xlog("ABORT","can't take lock on $LOG -- another $0 running?");
55          exit 1;          exit 1;
56  }  }
57    
# Line 129  while(<M>) { Line 130  while(<M>) {
130          if ($ip) {          if ($ip) {
131                  xlog($share,"IP is $ip");                  xlog($share,"IP is $ip");
132                  if ($p->ping($ip)) {                  if ($p->ping($ip)) {
133                          snap_share($share,$user,$passwd,$workgroup);                          if (snap_share($share,$user,$passwd,$workgroup)) {
134                          $backup_ok++;                                  $backup_ok++;
135                            }
136                  }                  }
137          }          }
138  }  }
# Line 229  sub snap_share { Line 231  sub snap_share {
231    
232          if (-l $bc && $real_bl && $real_bl eq $bc) {          if (-l $bc && $real_bl && $real_bl eq $bc) {
233                  print "$share allready backuped...\n";                  print "$share allready backuped...\n";
234                  return;                  return 1;
235          }          }
236    
237          die "You should really create BACKUP_DEST [$BACKUP_DEST] by hand! " if (!-e $BACKUP_DEST);          die "You should really create BACKUP_DEST [$BACKUP_DEST] by hand! " if (!-e $BACKUP_DEST);
# Line 257  sub snap_share { Line 259  sub snap_share {
259          my %file_atime;          my %file_atime;
260          my %file_mtime;          my %file_mtime;
261          #my %file_md5;          #my %file_md5;
262            %file_md5 = ();
263    
264          my @smb_files;          my @smb_files;
265          my %smb_size;          my %smb_size;
# Line 318  sub snap_share { Line 321  sub snap_share {
321                                  } elsif (-d $pf) {                                  } elsif (-d $pf) {
322                                          push @dirs,$pr;                                          push @dirs,$pr;
323                                  } else {                                  } else {
324                                          print STDERR "unknown type: $pf\n";                                          print STDERR "not file or directory: $pf\n";
325                                  }                                  }
326                          } else {                          } else {
327                                  print STDERR "ignored: $pr\n";                                  print STDERR "ignored: $pr\n";
# Line 326  sub snap_share { Line 329  sub snap_share {
329                  }                  }
330          }          }
331    
332          xlog($share,($#files+1)." files and ".($#dirs+1)." dirs on local disk before backup");          # local dir always include /
333            xlog($share,($#files+1)." files and ".($#dirs)." dirs on local disk before backup");
334    
335          # read smb filesystem          # read smb filesystem
336    
# Line 341  sub snap_share { Line 345  sub snap_share {
345                  my $pf = norm_dir($d,"smb:$share/");    # path full                  my $pf = norm_dir($d,"smb:$share/");    # path full
346                  my $D = $smb->opendir($pf);                  my $D = $smb->opendir($pf);
347                  if (! $D) {                  if (! $D) {
348                          xlog($share,"FATAL: $share: $!");                          xlog($share,"FATAL: $share [$pf]: $!");
349                          # remove failing dir                          # remove failing dir
350                          delete $smb_dirs[$di];                          delete $smb_dirs[$di];
351                          next;                          return 0;                       # failed
352                  }                  }
353                  $di++;                  $di++;
354    
# Line 364  sub snap_share { Line 368  sub snap_share {
368                                  } elsif ($item->[0] == main::SMBC_DIR) {                                  } elsif ($item->[0] == main::SMBC_DIR) {
369                                          push @smb_dirs,$pr;                                          push @smb_dirs,$pr;
370                                  } else {                                  } else {
371                                          print STDERR "unknown type: $pf\n";                                          print STDERR "not file or directory [",$item->[0],"]: $pf\n";
372                                  }                                  }
373                          } else {                          } else {
374                                  print STDERR "smb ignored: $pr\n";                                  print STDERR "smb ignored: $pr\n";
# Line 372  sub snap_share { Line 376  sub snap_share {
376                  }                  }
377          }          }
378    
379          xlog($share,($#smb_files+1)." files and ".($#smb_dirs+1)." dirs on remote share");          xlog($share,($#smb_files+1)." files and ".($#smb_dirs)." dirs on remote share");
380    
381          # sync dirs          # sync dirs
382          my $lc = List::Compare->new(\@dirs, \@smb_dirs);          my $lc = List::Compare->new(\@dirs, \@smb_dirs);
# Line 404  sub snap_share { Line 408  sub snap_share {
408                                    
409                  foreach my $f (@_) {                  foreach my $f (@_) {
410  #print "smb_copy $from/$f -> $to/$f\n";  #print "smb_copy $from/$f -> $to/$f\n";
                         if (! open(F,"> $to/$f")) {  
                                 print STDERR "can't open new file $to/$f: $!\n";  
                                 next;  
                         }  
   
411                          my $md5 = Digest::MD5->new;                          my $md5 = Digest::MD5->new;
412    
413                          my $fd = $smb->open("$from/$f");                          my $fd = $smb->open("$from/$f");
414                          if (! $fd) {                          if (! $fd) {
415                                  print STDERR "can't open smb file $from/$f: $!\n";                                  xlog("WARNING","can't open smb file $from/$f: $!");
416                                    next;
417                            }
418    
419                            if (! open(F,"> $to/$f")) {
420                                    xlog("WARNING","can't open new file $to/$f: $!");
421                                  next;                                  next;
422                          }                          }
423    
# Line 487  sub snap_share { Line 491  sub snap_share {
491          # remove files          # remove files
492          foreach (sort @files2erase) {          foreach (sort @files2erase) {
493                  unlink "$bc/$_" || warn "unlink $_: $!\n";                  unlink "$bc/$_" || warn "unlink $_: $!\n";
494                    delete $file_md5{$_};
495          }          }
496    
497          # remove not needed dirs (after files)          # remove not needed dirs (after files)
# Line 499  sub snap_share { Line 504  sub snap_share {
504                  unlink "$bc/$_/.md5sum" if (-e "$bc/$_/.md5sum");                  unlink "$bc/$_/.md5sum" if (-e "$bc/$_/.md5sum");
505          }          }
506    
507            # erase stale entries in .md5sum
508            my @md5_files = keys %file_md5;
509            $lc = List::Compare->new(\@md5_files, \@smb_files);
510            foreach my $file ($lc->get_Lonly) {
511                    xlog("NOTICE","removing stale '$file' from .md5sum");
512                    delete $file_md5{$file};
513            }
514    
515          # create .md5sum          # create .md5sum
516          my $last_dir = '';          my $last_dir = '';
517          my $md5;          my $md5;
# Line 527  sub snap_share { Line 540  sub snap_share {
540          xlog($share,"failed to create latest symlink $bl -> $bc...") if (readlink($bl) ne $bc || ! -l $bl);          xlog($share,"failed to create latest symlink $bl -> $bc...") if (readlink($bl) ne $bc || ! -l $bl);
541    
542          xlog($share,"backup completed...");          xlog($share,"backup completed...");
 }  
543    
544            return 1;
545    }
546  __END__  __END__
547  #-------------------------------------------------------------------------  #-------------------------------------------------------------------------
548    

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.13

  ViewVC Help
Powered by ViewVC 1.1.26