[LUGOS] ftp update

Uroš Zajc zajc_lugos at email.si
Fri Jul 18 21:32:39 CEST 2003


Sem že rešil problem. Treba mu je samo povedati, da naj dostopa na ftp v 
passive mode-u
vseeno prilagam skripto

>Lahko malo bolj natancno pokazes tisti del perl skripte, ki se 
>ukvarja z ftp-jem?
>  
>

-------------- next part --------------
#!/usr/local/bin/perl

use strict;
use Net::FTP;
use File::Copy;
require Fcntl;

# McAfee connection parameters
my $FTPServer      = "ftpeur.nai.com";
         # mirror: "ftpde.nai.com";
         # mirror: "ftp.nai.com";

my $FTPLogin       = "anonymous";
my $FTPPassword    = "uros.zajc\email.si";
my $FTPDirectory   = "/pub/datfiles/english";

# Local configuration
my ($CGPMcAfee,$UpdatesDir,$SignalFile,$arcExt,$unpacker);


if($^O eq 'MSWin32') {

 $CGPMcAfee      = "C:\\CommuniGatePro\\CGPMcAfee";
 $UpdatesDir     = "$CGPMcAfee\\Updates";
 $SignalFile     = "$UpdatesDir\\update.sig";
 $arcExt         = ".zip";
 $unpacker       = "pkunzip.exe";

} else {

 $CGPMcAfee      = "/var/CommuniGate/CGPMcAfee";
 $UpdatesDir     = "$CGPMcAfee/Updates";
 $SignalFile     = "$UpdatesDir/update.sig";
 $arcExt         = ".tar";
 $unpacker       = "/usr/bin/tar";

}


my $ftp;
my @SrcDirListing;
my @DirListing;
my $FileName;
my @FileID;
my @OldFileID;
my $CurrentVersion;
my $NewVersion;

#=======================================================================

#
# Run a couple of sanity checks
#
die "Unable to execute $unpacker.\n"
   unless -x $unpacker;

die "Unable to write to directory: $UpdatesDir.\n"
   unless -d $UpdatesDir and -w $UpdatesDir;

die "Unable to write to directory $CGPMcAfee.\n"
   unless -d $CGPMcAfee and -w $CGPMcAfee;

die "Unable to write file: $CGPMcAfee/dat_file_id.diz"
   unless -w "$CGPMcAfee/dat_file_id.diz" or ! -f "$CGPMcAfee/dat_file_id.diz";

#
# Get the current version number and the current dat_file_id.diz
#
GetFileID();

#
# Connect to the FTP server to find the newest version

print "Connecting to '$FTPServer' via FTP protocol...\n";
my $ftp = Net::FTP->new("$FTPServer", Debug => 0)
   or die "Unable to open the connection to '$FTPServer'\n";

$ftp->login("$FTPLogin","$FTPPassword")
   or die "Unable to login to server '$FTPServer'\n";

$ftp->cwd("$FTPDirectory")
   or die "Unable to change to directory $FTPDirectory\n";

@SrcDirListing = $ftp->ls()
   or die "Unable to get directory listing for $FTPDirectory\n";

#
# Look for the one file on the server we're interested in.
#
#@DirListing = grep { /^dat-\d+\.tar$/ }  @SrcDirListing;

foreach(@SrcDirListing) {
  if(/^dat-\d+(\.(tar|zip))$/) {
    push(@DirListing, $_) if($1 eq $arcExt);
  }
}

if($#DirListing < 0) {
   die "Unable to locate the archive of DAT files\n";
}

if($#DirListing > 0) {
  #   die "Too many tarballs available.  Please download DAT files manually\n";
  @DirListing = reverse sort @DirListing; 
}

#
# Grab the first file name which is either ony or the latest.
#
$FileName = $DirListing[0];

#
# Find the version number on the remote
# server based on the file name.
#
$NewVersion = ($FileName =~ /dat-(\d+)\.(tar|zip)/)[0];

#print "new version: $NewVersion; current version: $CurrentVersion\n";

if ($NewVersion > $CurrentVersion) {

   #
   # Download and install new DAT Files
   #

   chdir("$UpdatesDir")
      or die "Unable to change to $UpdatesDir: $!\n";

   $ftp->binary();

   print "Downloading '$FileName', please wait...\n";
   $ftp->get("$FileName")
      or die "Unable to get file $FTPDirectory/$FileName: $!\n";

   if($^O eq 'MSWin32') {
     system("$unpacker $FileName") == 0
        or die "Unable to unzip file $FileName: $?\n";
   } else {
     system("$unpacker -xf $FileName") == 0
        or die "Unable to untar file $FileName: $?\n";
   }
   
   copy("file_id.diz", "$CGPMcAfee/dat_file_id.diz")
      or die "Unable to install the dat_file_id.diz file: $!\n";

   sysopen SIGFILE, $SignalFile, Fcntl::O_CREAT ()
      or die "Unable to write plugin signal file $SignalFile: $!\n";
   close SIGFILE;

   # Save the old File ID info from McAfee
   push(@OldFileID, at FileID);

   # Get the new File ID info that was just installed
   GetFileID();

   print "\n",
         "New DAT files were loaded.\n\n",
         "   New file ID info is:\n",
         "   -----\n";
   foreach (@FileID) { print "   $_"; }
   print "   -----\n";

   print "\n",
         "   Old file ID info was:\n",
         "   -----\n";
   foreach (@OldFileID) { print "   $_"; }
   print "   -----\n";

} else {

   #
   # No new DAT files, so just print out old dat_file_id.diz info
   #

   print "\n",
         "No new DAT files available.\n\n",
         "   Current file ID info is:\n",
         "   -----\n";
   foreach (@FileID) { print "   $_"; }
   print "   -----\n";

}

$ftp->quit();

exit;

#=======================================================================

sub GetFileID() {

   my $VersionLine;

   if ( -f "$CGPMcAfee/dat_file_id.diz" ) {
      open(FILE, "< $CGPMcAfee/dat_file_id.diz")
         or die "can't open $CGPMcAfee/dat_file_id.diz: $!";
      @FileID = <FILE>;
      close(FILE);

      # Strip out the carriage returns
      foreach (@FileID) { tr/\r//d; }

      # We assume that the version number is the first thing
      # in parentheses on the last line in the file.
      chomp($VersionLine = $FileID[$#FileID]);
      $CurrentVersion = ($VersionLine =~ /\((\d+)\)/)[0];
   } else {
      $CurrentVersion = 0;
   }

   return;
}

#=======================================================================
#END


More information about the lugos-list mailing list